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