0xkobold 0.4.3 โ†’ 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +226 -383
  2. package/dist/package.json +13 -4
  3. package/dist/src/agent/DraconicCapabilityRouter.js +556 -0
  4. package/dist/src/agent/DraconicCapabilityRouter.js.map +1 -0
  5. package/dist/src/agent/DraconicErrorClassifier.js +606 -0
  6. package/dist/src/agent/DraconicErrorClassifier.js.map +1 -0
  7. package/dist/src/agent/DraconicRunRegistry.js +460 -0
  8. package/dist/src/agent/DraconicRunRegistry.js.map +1 -0
  9. package/dist/src/agent/DraconicTokenPredictor.js +500 -0
  10. package/dist/src/agent/DraconicTokenPredictor.js.map +1 -0
  11. package/dist/src/agent/embedded-runner.js +3 -2
  12. package/dist/src/agent/embedded-runner.js.map +1 -1
  13. package/dist/src/cli/commands/doctor.js +199 -0
  14. package/dist/src/cli/commands/doctor.js.map +1 -0
  15. package/dist/src/cli/commands/migrate-from-openclaw.js +39 -0
  16. package/dist/src/cli/commands/migrate-from-openclaw.js.map +1 -0
  17. package/dist/src/cli/commands/migrate.js +6 -4
  18. package/dist/src/cli/commands/migrate.js.map +1 -1
  19. package/dist/src/cli/program.js +3 -1
  20. package/dist/src/cli/program.js.map +1 -1
  21. package/dist/src/config/unified-config.js +195 -0
  22. package/dist/src/config/unified-config.js.map +1 -0
  23. package/dist/src/cron/notifications.js +1 -1
  24. package/dist/src/cron/notifications.js.map +1 -1
  25. package/dist/src/cron/runner.js +9 -3
  26. package/dist/src/cron/runner.js.map +1 -1
  27. package/dist/src/event-bus/index.js +3 -1
  28. package/dist/src/event-bus/index.js.map +1 -1
  29. package/dist/src/extensions/community/draconic-messenger-wrapper.js +35 -0
  30. package/dist/src/extensions/community/draconic-messenger-wrapper.js.map +1 -0
  31. package/dist/src/extensions/community/draconic-subagents-wrapper.js +115 -0
  32. package/dist/src/extensions/community/draconic-subagents-wrapper.js.map +1 -0
  33. package/dist/src/extensions/core/compaction-safeguard-v2.js +95 -0
  34. package/dist/src/extensions/core/compaction-safeguard-v2.js.map +1 -0
  35. package/dist/src/extensions/core/compaction-safeguard.js +206 -137
  36. package/dist/src/extensions/core/compaction-safeguard.js.map +1 -1
  37. package/dist/src/extensions/core/config-extension.js +122 -0
  38. package/dist/src/extensions/core/config-extension.js.map +1 -0
  39. package/dist/src/extensions/core/draconic-hoard-extension.js +194 -0
  40. package/dist/src/extensions/core/draconic-hoard-extension.js.map +1 -0
  41. package/dist/src/extensions/core/draconic-lair-extension.js +146 -0
  42. package/dist/src/extensions/core/draconic-lair-extension.js.map +1 -0
  43. package/dist/src/extensions/core/draconic-safety-extension.js +402 -0
  44. package/dist/src/extensions/core/draconic-safety-extension.js.map +1 -0
  45. package/dist/src/extensions/core/ext-manager.js +40 -0
  46. package/dist/src/extensions/core/ext-manager.js.map +1 -0
  47. package/dist/src/extensions/core/gateway-extension.js +413 -624
  48. package/dist/src/extensions/core/gateway-extension.js.map +1 -1
  49. package/dist/src/extensions/core/generative-agents-extension.js +704 -0
  50. package/dist/src/extensions/core/generative-agents-extension.js.map +1 -0
  51. package/dist/src/extensions/core/memory-bootstrap-extension.js +279 -0
  52. package/dist/src/extensions/core/memory-bootstrap-extension.js.map +1 -0
  53. package/dist/src/extensions/core/ollama-extension.js +442 -0
  54. package/dist/src/extensions/core/ollama-extension.js.map +1 -0
  55. package/dist/src/extensions/core/ollama-router-extension.js +34 -93
  56. package/dist/src/extensions/core/ollama-router-extension.js.map +1 -1
  57. package/dist/src/extensions/core/perennial-memory-extension.js +5 -2
  58. package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -1
  59. package/dist/src/extensions/core/persona-loader-extension.js +41 -15
  60. package/dist/src/extensions/core/persona-loader-extension.js.map +1 -1
  61. package/dist/src/extensions/core/pi-notify-extension.js +6 -0
  62. package/dist/src/extensions/core/pi-notify-extension.js.map +1 -1
  63. package/dist/src/extensions/core/session-bridge-extension.js +8 -72
  64. package/dist/src/extensions/core/session-bridge-extension.js.map +1 -1
  65. package/dist/src/extensions/core/tui-integration-extension-fixed.js +3 -0
  66. package/dist/src/extensions/core/tui-integration-extension-fixed.js.map +1 -0
  67. package/dist/src/extensions/core/tui-integration-extension.js +984 -0
  68. package/dist/src/extensions/core/tui-integration-extension.js.map +1 -0
  69. package/dist/src/gateway/persistence/AgentStore.js +399 -0
  70. package/dist/src/gateway/persistence/AgentStore.js.map +1 -0
  71. package/dist/src/gateway/persistence/index.js +9 -0
  72. package/dist/src/gateway/persistence/index.js.map +1 -0
  73. package/dist/src/hoard/DraconicHoardSystem.js +465 -0
  74. package/dist/src/hoard/DraconicHoardSystem.js.map +1 -0
  75. package/dist/src/index.js +7 -5
  76. package/dist/src/index.js.map +1 -1
  77. package/dist/src/infra/DraconicConnectionPool.js +492 -0
  78. package/dist/src/infra/DraconicConnectionPool.js.map +1 -0
  79. package/dist/src/lair/DraconicLairSystem.js +387 -0
  80. package/dist/src/lair/DraconicLairSystem.js.map +1 -0
  81. package/dist/src/llm/ollama.js +143 -99
  82. package/dist/src/llm/ollama.js.map +1 -1
  83. package/dist/src/migration/openclaw.js +5 -5
  84. package/dist/src/migration/openclaw.js.map +1 -1
  85. package/dist/src/pi-config.js +52 -27
  86. package/dist/src/pi-config.js.map +1 -1
  87. package/dist/src/sessions/SessionManager.js +416 -0
  88. package/dist/src/sessions/SessionManager.js.map +1 -0
  89. package/dist/src/sessions/SessionStore.js +580 -0
  90. package/dist/src/sessions/SessionStore.js.map +1 -0
  91. package/dist/src/sessions/UnifiedSessionBridge.js +394 -0
  92. package/dist/src/sessions/UnifiedSessionBridge.js.map +1 -0
  93. package/dist/src/sessions/index.js +15 -0
  94. package/dist/src/sessions/index.js.map +1 -0
  95. package/dist/src/sessions/migration/index.js +156 -0
  96. package/dist/src/sessions/migration/index.js.map +1 -0
  97. package/dist/src/sessions/types.js +8 -0
  98. package/dist/src/sessions/types.js.map +1 -0
  99. package/dist/src/skills/framework.js +1 -1
  100. package/dist/src/skills/framework.js.map +1 -1
  101. package/dist/src/tui/commands/final-functions.js +39 -0
  102. package/dist/src/tui/commands/final-functions.js.map +1 -0
  103. package/dist/src/tui/commands/natural-language-commands.js +231 -0
  104. package/dist/src/tui/commands/natural-language-commands.js.map +1 -0
  105. package/dist/src/tui/commands/orchestration-commands.js +340 -0
  106. package/dist/src/tui/commands/orchestration-commands.js.map +1 -0
  107. package/dist/src/tui/commands/orchestration-final-section.js +84 -0
  108. package/dist/src/tui/commands/orchestration-final-section.js.map +1 -0
  109. package/dist/src/tui/components/agent-tree-overlay.js +210 -0
  110. package/dist/src/tui/components/agent-tree-overlay.js.map +1 -0
  111. package/dist/src/tui/components/agent-tree-panel.js +229 -0
  112. package/dist/src/tui/components/agent-tree-panel.js.map +1 -0
  113. package/dist/src/tui/components/sidebar.js +82 -0
  114. package/dist/src/tui/components/sidebar.js.map +1 -0
  115. package/dist/src/tui/components/status-bar.js +115 -0
  116. package/dist/src/tui/components/status-bar.js.map +1 -0
  117. package/dist/src/tui/components/tree-header.js +85 -0
  118. package/dist/src/tui/components/tree-header.js.map +1 -0
  119. package/dist/src/tui/draconic-tui.js +291 -0
  120. package/dist/src/tui/draconic-tui.js.map +1 -0
  121. package/dist/src/tui/index.js +93 -0
  122. package/dist/src/tui/index.js.map +1 -0
  123. package/dist/src/tui/pi-tui-integration.js +260 -0
  124. package/dist/src/tui/pi-tui-integration.js.map +1 -0
  125. package/dist/src/utils/nl-patterns.js +145 -0
  126. package/dist/src/utils/nl-patterns.js.map +1 -0
  127. package/package.json +13 -4
  128. package/scripts/migrate-from-openclaw.sh +498 -0
  129. package/HEARTBEAT.md +0 -121
  130. package/USAGE.md +0 -191
