Transcription: OpenAgents Episode 049 - Plugin Registry Setup
June 9, 2026 ยท View on GitHub
Source: https://twitter.com/OpenAgentsInc/status/1746989980562464915 Wiki source: https://raw.githubusercontent.com/wiki/OpenAgentsInc/openagents/Video-Series.md Media title: OpenAgents - Episode 049: Plugin Registry Setup We set up an experimental web app ... Upload date: 20240115 Transcription model: mlx-whisper/mlx-community/whisper-tiny Generated at: 2026-06-01T20:16:30Z
Machine-generated transcript. Review speaker labels and wording before using this as quote-grade source material.
[00:00] Christopher David: Let's build on this idea of plugins.
[00:02] Christopher David: So we have some initial spec here and did some cool experimentation with
[00:08] Christopher David: ecstism that seems to be appropriate for our needs.
[00:13] Christopher David: And next I want a plugin registry.
[00:17] Christopher David: I want to be able to see a list of all the plugins that we have and be able to
[00:22] Christopher David: kind of easily play around with them and import them into different codevases and
[00:27] Christopher David: have instructions for that.
[00:29] Christopher David: So we're going to do a plugin registry web app.
[00:32] Christopher David: I was thinking that the logic of the plugin registry might be a plugin.
[00:37] Christopher David: We're not entirely sure what we're going to do structurally here.
[00:42] Christopher David: But I want to do some experimenting building a plugin registry website in a way that
[00:48] Christopher David: like uses Rust.
[00:50] Christopher David: So I like the idea of a Rust back end we played with the towering in the last application
[00:54] Christopher David: in the last video.
[00:57] Christopher David: In this video I want to try following this tutorial from Shuttle about building a web application
[01:09] Christopher David: using HTMLx Rust in Shuttle.
[01:13] Christopher David: People are talking excitedly about HTMLx.
[01:16] Christopher David: People that I respect are enjoying it.
[01:20] Christopher David: And we have an opportunity with kind of these sub-domain applications to try out new things.
[01:25] Christopher David: And we're going to follow this tutorial in this video.
[01:30] Christopher David: One kind of idea that I'm playing with is we have this Lair of L application and part of the
[01:37] Christopher David: kind of marketing around Lair of L and the React framework using on top of it is kind
[01:46] Christopher David: of this idea of the modern model list.
[01:47] Christopher David: You're building one application and it's great for speed and things.
[01:54] Christopher David: And there will probably be some sub-sense of functionality that continues to make sense to put
[01:58] Christopher David: in this model this pattern as we're going to be building a lot of social features enabling
[02:04] Christopher David: people to interact with these plugins and chat about them and stuff where the kind of really
[02:07] Christopher David: basic CREAD app makes sense.
[02:11] Christopher David: But for the wider ecosystem of what we're trying to do in building this ecosystem of plugins
[02:19] Christopher David: having the idea of open agents being composable through plugins created by many developers
[02:28] Christopher David: that will all work together.
[02:29] Christopher David: We've arrived at the idea of using Wasom to power this plugin system.
[02:37] Christopher David: And so as we're thinking in terms of like a more modular ecosystem that can be composable,
[02:45] Christopher David: I thought just from the brief lessons I've learned so far about HTML is that that kind of
[02:52] Christopher David: like basic HTML approach paired with Rust which ex-tism is written in and much of the code
[03:04] Christopher David: that we're going to want to use to bundle two wasom.
[03:09] Christopher David: We'll probably also be using the Rust libraries for Bitcoin and Lightning.
[03:14] Christopher David: At least the ones that I'm going to write, you know, other people can do that too.
[03:17] Christopher David: But it would be nice to get Rust more explicitly kind of built into our stack and starting
[03:22] Christopher David: with a kind of sub-dwaying application that has a bit lower stakes make sense.
[03:28] Christopher David: And I don't know, I don't know, but we're going to explore, we're going to do this tutorial
[03:32] Christopher David: that I searched up.
[03:33] Christopher David: So shuttle seems like what we would want because deploying a Rust application has been
[03:38] Christopher David: a big pain in the ass and they just have a, I don't know, reminds me a little bit of
[03:48] Christopher David: versel for React apps.
[03:52] Christopher David: So when I googled HTML's Rust came up with this tutorial from a couple of months ago.
[04:03] Christopher David: So let's do it.
[04:08] Christopher David: Our HTML's Rust and shuttle a new rapid prototyping stack.
[04:12] Christopher David: That's what we want.
[04:13] Christopher David: We want to prototype a plugin registry website to list our new wasom plugins.
[04:22] Christopher David: When it comes to Rust, although it's loaded as a language that is memory safe, blazing
[04:26] Christopher David: fast and efficient, it's also known for having a compiler that will complain at you for
[04:29] Christopher David: everything, hence terms like compiler driven development becoming a thing.
[04:34] Christopher David: And complex, trait bounds that can, that can getting it just right, take time.
[04:40] Christopher David: In this article, we'll talk about tools that you can use to speed up your workflow.
[04:44] Christopher David: HTML, actually, the templating engine and the web framework, axon and of course shuttle.
[04:49] Christopher David: Okay, I've never heard of axon, but cool, more learning about it.
[04:52] Christopher David: HTML's is a JavaScript library designed to help you ship faster by allowing you to call
[04:56] Christopher David: endpoints from HTML elements instead of being required to do it manually, which when combined
[05:02] Christopher David: with HTML templating engine makes prototyping extremely quick.
[05:06] Christopher David: And we don't need to set up anything to do it, only being required as a minimum to use
[05:10] Christopher David: the CDN script, although we can also use it as an NPM pattern.
[05:14] Christopher David: Shuttle allows you to move quickly by declaratively provisioning infrastructure like databases,
[05:18] Christopher David: key value stores, and more as main function parameters using the shuttle runtime.
[05:22] Christopher David: Letting you prototype new projects extremely quickly when used with HTML.
[05:27] Christopher David: Okay, cool.
[05:32] Christopher David: I guess that'll be important as we're having other developers kind of be able to pull things off
[05:38] Christopher David: of our GitHub and have, you know, maybe just drop in one API key for a deployment service
[05:44] Christopher David: and have it handle it.
[05:46] Christopher David: I don't know.
[05:48] Christopher David: Using shuttle.
[05:51] Christopher David: Shuttle is a service design to make deployment as easy as possible by provisioning a runtime
[05:55] Christopher David: to let you add macros or annotations as function arguments to your entry point function.
[05:59] Christopher David: The runtime will then do static code analysis to figure out what it's provisioning and
[06:03] Christopher David: spin up the relevant infrastructure required.
[06:05] Christopher David: For example, if you need a postgres instance, you can just declare it in your FM main arguments,
[06:09] Christopher David: use cargo shuttle runs run locally, and then it'll spin up a container for you using
[06:14] Christopher David: Docker without any fraud.
[06:15] Christopher David: It will run.
[06:16] Christopher David: Okay.
[06:17] Christopher David: By using shuttle, we can turn this into this.
[06:26] Christopher David: What you're done writing code all you need to do is use cargo shuttle deploy with the dash
[06:31] Christopher David: dash allow dirty flag if on a git branch with uncommitted changes and when it's done deploying
[06:37] Christopher David: you should get a link to see your website.
[06:39] Christopher David: If you need to check your database, can actually train again.
[06:41] Christopher David: You can also use cargo shuttle resource list to quickly check it.
[06:49] Christopher David: Using HTML to start off, we want a base dot HTML file that includes the head which will
[06:54] Christopher David: add HTML to through the CDM.
[07:11] Christopher David: To start off with.
[07:14] Christopher David: Should I also try using new bin here?
[07:22] Christopher David: Just while we're in the new binous area, be fully new to put sequit.
[07:44] Christopher David: Templates based on HTML.
[07:46] Christopher David: We'll call this registry.
[07:56] Christopher David: And we'll go.
[08:03] Christopher David: BI Templates based on HTML.
[08:09] Christopher David: Copy pasta.
[08:21] Christopher David: So I want you to watch me struggle.
[08:28] Christopher David: That's not a file.
[08:35] Christopher David: That's not a file.
[08:54] Christopher David: Okay.
[09:00] Christopher David: We are also using Ascama, which is a rust HTML templating crate with HTML.
[09:07] Christopher David: If you've ever used Python before, you might notice the syntax is quite similar to
[09:11] Christopher David: Djindra 2 templates.
[09:13] Christopher David: Djindra 2 is a web templating engine that describes itself as a fast expressive and extensible
[09:17] Christopher David: web templating engine that's been around for quite a while and is a well-known format given
[09:21] Christopher David: how many copies there are of libraries inside an outside of Rust that emulate Djindra
[09:24] Christopher David: using that.
[09:25] Christopher David: Injurs did learning more about Ascama, our new recent Shuttle Launchpad issue talks about
[09:30] Christopher David: it here.
[09:32] Christopher David: Now let's make our index.html file.
[09:38] Christopher David: I do don't have to quit out of them by the way.
[09:44] Christopher David: BI index.html.
[09:53] Christopher David: That's a good idea.
[10:03] Christopher David: This is where we put our HTML that we want to add.
[10:10] Christopher David: As they simple example, we've added a form to add a new to-do as well as a placeholder
[10:14] Christopher David: div with an idea of lists.
[10:17] Christopher David: For the next part, we'll want to have some of our HTML already written.
[10:20] Christopher David: Let's do that now.
[10:22] Christopher David: Template slash to-do's.html.
[10:25] Christopher David: Oh no.
[10:30] Christopher David: This learns them by stumbling around.
[10:37] Christopher David: Then Template slash to-do to-do.
[10:50] Christopher David: As you can see, we've included a button with a-do component that makes a delete request
[11:02] Christopher David: to the tutus ID route, but it targets the whole route, row, and just deletes the row after
[11:08] Christopher David: the API calls done, which saves time having to manually delete the component from the
[11:12] Christopher David: file.
[11:14] Christopher David: Making API calls.
[11:16] Christopher David: HTML allows you to make an API call without explicitly writing JavaScript for it by allowing
[11:20] Christopher David: you to use HTML attributes instead.
[11:23] Christopher David: When you make an API call with HTML, the library requires you to return HTML as a response.
[11:27] Christopher David: It's great for us because we couldn't combine it with a scum-up templating so that we don't
[11:32] Christopher David: have to go through the hassle of trying to create a whole new element through pure JavaScript
[11:36] Christopher David: and then appending it to whatever element we choose.
[11:39] Christopher David: Let's take the form from above as an example.
[11:43] Christopher David: The button makes a post request to-do's triggered by clicking the button.
[11:50] Christopher David: Target's the HTML element with an ID of to-do's content, and places the resulting HTML
[11:56] Christopher David: as the last element within the target element.
[12:00] Christopher David: As you can see, this speeds up development quite a lot.
[12:05] Christopher David: Not having to set up an opinionated framework and being able to quickly write things with
[12:09] Christopher David: the HTML templating engine makes things a lot quicker.
[12:13] Christopher David: Something that comes to mind from me is, is this something that an AI agent could be trained
[12:20] Christopher David: to do if there's less boilerplate instead of setting up a layer of L controller and a
[12:26] Christopher David: route and this and that and a service and whatever, just specifying things in HTML maybe
[12:38] Christopher David: that's simpler.
[12:41] Christopher David: The related question is, is this something that language models have already been trained
[12:47] Christopher David: on if they've been trained on, Lairavel and Standard Things like React or older things
[12:53] Christopher David: and not HTML, I don't know, might that create an additional hurdle and then could we
[13:02] Christopher David: get over that hurdle because we're going to be kind of bringing fine tuning of the brains
[13:09] Christopher David: of agents to an art form so it won't really matter if we can just train it on HTML's
[13:13] Christopher David: docs, like should an AI agent be good at coding HTML's.
[13:22] Christopher David: Just think something good about it.
[13:24] Christopher David: OK, streams and service-cent events with HTML's.
[13:27] Christopher David: Being able to quickly mock up a credit app with HTML's is great.
[13:30] Christopher David: However, service-cent events as I see and web-socks are also important functions for web
[13:34] Christopher David: applications and web-services to work.
[13:37] Christopher David: Thankfully HTML's natively supports both.
[13:39] Christopher David: By the way, the chat on Open Agents, when you go to any agent, this uses service-cent events
[13:53] Christopher David: or kind of streaming the response from the server to the client.
[14:02] Christopher David: Do I have an example?
[14:06] Christopher David: As that have been a minute, well, it's stream so fast and I didn't score it out so you
[14:09] Christopher David: could even see it stream.
[14:11] Christopher David: But we're streaming each token to from the server to the client using service-side events
[14:19] Christopher David: and specifically a variable path is called a wave.
[14:24] Christopher David: It's good to know that shuttle supports that so we can do that, basically.
[14:27] Christopher David: OK, or HTML supports me.
[14:30] Christopher David: We can look at a basic mockup of receiving SSE with HTML's by creating a new channel in
[14:35] Christopher David: our main function.
[14:36] Christopher David: Then, appending it as an extension to our main function as well as creating the necessary
[14:40] Christopher David: struct we need for the message we're going to send through the channel.
[14:45] Christopher David: Cool.
[14:46] Christopher David: OK, so we are now getting into the rust part of it.
[14:50] Christopher David: I like my rust syntax highlighting.
[14:52] Christopher David: So this has a directory called SRC.
[15:06] Christopher David: OK, mutation, call, and create delete to do updates.
[15:16] Christopher David: Shuttle runtime, main, SQLX migrate, run, DB.
[15:21] Christopher David: Wow.
[15:23] Christopher David: Oh, if you can make that easy for me, that would be so nice.
[15:27] Christopher David: I love Laravel, but even setting up the local development environments there are what
[15:30] Christopher David: a pain.
[15:31] Christopher David: And they have all these wrappers that make it easy, but then they keep changing from like
[15:36] Christopher David: valet to sail to what's the new one, each something, all these problems.
[15:45] Christopher David: So make it easy.
[15:46] Christopher David: Make us be able to do that in code, that would be super sweet.
[15:52] Christopher David: To do slash stream, I like streaming.
[15:55] Christopher David: Now, we want to send a message from our create to do and delete to do handlers through
[16:03] Christopher David: our channel.
[16:04] Christopher David: We can add them by including our extension in the function signature.
[16:10] Christopher David: Then after a successful SQL transaction, we simply send a message to the channel.
[16:16] Christopher David: I like it.
[16:21] Christopher David: I also like copypacing.
[16:23] Christopher David: OK.
[16:25] Christopher David: I'm just putting this under everything else.
[16:32] Christopher David: Question mark.
[16:35] Christopher David: I know about 8% of the VIM commands.
[16:37] Christopher David: I've been using the VIM plugin in VS code for a while.
[16:42] Christopher David: I'm like now trying to make the jump to Neo VIM.
[16:49] Christopher David: OK.
[16:51] Christopher David: OK.
[16:52] Christopher David: OK.
[16:53] Christopher David: OK.
[16:54] Christopher David: OK.
[16:56] Christopher David: OK.
[16:58] Christopher David: OK.
[16:59] Christopher David: OK.
[17:00] Christopher David: OK.
[17:02] Christopher David: OK.
[17:04] Christopher David: OK.
[17:05] Christopher David: OK.
[17:06] Christopher David: OK.
[17:07] Christopher David: OK.
[17:08] Christopher David: OK.
[17:09] Christopher David: OK.
[17:10] Christopher David: OK.
[17:11] Christopher David: OK.
[17:12] Christopher David: OK.
[17:13] Christopher David: OK.
[17:14] Christopher David: OK.
[17:15] Christopher David: OK.
[17:16] Christopher David: OK.
[17:17] Christopher David: OK.
[17:18] Christopher David: OK.
[17:19] Christopher David: OK.
[17:23] Christopher David: OK.
[17:25] Christopher David: OK.
[17:26] Christopher David: OK.
[17:27] Christopher David: OK.
[17:28] Christopher David: OK.
[17:29] Christopher David: OK.
[17:30] Christopher David: OK.
[17:31] Christopher David: OK.
[17:32] Christopher David: OK.
[17:33] Christopher David: OK.
[17:34] Christopher David: OK.
[17:35] Christopher David: OK.
[17:36] Christopher David: OK.
[17:37] Christopher David: OK.
[17:38] Christopher David: OK.
[17:39] Christopher David: OK.
[17:40] Christopher David: OK.
[17:41] Christopher David: OK.
[17:42] Christopher David: OK.
[17:43] Christopher David: OK.
[17:44] Christopher David: OK.
[17:45] Christopher David: OK.
[17:46] Christopher David: OK.
[17:47] Christopher David: OK.
[17:48] Christopher David: OK.
[17:49] Christopher David: OK.
[17:50] Christopher David: OK.
[17:51] Christopher David: OK.
[17:52] Christopher David: OK.
[17:54] Christopher David: OK.
[17:55] Christopher David: OK.
[17:56] Christopher David: OK.
[17:58] Christopher David: OK.
[17:59] Christopher David: OK.
[18:00] Christopher David: OK.
[18:01] Christopher David: OK.
[18:02] Christopher David: OK.
[18:03] Christopher David: OK.
[18:04] Christopher David: OK.
[18:05] Christopher David: OK.
[18:06] Christopher David: OK.
[18:07] Christopher David: OK.
[18:08] Christopher David: OK.
[18:09] Christopher David: OK.
[18:10] Christopher David: OK.
[18:11] Christopher David: OK.
[18:12] Christopher David: OK.
[18:13] Christopher David: OK.
[18:14] Christopher David: OK.
[18:15] Christopher David: OK.
[18:16] Christopher David: OK.
[18:17] Christopher David: OK.
[18:18] Christopher David: OK.
[18:19] Christopher David: OK.
[18:20] Christopher David: OK.
[18:21] Christopher David: OK.
[18:23] Christopher David: OK.
[18:24] Christopher David: OK.
[18:25] Christopher David: OK.
[18:26] Christopher David: OK.
[18:27] Christopher David: OK.
[18:28] Christopher David: OK.
[18:29] Christopher David: OK.
[18:31] Christopher David: OK.
[18:32] Christopher David: OK.
[18:33] Christopher David: OK.
[18:34] Christopher David: OK.
[18:35] Christopher David: OK.
[18:36] Christopher David: OK.
[18:37] Christopher David: OK.
[18:38] Christopher David: OK.
[18:39] Christopher David: OK.
[18:40] Christopher David: OK.
[18:41] Christopher David: OK.
[18:42] Christopher David: OK.
[18:43] Christopher David: OK.
[18:44] Christopher David: OK.
[18:45] Christopher David: OK.
[18:47] Christopher David: OK.
[18:48] Christopher David: OK.
[18:49] Christopher David: OK.
[18:50] Christopher David: OK.
[18:51] Christopher David: OK.
[18:52] Christopher David: OK.
[18:54] Christopher David: OK.
[18:55] Christopher David: OK.
[18:56] Christopher David: Copy.
[18:57] Christopher David: Insert.
[18:58] Christopher David: Paste.
[18:59] Christopher David: There's, I mean, that's.
[19:00] Christopher David: OK.
[19:01] Christopher David: OK.
[19:02] Christopher David: OK.
[19:03] Christopher David: OK.
[19:04] Christopher David: OK.
[19:05] Christopher David: OK.
[19:06] Christopher David: OK.
[19:07] Christopher David: OK.
[19:08] Christopher David: OK.
[19:09] Christopher David: OK.
[19:10] Christopher David: OK.
[19:11] Christopher David: OK.
[19:12] Christopher David: OK.
[19:13] Christopher David: OK.
[19:14] Christopher David: OK.
[19:15] Christopher David: OK.
[19:16] Christopher David: OK.
[19:17] Christopher David: OK.
[19:18] Christopher David: OK.
[19:19] Christopher David: OK.
[19:20] Christopher David: OK.
[19:21] Christopher David: OK.
[19:22] Christopher David: OK.
[19:23] Christopher David: OK.
[19:24] Christopher David: OK.
[19:25] Christopher David: OK.
[19:27] Christopher David: OK.
[19:28] Christopher David: OK.
[19:29] Christopher David: OK.
[19:30] Christopher David: OK.
[19:31] Christopher David: OK.
[19:32] Christopher David: OK.
[19:33] Christopher David: OK.
[19:34] Christopher David: OK.
[19:35] Christopher David: OK.
[19:36] Christopher David: OK.
[19:37] Christopher David: OK.
[19:38] Christopher David: OK.
[19:39] Christopher David: OK.
[19:40] Christopher David: OK.
[19:41] Christopher David: OK.
[19:42] Christopher David: OK.
[19:43] Christopher David: OK.
[19:44] Christopher David: OK.
[19:45] Christopher David: OK.
[19:46] Christopher David: OK.
[19:47] Christopher David: OK.
[19:48] Christopher David: OK.
[19:49] Christopher David: OK.
[19:50] Christopher David: OK.
[19:52] Christopher David: OK.
[19:53] Christopher David: OK.
[19:54] Christopher David: OK.
[19:55] Christopher David: OK.
[19:56] Christopher David: OK.
[19:57] Christopher David: OK.
[19:58] Christopher David: OK.
[19:59] Christopher David: OK.
[20:00] Christopher David: OK.
[20:01] Christopher David: OK.
[20:02] Christopher David: OK.
[20:03] Christopher David: OK.
[20:04] Christopher David: OK.
[20:05] Christopher David: OK.
[20:06] Christopher David: OK.
[20:07] Christopher David: OK.
[20:08] Christopher David: OK.
[20:09] Christopher David: OK.
[20:10] Christopher David: OK.
[20:11] Christopher David: OK.
[20:12] Christopher David: OK.
[19:59] Christopher David: Well, that's all seems clearly explained except that I have a half-built application here.
[20:08] Christopher David: Okay, should I abandon my little repo here and just convert the, oops, clone there's,
[20:37] Christopher David: Let's try it.
[20:46] Christopher David: Okay, let's do this.
[20:49] Christopher David: Because there's a bunch of files here, I am just going to try to clone it.
[20:52] Christopher David: So I'm going to do this.
[20:53] Christopher David: Make sure you have cargo, shuttle, install.
[20:56] Christopher David: I don't know what that is.
[20:57] Christopher David: Let's see if I have it installed.
[21:02] Christopher David: Nope.
[21:06] Christopher David: Find a package to install shuttle with.
[21:17] Christopher David: Cargo install cargo shuttle, maybe.
[22:06] Christopher David: Okay.
[22:07] Christopher David: Okay.
[22:08] Christopher David: Okay.
[22:09] Christopher David: Okay.
[22:11] Christopher David: Okay.
[22:13] Christopher David: Okay.
[22:15] Christopher David: Okay.
[22:17] Christopher David: Okay.
[22:19] Christopher David: Okay.
[22:21] Christopher David: Okay.
[22:23] Christopher David: Okay.
[22:24] Christopher David: Okay.
[22:26] Christopher David: Okay.
[22:27] Christopher David: Okay.
[22:28] Christopher David: Okay.
[22:29] Christopher David: Okay.
[22:30] Christopher David: Okay.
[22:31] Christopher David: Okay.
[22:32] Christopher David: Okay.
[22:33] Christopher David: Okay.
[22:35] Christopher David: Okay.
[22:37] Christopher David: Presumably that made a folder called shuttle something.
[22:41] Christopher David: I don't know.
[22:42] Christopher David: That just installed cargo shuttle.
[22:43] Christopher David: So now we'll do this.
[22:45] Christopher David: Come on again.
[22:49] Christopher David: Okay.
[22:50] Christopher David: Console.shuttle.rs.
[22:52] Christopher David: Login with get up.
[22:54] Christopher David: That I can do.
[23:05] Christopher David: Cute.
[23:08] Christopher David: Set up your new project.
[23:14] Christopher David: API key.
[23:19] Christopher David: Okay.
[23:20] Christopher David: What do you want to name your project?
[23:23] Christopher David: Okay.
[23:30] Christopher David: What do you want to name your project?
[23:33] Christopher David: Stream.
[23:38] Christopher David: Accum.
[23:42] Christopher David: Accum.
[23:49] Christopher David: Immortal.
[23:56] Christopher David: Order we think I'm going to put the registry here.
[24:12] Christopher David: I'm guessing that'll be taken.
[24:15] Christopher David: Where should we create this project?
[24:25] Christopher David: No.
[24:27] Christopher David: Okay.
[24:28] Christopher David: I guess I need to make it a directory first.
[24:33] Christopher David: Let's call this.
[24:42] Christopher David: Registry 2.
[25:05] Christopher David: Starting a project container on shuttle.
[25:09] Christopher David: This might be worth checking out.
[25:11] Christopher David: Shuttle examples.
[25:16] Christopher David: Cool.
[25:24] Christopher David: It must be a new project if the word registry has been taken.
[25:37] Christopher David: Project registry is ready.
[25:39] Christopher David: Your project will sleep if it is idle for 30 minutes to change the idle time.
[25:44] Christopher David: Refer to the docs.
[25:55] Christopher David: Save this.
[26:02] Christopher David: All right.
[26:03] Christopher David: So first let's run it locally.
[26:14] Christopher David: Where did it put the code?
[26:27] Christopher David: What the hell?
[26:32] Christopher David: What is this?
[26:36] Christopher David: Code.
[26:38] Christopher David: Squirgle.
[26:39] Christopher David: Code.
[26:40] Christopher David: Registry 2.
[26:41] Christopher David: That's horrendous.
[26:45] Christopher David: If I do CD.
[26:47] Christopher David: Squiggle.
[26:48] Christopher David: It'll go to my home directory.
[26:50] Christopher David: Let's see if I can just see the end of this horrendous thing here.
[27:01] Christopher David: Okay.
[27:05] Christopher David: Let's just try it from here for now.
[27:11] Christopher David: Cargo Shuttle run.
[27:12] Christopher David: Let's see what happens.
[27:31] Christopher David: Let's see if I can just see the end of this video.
[27:46] Christopher David: Make sure Docker is installed and running.
[27:49] Christopher David: Okay.
[27:58] Christopher David: Here you go.
[28:02] Christopher David: I don't want to reset my password.
[28:05] Christopher David: Okay.
[28:06] Christopher David: Stradigame.
[28:13] Christopher David: Okay.
[28:14] Christopher David: Provisioning.
[28:15] Christopher David: Postgres.
[28:22] Christopher David: Postgres 14.
[28:23] Christopher David: Starting registry on local host.
[28:26] Christopher David: Okay.
[28:36] Christopher David: Can I specify a different port?
[28:44] Christopher David: Okay.
[28:54] Christopher David: Let's just use VS good for now.
[28:57] Christopher David: Okay.
[29:04] Christopher David: Port.
[29:06] Christopher David: Port.
[29:08] Christopher David: All right.
[29:11] Christopher David: I will knock out whatever is in on Mac.
[29:16] Christopher David: How do I identify what's running on port 8000 in kill it?
[29:29] Christopher David: Okay.
[29:38] Christopher David: I don't know what that is.
[29:43] Christopher David: Kill.
[29:46] Christopher David: 1451.
[29:48] Christopher David: Oh, PHP82.
[29:51] Christopher David: All right.
[29:54] Christopher David: Let's try it again.
[29:56] Christopher David: Let's go to local host 8000.
[30:03] Christopher David: Shuttle to do.
[30:12] Christopher David: Here we go.
[30:22] Christopher David: Cool.
[30:25] Christopher David: Let's go to the network last year.
[30:31] Christopher David: Yeah.
[30:41] Christopher David: Just the simplest.
[30:46] Christopher David: Okay.
[30:56] Christopher David: Let's try deploying this.
[30:58] Christopher David: And then we'll reason about how to switch this into what we actually want.
[31:04] Christopher David: Let's do plugins.
[31:07] Christopher David: Cargo shuttle deploy allowed dirty.
[31:09] Christopher David: Let's try it.
[31:15] Christopher David: Nobody's listening to this stream.
[31:27] Christopher David: That's weird.
[31:40] Christopher David: Is listeners only other people than me?
[31:50] Christopher David: Okay.
[31:51] Christopher David: Let's try it.
[31:52] Christopher David: Cargo shuttle deploy allowed dirty.
[32:41] Christopher David: Wow.
[32:50] Christopher David: That's going.
[32:53] Christopher David: Maybe I'll set up a git.
[33:00] Christopher David: I gotta move it out of this horrible directory.
[33:04] Christopher David: Maybe first go create a repo here.
[33:27] Christopher David: Let's go to the next one.
[33:37] Christopher David: Let's go.
[33:45] Christopher David: Let's go.
[34:07] Christopher David: Okay.
[34:33] Christopher David: Let's go.
[34:43] Christopher David: Oh yeah.
[34:58] Christopher David: Cool.
[35:08] Christopher David: That was nice.
[35:12] Christopher David: With barely any setup we have a deployed Rust app with a postgres database.
[35:17] Christopher David: I'm sure I can connect you somehow.
[35:19] Christopher David: Okay.
[35:20] Christopher David: Let's take a look at the shuttle dashboard because I want.
[35:26] Christopher David: Let's go.
[35:36] Christopher David: Can I add a domain?
[35:46] Christopher David: Okay.
[35:56] Christopher David: Reach out to the team instead of your domain.
[36:03] Christopher David: All right.
[36:04] Christopher David: I'll do that later.
[36:06] Christopher David: If I continue liking this.
[36:08] Christopher David: Let's see.
[36:17] Christopher David: Okay.
[36:26] Christopher David: Okay.
[36:30] Christopher David: So we have a basic cargo app here.
[36:35] Christopher David: Now I need to start manipulating it.
[36:42] Christopher David: What I want to do right now is feed this entire code base into a.
[36:52] Christopher David: But that's a camera.
[37:01] Christopher David: Why is this not intended properly?
[37:10] Christopher David: What just happened?
[37:16] Christopher David: Oh my.
[37:19] Christopher David: Rust analyzer reformed.
[37:25] Christopher David: What about this?
[37:28] Christopher David: Ooh.
[37:33] Christopher David: Okay.
[37:43] Christopher David: We're just called that.
[37:54] Christopher David: Pretty.
[37:58] Christopher David: Yeah.
[38:01] Christopher David: I don't want to use prettier.
[38:07] Christopher David: The default analyzer.
[38:11] Christopher David: Okay.
[38:14] Christopher David: And then what what to be using here?
[38:24] Christopher David: Does HGMX have a formatting thing?
[38:42] Christopher David: HGMX tags.
[38:48] Christopher David: HGMX little literals.
[39:01] Christopher David: But that's not HGMX.
[39:07] Christopher David: This is that templating language thing.
[39:17] Christopher David: Okay.
[39:20] Christopher David: So Rust analyzer did change a feature.
[39:26] Christopher David: Okay.
[39:31] Christopher David: We'll just call this format.
[39:37] Christopher David: Okay.
[39:41] Christopher David: Okay.
[39:46] Christopher David: Okay.
[39:50] Christopher David: Okay.
[39:54] Christopher David: Okay.
[39:59] Christopher David: All right, let's kind of just tour this a little bit.
[40:14] Christopher David: So we got our database migrations creating the to-do's database.
[40:20] Christopher David: That's clear.
[40:21] Christopher David: Maybe I want to make it so that I can add a plug-in like.
[40:40] Christopher David: Where are we pulling in to the other one?
[40:44] Christopher David: Let me go back to our playground.
[40:52] Christopher David: And we were pulling in the plug-in registry wasm that just said hello.
[41:06] Christopher David: So it would be cool maybe if we got this wasm loading code pulled over to the registry.
[41:21] Christopher David: What I may want to do is start driving out like what it would actually mean to have a database.
[41:35] Christopher David: Integration and model and the basic stuff for the plug-ins.
[41:39] Christopher David: So instead of just to do that HTML, I'll put plug-in out of HTML.
[41:45] Christopher David: All right, so base just sets up content.
[42:04] Christopher David: Type equals text that's interesting.
[42:09] Christopher David: Is that supposed to be like that?
[42:13] Christopher David: Let me know quotes.
[42:20] Christopher David: Share run this lookleagin.
[42:23] Christopher David: Cargo shuttle run maybe.
[42:31] Christopher David: Or am I still running it over here?
[42:37] Christopher David: Okay, lovely thousands.
[43:05] Christopher David: So maybe what I'll do for now is just kind of copy that so we keep the old burden.
[43:11] Christopher David: But change this to say, you know, open agents plug-in registry.
[43:18] Christopher David: Is that auto reload?
[43:24] Christopher David: Does it reload at all?
[43:26] Christopher David: Do you have to reload it like that?
[43:33] Christopher David: I hope there's a way to set up hot reloading.
[43:41] Christopher David: Okay, open agents plug-in registry.
[43:49] Christopher David: So instead of your to do description.
[43:59] Christopher David: I kind of wanted to be your plug-in description.
[44:03] Christopher David: I'm just going to assume that's incorrect.
[44:05] Christopher David: But type is text there.
[44:11] Christopher David: And let's also do this.
[44:17] Christopher David: You have to load it from URL.
[44:20] Christopher David: It's going to post to plug-ins.
[44:23] Christopher David: It's going to target plug-ins contents.
[44:29] Christopher David: Add list hx.
[44:31] Christopher David: Get is going to be plug-ins.
[44:35] Christopher David: Target this.
[44:36] Christopher David: Tracker-loet hx-wabs.
[44:38] Christopher David: Okay, now does that generate any errors?
[44:41] Christopher David: Now that I've referenced stuff that doesn't exist, maybe like a get error.
[44:48] Christopher David: Yeah, so get local host plugins for a front-off app.
[44:55] Christopher David: I'll be able to like pull and tail in and like style as appropriately.
[44:59] Christopher David: Maybe I don't pull and tail up.
[45:01] Christopher David: Maybe I just use raw CSS.
[45:09] Christopher David: Okay.
[45:19] Christopher David: This might be something tragedy to you can help with because it knows rust.
[45:25] Christopher David: So let's go here.
[45:30] Christopher David: And let's say this is example code that works with to-dos.
[45:37] Christopher David: I need to change it to work or like I need to add functionality for plugins.
[45:46] Christopher David: And that will be exactly the same as to-dos except it will have two mandatory text fields.
[45:57] Christopher David: One for description and one for hx.purl.
[46:08] Christopher David: Hx.p.wabs.
[46:10] Christopher David: One for the htp URL to the wasm file of the plugin.
[46:16] Christopher David: Please change this file to add that support.
[46:37] Christopher David: Here's the modified burden of your code.
[46:44] Christopher David: These structures should plugin.
[46:53] Christopher David: So, struct plugin.
[47:02] Christopher David: Where do I want to put this by the way?
[47:09] Christopher David: Put underneath it all this.
[47:18] Christopher David: I need description.
[47:20] Christopher David: Description wasme URL.
[47:22] Christopher David: Cool.
[47:23] Christopher David: Add new routes for plugin.
[47:26] Christopher David: Put that under fest to-dos.
[47:31] Christopher David: Plug in records is not defined.
[47:48] Christopher David: I fucking hate this.
[48:01] Christopher David: Plug in records.
[48:09] Christopher David: Do you arrive template?
[48:13] Christopher David: What?
[48:17] Christopher David: Oh template plugins.html not found.
[48:20] Christopher David: That's cool.
[48:31] Christopher David: Okay.
[48:37] Christopher David: This is to-dos.html.
[48:48] Christopher David: Please write plugin.html.
[49:01] Christopher David: This is to-dos.html.
[49:07] Christopher David: Please write plugin.html.
[49:13] Christopher David: This is to-dos.html.
[49:19] Christopher David: Please write plugin.html.
[49:22] Christopher David: This is to-dos.html.
[49:24] Christopher David: Please write plugin.html.
[49:27] Christopher David: This is to-dos.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[49:57] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[50:27] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[50:57] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[51:27] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[51:57] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[52:27] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[52:57] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[53:27] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[53:57] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[54:27] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[54:57] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[55:27] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[55:57] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[56:27] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[56:57] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[57:27] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[57:57] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[58:27] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[58:57] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[59:27] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[59:57] Christopher David: html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html.html
[59:59] Christopher David: Now it works to create in the database, but it's not a problem.
[01:00:21] Christopher David: It doesn't automatically show up on the screen, like it did with to-do's.
[01:00:37] Christopher David: Maybe there is something wrong with the stream.
[01:00:41] Christopher David: Please review my main.rs code.
[01:00:51] Christopher David: I'm going to add a bit of the stream.
[01:01:15] Christopher David: Our stream is listening for the wrong stream.
[01:01:31] Christopher David: Cool, logical.
[01:01:35] Christopher David: I'm going to add a bit of the stream.
[01:01:45] Christopher David: Let's give that a try.
[01:01:59] Christopher David: Test 2.
[01:02:13] Christopher David: I can't take that seriously because it's all that error earlier when the video was working.
[01:02:29] Christopher David: What if I remove that out of curiosity?
[01:02:59] Christopher David: If I were to dump this here.
[01:03:17] Christopher David: I'm going to add a bit of the stream.
[01:03:27] Christopher David: I'm going to add a bit of the stream.
[01:03:37] Christopher David: That still works.
[01:04:03] Christopher David: I'm going to add a bit of the stream.
[01:04:17] Christopher David: Let's take a closer look at this.
[01:04:29] Christopher David: To do this, the T body of 2.0-content is the right plug-ins.
[01:04:59] Christopher David: Are there any differences between these two functions?
[01:05:27] Christopher David: I'm going to add a bit of the stream.
[01:05:57] Christopher David: Thanks for watching.
[01:06:27] Christopher David: I'm going to add a curiosity with that.
[01:06:45] Christopher David: I don't know if it can't have two
[01:07:13] Christopher David: in two spots.
[01:07:41] Christopher David: Where are we driving templates?
[01:08:09] Christopher David: Maybe.
[01:08:25] Christopher David: Let's see.
[01:08:51] Christopher David: Let's try something else.
[01:09:11] Christopher David: Let's see.
[01:09:41] Christopher David: Thank you.
[01:10:11] Christopher David: Oh.
[01:10:29] Christopher David: Thanks.
[01:10:55] Christopher David: Delete is working.
[01:11:21] Christopher David: Yes, there is plug-ins content.
[01:11:49] Christopher David: Thanks.
[01:12:19] Christopher David: Okay.
[01:12:41] Christopher David: If I created to do what is the response?
[01:13:11] Christopher David: Thanks.
[01:13:41] Christopher David: Thanks.
[01:14:07] Christopher David: You gave me this code that returns okay instead of plug-in when I ask you to mimic the exact
[01:14:17] Christopher David: to-do's function.
[01:14:47] Christopher David: Do I have a plug-in new template?
[01:15:15] Christopher David: Okay.
[01:15:57] Christopher David: It doesn't add it over here.
[01:16:41] Christopher David: Yeah, the great.
[01:17:11] Christopher David: I'm going to add a little bit of the input.
[01:17:37] Christopher David: Is that a separate URL?
[01:18:01] Christopher David: Okay.
[01:18:11] Christopher David: Okay.
[01:18:26] Christopher David: Thanks.
[01:18:56] Christopher David: Why does this have two different IDs?
[01:19:26] Christopher David: Okay.
[01:19:51] Christopher David: Let's go through and remove to-do's support.
[01:19:59] Christopher David: clear on how this will affect like if I delete old migrations with that mess up my
[01:20:05] Christopher David: deployments let's try pushing this up live and see what happens
[01:20:29] Christopher David: okay register e. Shuttleapp.rs
[01:20:34] Christopher David: there we go plug in description plug in URL
[01:20:38] Christopher David: then go
[01:20:41] Christopher David: delete
[01:20:44] Christopher David: okay let's remove support for shuttles.toos
[01:20:49] Christopher David: and make sure that works
[01:20:54] Christopher David: goodbye to
[01:21:01] Christopher David: goodbye to
[01:21:09] Christopher David: you
[01:21:22] Christopher David: stream don't need it to do updates
[01:21:29] Christopher David: use my them
[01:21:37] Christopher David: to do
[01:21:43] Christopher David: and
[01:21:50] Christopher David: go
[01:21:53] Christopher David: goodbye to
[01:21:58] Christopher David: you
[01:22:28] Christopher David: to
[01:22:35] Christopher David: remove
[01:22:38] Christopher David: to
[01:22:43] Christopher David: to
[01:22:57] Christopher David: deployment crashed
[01:23:00] Christopher David: yeah
[01:23:02] Christopher David: version missing
[01:23:05] Christopher David: and
[01:23:12] Christopher David: what can I do about that
[01:23:15] Christopher David: learn a little bit about shuttle migrations
[01:24:21] Christopher David: you
[01:24:27] Christopher David: if you change the migrations after running locally or deploying you will need to go into the database itself and delete the tables
[01:24:35] Christopher David: you can do this easily with bloody bloody block
[01:24:40] Christopher David: okay I will do that offline
[01:24:43] Christopher David: for now
[01:24:47] Christopher David: let's just look at this locally
[01:24:56] Christopher David: actually let's try this let's go
[01:25:04] Christopher David: let's go
[01:25:10] Christopher David: we'll just restore the migrations for now
[01:25:16] Christopher David: but
[01:25:20] Christopher David: so it's clear new file called this
[01:25:39] Christopher David: version missing
[01:26:06] Christopher David: that's interesting
[01:26:18] Christopher David: okay well let's
[01:26:20] Christopher David: let's
[01:26:22] Christopher David: as the last thing we do let's go into the p-sicle and
[01:26:26] Christopher David: unscruited
[01:26:32] Christopher David: and
[01:26:39] Christopher David: hopefully it is as easy as going into here
[01:26:45] Christopher David: doing a new
[01:26:49] Christopher David: post-class
[01:26:55] Christopher David: and
[01:27:34] Christopher David: okay
[01:27:46] Christopher David: let's
[01:27:53] Christopher David: run
[01:28:02] Christopher David: the
[01:28:08] Christopher David: and
[01:28:15] Christopher David: the
[01:29:22] Christopher David: and
[01:29:29] Christopher David: the
[01:29:36] Christopher David: and
[01:29:43] Christopher David: the
[01:30:20] Christopher David: and
[01:30:27] Christopher David: the
[01:30:34] Christopher David: and
[01:30:39] Christopher David: the
[01:30:42] Christopher David: and
[01:30:49] Christopher David: the
[01:30:57] Christopher David: and