Transcription: OpenAgents Episode 068 - URL Extractor Plugin
June 9, 2026 ยท View on GitHub
Source: https://twitter.com/OpenAgentsInc/status/1753092771206885743 Wiki source: https://raw.githubusercontent.com/wiki/OpenAgentsInc/openagents/Video-Series.md Media title: OpenAgents - Episode 068: URL Extractor Plugin We write our first real WASM plugin... Upload date: 20240201 Transcription model: mlx-whisper/mlx-community/whisper-tiny Generated at: 2026-06-01T19:09:12Z
Machine-generated transcript. Review speaker labels and wording before using this as quote-grade source material.
[00:00] Christopher David: Let's create our first plugin. This is going to be a very simple plugin that's going to take a string text input and
[00:09] Christopher David: Return a list and array of all of the URLs in that text input. Very simple
[00:17] Christopher David: String manipulation and
[00:19] Christopher David: This video we're going to follow the
[00:23] Christopher David: Extism quick start
[00:25] Christopher David: I'm going to build my plugin in rust
[00:28] Christopher David: So this video can also serve as sort of the intro for anyone who's new and wants to learn how to create a plugin
[00:34] Christopher David: You can watch me do this process. They've got you know JavaScript go. You can pick the language at your most familiar with
[00:42] Christopher David: I'm picking rest which I'm not adds familiar as JavaScript, but it'll be
[00:50] Christopher David: fun to
[00:52] Christopher David: Go through this
[00:55] Christopher David: So I've got a basic rust installed
[00:57] Christopher David: By the way, you can see the dot files for my current setup of
[01:03] Christopher David: Neil Vam and Kitty and stuff
[01:07] Christopher David: At the February one
[01:10] Christopher David: Come out of my dot files on my personal repo there if you want to get my same setup
[01:16] Christopher David: Okay
[01:17] Christopher David: Let's get started
[01:19] Christopher David: So on the extism.org website under quick start right up plugin. I'm selecting rust and we're going to step through this together
[01:26] Christopher David: So
[01:30] Christopher David: Let's do cargo new
[01:33] Christopher David: Dash gosh lib
[01:38] Christopher David: And I think I want to call this like plugin
[01:43] Christopher David: URL extractor
[01:49] Christopher David: I'm going to commit every step of this
[01:59] Christopher David: I'm going to put this in the open agent repo
[02:03] Christopher David: But I would invite you to
[02:07] Christopher David: I'm going to put this in the open agent repo
[02:11] Christopher David: But I would invite you to
[02:14] Christopher David: If you're building your own plugin put it in your own personal repo
[02:20] Christopher David: Let's see
[02:23] Christopher David: Let's make a new repo in here
[02:32] Christopher David: Public
[02:37] Christopher David: I'll figure out the appropriate license for this later something that's maximally permissive
[02:42] Christopher David: Plug in your own extractor
[03:12] Christopher David: I'll just paste in what I actually did there
[03:18] Christopher David: Oops
[03:36] Christopher David: All right, we're off to the races
[03:38] Christopher David: All right, we generated a new lib project with cargo
[03:44] Christopher David: Let's add the library from crates.io
[03:48] Christopher David: Paste
[03:52] Christopher David: Commit
[03:55] Christopher David: No
[03:58] Christopher David: Still learning my
[04:02] Christopher David: I've got the mode active on the terminal
[04:08] Christopher David: I'm going to add the code
[04:12] Christopher David: Cargo add x isn't be decay. Yes
[04:15] Christopher David: All right
[04:17] Christopher David: Change your cargo.com to set the crate type to see
[04:21] Christopher David: This instructs the compiler to produce a dynamic library which for our target will be a wasm binary
[04:27] Christopher David: All right, let's open up the whole thing
[04:31] Christopher David: In Vim, can I do a fuzzy find here?
[04:34] Christopher David: Okay, I broke something
[04:43] Christopher David: Making sure that it caps off on
[04:47] Christopher David: What I do
[04:49] Christopher David: Cargo to the top
[04:51] Christopher David: Okay, so let's grab this
[04:55] Christopher David: This
[05:03] Christopher David: So that's
[05:06] Christopher David: Great type
[05:09] Christopher David: See, dial in and I'm being a little more anal than I need to be on the commits in parts so we can have future rust plugins just fork this repo that would be nice
[05:20] Christopher David: Okay, create an export
[05:24] Christopher David: The primary means of interacting with this plugin is an export function that can be called by the outside world
[05:29] Christopher David: Let's create a simple greeting plugin
[05:32] Christopher David: The plugin Fn macro wires this function to ex-tism and exports it using the name greet
[05:40] Christopher David: Okay
[05:42] Christopher David: Let's put that in source
[05:44] Christopher David: I'm guessing we should maybe delete all of the rest of this
[05:51] Christopher David: Okay, we can compile to the wasm32 unknown unknowns since we don't need to make any sys calls
[06:13] Christopher David: If this fails make sure you've added this target to rust
[06:24] Christopher David: Alright, let's give it a try
[06:27] Christopher David: Let's pop over to a new console thing there, paste that in
[06:33] Christopher David: See what happens
[06:36] Christopher David: Can't find in this scoop
[06:43] Christopher David: Alright, a computer maybe any of that
[06:59] Christopher David: Okay, did that make any
[07:05] Christopher David: Changes, let's just commit the lib change
[07:09] Christopher David: We'll call that
[07:13] Christopher David: Demo export greet
[07:21] Christopher David: Make sure that looks nice right there
[07:28] Christopher David: Okay, this will put your compiled wasm in target wasm32 unknown slash debug
[07:34] Christopher David: We can now test it using the ex-tism CLI's run command
[07:38] Christopher David: I do not yet have this installed I don't think
[07:42] Christopher David: But let's just confirm
[07:47] Christopher David: Oops, not my wasm plugin
[07:51] Christopher David: Maybe I haven't done
[07:54] Christopher David: Plug in your extractor maybe
[07:57] Christopher David: Or is it called some emails?
[08:08] Christopher David: Plug in, okay, underscore
[08:11] Christopher David: Okay, let's just go to the list
[08:16] Christopher David: Okay, let's just go to the list
[08:21] Christopher David: Okay, let's just go to the list
[08:25] Christopher David: Okay, let's just go to the list
[08:29] Christopher David: Okay, let's just go to the list
[08:33] Christopher David: Okay, let's just go to the list
[08:37] Christopher David: Okay, let's just go to the list
[08:39] Christopher David: Okay, let's just go to the list
[08:42] Christopher David: Okay, let's just go to the list
[08:46] Christopher David: Okay, let's just go to the list
[08:49] Christopher David: Okay, let's just go to the list
[08:52] Christopher David: Okay, let's just go to the list
[08:55] Christopher David: Okay, let's just go to the list
[08:58] Christopher David: Okay, let's just go to the list
[09:01] Christopher David: Okay, let's just go to the list
[09:05] Christopher David: Okay, let's just go to the list
[09:09] Christopher David: Okay, let's just go to the list
[09:12] Christopher David: Okay, let's just go to the list
[09:16] Christopher David: Okay, let's just go to the list
[09:19] Christopher David: Okay, let's just go to the list
[09:22] Christopher David: Okay, let's just go to the list
[09:25] Christopher David: Okay, let's just go to the list
[09:28] Christopher David: Okay, let's just go to the list
[09:32] Christopher David: Okay, let's just go to the list
[09:35] Christopher David: Okay, let's just go to the list
[09:37] Christopher David: Okay, let's just go to the list
[09:40] Christopher David: Okay, let's just go to the list
[09:42] Christopher David: Okay, let's just go to the list
[09:46] Christopher David: Okay, let's just go to the list
[09:49] Christopher David: Okay, let's just go to the list
[09:52] Christopher David: Okay, let's just go to the list
[09:55] Christopher David: Okay, let's just go to the list
[09:58] Christopher David: Okay, let's just go to the list
[10:01] Christopher David: Okay, let's just go to the list
[10:04] Christopher David: Okay, let's just go to the list
[10:07] Christopher David: Okay, let's just go to the list
[10:10] Christopher David: Okay, let's just go to the list
[10:12] Christopher David: Okay, let's just go to the list
[10:15] Christopher David: Okay, let's just go to the list
[10:18] Christopher David: Okay, let's just go to the list
[10:21] Christopher David: Okay, let's just go to the list
[10:24] Christopher David: Okay, let's just go to the list
[10:27] Christopher David: Okay, let's just go to the list
[10:30] Christopher David: Okay, let's just go to the list
[10:33] Christopher David: Okay, let's just go to the list
[10:35] Christopher David: Okay, let's just go to the list
[10:37] Christopher David: Okay, let's just go to the list
[10:40] Christopher David: Okay, let's just go to the list
[10:42] Christopher David: Okay, let's just go to the list
[10:46] Christopher David: Okay, let's just go to the list
[10:49] Christopher David: Okay, let's just go to the list
[10:52] Christopher David: Okay, let's just go to the list
[10:55] Christopher David: Okay, let's just go to the list
[10:58] Christopher David: Okay, let's just go to the list
[11:01] Christopher David: Okay, let's just go to the list
[11:04] Christopher David: Okay, let's just go to the list
[11:07] Christopher David: Okay, let's just go to the list
[11:11] Christopher David: Okay, let's just go to the list
[11:14] Christopher David: Okay, let's just go to the list
[11:17] Christopher David: Okay, let's just go to the list
[11:20] Christopher David: Okay, let's just go to the list
[11:23] Christopher David: Okay, let's just go to the list
[11:26] Christopher David: Okay, let's just go to the list
[11:29] Christopher David: Okay, let's just go to the list
[11:33] Christopher David: Okay, let's just go to the list
[11:34] Christopher David: Okay, let's just go to the list
[11:38] Christopher David: Okay, let's just go to the list
[11:41] Christopher David: Okay, let's just go to the list
[11:44] Christopher David: Okay, let's just go to the list
[11:47] Christopher David: Okay, let's just go to the list
[11:50] Christopher David: Okay, let's just go to the list
[11:53] Christopher David: Okay, let's just go to the list
[11:56] Christopher David: Okay, let's just go to the list
[11:59] Christopher David: Okay, let's just go to the list
[12:01] Christopher David: Okay, let's just go to the list
[12:05] Christopher David: Okay, let's just go to the list
[12:08] Christopher David: Okay, let's just go to the list
[12:11] Christopher David: Okay, let's just go to the list
[12:14] Christopher David: Okay, let's just go to the list
[12:17] Christopher David: Okay, let's just go to the list
[12:20] Christopher David: Okay, let's just go to the list
[12:23] Christopher David: Okay, let's just go to the list
[12:26] Christopher David: Okay, let's just go to the list
[12:28] Christopher David: Okay, let's just go to the list
[12:32] Christopher David: Okay, let's just go to the list
[12:35] Christopher David: Okay, let's just go to the list
[12:38] Christopher David: Okay, let's just go to the list
[12:41] Christopher David: Okay, let's just go to the list
[12:44] Christopher David: Okay, let's just go to the list
[12:47] Christopher David: Okay, let's just go to the list
[12:50] Christopher David: Okay, let's just go to the list
[12:53] Christopher David: Okay, let's just go to the list
[12:55] Christopher David: Okay, let's just go to the list
[12:59] Christopher David: Okay, let's just go to the list
[13:02] Christopher David: Okay, let's just go to the list
[13:05] Christopher David: Okay, let's just go to the list
[13:08] Christopher David: Okay, let's just go to the list
[13:11] Christopher David: Okay, let's just go to the list
[13:14] Christopher David: Okay, let's just go to the list
[13:17] Christopher David: Okay, let's just go to the list
[13:20] Christopher David: Okay, let's just go to the list
[13:22] Christopher David: Okay, let's just go to the list
[13:25] Christopher David: Okay, let's just go to the list
[13:27] Christopher David: Okay, let's just go to the list
[13:31] Christopher David: Okay, let's just go to the list
[13:34] Christopher David: Okay, let's just go to the list
[13:37] Christopher David: Okay, let's just go to the list
[13:40] Christopher David: Okay, let's just go to the list
[13:43] Christopher David: Okay, let's just go to the list
[13:46] Christopher David: Okay, let's just go to the list
[13:49] Christopher David: Okay, let's just go to the list
[13:52] Christopher David: Okay, let's just go to the list
[13:55] Christopher David: Okay, let's just go to the list
[13:57] Christopher David: Okay, let's just go to the list
[14:00] Christopher David: Okay, let's just go to the list
[14:03] Christopher David: Okay, let's just go to the list
[14:05] Christopher David: Okay, let's just go to the list
[14:08] Christopher David: Okay, let's just go to the list
[14:11] Christopher David: Okay, let's just go to the list
[14:14] Christopher David: Okay, let's just go to the list
[14:17] Christopher David: Okay, let's just go to the list
[14:20] Christopher David: So this is returning a vector of strings
[14:23] Christopher David: And I just don't know if I don't work
[14:26] Christopher David: But it's I guess worth a try
[14:28] Christopher David: Please know that you need to add the reggae's
[14:30] Christopher David: Create to your cargo to accommodate the dependencies to use the reggae's type
[14:38] Christopher David: And then so at first
[14:41] Christopher David: Point of curiosity is
[14:49] Christopher David: Okay, let's just go to the list
[14:53] Christopher David: Okay, let's just go to the list
[14:56] Christopher David: Okay, let's just go to the list
[14:59] Christopher David: Okay, let's just go to the list
[15:02] Christopher David: Okay, let's just go to the list
[15:05] Christopher David: Okay, let's just go to the list
[15:08] Christopher David: Okay, let's just go to the list
[15:11] Christopher David: Okay, let's just go to the list
[15:14] Christopher David: Okay, let's just go to the list
[15:17] Christopher David: And then let's say I didn't pay that any of you
[15:25] Christopher David: So let's try what if I do this this oops?
[15:38] Christopher David: No
[15:46] Christopher David: Okay, now I got some squirrely brace squirrely errors here
[15:59] Christopher David: What's going on there?
[16:05] Christopher David: Oh, maybe Rustan Lyser just doesn't accept the macro
[16:10] Christopher David: This is like a barely configured Neo of him for Rust
[16:13] Christopher David: So I'm sure there's something
[16:18] Christopher David: Okay, I guess let's try this
[16:28] Christopher David: Let's try it
[16:30] Christopher David: So let's just go back to the command line
[16:34] Christopher David: And see if this compiles will run the same command we did previously
[16:43] Christopher David: Okay, let's just go back to the command line
[16:48] Christopher David: Cargo build target wasm 32, no, no, no
[16:52] Christopher David: So question one is does it build and it does not build
[16:58] Christopher David: The trade to bikes is not implemented for a veck string of strength
[17:03] Christopher David: So we probably need this to be an actual string
[17:06] Christopher David: And what I'm going to do here is see if I may want to copy this
[17:14] Christopher David: I'd like to ask it questions about the
[17:25] Christopher David: Function that it wrote hopefully gives me the same thing
[17:30] Christopher David: Okay, so I'm going to stop it before it terminates raffle
[17:36] Christopher David: I got this error
[17:39] Christopher David: I think we may be need to convert the URLs
[17:45] Christopher David: I don't have to a string that we parse on the other side
[17:56] Christopher David: The area you encountered is due to the fact that the x is a framework
[18:00] Christopher David: Expects the output of a plug-in function to be a type that implements the two bytes
[18:03] Christopher David: Trate and veck string does not directly implement the string
[18:07] Christopher David: To resolve this you can serialize the veck string containing the URLs and was trained format
[18:11] Christopher David: Yeah, this requires you to necessarily serialization library like a surrogate on
[18:16] Christopher David: Additionally, the error related to fn error indicates that this type is not available
[18:21] Christopher David: You should use error from the x isn't pbk instead
[18:24] Christopher David: Here's a revised code
[18:28] Christopher David: Okay, let's give it a try
[18:33] Christopher David: I think I have
[18:38] Christopher David: Do I need to cargo add surrogate on?
[18:43] Christopher David: And then I think I have
[18:53] Christopher David: Do I need to cargo add surrogate on?
[19:03] Christopher David: Okay, so cargo add surrogate cargo add surrogate on?
[19:13] Christopher David: Okay, let's try building this
[19:17] Christopher David: Okay, let's try building this
[19:24] Christopher David: Cuz imagine we panicked
[19:32] Christopher David: So one thing that I found is that
[19:40] Christopher David: Okay, let's try building this
[19:45] Christopher David: Cuz imagine we panicked
[19:49] Christopher David: So one thing that I found is that
[19:57] Christopher David: ChatectmTens to
[19:59] Christopher David: after making a bunch of these errors.
[20:02] Christopher David: Like I have to copy paste continuously,
[20:04] Christopher David: eventually it'll maybe convert into the right thing.
[20:09] Christopher David: The air message indicates that plugin FN attributes
[20:11] Christopher David: expects a function that returns X is a BDK FN result,
[20:15] Christopher David: but the modified extractor, yeah, why did do that?
[20:24] Christopher David: FN result, VEC of U8.
[20:25] Christopher David: I don't know that I wanted to return bytes.
[20:30] Christopher David: Can you just return a string?
[20:33] Christopher David: Didn't we have it returning a string before?
[20:45] Christopher David: Yeah, you are complicating it with the into bytes.
[20:51] Christopher David: Just return a string.
[20:55] Christopher David: You're right.
[21:00] Christopher David: What? I know more than you.
[21:03] Christopher David: About Russ, I'm just a new.
[21:05] Christopher David: To simplify the implementation, we can return a JSON string directly
[21:10] Christopher David: instead of converting into bytes.
[21:12] Christopher David: Well, thanks.
[21:14] Christopher David: I'll get out as well.
[21:25] Christopher David: I don't like these squigglies.
[21:37] Christopher David: Why do I have these squigglies?
[21:43] Christopher David: Bro.
[21:55] Christopher David: I don't think I can return them.
[22:00] Christopher David: I don't think I can return them.
[22:05] Christopher David: I don't think I can return them.
[22:08] Christopher David: I don't think I can return them.
[22:11] Christopher David: I don't think I can return them.
[22:13] Christopher David: I don't think I can return them.
[22:16] Christopher David: I don't think I can return them.
[22:18] Christopher David: I don't think I can return them.
[22:20] Christopher David: I don't think I can return them.
[22:22] Christopher David: I don't think I can return them.
[22:24] Christopher David: You got the errors below.
[22:29] Christopher David: Just give me the most basic possible function.
[22:38] Christopher David: Taking a string and returning a string of the serialized array of URLs.
[22:53] Christopher David: I don't think I can return them.
[22:58] Christopher David: I don't think I can return them.
[23:03] Christopher David: I don't think I can return them.
[23:08] Christopher David: I don't think I can return them.
[23:13] Christopher David: I don't think I can return them.
[23:17] Christopher David: I don't think I can return them.
[23:21] Christopher David: Copy-based powers.
[23:25] Christopher David: Let's try it one more time.
[23:30] Christopher David: Finished.
[23:32] Christopher David: All right.
[23:37] Christopher David: Okay. Let's test it out.
[23:50] Christopher David: I'm going to modify this command to call our new thing.
[23:57] Christopher David: It's called plugin URL extractor.
[24:05] Christopher David: And pass in some Lorum,
[24:07] Christopher David: Ipsum text that contains two URLs.
[24:13] Christopher David: Oops.
[24:20] Christopher David: Yes, yes, yes.
[24:30] Christopher David: Just giving.
[24:45] Christopher David: Copy-paste.
[24:49] Christopher David: Okay.
[24:57] Christopher David: Our function works.
[25:02] Christopher David: Our function works.
[25:04] Christopher David: Now there's probably some edge cases that it messes up on.
[25:07] Christopher David: I don't know.
[25:09] Christopher David: The reggae's might not be perfect.
[25:12] Christopher David: I don't know exactly.
[25:14] Christopher David: We'll probably need to do some JSON parsing thing.
[25:17] Christopher David: But look, if you've got a batch of wasm that you can drop into any application
[25:25] Christopher David: and know that if you pass it a thing, you get back this.
[25:29] Christopher David: Nice like a nice thing.
[25:31] Christopher David: That's one less thing that you need to write.
[25:34] Christopher David: Okay.
[25:36] Christopher David: Let's commit this.
[25:48] Christopher David: Initial extraction works.
[25:57] Christopher David: So next I want to upload this.
[26:02] Christopher David: I guess to our interface.
[26:05] Christopher David: Okay.
[26:12] Christopher David: I don't know if I can use the debug wasm or should we bundle it for release.
[26:25] Christopher David: Thanks.
[26:30] Christopher David: I did this tutorial.
[26:37] Christopher David: Should I bundle it for release or can I use the debug wasm file?
[26:44] Christopher David: I already made.
[26:54] Christopher David: Okay.
[26:55] Christopher David: Cargo build release target.
[27:05] Christopher David: Let's see what that does.
[27:12] Christopher David: What happened?
[27:15] Christopher David: Copy.
[27:19] Christopher David: Paste.
[27:23] Christopher David: Test that version of it.
[27:27] Christopher David: Yeah, that also worked.
[27:29] Christopher David: Okay.
[27:30] Christopher David: And then out of curiosity, let's go into our target.
[27:45] Christopher David: I was wondering if there's like a size difference between the two.
[27:49] Christopher David: So that the debug version is 24 megabytes.
[27:59] Christopher David: That's huge.
[28:02] Christopher David: And then the release version is three megabytes, which is still huge relative to the function that we're passing in.
[28:09] Christopher David: Binari size may be something we need to wrestle with at some point.
[28:12] Christopher David: I know you can get smaller binaries if you use some like lighter frame.
[28:16] Christopher David: If you use a frame works from go or whatever.
[28:19] Christopher David: Fortunately, it shouldn't matter too much because these are going to be loaded by agents.
[28:26] Christopher David: Server side.
[28:27] Christopher David: I don't know.
[28:28] Christopher David: We'll experiment with that later.
[28:30] Christopher David: Okay.
[28:31] Christopher David: Let's take our new binari and upload it.
[28:37] Christopher David: I did the same thing I did with that kind of demo wasm video.
[28:41] Christopher David: We did a number of episodes again.
[28:44] Christopher David: Let's see here plug in URL extractor.
[28:48] Christopher David: And I'm going to make a release for it.
[28:53] Christopher David: Just so I get a persistent URL.
[28:55] Christopher David: And I'm going to call this be oh.
[28:59] Christopher David: First of all, let's make sure that we have all of that pushed up.
[29:12] Christopher David: Hello.
[29:15] Christopher David: Everything up to date.
[29:21] Christopher David: All right, call this be oh.
[29:22] Christopher David: One.
[29:30] Christopher David: Give it a string.
[29:37] Christopher David: Return is string.
[29:40] Christopher David: How do I even describe it?
[29:43] Christopher David: It's like a.
[29:51] Christopher David: Array string of URLs.
[30:01] Christopher David: How would you describe its current functionality for release notes?
[30:09] Christopher David: Is this accurate?
[30:26] Christopher David: Okay, Chad, GPD.
[30:28] Christopher David: We're going to try.
[30:33] Christopher David: Publish.
[30:35] Christopher David: Oh no.
[30:38] Christopher David: Okay, there's something I have to do here.
[30:42] Christopher David: Oh, maybe I should actually drop the money I released in there.
[30:48] Christopher David: All right, so documents.
[30:53] Christopher David: I need a shortcut for code.
[30:57] Christopher David: So you got plug in URL extractor.
[30:59] Christopher David: Target.
[31:01] Christopher David: Waw isn't there doing a release.
[31:07] Christopher David: Plug in URL extractor.
[31:11] Christopher David: Oh, I see.
[31:25] Christopher David: That's right.
[31:26] Christopher David: Okay, VO1.
[31:30] Christopher David: Generate release notes.
[31:33] Christopher David: Full change log.
[31:36] Christopher David: Okay.
[31:43] Christopher David: Oh yeah.
[31:46] Christopher David: We've released a plug in everybody.
[31:48] Christopher David: This, this, this might actually freaking work.
[31:50] Christopher David: Now let's go test it.
[31:53] Christopher David: I think.
[31:58] Christopher David: I think.
[32:01] Christopher David: I'll copy a link to this.
[32:08] Christopher David: And if our code from previous videos is working,
[32:14] Christopher David: I should be able to create a plug in.
[32:18] Christopher David: Drop in the plugin URL.
[32:22] Christopher David: Type URL extractor.
[32:28] Christopher David: Let's use that same description.
[32:33] Christopher David: No fee.
[32:34] Christopher David: Oh, I'll charge you guys for this one.
[32:36] Christopher David: Create.
[32:37] Christopher David: Please work.
[32:38] Christopher David: Please work.
[32:43] Christopher David: Look at this, everybody.
[32:44] Christopher David: Just, just look at it.
[32:46] Christopher David: Just look at it.
[32:47] Christopher David: Ooh.
[32:48] Christopher David: Okay.
[32:50] Christopher David: Let's inspect just so you can monitor free and causal bullshit.
[32:53] Christopher David: Okay, let's try dropping in the same thing we did over here.
[32:58] Christopher David: Laura, maybe some, oh no.
[33:02] Christopher David: Oh no.
[33:05] Christopher David: Vim mode.
[33:08] Christopher David: Vim mode.
[33:09] Christopher David: I'm just, maybe a new, sorry.
[33:12] Christopher David: Try try.
[33:13] Christopher David: Okay, ready?
[33:14] Christopher David: Yank to be under the line.
[33:20] Christopher David: Hell yeah.
[33:21] Christopher David: Okay, let's remove the strings.
[33:28] Christopher David: The moment of truth.
[33:31] Christopher David: Ah.
[33:32] Christopher David: Okay.
[33:34] Christopher David: I error 500.
[33:35] Christopher David: Let's see what happened.
[33:48] Christopher David: Server error.
[33:50] Christopher David: Give me one second.
[33:58] Christopher David: Oh, I know it's wrong.
[34:01] Christopher David: We are, our open agents.
[34:07] Christopher David: Current implementation is only calling the count underscore vowels.
[34:15] Christopher David: Um,
[34:17] Christopher David: function.
[34:20] Christopher David: Let's quickly solve this as quickly as we can.
[34:25] Christopher David: Watch this.
[34:26] Christopher David: See the open agents.
[34:28] Christopher David: Boom.
[34:29] Christopher David: Um.
[34:31] Christopher David: In plugin.
[34:39] Christopher David: I'll give you a little tour of this.
[34:42] Christopher David: So right now, a little shortcut that we took.
[34:46] Christopher David: Why does it do that?
[34:55] Christopher David: I'm not sure if we can do that.
[35:05] Christopher David: Right now when we're calling it.
[35:09] Christopher David: Somewhere we're hard coding count vowels.
[35:23] Christopher David: I'm guessing in the.
[35:26] Christopher David: Yeah, we need to change this.
[35:30] Christopher David: I mean, we need to get it from the input.
[35:32] Christopher David: I'm not going to change all that right now.
[35:33] Christopher David: For now, I'm just going to change this to.
[35:38] Christopher David: Make sure you get it right extract underscore URLs.
[35:52] Christopher David: Okay.
[35:57] Christopher David: Plug in extract URLs, not count vowels.
[36:01] Christopher David: Okay.
[36:06] Christopher David: Not quite ready to allow a full arbitrary.
[36:11] Christopher David: Walson code execution server side, not quite ready for that.
[36:15] Christopher David: Okay, so the reason this failed is my hard coded count vowels as the name of the function.
[36:20] Christopher David: We do have the ability in that parse function to to.
[36:28] Christopher David: See if I can search for that.
[36:33] Christopher David: Yeah, my.
[36:35] Christopher David: Vim config must be.
[36:38] Christopher David: Broken because it crashes when I do a fuzzy fine.
[36:43] Christopher David: But in our plugin model.
[36:48] Christopher David: You can get the names of the functions from the parse.
[36:51] Christopher David: So we got to just kind of connect that instead of hard coding.
[36:56] Christopher David: But that should be almost done deploying.
[36:59] Christopher David: Let's check out.
[37:01] Christopher David: Open agents.
[37:11] Christopher David: Let's really enjoy our we should be checking.
[37:15] Christopher David: Okay, well, let's try it again.
[37:18] Christopher David: I'm going to refresh the page.
[37:27] Christopher David: All right, the moment of truth.
[37:30] Christopher David: Boom.
[37:31] Christopher David: We did it.
[37:34] Christopher David: Okay, given a string input this plugin scans for and extract all URLs present in the text.
[37:41] Christopher David: It then returns a JSON encoded string representing and array of the extracted URLs.
[37:55] Christopher David: It works.
[37:56] Christopher David: Okay, and so what I'll do is I'll say I'll go over back to our issue.
[38:03] Christopher David: Oops for this.
[38:07] Christopher David: Plug in number one completed.
[38:14] Christopher David: Plug in number one completed here.
[38:35] Christopher David: And testable here.
[38:39] Christopher David: This URL works.
[38:41] Christopher David: It works until we hard code change the hard code thing.
[38:47] Christopher David: All right, we will build plugin number two in the next video.
[38:50] Christopher David: See you soon.