Transcription: OpenAgents Episode 055 - Plugin Registry UI
June 9, 2026 ยท View on GitHub
Source: https://twitter.com/OpenAgentsInc/status/1748445660146216995 Wiki source: https://raw.githubusercontent.com/wiki/OpenAgentsInc/openagents/Video-Series.md Media title: OpenAgents - Episode 055: Plugin Registry UI We build the UI to list our uploaded ... Upload date: 20240119 Transcription model: mlx-whisper/mlx-community/whisper-tiny Generated at: 2026-06-01T20:11:21Z
Machine-generated transcript. Review speaker labels and wording before using this as quote-grade source material.
[00:00] Christopher David: Alright, let's build up the plugin registry UI.
[00:03] Christopher David: So we got that basic upload form working.
[00:07] Christopher David: I did some offline a little bit of styling there.
[00:10] Christopher David: Looks pretty good and that's online at openagents.com slash plugins.
[00:16] Christopher David: Now plugins is actually going to be where we want the one registry to be.
[00:20] Christopher David: We might want to move this form into a modal or something like that.
[00:25] Christopher David: And maybe later in the video we'll add dark mode.
[00:33] Christopher David: So I first want to think about kind of what people should see.
[00:37] Christopher David: I mean, we want there to be a list of plugins.
[00:43] Christopher David: And then like actions that you can do with the plugins.
[00:45] Christopher David: And then this will help us think about ways that the plugins are going to be used.
[00:52] Christopher David: The agent builder or the agent graph that we built up in previous videos.
[01:02] Christopher David: Where do I have that now?
[01:04] Christopher David: I think I removed some of the public links.
[01:10] Christopher David: But just to give an example of where I want to get back to.
[01:14] Christopher David: So this kind of node graph,
[01:20] Christopher David: separate library we've been creating called agent graph.
[01:25] Christopher David: Which we may want to.
[01:29] Christopher David: Kind of revisit whether we want to keep this in gets kind of current code based stock.
[01:36] Christopher David: This actually might be something where keeping react makes sense.
[01:41] Christopher David: Or it might be something where we just go back to the underlying like graph dash.
[01:46] Christopher David: Dash.js which I was kind of originally not liking that it was written in kind of vanilla JavaScript.
[01:52] Christopher David: It seemed like our touch grip that didn't have a framework maybe now I like that maybe we just want to use the underlying like graph.
[01:58] Christopher David: So if you've.
[02:00] Christopher David: If you see that the like comfy you are floating around for building like image processing workloads.
[02:06] Christopher David: If you look at their code with the use for the graph library is like graph.js.
[02:11] Christopher David: Underneath it.
[02:12] Christopher David: So.
[02:14] Christopher David: How we might just be able to adapt this instead of building entirely our own thing.
[02:21] Christopher David: Well we'll revisit that but that's just a little preview of.
[02:25] Christopher David: These plugins are intended to be sort of like encapsulated modular pieces of functionality that would form these nodes here.
[02:35] Christopher David: So we have these four examples of nodes validate embed similarity search or the types of validation embedding similarity search.
[02:42] Christopher David: Inference.
[02:43] Christopher David: You can imagine another category called payments.
[02:46] Christopher David: Making a payment or soliciting a payment.
[02:51] Christopher David: And making third party API calls once we have those six building blocks solid.
[02:56] Christopher David: Those will be great and.
[02:59] Christopher David: You know I did the functionality myself in our PHP code for these four nodes and that's what's powering the little chatbot that we have.
[03:08] Christopher David: Live on the website currently.
[03:10] Christopher David: Which is nice but.
[03:15] Christopher David: Want to start.
[03:17] Christopher David: Allowing other people to extend it because I want to get this to the point where.
[03:24] Christopher David: This is valuable enough any given agent is valuable enough for someone to want to pay for it.
[03:32] Christopher David: I suspect that.
[03:35] Christopher David: That's going to come largely at least what I'm going to be aiming for is to solve this auto dev thing once we can unleash.
[03:44] Christopher David: One of these agents into a GitHub code base.
[03:47] Christopher David: And be able to do and follow through on the kinds of things that have started having this I previously called it ferry AI.
[03:55] Christopher David: Doing here where.
[03:58] Christopher David: And then we're going to do the same thing.
[04:01] Christopher David: So we're going to do the same thing.
[04:04] Christopher David: So we're going to do the same thing.
[04:06] Christopher David: So we're going to do the same thing.
[04:08] Christopher David: So we're going to do the same thing.
[04:11] Christopher David: So we're going to do the same thing.
[04:13] Christopher David: So we're going to do the same thing.
[04:16] Christopher David: So we're going to do the same thing.
[04:19] Christopher David: So we're going to do the same thing.
[04:21] Christopher David: So we're going to do the same thing.
[04:24] Christopher David: So we're going to do the same thing.
[04:27] Christopher David: So we're going to do the same thing.
[04:30] Christopher David: So we're going to do the same thing.
[04:33] Christopher David: So we're going to do the same thing.
[04:35] Christopher David: So we're going to do the same thing.
[04:37] Christopher David: So we're going to do the same thing.
[04:39] Christopher David: So we're going to do the same thing.
[04:42] Christopher David: So we're going to do the same thing.
[04:44] Christopher David: So we're going to do the same thing.
[04:46] Christopher David: So we're going to do the same thing.
[04:48] Christopher David: So we're going to do the same thing.
[04:50] Christopher David: So we're going to do the same thing.
[04:53] Christopher David: So we're going to do the same thing.
[04:55] Christopher David: So we're going to do the same thing.
[04:58] Christopher David: So we're going to do the same thing.
[05:01] Christopher David: So we're going to do the same thing.
[05:03] Christopher David: So we're going to do the same thing.
[05:05] Christopher David: So we're going to do the same thing.
[05:07] Christopher David: So we're going to do the same thing.
[05:10] Christopher David: So we're going to do the same thing.
[05:12] Christopher David: So we're going to do the same thing.
[05:14] Christopher David: So we're going to do the same thing.
[05:16] Christopher David: So we're going to do the same thing.
[05:18] Christopher David: So we're going to do the same thing.
[05:19] Christopher David: So we're going to do the same thing.
[05:21] Christopher David: So we're going to do the same thing.
[05:24] Christopher David: So we're going to do the same thing.
[05:27] Christopher David: So we're going to do the same thing.
[05:30] Christopher David: So we're going to do the same thing.
[05:32] Christopher David: So we're going to do the same thing.
[05:34] Christopher David: So we're going to do the same thing.
[05:36] Christopher David: So we're going to do the same thing.
[05:39] Christopher David: So we're going to do the same thing.
[05:41] Christopher David: So we're going to do the same thing.
[05:43] Christopher David: So we're going to do the same thing.
[05:45] Christopher David: So we're going to do the same thing.
[05:47] Christopher David: So we're going to do the same thing.
[05:48] Christopher David: So we're going to do the same thing.
[05:50] Christopher David: So we're going to do the same thing.
[05:52] Christopher David: So we're going to do the same thing.
[05:53] Christopher David: So we're going to do the same thing.
[05:54] Christopher David: So we're going to do the same thing.
[05:55] Christopher David: So we're going to do the same thing.
[05:56] Christopher David: So we're going to do the same thing.
[05:58] Christopher David: So we're going to do the same thing.
[06:00] Christopher David: So we're going to do the same thing.
[06:01] Christopher David: So we're going to do the same thing.
[06:03] Christopher David: So we're going to do the same thing.
[06:04] Christopher David: So we're going to do the same thing.
[06:06] Christopher David: So we're going to do the same thing.
[06:08] Christopher David: So we're going to do the same thing.
[06:09] Christopher David: So we're going to do the same thing.
[06:11] Christopher David: So we're going to do the same thing.
[06:13] Christopher David: So we're going to do the same thing.
[06:14] Christopher David: So we're going to do the same thing.
[06:15] Christopher David: So we're going to do the same thing.
[06:16] Christopher David: So we're going to do the same thing.
[06:17] Christopher David: So we're going to get that figure out.
[06:19] Christopher David: So that's what we're headed.
[06:24] Christopher David: And for now, we want to let's just like list the plugins here.
[06:32] Christopher David: How should we do it?
[06:38] Christopher David: I think I want to start with one feature test just to assert that.
[06:46] Christopher David: This plugins URL has all of the needed data.
[06:51] Christopher David: And then we'll just kind of get back over to the UI and kind of drive it out.
[06:57] Christopher David: What we think it should look like based on the data that we know that we're going to have.
[07:01] Christopher David: So let's see what branch we're on.
[07:05] Christopher David: We'll call this plugins UI.
[07:10] Christopher David: Make sure our test pass.
[07:20] Christopher David: And let's make a feature test.
[07:30] Christopher David: What do we have already for plugin test?
[07:32] Christopher David: We have upload plugin test.
[07:35] Christopher David: I guess we'll do.
[07:39] Christopher David: View plugin test.
[07:42] Christopher David: We'll call it plugin registry test.
[07:49] Christopher David: And we want to assert that the plugins page shows list of, let's just say, all plugins.
[07:58] Christopher David: And we can chop it down later.
[08:02] Christopher David: Okay.
[08:06] Christopher David: So let's have our factory make three plugins.
[08:14] Christopher David: And we go to plugins.
[08:16] Christopher David: I want to see that one and I want to see that one.
[08:21] Christopher David: And I want to see that one.
[08:23] Christopher David: Okay.
[08:28] Christopher David: Let's go to pf registry.
[08:33] Christopher David: Alright. Let's start with this first failing plugin see test.
[08:48] Christopher David: Asserting that blah blah blah blah blah.
[08:51] Christopher David: Contains Camille Funk.
[08:53] Christopher David: That's an interesting plugin name.
[08:56] Christopher David: Okay.
[08:57] Christopher David: So.
[09:02] Christopher David: Let's go to our plugin controller.
[09:09] Christopher David: And I guess we'll just pass all the plugins to the view.
[09:13] Christopher David: What?
[09:14] Christopher David: How easy that is.
[09:16] Christopher David: Now we need to render it.
[09:23] Christopher David: We're just throughout here for now.
[09:28] Christopher David: Loop through all plugins and show the name.
[09:35] Christopher David: Do do do do do do.
[09:42] Christopher David: I was swear to here for.
[09:45] Christopher David: Come on, copire don't make me think.
[09:49] Christopher David: There we go.
[09:53] Christopher David: Plugins is plugins.
[09:55] Christopher David: All right. What is on this?
[10:00] Christopher David: Ah.
[10:03] Christopher David: Love them.
[10:04] Christopher David: C.D.R.L.H.E.C.
[10:06] Christopher David: PHP plugin is what is this?
[10:09] Christopher David: Okay.
[10:10] Christopher David: It doesn't know that we have already access to plugin.
[10:15] Christopher David: What does it?
[10:23] Christopher David: Why is that so ugly?
[10:27] Christopher David: Does it work?
[10:38] Christopher David: Okay.
[10:39] Christopher David: That's weirdly duplicative.
[10:42] Christopher David: But maybe that works.
[10:45] Christopher David: Oh, I see.
[10:47] Christopher David: It's a call.
[10:48] Christopher David: It's a call.
[10:49] Christopher David: It's a call.
[10:52] Christopher David: It's a call.
[10:54] Christopher David: It's a call.
[10:56] Christopher David: It's a call.
[10:58] Christopher David: It's a call.
[11:01] Christopher David: It's a call.
[11:03] Christopher David: It's a call.
[11:05] Christopher David: It's a call.
[11:06] Christopher David: It's a call.
[11:08] Christopher David: It's a call.
[11:09] Christopher David: It's a call.
[11:11] Christopher David: It's a call.
[11:12] Christopher David: It's a call.
[11:14] Christopher David: It's a call.
[11:15] Christopher David: It's a call.
[11:17] Christopher David: Now make this loop through and show the name of each plugin.
[11:39] Christopher David: Four else.
[11:42] Christopher David: Oh.
[11:45] Christopher David: Four else.
[11:48] Christopher David: Or else.
[11:51] Christopher David: No plugins available.
[11:53] Christopher David: Let's make a plugin.
[11:56] Christopher David: Plug in a plugin.
[11:59] Christopher David: It's a successful plugin.
[12:02] Christopher David: I'm going to want that to auto update that via.
[12:11] Christopher David: HTML.
[12:12] Christopher David: All right.
[12:13] Christopher David: We got as devd.
[12:15] Christopher David: And we got a boom.
[12:18] Christopher David: Cool.
[12:19] Christopher David: Is there a test pass?
[12:22] Christopher David: Okay.
[12:24] Christopher David: We have the plugin data here.
[12:36] Christopher David: Let's extract this to its own components.
[12:45] Christopher David: We're not polluting this nice page component.
[12:49] Christopher David: PHP artists and make components.
[12:52] Christopher David: Plug in.
[12:57] Christopher David: Grid.
[12:59] Christopher David: View plugins.
[13:00] Christopher David: Plug in gallery.
[13:01] Christopher David: Plug in grid.
[13:04] Christopher David: We'll probably be a grid.
[13:07] Christopher David: Components plugin grid.
[13:18] Christopher David: Did it also make.
[13:21] Christopher David: I did.
[13:24] Christopher David: Yeah.
[13:27] Christopher David: All right.
[13:28] Christopher David: So let's move this stuff over.
[13:33] Christopher David: I don't call this x plugin grid.
[13:39] Christopher David: Do I have to pass it in?
[13:42] Christopher David: Undefined variable.
[13:47] Christopher David: Undefined variable.
[13:52] Christopher David: Undefined variable.
[13:58] Christopher David: That's interesting.
[14:07] Christopher David: Let's see if copilot can help us out here.
[14:13] Christopher David: Plug in.
[14:14] Christopher David: Maybe.
[14:15] Christopher David: This plugin is plugins.
[14:25] Christopher David: Okay.
[14:26] Christopher David: So I don't know.
[14:32] Christopher David: Help me extract it to a.
[14:36] Christopher David: Larabel component.
[14:37] Christopher David: I don't know how to.
[14:41] Christopher David: Pass in the plugins.
[14:43] Christopher David: Var.
[14:46] Christopher David: Public plugins.
[14:59] Christopher David: Cool.
[15:07] Christopher David: Do do do.
[15:10] Christopher David: Use closure.
[15:15] Christopher David: Do do do.
[15:25] Christopher David: Do do.
[15:30] Christopher David: Do do.
[15:39] Christopher David: Okay.
[15:49] Christopher David: That has been extracted.
[16:04] Christopher David: Okay.
[16:14] Christopher David: So first let's see what all data that we have.
[16:16] Christopher David: We have the description.
[16:18] Christopher David: Do you have any data?
[16:30] Christopher David: Do you have any data?
[16:33] Christopher David: Yes.
[16:34] Christopher David: Okay.
[16:35] Christopher David: Okay.
[16:36] Christopher David: Okay.
[16:37] Christopher David: Okay.
[16:38] Christopher David: Okay.
[16:39] Christopher David: Okay.
[16:40] Christopher David: Okay.
[16:41] Christopher David: Okay.
[16:42] Christopher David: Okay.
[16:43] Christopher David: Okay.
[16:44] Christopher David: Okay.
[16:45] Christopher David: Okay.
[16:46] Christopher David: Okay.
[16:47] Christopher David: Okay.
[17:05] Christopher David: Now I probably want some of the data from that parse that we did.
[17:09] Christopher David: Showing like the exposed functions.
[17:11] Christopher David: Okay.
[17:12] Christopher David: So I'm going to actually just go on in each individual.
[17:17] Christopher David: Plung in page.
[17:26] Christopher David: Okay.
[17:35] Christopher David: Okay.
[17:45] Christopher David: Okay.
[17:56] Christopher David: With CSS with tail end CSS styling.
[18:00] Christopher David: Very similar to the upload dog form here.
[18:13] Christopher David: Do it for me.
[18:22] Christopher David: Okay.
[18:29] Christopher David: While that goes, I'm curious what our dark mode situation is.
[18:37] Christopher David: Okay.
[18:38] Christopher David: That looks pretty good.
[18:47] Christopher David: So in a second we'll connect our little dc.
[18:54] Christopher David: That I took from the docs sites.
[18:57] Christopher David: That same thing.
[18:58] Christopher David: This is a service called Midlify.
[19:00] Christopher David: It's awesome.
[19:01] Christopher David: Great docs.
[19:02] Christopher David: MDX, blah blah blah.
[19:04] Christopher David: And I want the header to look the same on our website that there's us.
[19:09] Christopher David: Because we're going to be linking to it from our site and it should look visually similar.
[19:14] Christopher David: All right.
[19:15] Christopher David: Let's check it out.
[19:16] Christopher David: Okay.
[19:26] Christopher David: What if I move that out of kind of being stifled by this max WLB?
[19:43] Christopher David: This max WLG situation here.
[19:50] Christopher David: I remove that.
[19:54] Christopher David: About max W7xL.
[19:59] Christopher David: That 4xL.
[20:11] Christopher David: I kind of still want the plugin upload form to look like this.
[20:19] Christopher David: Oops.
[20:22] Christopher David: Maybe I should pull in this into here.
[21:00] Christopher David: That's clean.
[21:08] Christopher David: Now I need these to be...
[21:30] Christopher David: If I want small cars, I should maybe not even include the URL there.
[21:43] Christopher David: Plus, I don't know that we're going to show the URL at all.
[21:52] Christopher David: Yeah, letting people pull in code stored on remote URLs is probably...
[21:59] Christopher David: Not the best practice until we get full like hash checking mechanisms in place.
[22:25] Christopher David: Okay.
[22:29] Christopher David: Okay.
[22:35] Christopher David: Alright, we'll call that a non-horrible plugin grid.
[22:42] Christopher David: And we'll say that our plugin registry test is also just a search that we see.
[22:49] Christopher David: Also, a search we see each description.
[22:54] Christopher David: Oh, even format of the date for us. That's so nice.
[23:00] Christopher David: And date formatted like Gen 19, 2020-4.
[23:07] Christopher David: Figure it out for me.
[23:09] Christopher David: Yeah.
[23:17] Christopher David: Wow. You know, that's something that you just have to like Google and like, oh, timestamp,
[23:22] Christopher David: converting between, you know, just does it. It's amazing.
[23:30] Christopher David: Okay.
[23:35] Christopher David: That's not horrible.
[23:39] Christopher David: So one thing I want to fix is, or at least address is right now, our tests are using, I guess, the same test database.
[23:48] Christopher David: So whenever we do test it knocks out our database.
[23:54] Christopher David: I'm not going to monkey run in my ENV file right now, because I don't want to hide that.
[23:58] Christopher David: But it would be cool to have a cedar.
[24:00] Christopher David: So like for example, we have the concierge cedar that I used to kind of just inject into the database all of the steps to create the concierge agent.
[24:15] Christopher David: Um,
[24:17] Christopher David: please write a plugin cedar that seeds a demo plugin.
[24:35] Christopher David: That seeds, you know, four demo plugins using syntax similar to the below.
[24:52] Christopher David: That's going to freak out about these embedding, the solder from them.
[25:05] Christopher David: Machine language.
[25:14] Christopher David: I mean, you don't have to read all these.
[25:44] Christopher David: Okay.
[26:11] Christopher David: Then I might work.
[26:16] Christopher David: I'm going to have a plugin cedar.
[26:21] Christopher David: And then whenever the try is.
[26:37] Christopher David: I have S as a cedar for concierge cedar.
[26:48] Christopher David: And I'm actually going to change that to SC and have S just be my octave one, which is, oh, it's practice my them motion chair.
[27:00] Christopher David: Okay.
[27:04] Christopher David: And how's that word?
[27:12] Christopher David: Does it work? Oh yeah.
[27:20] Christopher David: All right, but let's say that I don't like that demo demo demo demo and let's say I think about what our actual plug is reading you.
[27:34] Christopher David: Check Bitcoin price boom.
[27:39] Christopher David: Call.
[27:44] Christopher David: I create a betting.
[28:05] Christopher David: Get GitHub repo.
[28:16] Christopher David: Folder hierarchy.
[28:26] Christopher David: Comment on GitHub issue.
[28:31] Christopher David: To be good feelings of description for us.
[28:41] Christopher David: Go and get a new new new new new new new.
[29:11] Christopher David: Can you imagine.
[29:38] Christopher David: Can you imagine a marketplace of these people setting their own fees.
[29:48] Christopher David: This is going to be so fun.
[29:52] Christopher David: Oh my goodness. Okay, let's run our test again.
[29:55] Christopher David: Which is a wipe that DB. Let's see it again.
[30:02] Christopher David: Oh yeah.
[30:08] Christopher David: You got fee a price.
[30:34] Christopher David: I really want to say in fear.
[31:04] Christopher David: Yeah, this reminds me a little bit of the net 90.
[31:24] Christopher David: And then I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going
[31:54] Christopher David: to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm going to say that I'm
[32:24] Christopher David: at the building block that I can now start to reason about more confidently in assembling multiple of these plugins into more complex workflows, which can then be sold.
[32:35] Christopher David: Holy shit.
[32:37] Christopher David: All right, I'm happy with this for now as like a rough thingy.
[32:55] Christopher David: We'll probably want next to also add it so that you can click on one to get more of a like
[32:59] Christopher David: blown up view with the parsing and the actions that you do with each plugin probably will
[33:04] Christopher David: want to be on its own page.
[33:10] Christopher David: This is just kind of like a overall view.
[33:14] Christopher David: Let's add dark mode.
[33:18] Christopher David: So, telling me makes it easy to specify dark classes.
[33:25] Christopher David: What I want is to replace this thing in our nav bar header.
[33:36] Christopher David: The theme switcher.
[33:46] Christopher David: I probably want to extract this to its own components.
[33:56] Christopher David: Just so it's cleaner.
[34:16] Christopher David: So let's grab this bone.
[34:37] Christopher David: Make sure that's still working.
[34:40] Christopher David: And then over here, let's just make sure we're executing this JavaScript.
[34:54] Christopher David: So because in telling, we're set up with dark mode class, we're just going to be
[35:02] Christopher David: pending.
[35:11] Christopher David: Class equals dark to the HTML element.
[35:16] Christopher David: Let me click that.
[35:27] Christopher David: Here is our new theme switcher blade file.
[35:36] Christopher David: In the script there, I need to change a to append or remove.
[35:56] Christopher David: Class equals dark from the HTML element on page.
[36:05] Christopher David: And also tie some kind of state to that.
[36:14] Christopher David: Please do it.
[36:17] Christopher David: Figure it out.
[36:23] Christopher David: Keep it simple stupid.
[36:29] Christopher David: You don't need react for this.
[36:35] Christopher David: I'm saying it's a reaching for react.
[36:37] Christopher David: I need a d reactify.
[36:46] Christopher David: That's an idea is theme switcher.
[36:56] Christopher David: What do you go wrong?
[37:02] Christopher David: What do you do?
[37:09] Christopher David: Oh yeah.
[37:10] Christopher David: Oh my goodness.
[37:15] Christopher David: Oh, it animates.
[37:17] Christopher David: Now, why can't there's something wrong with the gray there?
[37:25] Christopher David: Oh, we got dark mode.
[38:05] Christopher David: So, we're going to have to go to the HTML element.
[38:15] Christopher David: So, we're going to have to go to the HTML element.
[38:23] Christopher David: So, we're going to have to go to the HTML element.
[38:30] Christopher David: Let's try one more thing to kind of HTML and modify this.
[38:44] Christopher David: So right now, after I upload a plugin, I need to reload.
[38:55] Christopher David: This is all working fine.
[39:06] Christopher David: The form uploads a plugin.
[39:10] Christopher David: But when it uploads, I need to refresh the page to see the new plugin.
[39:24] Christopher David: I want to make it load there automatically via HTML.
[39:38] Christopher David: Please suggest how to refactor code to enable app.
[39:46] Christopher David: So right now, I'm like copypacing code into chatchipity.
[39:49] Christopher David: Like here's plugin grid that blade.
[39:59] Christopher David: Plugin upload form.blade
[40:19] Christopher David: and
[40:27] Christopher David: plugins
[40:31] Christopher David: dot blade dot phb
[40:36] Christopher David: and let's do plug-in controller.
[40:49] Christopher David: Do it
[40:56] Christopher David: do it
[41:02] Christopher David: make it so
[41:10] Christopher David: and
[41:17] Christopher David: let's
[41:25] Christopher David: do
[42:02] Christopher David: install
[42:09] Christopher David: returning
[42:18] Christopher David: let's
[42:32] Christopher David: do
[42:39] Christopher David: install
[44:16] Christopher David: dot
[44:23] Christopher David: dot
[44:28] Christopher David: dot
[44:32] Christopher David: dot
[44:41] Christopher David: dot
[44:48] Christopher David: dot
[44:51] Christopher David: dot
[44:54] Christopher David: dot
[44:59] Christopher David: fragment
[45:05] Christopher David: this is
[45:11] Christopher David: i believe
[45:18] Christopher David: dot
[45:24] Christopher David: dot
[45:29] Christopher David: dot
[45:33] Christopher David: dot
[45:38] Christopher David: dot
[45:42] Christopher David: dot
[45:49] Christopher David: dot
[45:54] Christopher David: dot
[45:58] Christopher David: dot
[46:03] Christopher David: dot
[46:08] Christopher David: dot
[46:12] Christopher David: dot
[46:17] Christopher David: dot
[46:21] Christopher David: dot
[46:25] Christopher David: dot
[46:30] Christopher David: dot
[46:35] Christopher David: showing
[46:41] Christopher David: now the test is to see if it can
[46:47] Christopher David: not
[46:49] Christopher David: break
[47:04] Christopher David: dot
[47:10] Christopher David: dot
[47:13] Christopher David: dot
[47:17] Christopher David: dot
[47:21] Christopher David: dot
[47:24] Christopher David: dot
[47:28] Christopher David: dot
[47:33] Christopher David: dot
[47:39] Christopher David: dot
[47:41] Christopher David: dot
[47:45] Christopher David: dot
[47:48] Christopher David: dot
[47:53] Christopher David: dot
[47:57] Christopher David: dot
[48:02] Christopher David: dot
[48:08] Christopher David: dot
[48:13] Christopher David: dot
[48:18] Christopher David: dot
[48:22] Christopher David: dot
[48:26] Christopher David: dot
[48:30] Christopher David: dot
[48:33] Christopher David: dot
[48:37] Christopher David: dot
[48:42] Christopher David: dot
[48:45] Christopher David: dot
[48:50] Christopher David: dot
[48:55] Christopher David: dot
[49:00] Christopher David: dot
[49:04] Christopher David: dot
[49:06] Christopher David: dot
[49:09] Christopher David: dot
[49:13] Christopher David: dot
[49:15] Christopher David: dot
[49:18] Christopher David: dot
[49:20] Christopher David: dot
[49:24] Christopher David: dot
[49:29] Christopher David: dot
[49:31] Christopher David: dot
[49:35] Christopher David: dot
[49:37] Christopher David: dot
[49:38] Christopher David: dot
[49:40] Christopher David: dot
[49:41] Christopher David: dot
[49:43] Christopher David: dot
[49:44] Christopher David: dot
[49:47] Christopher David: dot
[49:48] Christopher David: dot
[49:49] Christopher David: dot
[49:51] Christopher David: dot
[49:53] Christopher David: dot
[49:55] Christopher David: dot
[49:58] Christopher David: dot
[50:02] Christopher David: dot
[50:28] Christopher David: dot
[50:32] Christopher David: dot
[50:34] Christopher David: dot
[50:37] Christopher David: dot
[50:38] Christopher David: dot
[50:39] Christopher David: dot
[50:40] Christopher David: dot
[50:43] Christopher David: dot
[50:44] Christopher David: dot
[50:45] Christopher David: dot
[50:46] Christopher David: dot
[50:47] Christopher David: dot
[50:48] Christopher David: dot
[50:49] Christopher David: dot
[50:50] Christopher David: dot
[50:51] Christopher David: dot
[50:52] Christopher David: dot
[50:53] Christopher David: dot
[50:54] Christopher David: dot
[50:58] Christopher David: dot
[51:27] Christopher David: dot
[51:28] Christopher David: dot
[51:32] Christopher David: dot
[51:34] Christopher David: dot
[51:36] Christopher David: dot
[51:37] Christopher David: dot
[51:39] Christopher David: dot
[51:41] Christopher David: dot
[51:42] Christopher David: dot
[51:43] Christopher David: dot
[51:44] Christopher David: dot
[51:46] Christopher David: dot
[51:48] Christopher David: dot
[51:49] Christopher David: dot
[51:50] Christopher David: dot
[51:52] Christopher David: dot
[51:53] Christopher David: dot
[51:54] Christopher David: dot
[51:57] Christopher David: dot
[51:59] Christopher David: dot
[52:01] Christopher David: dot
[52:03] Christopher David: dot
[52:06] Christopher David: dot
[52:07] Christopher David: dot
[52:08] Christopher David: dot
[52:09] Christopher David: dot
[52:11] Christopher David: dot
[52:12] Christopher David: dot
[52:13] Christopher David: dot
[52:15] Christopher David: dot
[52:16] Christopher David: dot
[52:17] Christopher David: dot
[52:18] Christopher David: dot
[52:19] Christopher David: dot
[52:20] Christopher David: dot
[52:21] Christopher David: dot
[52:23] Christopher David: dot
[52:27] Christopher David: dot
[52:28] Christopher David: dot
[52:29] Christopher David: dot
[52:30] Christopher David: dot
[52:31] Christopher David: dot
[52:33] Christopher David: dot
[52:35] Christopher David: dot
[52:36] Christopher David: dot
[52:37] Christopher David: dot
[52:38] Christopher David: dot
[52:39] Christopher David: dot
[52:40] Christopher David: dot
[52:41] Christopher David: dot
[52:42] Christopher David: dot
[52:43] Christopher David: dot
[52:44] Christopher David: dot
[52:45] Christopher David: dot
[52:46] Christopher David: dot
[52:47] Christopher David: dot
[52:48] Christopher David: dot
[52:49] Christopher David: dot
[52:50] Christopher David: dot
[52:51] Christopher David: dot
[52:52] Christopher David: dot
[52:53] Christopher David: dot
[52:54] Christopher David: dot
[52:57] Christopher David: dot
[52:59] Christopher David: dot
[53:00] Christopher David: dot
[53:01] Christopher David: dot
[53:03] Christopher David: dot
[53:04] Christopher David: dot
[53:05] Christopher David: dot
[53:06] Christopher David: dot
[53:07] Christopher David: dot
[53:08] Christopher David: dot
[53:09] Christopher David: dot
[53:10] Christopher David: dot
[53:11] Christopher David: dot
[53:12] Christopher David: dot
[53:13] Christopher David: dot
[53:14] Christopher David: dot
[53:15] Christopher David: dot
[53:16] Christopher David: dot
[53:17] Christopher David: dot
[53:18] Christopher David: dot
[53:19] Christopher David: dot
[53:20] Christopher David: dot
[53:21] Christopher David: dot
[53:22] Christopher David: dot
[53:23] Christopher David: dot
[53:24] Christopher David: dot
[53:27] Christopher David: dot
[53:29] Christopher David: dot
[53:31] Christopher David: dot
[53:33] Christopher David: dot
[53:35] Christopher David: dot
[53:36] Christopher David: dot
[53:37] Christopher David: dot
[53:38] Christopher David: dot
[53:40] Christopher David: dot
[53:41] Christopher David: dot
[53:42] Christopher David: dot
[53:43] Christopher David: dot
[53:44] Christopher David: dot
[53:45] Christopher David: dot
[53:46] Christopher David: dot
[53:47] Christopher David: dot
[53:48] Christopher David: dot
[53:49] Christopher David: dot
[53:50] Christopher David: dot
[53:51] Christopher David: dot
[53:53] Christopher David: dot
[53:54] Christopher David: dot
[53:57] Christopher David: dot
[53:59] Christopher David: dot
[54:01] Christopher David: dot
[54:03] Christopher David: dot
[54:05] Christopher David: dot
[54:06] Christopher David: dot
[54:07] Christopher David: dot
[54:08] Christopher David: dot
[54:09] Christopher David: dot
[54:10] Christopher David: dot
[54:11] Christopher David: dot
[54:12] Christopher David: dot
[54:13] Christopher David: dot
[54:14] Christopher David: dot
[54:15] Christopher David: dot
[54:16] Christopher David: dot
[54:17] Christopher David: dot
[54:18] Christopher David: dot
[54:19] Christopher David: dot
[54:20] Christopher David: dot
[54:21] Christopher David: dot
[54:22] Christopher David: dot
[54:23] Christopher David: dot
[54:24] Christopher David: dot
[54:27] Christopher David: dot
[54:32] Christopher David: dot
[54:33] Christopher David: dot
[54:34] Christopher David: dot
[54:35] Christopher David: dot
[54:36] Christopher David: dot
[54:37] Christopher David: dot
[54:38] Christopher David: dot
[54:39] Christopher David: dot
[54:40] Christopher David: dot
[54:41] Christopher David: dot
[54:42] Christopher David: dot
[54:43] Christopher David: dot
[54:44] Christopher David: dot
[54:45] Christopher David: dot
[54:46] Christopher David: dot
[54:47] Christopher David: dot
[54:48] Christopher David: dot
[54:49] Christopher David: dot
[54:50] Christopher David: dot
[54:51] Christopher David: dot
[54:52] Christopher David: dot
[54:53] Christopher David: dot
[54:54] Christopher David: dot
[54:57] Christopher David: dot
[55:26] Christopher David: dot
[55:29] Christopher David: dot
[55:31] Christopher David: dot
[55:33] Christopher David: dot
[55:35] Christopher David: dot
[55:36] Christopher David: dot
[55:37] Christopher David: dot
[55:38] Christopher David: dot
[55:39] Christopher David: dot
[55:40] Christopher David: dot
[55:41] Christopher David: dot
[55:42] Christopher David: dot
[55:43] Christopher David: dot
[55:44] Christopher David: dot
[55:45] Christopher David: dot
[55:46] Christopher David: dot
[55:47] Christopher David: dot
[55:48] Christopher David: dot
[55:49] Christopher David: dot
[55:50] Christopher David: dot
[55:51] Christopher David: dot
[55:52] Christopher David: dot
[55:53] Christopher David: dot
[55:54] Christopher David: dot
[55:56] Christopher David: dot
[55:59] Christopher David: dot
[56:01] Christopher David: dot
[56:26] Christopher David: dot
[56:31] Christopher David: dot
[56:33] Christopher David: dot
[56:35] Christopher David: dot
[56:36] Christopher David: dot
[56:37] Christopher David: dot
[56:38] Christopher David: dot
[56:39] Christopher David: dot
[56:40] Christopher David: dot
[56:41] Christopher David: dot
[56:42] Christopher David: dot
[56:43] Christopher David: dot
[56:44] Christopher David: dot
[56:45] Christopher David: dot
[56:46] Christopher David: dot
[56:47] Christopher David: dot
[56:48] Christopher David: dot
[56:49] Christopher David: dot
[56:51] Christopher David: dot
[56:52] Christopher David: dot
[56:53] Christopher David: dot
[56:57] Christopher David: dot
[56:59] Christopher David: dot
[57:00] Christopher David: dot
[57:01] Christopher David: dot
[57:03] Christopher David: dot
[57:05] Christopher David: dot
[57:26] Christopher David: dot
[57:29] Christopher David: dot
[57:31] Christopher David: dot
[57:33] Christopher David: dot
[57:35] Christopher David: dot
[57:37] Christopher David: dot
[57:38] Christopher David: dot
[57:39] Christopher David: dot
[57:40] Christopher David: dot
[57:41] Christopher David: dot
[57:42] Christopher David: dot
[57:43] Christopher David: dot
[57:44] Christopher David: dot
[57:45] Christopher David: dot
[57:46] Christopher David: dot
[57:47] Christopher David: dot
[57:48] Christopher David: dot
[57:49] Christopher David: dot
[57:50] Christopher David: dot
[57:51] Christopher David: dot
[57:53] Christopher David: dot
[57:54] Christopher David: dot
[57:56] Christopher David: dot
[58:01] Christopher David: dot
[58:03] Christopher David: dot
[58:05] Christopher David: dot
[58:06] Christopher David: dot
[58:07] Christopher David: dot
[58:08] Christopher David: dot
[58:10] Christopher David: dot
[58:11] Christopher David: dot
[58:12] Christopher David: dot
[58:13] Christopher David: dot
[58:14] Christopher David: dot
[58:15] Christopher David: dot
[58:16] Christopher David: dot
[58:17] Christopher David: dot
[58:18] Christopher David: dot
[58:19] Christopher David: dot
[58:20] Christopher David: dot
[58:21] Christopher David: dot
[58:23] Christopher David: dot
[58:27] Christopher David: dot
[58:29] Christopher David: dot
[58:31] Christopher David: dot
[58:33] Christopher David: dot
[58:35] Christopher David: dot
[58:36] Christopher David: dot
[58:37] Christopher David: dot
[58:38] Christopher David: dot
[58:39] Christopher David: dot
[58:40] Christopher David: dot
[58:41] Christopher David: dot
[58:42] Christopher David: dot
[58:43] Christopher David: dot
[58:44] Christopher David: dot
[58:45] Christopher David: dot
[58:46] Christopher David: dot
[58:47] Christopher David: dot
[58:48] Christopher David: dot
[58:49] Christopher David: dot
[58:51] Christopher David: dot
[58:52] Christopher David: dot
[58:53] Christopher David: dot
[58:57] Christopher David: dot
[58:59] Christopher David: dot
[59:01] Christopher David: dot
[59:03] Christopher David: dot
[59:05] Christopher David: dot
[59:06] Christopher David: dot
[59:07] Christopher David: dot
[59:08] Christopher David: dot
[59:09] Christopher David: dot
[59:10] Christopher David: dot
[59:11] Christopher David: dot
[59:12] Christopher David: dot
[59:13] Christopher David: dot
[59:14] Christopher David: dot
[59:15] Christopher David: dot
[59:16] Christopher David: dot
[59:17] Christopher David: dot
[59:18] Christopher David: dot
[59:19] Christopher David: dot
[59:20] Christopher David: dot
[59:21] Christopher David: dot
[59:23] Christopher David: dot
[59:26] Christopher David: dot
[59:29] Christopher David: dot
[59:31] Christopher David: dot
[59:33] Christopher David: dot
[59:35] Christopher David: dot
[59:36] Christopher David: dot
[59:37] Christopher David: dot
[59:38] Christopher David: dot
[59:39] Christopher David: dot
[59:40] Christopher David: dot
[59:41] Christopher David: dot
[59:42] Christopher David: dot
[59:43] Christopher David: dot
[59:44] Christopher David: dot
[59:45] Christopher David: dot
[59:46] Christopher David: dot
[59:47] Christopher David: dot
[59:48] Christopher David: dot
[59:49] Christopher David: dot
[59:50] Christopher David: dot
[59:51] Christopher David: dot
[59:52] Christopher David: dot
[59:53] Christopher David: dot
[59:54] Christopher David: dot
[59:56] Christopher David: dot
[59:59] Christopher David: dot
[01:00:01] Christopher David: dot
[01:00:03] Christopher David: dot
[01:00:05] Christopher David: dot
[01:00:06] Christopher David: dot
[01:00:07] Christopher David: dot
[01:00:08] Christopher David: dot
[01:00:09] Christopher David: dot
[01:00:10] Christopher David: dot
[01:00:11] Christopher David: dot
[01:00:12] Christopher David: dot
[01:00:13] Christopher David: dot
[01:00:14] Christopher David: dot
[01:00:15] Christopher David: dot
[01:00:16] Christopher David: dot
[01:00:17] Christopher David: dot
[01:00:18] Christopher David: dot
[01:00:19] Christopher David: dot
[01:00:20] Christopher David: dot
[01:00:21] Christopher David: dot
[01:00:22] Christopher David: dot
[01:00:23] Christopher David: dot
[01:00:24] Christopher David: dot
[59:59] Christopher David: I'm going to do this.
[01:00:01] Christopher David: I'm going to do this.
[01:00:03] Christopher David: I'm going to do this.
[01:00:05] Christopher David: I'm going to do this.
[01:00:07] Christopher David: I'm going to do this.
[01:00:09] Christopher David: I'm going to do this.
[01:00:11] Christopher David: I'm going to do this.
[01:00:13] Christopher David: I'm going to do this.
[01:00:15] Christopher David: I'm going to do this.
[01:00:17] Christopher David: I'm going to do this.
[01:00:19] Christopher David: I'm going to do this.
[01:00:21] Christopher David: I'm going to do this.
[01:00:23] Christopher David: I'm going to do this.
[01:00:25] Christopher David: I'm going to do this.
[01:00:27] Christopher David: I apologize for the confusion.
[01:00:37] Christopher David: Okay.
[01:00:41] Christopher David: Let's try paying more attention.
[01:00:43] Christopher David: Return of response that updates only the plugin grid.
[01:00:47] Christopher David: Do not include the form in this response.
[01:00:49] Christopher David: That's what they just have.
[01:00:53] Christopher David: That's what I just have.
[01:00:57] Christopher David: Modify the HTML attributes in the plugin upload form.
[01:01:03] Christopher David: Set HX target to update the plugin grid.
[01:01:09] Christopher David: Use HX swap with the value of outer HTML.
[01:01:15] Christopher David: That seems logical.
[01:01:19] Christopher David: Targeting the plugin grid wrapper.
[01:01:27] Christopher David: Add JavaScript to reset the form fields after successful submission.
[01:01:39] Christopher David: The form is not going to be re-rendered only this.
[01:01:45] Christopher David: Maybe that's okay.
[01:01:49] Christopher David: Let's see if it works.
[01:02:03] Christopher David: Refresh.
[01:02:16] Christopher David: We got that.
[01:02:17] Christopher David: We don't have a success message.
[01:02:19] Christopher David: Can I read properties of undefined?
[01:02:21] Christopher David: ID.
[01:02:23] Christopher David: Where?
[01:02:27] Christopher David: P-
[01:02:29] Christopher David: Event detail request can fig for my B.
[01:02:43] Christopher David: What the hell is that?
[01:02:49] Christopher David: Oh my gosh.
[01:02:53] Christopher David: It's basically giving up on this.
[01:02:59] Christopher David: Because we're not re-rendering that right.
[01:03:17] Christopher David: What the hell is this event supposed to be?
[01:03:21] Christopher David: It's expecting there to be event.detail.requestconfig.form.
[01:03:49] Christopher David: There's no request to fig.
[01:04:09] Christopher David: Does not have a form for him.
[01:04:15] Christopher David: It's pees-lany.
[01:04:23] Christopher David: Copy is off, I think.
[01:04:43] Christopher David: Figured out.
[01:05:03] Christopher David: Getting into the gut smell.
[01:05:05] Christopher David: Let's try it.
[01:05:11] Christopher David: I'll pretend.
[01:05:17] Christopher David: I'll pretend to you.
[01:05:21] Christopher David: Okay.
[01:05:41] Christopher David: It worked except it shows it twice.
[01:06:11] Christopher David: Yeah.
[01:06:42] Christopher David: Okay.
[01:06:44] Christopher David: Now it doesn't reset the form.
[01:06:47] Christopher David: Fuck.
[01:06:52] Christopher David: Works except doesn't reset the form fields.
[01:06:55] Christopher David: You're fucking fucker.
[01:07:11] Christopher David: Okay.
[01:07:27] Christopher David: I'm going to be guessing that there's a better way to do this.
[01:07:35] Christopher David: That's okay.
[01:07:45] Christopher David: We got the behavior we were looking for.
[01:07:57] Christopher David: Cool.
[01:07:58] Christopher David: Okay.
[01:08:01] Christopher David: All flying.
[01:08:03] Christopher David: We've got a plug-in registry.
[01:08:08] Christopher David: Then we just need to start thinking about how we actually build up agents from these plugins.
[01:08:16] Christopher David: Well, feeling good about HTML.
[01:08:18] Christopher David: I feel good about the plugins.