@@ -258,7 +258,7 @@ object agent extends ScalaJSModule with PublishModule with BunNpmModule {
258258// Example application module
259259// ---------------------------------------------------------------------------
260260
261- object examples extends BunNpmModule {
261+ trait ExampleModule extends BunNpmModule {
262262 def scalaVersion = agent.scalaVersion
263263 def scalaJSVersion = agent.scalaJSVersion
264264
@@ -280,22 +280,29 @@ object examples extends BunNpmModule {
280280 override def moduleDir = build.moduleDir
281281 override def sources = Task.Sources(moduleDir / "examples")
282282
283+ def exampleMainClass: String
284+
285+ override def mainClass = Task { Some(exampleMainClass) }
286+ }
287+
288+ object examples extends ExampleModule {
289+ def exampleMainClass = "com.tjclp.scalagent.examples.MacroToolExample"
290+
283291 // Available examples - add new ones here
284- val exampleClasses = Map(
285- "simple" -> "com.tjclp.scalagent.examples.SimpleQuery",
286- "macro" -> "com.tjclp.scalagent.examples.MacroToolExample",
287- "custom" -> "com.tjclp.scalagent.examples.CustomToolExample",
288- "hook" -> "com.tjclp.scalagent.examples.HookExample",
289- "permission" -> "com.tjclp.scalagent.examples.PermissionExample",
290- "session" -> "com.tjclp.scalagent.examples.SessionExample",
291- // New examples for recent features
292- "structured" -> "com.tjclp.scalagent.examples.StructuredOutputExample",
293- "subagent" -> "com.tjclp.scalagent.examples.SubagentExample",
294- "plugin" -> "com.tjclp.scalagent.examples.PluginExample",
295- "prompt" -> "com.tjclp.scalagent.examples.SystemPromptExample",
296- "command" -> "com.tjclp.scalagent.examples.SlashCommandExample",
297- "a2a" -> "com.tjclp.scalagent.examples.A2AExample",
298- "agent-hooks" -> "com.tjclp.scalagent.examples.AgentHooksExample"
292+ val exampleCommands = Map(
293+ "simple" -> "examples.simple.run",
294+ "macro" -> "examples.run",
295+ "custom" -> "examples.custom.run",
296+ "hook" -> "examples.hook.run",
297+ "permission" -> "examples.permission.run",
298+ "session" -> "examples.session.run",
299+ "structured" -> "examples.structured.run",
300+ "subagent" -> "examples.subagent.run",
301+ "plugin" -> "examples.plugin.run",
302+ "prompt" -> "examples.prompt.run",
303+ "command" -> "examples.command.run",
304+ "a2a" -> "examples.a2a.run",
305+ "agent-hooks" -> "examples.agentHooks.run"
299306 )
300307
301308 private val defaultExample = "macro"
@@ -304,25 +311,64 @@ object examples extends BunNpmModule {
304311 def list() = Task.Command {
305312 println("Available examples:")
306313 println("-------------------")
307- exampleClasses .toSeq.sortBy(_._1).foreach { case (name, cls ) =>
308- println(s" $name -> $cls ")
314+ exampleCommands .toSeq.sortBy(_._1).foreach { case (name, command ) =>
315+ println(s" $name -> ./$command ")
309316 }
310317 println()
311318 println("Run with:")
312319 println(s" ./mill examples.run # runs '$defaultExample' by default")
313- println(" EXAMPLE=simple ./mill examples.run # run specific example")
314- println(" EXAMPLE=hook ./mill examples.run # run hook example")
320+ println(" ./mill examples.simple. run # run simple example")
321+ println(" ./mill examples.hook. run # run hook example")
315322 println()
316323 println("Or run the compiled JS directly:")
317324 println(" bun out/examples/fastLinkJS.dest/main.js")
318325 }
319326
320- // Dynamic mainClass based on environment or default
321- // Task.Input ensures this is re-evaluated each run
322- override def mainClass = Task.Input {
323- val example = Task.env.get("EXAMPLE").getOrElse(defaultExample)
324- val cls = exampleClasses.get(example)
325- if cls.isEmpty then println(s"Warning: Unknown example '$example', using '$defaultExample'")
326- cls.orElse(Some(exampleClasses(defaultExample)))
327+ object simple extends ExampleModule {
328+ def exampleMainClass = "com.tjclp.scalagent.examples.SimpleQuery"
329+ }
330+
331+ object custom extends ExampleModule {
332+ def exampleMainClass = "com.tjclp.scalagent.examples.CustomToolExample"
333+ }
334+
335+ object hook extends ExampleModule {
336+ def exampleMainClass = "com.tjclp.scalagent.examples.HookExample"
337+ }
338+
339+ object permission extends ExampleModule {
340+ def exampleMainClass = "com.tjclp.scalagent.examples.PermissionExample"
341+ }
342+
343+ object session extends ExampleModule {
344+ def exampleMainClass = "com.tjclp.scalagent.examples.SessionExample"
345+ }
346+
347+ object structured extends ExampleModule {
348+ def exampleMainClass = "com.tjclp.scalagent.examples.StructuredOutputExample"
349+ }
350+
351+ object subagent extends ExampleModule {
352+ def exampleMainClass = "com.tjclp.scalagent.examples.SubagentExample"
353+ }
354+
355+ object plugin extends ExampleModule {
356+ def exampleMainClass = "com.tjclp.scalagent.examples.PluginExample"
357+ }
358+
359+ object prompt extends ExampleModule {
360+ def exampleMainClass = "com.tjclp.scalagent.examples.SystemPromptExample"
361+ }
362+
363+ object command extends ExampleModule {
364+ def exampleMainClass = "com.tjclp.scalagent.examples.SlashCommandExample"
365+ }
366+
367+ object a2a extends ExampleModule {
368+ def exampleMainClass = "com.tjclp.scalagent.examples.A2AExample"
369+ }
370+
371+ object agentHooks extends ExampleModule {
372+ def exampleMainClass = "com.tjclp.scalagent.examples.AgentHooksExample"
327373 }
328374}
0 commit comments