@honeybee-ai/waggle-cli 1.0.20 → 1.0.21

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 (80) hide show
  1. package/dist/cli.js +279 -936
  2. package/dist/cli.js.map +1 -7
  3. package/dist/commands/carapace.js +20 -5
  4. package/dist/commands/carapace.js.map +1 -1
  5. package/dist/commands/eval.d.ts +1 -0
  6. package/dist/commands/eval.js +221 -0
  7. package/dist/commands/eval.js.map +1 -0
  8. package/dist/commands/mcp.d.ts +13 -0
  9. package/dist/commands/mcp.js +17 -0
  10. package/dist/commands/mcp.js.map +1 -0
  11. package/dist/commands/scan.js +8 -8
  12. package/dist/commands/scan.js.map +1 -1
  13. package/dist/commands/up.js +1 -30
  14. package/dist/commands/up.js.map +1 -1
  15. package/dist/lib/capture.d.ts +6 -0
  16. package/dist/lib/capture.js +29 -0
  17. package/dist/lib/capture.js.map +1 -0
  18. package/dist/mcp/docs.d.ts +16 -0
  19. package/dist/mcp/docs.js +192 -0
  20. package/dist/mcp/docs.js.map +1 -0
  21. package/dist/mcp/handler.d.ts +27 -0
  22. package/dist/mcp/handler.js +397 -0
  23. package/dist/mcp/handler.js.map +1 -0
  24. package/dist/mcp/server.d.ts +19 -0
  25. package/dist/mcp/server.js +105 -0
  26. package/dist/mcp/server.js.map +1 -0
  27. package/dist/mcp/templates.d.ts +9 -0
  28. package/dist/mcp/templates.js +46 -0
  29. package/dist/mcp/templates.js.map +1 -0
  30. package/dist/repl/addressing.d.ts +34 -0
  31. package/dist/repl/addressing.js +103 -0
  32. package/dist/repl/addressing.js.map +1 -0
  33. package/dist/repl/agent-loop.d.ts +8 -0
  34. package/dist/repl/agent-loop.js +57 -0
  35. package/dist/repl/agent-loop.js.map +1 -0
  36. package/dist/repl/bang.d.ts +13 -0
  37. package/dist/repl/bang.js +207 -0
  38. package/dist/repl/bang.js.map +1 -0
  39. package/dist/repl/file-tools.d.ts +4 -0
  40. package/dist/repl/file-tools.js +121 -0
  41. package/dist/repl/file-tools.js.map +1 -0
  42. package/dist/repl/index-readline.d.ts +7 -0
  43. package/dist/repl/index-readline.js +91 -0
  44. package/dist/repl/index-readline.js.map +1 -0
  45. package/dist/repl/index.d.ts +1 -0
  46. package/dist/repl/index.js +341 -0
  47. package/dist/repl/index.js.map +1 -0
  48. package/dist/repl/input.d.ts +36 -0
  49. package/dist/repl/input.js +312 -0
  50. package/dist/repl/input.js.map +1 -0
  51. package/dist/repl/providers.d.ts +21 -0
  52. package/dist/repl/providers.js +373 -0
  53. package/dist/repl/providers.js.map +1 -0
  54. package/dist/repl/renderer.d.ts +38 -0
  55. package/dist/repl/renderer.js +167 -0
  56. package/dist/repl/renderer.js.map +1 -0
  57. package/dist/repl/system-pane.d.ts +28 -0
  58. package/dist/repl/system-pane.js +194 -0
  59. package/dist/repl/system-pane.js.map +1 -0
  60. package/dist/repl/system-prompt.d.ts +3 -0
  61. package/dist/repl/system-prompt.js +74 -0
  62. package/dist/repl/system-prompt.js.map +1 -0
  63. package/dist/repl/tool-handlers.d.ts +5 -0
  64. package/dist/repl/tool-handlers.js +118 -0
  65. package/dist/repl/tool-handlers.js.map +1 -0
  66. package/dist/repl/tools.d.ts +2 -0
  67. package/dist/repl/tools.js +205 -0
  68. package/dist/repl/tools.js.map +1 -0
  69. package/dist/repl/tui.d.ts +41 -0
  70. package/dist/repl/tui.js +280 -0
  71. package/dist/repl/tui.js.map +1 -0
  72. package/dist/repl/types.d.ts +53 -0
  73. package/dist/repl/types.js +3 -0
  74. package/dist/repl/types.js.map +1 -0
  75. package/dist/repl/ws-client.d.ts +39 -0
  76. package/dist/repl/ws-client.js +144 -0
  77. package/dist/repl/ws-client.js.map +1 -0
  78. package/dist/wgl.js +1396 -0
  79. package/dist/wgl.js.map +7 -0
  80. package/package.json +6 -8
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Honeybee MCP Server.
3
+ *
4
+ * Exposes a single "honeybee" tool that wraps ALL CLI commands.
5
+ * Sequential execution with parallel fan-out (nested arrays).
6
+ * $last templates for chaining results between operations.
7
+ *
8
+ * Usage: wgl mcp
9
+ * Config: { "mcpServers": { "honeybee": { "command": "npx", "args": ["@honeybee-ai/waggle-cli", "mcp"] } } }
10
+ */
11
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
12
+ /**
13
+ * Create and return the MCP server instance.
14
+ */
15
+ export declare function createHoneybeeServer(): Server;
16
+ /**
17
+ * Start the MCP server on stdio.
18
+ */
19
+ export declare function startMcpServer(): Promise<void>;
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Honeybee MCP Server.
3
+ *
4
+ * Exposes a single "honeybee" tool that wraps ALL CLI commands.
5
+ * Sequential execution with parallel fan-out (nested arrays).
6
+ * $last templates for chaining results between operations.
7
+ *
8
+ * Usage: wgl mcp
9
+ * Config: { "mcpServers": { "honeybee": { "command": "npx", "args": ["@honeybee-ai/waggle-cli", "mcp"] } } }
10
+ */
11
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
12
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
13
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
14
+ import { executeDance } from './handler.js';
15
+ /**
16
+ * Create and return the MCP server instance.
17
+ */
18
+ export function createHoneybeeServer() {
19
+ const server = new Server({ name: 'honeybee', version: '1.0.0' }, { capabilities: { tools: {} } });
20
+ // List tools — one tool: "honeybee"
21
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
22
+ tools: [
23
+ {
24
+ name: 'honeybee',
25
+ description: [
26
+ 'Manage the Honeybee AI platform. Batch operations in one call.',
27
+ 'Use { "do": "docs", "query": "..." } to learn available operations.',
28
+ 'Sequential: [op1, op2] — chain via $last. Parallel: [op1, [op2, op3], op4].',
29
+ ].join(' '),
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ dance: {
34
+ type: 'array',
35
+ description: 'Array of operations. Each op: { "do": "action", ...params }. Nested arrays run in parallel via Promise.all. Example: [{"do":"status"},{"do":"team"}]',
36
+ items: {
37
+ oneOf: [
38
+ {
39
+ type: 'object',
40
+ description: 'Sequential operation',
41
+ properties: {
42
+ do: { type: 'string', description: 'Operation name' },
43
+ },
44
+ required: ['do'],
45
+ },
46
+ {
47
+ type: 'array',
48
+ description: 'Parallel group — all ops run concurrently',
49
+ items: {
50
+ type: 'object',
51
+ properties: {
52
+ do: { type: 'string', description: 'Operation name' },
53
+ },
54
+ required: ['do'],
55
+ },
56
+ },
57
+ ],
58
+ },
59
+ },
60
+ },
61
+ required: ['dance'],
62
+ },
63
+ },
64
+ ],
65
+ }));
66
+ // Call tool
67
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
68
+ if (request.params.name !== 'honeybee') {
69
+ return {
70
+ content: [{ type: 'text', text: `Unknown tool: ${request.params.name}` }],
71
+ isError: true,
72
+ };
73
+ }
74
+ try {
75
+ const args = request.params.arguments ?? {};
76
+ const dance = args.dance;
77
+ if (!dance) {
78
+ return {
79
+ content: [{ type: 'text', text: 'Missing "dance" parameter. Use [{"do":"docs","query":"available operations"}] to see what\'s available.' }],
80
+ isError: true,
81
+ };
82
+ }
83
+ const result = await executeDance(dance);
84
+ return {
85
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
86
+ };
87
+ }
88
+ catch (err) {
89
+ return {
90
+ content: [{ type: 'text', text: `Error: ${err.message}` }],
91
+ isError: true,
92
+ };
93
+ }
94
+ });
95
+ return server;
96
+ }
97
+ /**
98
+ * Start the MCP server on stdio.
99
+ */
100
+ export async function startMcpServer() {
101
+ const server = createHoneybeeServer();
102
+ const transport = new StdioServerTransport();
103
+ await server.connect(transport);
104
+ }
105
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Template resolution for compound operations.
3
+ *
4
+ * `$last` refers to the previous operation's result in a sequential batch.
5
+ * `$last.foo.bar` navigates nested object paths.
6
+ *
7
+ * Copied from incubator/src/waggle/templates.ts — canonical source.
8
+ */
9
+ export declare function resolveTemplates(args: Record<string, unknown>, lastResult: unknown): Record<string, unknown>;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Template resolution for compound operations.
3
+ *
4
+ * `$last` refers to the previous operation's result in a sequential batch.
5
+ * `$last.foo.bar` navigates nested object paths.
6
+ *
7
+ * Copied from incubator/src/waggle/templates.ts — canonical source.
8
+ */
9
+ export function resolveTemplates(args, lastResult) {
10
+ const resolved = {};
11
+ for (const [key, value] of Object.entries(args)) {
12
+ resolved[key] = resolveValue(value, lastResult);
13
+ }
14
+ return resolved;
15
+ }
16
+ function resolveValue(value, lastResult) {
17
+ if (typeof value === 'string' && value.startsWith('$last')) {
18
+ return resolveLastPath(value, lastResult);
19
+ }
20
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
21
+ return resolveTemplates(value, lastResult);
22
+ }
23
+ if (Array.isArray(value)) {
24
+ return value.map(v => resolveValue(v, lastResult));
25
+ }
26
+ return value;
27
+ }
28
+ function resolveLastPath(template, lastResult) {
29
+ if (template === '$last')
30
+ return lastResult;
31
+ const path = template.slice(6); // Remove '$last.'
32
+ const parts = path.split('.');
33
+ let current = lastResult;
34
+ for (const part of parts) {
35
+ if (current === null || current === undefined)
36
+ return undefined;
37
+ if (typeof current === 'object') {
38
+ current = current[part];
39
+ }
40
+ else {
41
+ return undefined;
42
+ }
43
+ }
44
+ return current;
45
+ }
46
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/mcp/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,UAAU,gBAAgB,CAC9B,IAA6B,EAC7B,UAAmB;IAEnB,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,UAAmB;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,OAAO,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,gBAAgB,CAAC,KAAgC,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,UAAmB;IAC5D,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,UAAU,CAAC;IAE5C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,UAAU,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAChE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,34 @@
1
+ /** Message types from @ syntax */
2
+ export type AddressType = 'waggle' | 'bang' | 'control';
3
+ /** Parsed @ address */
4
+ export interface ParsedAddress {
5
+ type: AddressType;
6
+ targets: AddressTarget[];
7
+ content: string;
8
+ bangCommand?: string;
9
+ controlVerb?: string;
10
+ }
11
+ /** A single resolved target */
12
+ export interface AddressTarget {
13
+ raw: string;
14
+ agent: string;
15
+ hive?: string;
16
+ isBroadcast: boolean;
17
+ }
18
+ /**
19
+ * Check if input starts with @ addressing.
20
+ * Quick check before full parse — avoids regex on every message.
21
+ */
22
+ export declare function isAddressed(input: string): boolean;
23
+ /**
24
+ * Parse @ addressed input into structured data.
25
+ *
26
+ * Syntax examples:
27
+ * @worker1 hey, how's it going? → waggle to worker1
28
+ * @worker1 !status → bang command
29
+ * @worker1 stop → control verb
30
+ * @all stop → broadcast control
31
+ * @worker1 @worker2 read api.ts → multi-target waggle
32
+ * @hive2:queen1 hello → cross-hive waggle
33
+ */
34
+ export declare function parseAddress(input: string): ParsedAddress | null;
@@ -0,0 +1,103 @@
1
+ // @ addressing parser — waggle in human form
2
+ // Parses @target prefixed input into structured addressing data
3
+ /** Control verbs recognized as direct commands */
4
+ const CONTROL_VERBS = new Set(['stop', 'kill', 'halt', 'pause', 'resume']);
5
+ /**
6
+ * Check if input starts with @ addressing.
7
+ * Quick check before full parse — avoids regex on every message.
8
+ */
9
+ export function isAddressed(input) {
10
+ return /^@[a-zA-Z0-9_]/.test(input.trim());
11
+ }
12
+ /**
13
+ * Parse @ addressed input into structured data.
14
+ *
15
+ * Syntax examples:
16
+ * @worker1 hey, how's it going? → waggle to worker1
17
+ * @worker1 !status → bang command
18
+ * @worker1 stop → control verb
19
+ * @all stop → broadcast control
20
+ * @worker1 @worker2 read api.ts → multi-target waggle
21
+ * @hive2:queen1 hello → cross-hive waggle
22
+ */
23
+ export function parseAddress(input) {
24
+ const trimmed = input.trim();
25
+ if (!isAddressed(trimmed))
26
+ return null;
27
+ // Extract all leading @targets
28
+ const targets = [];
29
+ let remaining = trimmed;
30
+ while (remaining.startsWith('@')) {
31
+ const match = remaining.match(/^@([a-zA-Z0-9_:.-]+)\s*/);
32
+ if (!match)
33
+ break;
34
+ const raw = match[1];
35
+ targets.push(parseTarget(raw));
36
+ remaining = remaining.slice(match[0].length);
37
+ }
38
+ if (targets.length === 0)
39
+ return null;
40
+ const content = remaining.trim();
41
+ if (!content) {
42
+ // Just @target with no message — treat as waggle with empty content
43
+ return { type: 'waggle', targets, content: '' };
44
+ }
45
+ // Check for bang command: !command [args...]
46
+ if (content.startsWith('!')) {
47
+ const bangMatch = content.match(/^!([a-zA-Z0-9_-]+)\s*(.*)/);
48
+ if (bangMatch) {
49
+ return {
50
+ type: 'bang',
51
+ targets,
52
+ content: bangMatch[2].trim(),
53
+ bangCommand: bangMatch[1],
54
+ };
55
+ }
56
+ }
57
+ // Check for control verb (first word only, case-insensitive)
58
+ const firstWord = content.split(/\s+/)[0].toLowerCase();
59
+ if (CONTROL_VERBS.has(firstWord)) {
60
+ const reason = content.slice(firstWord.length).trim();
61
+ return {
62
+ type: 'control',
63
+ targets,
64
+ content: reason,
65
+ controlVerb: normalizeControlVerb(firstWord),
66
+ };
67
+ }
68
+ // Default: plain waggle message
69
+ return { type: 'waggle', targets, content };
70
+ }
71
+ /**
72
+ * Parse a single target string.
73
+ * Supports: "agent", "hive:agent", "all"
74
+ */
75
+ function parseTarget(raw) {
76
+ if (raw.toLowerCase() === 'all') {
77
+ return { raw, agent: '*', isBroadcast: true };
78
+ }
79
+ const colonIdx = raw.indexOf(':');
80
+ if (colonIdx > 0) {
81
+ return {
82
+ raw,
83
+ agent: raw.slice(colonIdx + 1),
84
+ hive: raw.slice(0, colonIdx),
85
+ isBroadcast: false,
86
+ };
87
+ }
88
+ return { raw, agent: raw, isBroadcast: false };
89
+ }
90
+ /**
91
+ * Normalize control verb aliases.
92
+ * "stop" and "kill" both map to "halt".
93
+ */
94
+ function normalizeControlVerb(verb) {
95
+ switch (verb) {
96
+ case 'stop':
97
+ case 'kill':
98
+ return 'halt';
99
+ default:
100
+ return verb;
101
+ }
102
+ }
103
+ //# sourceMappingURL=addressing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressing.js","sourceRoot":"","sources":["../../src/repl/addressing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ChatMessage, ProviderConfig, ToolDef, LoopCallbacks } from './types.js';
2
+ /**
3
+ * Run one turn of the agent loop:
4
+ * 1. Send messages to LLM
5
+ * 2. If response has tool_calls, execute them and loop
6
+ * 3. If response has text content, return it
7
+ */
8
+ export declare function agentTurn(provider: ProviderConfig, messages: ChatMessage[], tools: ToolDef[], callbacks: LoopCallbacks): Promise<void>;
@@ -0,0 +1,57 @@
1
+ import { chatCompletion, getToolCallArgs } from './providers.js';
2
+ import { executeTool } from './tool-handlers.js';
3
+ const MAX_TOOL_ROUNDS = 10; // prevent infinite tool loops
4
+ /**
5
+ * Run one turn of the agent loop:
6
+ * 1. Send messages to LLM
7
+ * 2. If response has tool_calls, execute them and loop
8
+ * 3. If response has text content, return it
9
+ */
10
+ export async function agentTurn(provider, messages, tools, callbacks) {
11
+ let rounds = 0;
12
+ while (rounds < MAX_TOOL_ROUNDS) {
13
+ rounds++;
14
+ callbacks.onThinking(true);
15
+ let result;
16
+ try {
17
+ result = await chatCompletion(provider, messages, tools);
18
+ }
19
+ catch (err) {
20
+ callbacks.onThinking(false);
21
+ callbacks.onAssistantMessage(`Error: ${err instanceof Error ? err.message : String(err)}`);
22
+ return;
23
+ }
24
+ callbacks.onThinking(false);
25
+ callbacks.onUsage(result.usage);
26
+ const msg = result.message;
27
+ messages.push(msg);
28
+ // If there are tool calls, execute them
29
+ if (msg.tool_calls && msg.tool_calls.length > 0) {
30
+ // Show any text content before tools
31
+ if (msg.content) {
32
+ callbacks.onAssistantMessage(msg.content);
33
+ }
34
+ for (const tc of msg.tool_calls) {
35
+ const args = getToolCallArgs(tc);
36
+ callbacks.onToolCall(tc.function.name, args);
37
+ const toolResult = await executeTool(tc);
38
+ callbacks.onToolResult(tc.function.name, toolResult);
39
+ // Append tool result to messages
40
+ messages.push({
41
+ role: 'tool',
42
+ tool_call_id: tc.id,
43
+ content: toolResult,
44
+ });
45
+ }
46
+ // Loop back for LLM to process tool results
47
+ continue;
48
+ }
49
+ // No tool calls — show the response and we're done
50
+ if (msg.content) {
51
+ callbacks.onAssistantMessage(msg.content);
52
+ }
53
+ return;
54
+ }
55
+ callbacks.onAssistantMessage('(Reached maximum tool rounds, stopping)');
56
+ }
57
+ //# sourceMappingURL=agent-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../../src/repl/agent-loop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,eAAe,GAAG,EAAE,CAAC,CAAC,8BAA8B;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAwB,EACxB,QAAuB,EACvB,KAAgB,EAChB,SAAwB;IAExB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,eAAe,EAAE,CAAC;QAChC,MAAM,EAAE,CAAC;QACT,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,MAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC5B,SAAS,CAAC,kBAAkB,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QAED,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC5B,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEhC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEnB,wCAAwC;QACxC,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,qCAAqC;YACrC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;YAED,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;gBACjC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE7C,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;gBACzC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAErD,iCAAiC;gBACjC,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,MAAM;oBACZ,YAAY,EAAE,EAAE,CAAC,EAAE;oBACnB,OAAO,EAAE,UAAU;iBACpB,CAAC,CAAC;YACL,CAAC;YAED,4CAA4C;YAC5C,SAAS;QACX,CAAC;QAED,mDAAmD;QACnD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;IACT,CAAC;IAED,SAAS,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { AddressTarget } from './addressing.js';
2
+ interface BangResult {
3
+ title: string;
4
+ lines: string[];
5
+ }
6
+ /** Check if a bang command is known */
7
+ export declare function isKnownBang(command: string): boolean;
8
+ /**
9
+ * Execute a bang command against the incubator REST API.
10
+ * Returns structured result for system pane formatting.
11
+ */
12
+ export declare function executeBang(command: string, target: AddressTarget, serverUrl: string, namespace: string, _extraArgs: string): Promise<BangResult>;
13
+ export {};
@@ -0,0 +1,207 @@
1
+ // Bang command registry — !command dispatches to REST API
2
+ // Returns formatted string results for system pane display
3
+ /** Known bang commands */
4
+ const BANG_COMMANDS = new Set([
5
+ 'status', 'claims', 'events', 'state', 'messages', 'kill',
6
+ ]);
7
+ /** Check if a bang command is known */
8
+ export function isKnownBang(command) {
9
+ return BANG_COMMANDS.has(command);
10
+ }
11
+ /**
12
+ * Execute a bang command against the incubator REST API.
13
+ * Returns structured result for system pane formatting.
14
+ */
15
+ export async function executeBang(command, target, serverUrl, namespace, _extraArgs) {
16
+ const base = serverUrl.replace(/\/$/, '');
17
+ const ns = namespace === 'default' ? '' : `/${encodeURIComponent(namespace)}`;
18
+ const apiBase = `${base}/api${ns}`;
19
+ try {
20
+ switch (command) {
21
+ case 'status':
22
+ return await bangStatus(apiBase, target);
23
+ case 'claims':
24
+ return await bangClaims(apiBase, target);
25
+ case 'events':
26
+ return await bangEvents(apiBase, target);
27
+ case 'state':
28
+ return await bangState(apiBase);
29
+ case 'messages':
30
+ return await bangMessages(apiBase, target);
31
+ case 'kill':
32
+ return await bangKill(apiBase, target);
33
+ default:
34
+ return { title: `!${command}`, lines: [`Unknown command: !${command}`] };
35
+ }
36
+ }
37
+ catch (err) {
38
+ return {
39
+ title: `!${command}`,
40
+ lines: [`Error: ${err instanceof Error ? err.message : String(err)}`],
41
+ };
42
+ }
43
+ }
44
+ async function apiFetch(url) {
45
+ const res = await fetch(url, {
46
+ headers: { 'X-Agent-Id': 'repl-observer' },
47
+ signal: AbortSignal.timeout(5000),
48
+ });
49
+ if (!res.ok)
50
+ throw new Error(`HTTP ${res.status}`);
51
+ return await res.json();
52
+ }
53
+ async function apiPost(url, body) {
54
+ const res = await fetch(url, {
55
+ method: 'POST',
56
+ headers: {
57
+ 'Content-Type': 'application/json',
58
+ 'X-Agent-Id': 'repl-observer',
59
+ },
60
+ body: body ? JSON.stringify(body) : undefined,
61
+ signal: AbortSignal.timeout(5000),
62
+ });
63
+ if (!res.ok)
64
+ throw new Error(`HTTP ${res.status}`);
65
+ return await res.json();
66
+ }
67
+ /** !status — agent roles + control status */
68
+ async function bangStatus(apiBase, target) {
69
+ const lines = [];
70
+ const label = target.isBroadcast ? 'all' : target.agent;
71
+ // Fetch roles
72
+ const roles = await apiFetch(`${apiBase}/roles`);
73
+ // Fetch control status
74
+ const control = await apiFetch(`${apiBase}/control/status`);
75
+ if (control.halted)
76
+ lines.push(`HALTED${control.haltedBy ? ` by ${control.haltedBy}` : ''}`);
77
+ if (control.paused)
78
+ lines.push(`PAUSED${control.pausedBy ? ` by ${control.pausedBy}` : ''}`);
79
+ if (!control.halted && !control.paused)
80
+ lines.push('Running');
81
+ lines.push('');
82
+ // Filter roles for target
83
+ const filtered = target.isBroadcast
84
+ ? roles
85
+ : roles.filter(r => r.agentId === target.agent || r.role === target.agent);
86
+ if (filtered.length === 0) {
87
+ lines.push(`No agent found: ${label}`);
88
+ }
89
+ else {
90
+ for (const r of filtered) {
91
+ lines.push(`${r.agentId} (${r.role}) ${r.status ?? 'active'}`);
92
+ }
93
+ }
94
+ // Try to get run info
95
+ try {
96
+ const runs = await apiFetch(`${apiBase}/runs/summary`);
97
+ const targetRuns = target.isBroadcast
98
+ ? Object.entries(runs)
99
+ : Object.entries(runs).filter(([id]) => id === target.agent);
100
+ if (targetRuns.length > 0) {
101
+ lines.push('');
102
+ for (const [id, run] of targetRuns) {
103
+ const parts = [run.status];
104
+ if (run.iterations)
105
+ parts.push(`${run.iterations} iterations`);
106
+ if (run.totalTokens)
107
+ parts.push(`${run.totalTokens} tokens`);
108
+ lines.push(`${id}: ${parts.join(', ')}`);
109
+ }
110
+ }
111
+ }
112
+ catch {
113
+ // runs endpoint may not exist — that's fine
114
+ }
115
+ return { title: `!status ${label}`, lines };
116
+ }
117
+ /** !claims — active resource claims */
118
+ async function bangClaims(apiBase, target) {
119
+ const claims = await apiFetch(`${apiBase}/claims`);
120
+ const filtered = target.isBroadcast
121
+ ? claims
122
+ : claims.filter(c => c.owner === target.agent);
123
+ const label = target.isBroadcast ? 'all' : target.agent;
124
+ const lines = [];
125
+ if (filtered.length === 0) {
126
+ lines.push('No active claims');
127
+ }
128
+ else {
129
+ for (const c of filtered) {
130
+ const owner = target.isBroadcast ? ` (${c.owner})` : '';
131
+ lines.push(`${c.resource}${owner}`);
132
+ }
133
+ }
134
+ return { title: `!claims ${label}`, lines };
135
+ }
136
+ /** !events — recent events */
137
+ async function bangEvents(apiBase, target) {
138
+ const events = await apiFetch(`${apiBase}/events`);
139
+ const filtered = target.isBroadcast
140
+ ? events
141
+ : events.filter(e => e.agentId === target.agent);
142
+ // Show last 15
143
+ const recent = filtered.slice(-15);
144
+ const label = target.isBroadcast ? 'all' : target.agent;
145
+ const lines = [];
146
+ if (recent.length === 0) {
147
+ lines.push('No events');
148
+ }
149
+ else {
150
+ for (const e of recent) {
151
+ const time = e.timestamp ? new Date(e.timestamp).toLocaleTimeString() : '';
152
+ const from = target.isBroadcast && e.agentId ? ` [${e.agentId}]` : '';
153
+ const dataStr = e.data ? ` ${JSON.stringify(e.data).slice(0, 60)}` : '';
154
+ lines.push(`#${e.id ?? '?'} ${e.type}${from}${dataStr} ${time}`);
155
+ }
156
+ }
157
+ return { title: `!events ${label}`, lines };
158
+ }
159
+ /** !state — shared state dump */
160
+ async function bangState(apiBase) {
161
+ const state = await apiFetch(`${apiBase}/state`);
162
+ const lines = [];
163
+ const entries = Object.entries(state);
164
+ if (entries.length === 0) {
165
+ lines.push('(empty)');
166
+ }
167
+ else {
168
+ for (const [key, value] of entries) {
169
+ const valStr = typeof value === 'string' ? value : JSON.stringify(value);
170
+ lines.push(`${key} = ${valStr.length > 60 ? valStr.slice(0, 57) + '...' : valStr}`);
171
+ }
172
+ }
173
+ return { title: '!state', lines };
174
+ }
175
+ /** !messages — messages for/from target */
176
+ async function bangMessages(apiBase, target) {
177
+ const messages = await apiFetch(`${apiBase}/messages`);
178
+ const filtered = target.isBroadcast
179
+ ? messages
180
+ : messages.filter(m => m.from === target.agent || m.to === target.agent || m.to === '*');
181
+ const label = target.isBroadcast ? 'all' : target.agent;
182
+ const lines = [];
183
+ if (filtered.length === 0) {
184
+ lines.push('No messages');
185
+ }
186
+ else {
187
+ for (const m of filtered.slice(-15)) {
188
+ const time = m.sentAt ? new Date(m.sentAt).toLocaleTimeString() : '';
189
+ const dir = m.to === '*' ? 'broadcast' : `${m.from} -> ${m.to}`;
190
+ lines.push(`#${m.id} ${dir}: ${m.content.slice(0, 50)} ${time}`);
191
+ }
192
+ }
193
+ return { title: `!messages ${label}`, lines };
194
+ }
195
+ /** !kill — halt a specific agent */
196
+ async function bangKill(apiBase, target) {
197
+ if (target.isBroadcast) {
198
+ await apiPost(`${apiBase}/control/halt`, { reason: 'REPL !kill @all' });
199
+ return { title: '!kill @all', lines: ['All agents halted'] };
200
+ }
201
+ await apiPost(`${apiBase}/control/halt`, {
202
+ reason: `REPL !kill ${target.agent}`,
203
+ target: target.agent,
204
+ });
205
+ return { title: `!kill ${target.agent}`, lines: [`Agent ${target.agent} halted`] };
206
+ }
207
+ //# sourceMappingURL=bang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bang.js","sourceRoot":"","sources":["../../src/repl/bang.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function readFile(path: string): string;
2
+ export declare function writeFile(path: string, content: string): string;
3
+ export declare function listFiles(dir?: string, pattern?: string): string;
4
+ export declare function grepFiles(pattern: string, path?: string, glob?: string): string;