@@ -0,0 +1,39 @@
1
+ // ============================================================================
2
+ // Command Handlers Factory
3
+ // ============================================================================
4
+ export function createOrchestrationCommandHandlers(ctx) {
5
+ const handlers = new Map();
6
+ for (const cmd of OrchestrationCommands) {
7
+ handlers.set(cmd.name, cmd);
8
+ if (cmd.aliases) {
9
+ for (const alias of cmd.aliases) {
10
+ handlers.set(alias, cmd);
11
+ }
12
+ }
13
+ }
14
+ return {
15
+ handleCommand(input) {
16
+ const match = input.match(/^\/?([\w-]+)(?:\s+(.*))?$/);
17
+ if (!match)
18
+ return null;
19
+ const [, name, args] = match;
20
+ const cmd = handlers.get(name) || handlers.get("/" + name);
21
+ if (!cmd)
22
+ return null;
23
+ if (cmd.hasArgument && !args?.trim()) {
24
+ ctx.chatLog.addSystem(`Usage: ${cmd.usage || `/${cmd.name} <argument>`}`);
25
+ return Promise.resolve();
26
+ }
27
+ return cmd.execute(ctx, args);
28
+ },
29
+ getCommands() {
30
+ return OrchestrationCommands;
31
+ },
32
+ getHelp() {
33
+ return OrchestrationCommands
34
+ .map(c => `/${c.name} - ${c.description}`)
35
+ .join("\n");
36
+ },
37
+ };
38
+ }
39
+ //# sourceMappingURL=final-functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"final-functions.js","sourceRoot":"","sources":["../../../../src/tui/commands/final-functions.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,MAAM,UAAU,kCAAkC,CAAC,GAAmB;IACpE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEjD,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,aAAa,CAAC,KAAa;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACvD,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YAExB,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;YAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YAE3D,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YAEtB,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;gBACrC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;gBAC1E,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC;YAED,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,WAAW;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QAED,OAAO;YACL,OAAO,qBAAqB;iBACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;iBACzC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * ๐Ÿ‰ Natural Language Command Parser
3
+ *
4
+ * Converts natural language to structured commands
5
+ * Examples:
6
+ * "spawn a researcher to analyze the codebase" โ†’ /agent-spawn researcher "analyze the codebase"
7
+ * "get a specialist to fix this bug" โ†’ /agent-spawn specialist "fix this bug"
8
+ * "plan how to implement auth" โ†’ /agent-spawn planner "implement auth"
9
+ * "review this code" โ†’ /agent-spawn reviewer "review this code"
10
+ */
11
+ // Natural language patterns for agent spawning
12
+ const spawnPatterns = [
13
+ // Spawn patterns
14
+ {
15
+ regex: /(?:spawn|get|create|delegate|use)\s+(?:a|an)?\s*(researcher|specialist|planner|reviewer|scout|worker)\s+(?:to|for)?\s+(.+)/i,
16
+ action: (matches) => ({
17
+ tool: "agent_spawn_tui",
18
+ params: {
19
+ type: matches[1].toLowerCase(),
20
+ task: matches[2].trim(),
21
+ strategy: "auto",
22
+ },
23
+ }),
24
+ },
25
+ // "I need a researcher to..."
26
+ {
27
+ regex: /(?:i\s+)?(?:need|want)\s+(?:a|an)?\s*(researcher|specialist|planner|reviewer|scout|worker)\s+(?:to|for)?\s+(.+)/i,
28
+ action: (matches) => ({
29
+ tool: "agent_spawn_tui",
30
+ params: {
31
+ type: matches[1].toLowerCase(),
32
+ task: matches[2].trim(),
33
+ strategy: "auto",
34
+ },
35
+ }),
36
+ },
37
+ // "analyze the codebase" โ†’ researcher
38
+ {
39
+ regex: /^(analyze|research|investigate|explore|study)\s+(.+)/i,
40
+ action: (matches) => ({
41
+ tool: "agent_spawn_tui",
42
+ params: {
43
+ type: "researcher",
44
+ task: `${matches[1]} ${matches[2]}`,
45
+ strategy: "thorough",
46
+ },
47
+ }),
48
+ },
49
+ // "implement/fix/refactor" โ†’ specialist
50
+ {
51
+ regex: /^(implement|fix|refactor|build|create|write|code)\s+(.+)/i,
52
+ action: (matches) => ({
53
+ tool: "agent_spawn_tui",
54
+ params: {
55
+ type: "specialist",
56
+ task: `${matches[1]} ${matches[2]}`,
57
+ strategy: "thorough",
58
+ },
59
+ }),
60
+ },
61
+ // "plan/design/architecture" โ†’ planner
62
+ {
63
+ regex: /^(plan|design|architect|structure|organize)\s+(.+)/i,
64
+ action: (matches) => ({
65
+ tool: "agent_spawn_tui",
66
+ params: {
67
+ type: "planner",
68
+ task: `${matches[1]} ${matches[2]}`,
69
+ strategy: "thorough",
70
+ },
71
+ }),
72
+ },
73
+ // "review/check/audit" โ†’ reviewer
74
+ {
75
+ regex: /^(review|check|audit|validate|inspect)\s+(.+)/i,
76
+ action: (matches) => ({
77
+ tool: "agent_spawn_tui",
78
+ params: {
79
+ type: "reviewer",
80
+ task: `${matches[1]} ${matches[2]}`,
81
+ strategy: "auto",
82
+ },
83
+ }),
84
+ },
85
+ // "find/discover/locate" โ†’ scout
86
+ {
87
+ regex: /^(find|discover|locate|search|scout)\s+(.+)/i,
88
+ action: (matches) => ({
89
+ tool: "agent_spawn_tui",
90
+ params: {
91
+ type: "scout",
92
+ task: `${matches[1]} ${matches[2]}`,
93
+ strategy: "fast",
94
+ },
95
+ }),
96
+ },
97
+ // "help me with..." โ†’ auto-select based on context
98
+ {
99
+ regex: /^(?:help\s+me\s+(?:with|on)?|assist\s+me\s+with)\s+(.+)/i,
100
+ action: (matches) => {
101
+ const task = matches[1].toLowerCase();
102
+ let type = "specialist"; // default
103
+ if (/analyze|research|explore|understand/.test(task))
104
+ type = "researcher";
105
+ else if (/plan|design|architecture/.test(task))
106
+ type = "planner";
107
+ else if (/review|check|audit/.test(task))
108
+ type = "reviewer";
109
+ else if (/find|search|locate/.test(task))
110
+ type = "scout";
111
+ return {
112
+ tool: "agent_spawn_tui",
113
+ params: { type, task: matches[1], strategy: "auto" },
114
+ };
115
+ },
116
+ },
117
+ ];
118
+ // Stop/resume/kill patterns
119
+ const controlPatterns = [
120
+ // Stop patterns
121
+ {
122
+ regex: /^(?:stop|pause|halt)\s+(?:agent\s+)?(?:#?)?(.+)/i,
123
+ action: (matches) => ({
124
+ tool: "agent_stop",
125
+ params: { runId: matches[1].trim() || "last" },
126
+ }),
127
+ },
128
+ // Resume patterns
129
+ {
130
+ regex: /^(?:resume|continue|unpause)\s+(?:agent\s+)?(?:#?)?(.+)/i,
131
+ action: (matches) => ({
132
+ tool: "agent_resume",
133
+ params: { runId: matches[1].trim() || "last" },
134
+ }),
135
+ },
136
+ // Kill patterns
137
+ {
138
+ regex: /^(?:kill|terminate|abort)\s+(?:agent\s+)?(?:#?)?(.+)/i,
139
+ action: (matches) => ({
140
+ tool: "agent_kill",
141
+ params: { runId: matches[1].trim() || "last" },
142
+ }),
143
+ },
144
+ ];
145
+ // Query patterns
146
+ const queryPatterns = [
147
+ // Status patterns
148
+ {
149
+ regex: /^(?:show|list|display)?\s*(?:all)?\s*(?:running|active)?\s*agents?/i,
150
+ action: (_matches) => ({
151
+ tool: "agents_list_controls",
152
+ params: { filter: "all" },
153
+ }),
154
+ },
155
+ // Tree patterns
156
+ {
157
+ regex: /^(?:show|display)?\s*(?:agent\s+)?tree|hierarchy/i,
158
+ action: (_matches) => ({
159
+ tool: "agent_tree_view",
160
+ params: {},
161
+ }),
162
+ },
163
+ // Artifacts patterns
164
+ {
165
+ regex: /^(?:show|list)?\s*(?:all)?\s*artifacts?/i,
166
+ action: (_matches) => ({
167
+ tool: "artifacts_list",
168
+ params: { limit: 10 },
169
+ }),
170
+ },
171
+ ];
172
+ /**
173
+ * Parse natural language input into structured command
174
+ */
175
+ export function parseNaturalLanguage(input) {
176
+ const trimmed = input.trim();
177
+ // Skip if it looks like a slash command
178
+ if (trimmed.startsWith("/"))
179
+ return null;
180
+ // Try spawn patterns
181
+ for (const pattern of spawnPatterns) {
182
+ const matches = trimmed.match(pattern.regex);
183
+ if (matches) {
184
+ return pattern.action(matches);
185
+ }
186
+ }
187
+ // Try control patterns
188
+ for (const pattern of controlPatterns) {
189
+ const matches = trimmed.match(pattern.regex);
190
+ if (matches) {
191
+ return pattern.action(matches);
192
+ }
193
+ }
194
+ // Try query patterns
195
+ for (const pattern of queryPatterns) {
196
+ const matches = trimmed.match(pattern.regex);
197
+ if (matches) {
198
+ return pattern.action(matches);
199
+ }
200
+ }
201
+ return null;
202
+ }
203
+ /**
204
+ * Check if input is natural language (not a slash command)
205
+ */
206
+ export function isNaturalLanguage(input) {
207
+ const trimmed = input.trim();
208
+ if (trimmed.startsWith("/"))
209
+ return false;
210
+ // Check if it matches any natural pattern
211
+ return parseNaturalLanguage(input) !== null;
212
+ }
213
+ /**
214
+ * Get example natural language commands
215
+ */
216
+ export function getNaturalLanguageExamples() {
217
+ return [
218
+ "spawn a researcher to analyze the codebase",
219
+ "get a specialist to fix this bug",
220
+ "I need a planner to design the API",
221
+ "analyze the authentication flow",
222
+ "implement user registration",
223
+ "plan how to migrate to TypeScript",
224
+ "review this implementation for security",
225
+ "find all files that handle caching",
226
+ "stop agent #e55676fc",
227
+ "show all running agents",
228
+ "display agent tree",
229
+ ];
230
+ }
231
+ //# sourceMappingURL=natural-language-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"natural-language-commands.js","sourceRoot":"","sources":["../../../../src/tui/commands/natural-language-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,340 @@
1
+ /**
2
+ * ๐Ÿ‰ Draconic TUI Orchestration Commands
3
+ *
4
+ * Slash commands for subagent management:
5
+ * - /agent-spawn <type> <task>
6
+ * - /agent-tree [runId]
7
+ * - /agent-result <runId>
8
+ * - /agent-kill <runId>
9
+ * - /agent-status [runId]
10
+ * - /agents
11
+ */
12
+ // ============================================================================
13
+ // Command: /agent-spawn
14
+ // ============================================================================
15
+ const AgentSpawnCommand = {
16
+ name: "agent-spawn",
17
+ aliases: ["/spawn", "/delegate"],
18
+ description: "Spawn a subagent for a specific task",
19
+ usage: "/agent-spawn <type> <task> [--strategy fast|thorough|auto]",
20
+ hasArgument: true,
21
+ async execute(ctx, args) {
22
+ if (!args) {
23
+ ctx.chatLog.addSystem("Usage: /agent-spawn <type> <task>\n" +
24
+ "Types: coordinator, specialist, researcher, planner, reviewer\n" +
25
+ "Examples:\n" +
26
+ " /agent-spawn researcher \"analyze authentication flow\"\n" +
27
+ " /agent-spawn specialist \"refactor user service\" --strategy thorough");
28
+ return;
29
+ }
30
+ // Parse: /agent-spawn researcher "analyze code" --strategy fast
31
+ const match = args.match(/^(\w+)\s+"([^"]+)"(?:\s+--strategy\s+(\w+))?$/);
32
+ if (!match) {
33
+ // Try simpler parse: type ...task
34
+ const parts = args.split(/\s+/);
35
+ const type = parts[0];
36
+ const task = parts.slice(1).join(" ").replace(/^["']|["']$/g, "");
37
+ if (!isValidAgentType(type)) {
38
+ ctx.chatLog.addSystem(`โŒ Invalid agent type: ${type}. Valid: coordinator, specialist, researcher, planner, reviewer`);
39
+ return;
40
+ }
41
+ await doSpawn(ctx, type, task);
42
+ return;
43
+ }
44
+ const [, type, task, strategy] = match;
45
+ if (!isValidAgentType(type)) {
46
+ ctx.chatLog.addSystem(`โŒ Invalid agent type: ${type}`);
47
+ return;
48
+ }
49
+ await doSpawn(ctx, type, task, strategy);
50
+ },
51
+ };
52
+ async function doSpawn(ctx, type, task, strategy = "auto") {
53
+ const session = ctx.getCurrentSession();
54
+ ctx.chatLog.addSystem(`๐Ÿ‰ Spawning ${type}...`);
55
+ ctx.chatLog.addSystem(` Task: ${task.slice(0, 50)}${task.length > 50 ? "..." : ""}`);
56
+ try {
57
+ const result = await ctx.tui.spawnSubagent({
58
+ type,
59
+ task,
60
+ parentId: session.runId,
61
+ strategy,
62
+ inherit: true,
63
+ notify: true,
64
+ });
65
+ ctx.chatLog.addSystem(`โœ… Spawned ${result.runId}\n` +
66
+ ` Estimated: ${result.tokens?.estimated || "unknown"} tokens\n` +
67
+ ` Status: ${result.status}`);
68
+ // If completed immediately (rare), show result
69
+ if (result.status === "completed" && result.output) {
70
+ ctx.chatLog.addSystem("๐Ÿ“„ Result:\n" + result.output.slice(0, 500));
71
+ }
72
+ else {
73
+ ctx.chatLog.addSystem(" Use /agent-result " + result.runId + " to check result");
74
+ }
75
+ }
76
+ catch (err) {
77
+ ctx.chatLog.addSystem(`โŒ Spawn failed: ${err}`);
78
+ }
79
+ }
80
+ function isValidAgentType(type) {
81
+ return ["coordinator", "specialist", "researcher", "planner", "reviewer"].includes(type);
82
+ }
83
+ // ============================================================================
84
+ // Command: /agent-tree
85
+ // ============================================================================
86
+ const AgentTreeCommand = {
87
+ name: "agent-tree",
88
+ aliases: ["/tree", "/hierarchy"],
89
+ description: "Show agent hierarchy tree",
90
+ usage: "/agent-tree [runId]",
91
+ hasArgument: false,
92
+ async execute(ctx, args) {
93
+ const runId = args?.trim();
94
+ try {
95
+ const tree = await ctx.tui.getAgentTree(runId);
96
+ if (!tree) {
97
+ ctx.chatLog.addSystem("No agent tree found.");
98
+ return;
99
+ }
100
+ const formatted = formatTree(tree, "", true);
101
+ ctx.chatLog.addSystem("๐Ÿ‰ Agent Tree:\n" + formatted);
102
+ }
103
+ catch (err) {
104
+ ctx.chatLog.addSystem(`โŒ Failed to get tree: ${err}`);
105
+ }
106
+ },
107
+ };
108
+ function formatTree(node, prefix, isLast) {
109
+ const connector = isLast ? "โ””โ”€โ”€ " : "โ”œโ”€โ”€ ";
110
+ const statusEmoji = {
111
+ running: "๐ŸŸก",
112
+ completed: "โœ…",
113
+ error: "โŒ",
114
+ idle: "โšช",
115
+ }[node.status] || "โšช";
116
+ const line = `${prefix}${connector}${statusEmoji} ${node.runId} [${node.type}]${node.task ? ": " + node.task.slice(0, 30) : ""}`;
117
+ let result = line;
118
+ const childPrefix = prefix + (isLast ? " " : "โ”‚ ");
119
+ node.children.forEach((child, i) => {
120
+ const childIsLast = i === node.children.length - 1;
121
+ result += "\n" + formatTree(child, childPrefix, childIsLast);
122
+ });
123
+ return result;
124
+ }
125
+ // ============================================================================
126
+ // Command: /agent-result
127
+ // ============================================================================
128
+ const AgentResultCommand = {
129
+ name: "agent-result",
130
+ aliases: ["/result", "/output"],
131
+ description: "Show subagent result/output",
132
+ usage: "/agent-result <runId>",
133
+ hasArgument: true,
134
+ async execute(ctx, args) {
135
+ const runId = args?.trim();
136
+ if (!runId) {
137
+ ctx.chatLog.addSystem("Usage: /agent-result <runId>");
138
+ return;
139
+ }
140
+ try {
141
+ const artifacts = await ctx.tui.getResult(runId);
142
+ if (!artifacts || artifacts.length === 0) {
143
+ ctx.chatLog.addSystem(`No results found for ${runId}. Agent may still be running.`);
144
+ return;
145
+ }
146
+ const artifact = artifacts[0];
147
+ if (artifact.type === "file" && artifact.path) {
148
+ ctx.chatLog.addSystem(`๐Ÿ“„ Result saved to: ${artifact.path}`);
149
+ }
150
+ if (artifact.content) {
151
+ const preview = artifact.content.slice(0, 2000);
152
+ ctx.chatLog.addSystem("๐Ÿ“„ Output preview (first 2000 chars):\n" + preview);
153
+ }
154
+ }
155
+ catch (err) {
156
+ ctx.chatLog.addSystem(`โŒ Failed to get result: ${err}`);
157
+ }
158
+ },
159
+ };
160
+ // ============================================================================
161
+ // Command: /agent-kill
162
+ // ============================================================================
163
+ const AgentKillCommand = {
164
+ name: "agent-kill",
165
+ aliases: ["/kill", "/stop"],
166
+ description: "Kill a running agent",
167
+ usage: "/agent-kill <runId>",
168
+ hasArgument: true,
169
+ async execute(ctx, args) {
170
+ const runId = args?.trim();
171
+ if (!runId) {
172
+ ctx.chatLog.addSystem("Usage: /agent-kill <runId>");
173
+ return;
174
+ }
175
+ try {
176
+ const success = await ctx.tui.killAgent(runId);
177
+ ctx.chatLog.addSystem(success
178
+ ? `โœ… Killed ${runId}`
179
+ : `โŒ Failed to kill ${runId}`);
180
+ }
181
+ catch (err) {
182
+ ctx.chatLog.addSystem(`โŒ Error: ${err}`);
183
+ }
184
+ },
185
+ };
186
+ // ============================================================================
187
+ // Command: /agent-status
188
+ // ============================================================================
189
+ const AgentStatusCommand = {
190
+ name: "agent-status",
191
+ aliases: ["/status"],
192
+ description: "Show agent status details",
193
+ usage: "/agent-status [runId]",
194
+ hasArgument: false,
195
+ async execute(ctx, args) {
196
+ const runId = args?.trim();
197
+ try {
198
+ const status = await ctx.tui.getStatus(runId);
199
+ ctx.chatLog.addSystem("๐Ÿ‰ Agent Status:\n" + JSON.stringify(status, null, 2));
200
+ }
201
+ catch (err) {
202
+ ctx.chatLog.addSystem(`โŒ Failed to get status: ${err}`);
203
+ }
204
+ },
205
+ };
206
+ // ============================================================================
207
+ // Command: /agents
208
+ // ============================================================================
209
+ const AgentsCommand = {
210
+ name: "agents",
211
+ description: "List all active agents",
212
+ usage: "/agents",
213
+ hasArgument: false,
214
+ async execute(ctx) {
215
+ try {
216
+ const agents = await ctx.tui.listAgents();
217
+ if (agents.length === 0) {
218
+ ctx.chatLog.addSystem("No active agents.");
219
+ return;
220
+ }
221
+ const lines = agents.map(a => {
222
+ const status = a.status === "running" ? "๐ŸŸก" : "โœ…";
223
+ return `${status} ${a.runId} [${a.type}]: ${a.task?.slice(0, 40) || "no task"}`;
224
+ });
225
+ ctx.chatLog.addSystem("๐Ÿ‰ Active Agents:\n" + lines.join("\n"));
226
+ }
227
+ catch (err) {
228
+ ctx.chatLog.addSystem(`โŒ Failed to list agents: ${err}`);
229
+ }
230
+ },
231
+ };
232
+ // ============================================================================
233
+ // Export all commands
234
+ // ============================================================================
235
+ // ============================================================================
236
+ // Command: /agent-cleanup (Meta-agent pattern!)
237
+ // ============================================================================
238
+ const AgentCleanupCommand = {
239
+ name: "agent-cleanup",
240
+ aliases: ["/cleanup"],
241
+ description: "Spawn cleanup subagent to remove stale completed agents",
242
+ usage: "/agent-cleanup [--dry-run] [--target=stale|artifacts|all]",
243
+ hasArgument: false,
244
+ async execute(ctx, args) {
245
+ const dryRun = args?.includes("--dry-run") || args?.includes("-n");
246
+ const targetMatch = args?.match(/--target=(stale|artifacts|all)/);
247
+ const target = targetMatch?.[1] || "all";
248
+ ctx.chatLog.addSystem(`๐Ÿงน Spawning cleanup subagent (target: ${target}, dry-run: ${dryRun})...`);
249
+ try {
250
+ const result = await ctx.tui.spawnSubagent({
251
+ type: "specialist",
252
+ task: `Run agent cleanup: target=${target}, dryRun=${dryRun}. Use agentCleanup skill with proper retention policy.`,
253
+ strategy: "fast",
254
+ });
255
+ if (result.status === "running" || result.status === "completed") {
256
+ ctx.chatLog.addSystem(`๐Ÿงน Cleanup subagent spawned: ${result.runId?.slice(-8)}`);
257
+ ctx.chatLog.addSystem("The specialist will auto-report back when complete.");
258
+ }
259
+ else {
260
+ ctx.chatLog.addSystem(`โŒ Failed to spawn cleanup: ${"spawn failed"}`);
261
+ }
262
+ }
263
+ catch (err) {
264
+ ctx.chatLog.addSystem(`โŒ Error: ${err}`);
265
+ }
266
+ },
267
+ };
268
+ // ============================================================================
269
+ // Command: /agent-reset (Clear registry cache)
270
+ // ============================================================================
271
+ const AgentResetCommand = {
272
+ name: "agent-reset",
273
+ description: "Clear all agents from display (use after reload if stale data)",
274
+ usage: "/agent-reset",
275
+ hasArgument: false,
276
+ async execute(ctx, _args) {
277
+ try {
278
+ const { getDraconicRunRegistry } = await import("../../agent/DraconicRunRegistry.js");
279
+ const registry = getDraconicRunRegistry();
280
+ const before = registry.query({}).runs.length;
281
+ registry.clear();
282
+ ctx.chatLog.addSystem(`๐Ÿงน Cleared ${before} agents from registry`);
283
+ }
284
+ catch (err) {
285
+ ctx.chatLog.addSystem(`โŒ Error: ${err}`);
286
+ }
287
+ },
288
+ };
289
+ // ============================================================================
290
+ // Export all commands
291
+ // ============================================================================
292
+ export const OrchestrationCommands = [
293
+ AgentSpawnCommand,
294
+ AgentTreeCommand,
295
+ AgentResultCommand,
296
+ AgentKillCommand,
297
+ AgentStatusCommand,
298
+ AgentCleanupCommand,
299
+ AgentsCommand,
300
+ AgentResetCommand,
301
+ ];
302
+ // ============================================================================
303
+ // Command Handlers Factory
304
+ // ============================================================================
305
+ export function createOrchestrationCommandHandlers(ctx) {
306
+ const handlers = new Map();
307
+ for (const cmd of OrchestrationCommands) {
308
+ handlers.set(cmd.name, cmd);
309
+ if (cmd.aliases) {
310
+ for (const alias of cmd.aliases) {
311
+ handlers.set(alias, cmd);
312
+ }
313
+ }
314
+ }
315
+ return {
316
+ handleCommand(input) {
317
+ const match = input.match(/^\/?([\w-]+)(?:\s+(.*))?$/);
318
+ if (!match)
319
+ return null;
320
+ const [, name, args] = match;
321
+ const cmd = handlers.get(name) || handlers.get("/" + name);
322
+ if (!cmd)
323
+ return null;
324
+ if (cmd.hasArgument && !args?.trim()) {
325
+ ctx.chatLog.addSystem(`Usage: ${cmd.usage || `/${cmd.name} <argument>`}`);
326
+ return Promise.resolve();
327
+ }
328
+ return cmd.execute(ctx, args);
329
+ },
330
+ getCommands() {
331
+ return OrchestrationCommands;
332
+ },
333
+ getHelp() {
334
+ return OrchestrationCommands
335
+ .map(c => `/${c.name} - ${c.description}`)
336
+ .join("\n");
337
+ },
338
+ };
339
+ }
340
+ //# sourceMappingURL=orchestration-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration-commands.js","sourceRoot":"","sources":["../../../../src/tui/commands/orchestration-commands.ts"],"names":[],"mappings":"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"}