@namzu/cli 0.6.0 → 0.7.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 (182) hide show
  1. package/dist/__tests__/permission-rules-reach-the-turn.test.d.ts +31 -0
  2. package/dist/__tests__/permission-rules-reach-the-turn.test.d.ts.map +1 -0
  3. package/dist/__tests__/permission-rules-reach-the-turn.test.js +132 -0
  4. package/dist/__tests__/permission-rules-reach-the-turn.test.js.map +1 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +16 -3
  7. package/dist/cli.js.map +1 -1
  8. package/dist/cli.test.js +7 -1
  9. package/dist/cli.test.js.map +1 -1
  10. package/dist/commands/__tests__/run-flags.test.js +0 -1
  11. package/dist/commands/__tests__/run-flags.test.js.map +1 -1
  12. package/dist/commands/__tests__/run-stream-flags.test.js +0 -1
  13. package/dist/commands/__tests__/run-stream-flags.test.js.map +1 -1
  14. package/dist/commands/run-stream.d.ts +3 -3
  15. package/dist/commands/run-stream.js +3 -3
  16. package/dist/commands/run.d.ts.map +1 -1
  17. package/dist/commands/run.js +4 -0
  18. package/dist/commands/run.js.map +1 -1
  19. package/dist/commands/stubs.d.ts +10 -0
  20. package/dist/commands/stubs.d.ts.map +1 -1
  21. package/dist/commands/stubs.js +12 -2
  22. package/dist/commands/stubs.js.map +1 -1
  23. package/dist/config/load.d.ts.map +1 -1
  24. package/dist/config/load.js +20 -4
  25. package/dist/config/load.js.map +1 -1
  26. package/dist/config/schema.d.ts +0 -12
  27. package/dist/config/schema.d.ts.map +1 -1
  28. package/dist/config/schema.js.map +1 -1
  29. package/dist/doctor/checks/credentials.d.ts +20 -0
  30. package/dist/doctor/checks/credentials.d.ts.map +1 -0
  31. package/dist/doctor/checks/credentials.js +58 -0
  32. package/dist/doctor/checks/credentials.js.map +1 -0
  33. package/dist/doctor/checks/credentials.test.d.ts +10 -0
  34. package/dist/doctor/checks/credentials.test.d.ts.map +1 -0
  35. package/dist/doctor/checks/credentials.test.js +47 -0
  36. package/dist/doctor/checks/credentials.test.js.map +1 -0
  37. package/dist/doctor/checks/index.d.ts +2 -1
  38. package/dist/doctor/checks/index.d.ts.map +1 -1
  39. package/dist/doctor/checks/index.js +3 -1
  40. package/dist/doctor/checks/index.js.map +1 -1
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +1 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/integrations/providers/discover.d.ts +3 -8
  46. package/dist/integrations/providers/discover.d.ts.map +1 -1
  47. package/dist/integrations/providers/discover.js +2 -12
  48. package/dist/integrations/providers/discover.js.map +1 -1
  49. package/dist/integrations/providers/discover.test.js +1 -28
  50. package/dist/integrations/providers/discover.test.js.map +1 -1
  51. package/dist/integrations/providers/index.d.ts +0 -1
  52. package/dist/integrations/providers/index.d.ts.map +1 -1
  53. package/dist/integrations/providers/index.js +0 -1
  54. package/dist/integrations/providers/index.js.map +1 -1
  55. package/dist/integrations/providers/oauth.d.ts +1 -1
  56. package/dist/integrations/providers/oauth.js +1 -1
  57. package/dist/integrations/providers/preferences.d.ts +2 -2
  58. package/dist/integrations/providers/preferences.js +2 -2
  59. package/dist/integrations/sessions/store.js +1 -1
  60. package/dist/integrations/sessions/store.js.map +1 -1
  61. package/dist/integrations/updates.d.ts +4 -12
  62. package/dist/integrations/updates.d.ts.map +1 -1
  63. package/dist/integrations/updates.js +6 -53
  64. package/dist/integrations/updates.js.map +1 -1
  65. package/dist/tui/App.d.ts.map +1 -1
  66. package/dist/tui/App.js +23 -131
  67. package/dist/tui/App.js.map +1 -1
  68. package/dist/tui/Picker.d.ts +4 -4
  69. package/dist/tui/Picker.d.ts.map +1 -1
  70. package/dist/tui/Picker.js +6 -8
  71. package/dist/tui/Picker.js.map +1 -1
  72. package/dist/tui/__tests__/deferred-tool-discovery.test.d.ts +24 -0
  73. package/dist/tui/__tests__/deferred-tool-discovery.test.d.ts.map +1 -0
  74. package/dist/tui/__tests__/deferred-tool-discovery.test.js +111 -0
  75. package/dist/tui/__tests__/deferred-tool-discovery.test.js.map +1 -0
  76. package/dist/tui/__tests__/to-agent-event.test.js +88 -0
  77. package/dist/tui/__tests__/to-agent-event.test.js.map +1 -1
  78. package/dist/tui/__tests__/working-directory.test.js +0 -6
  79. package/dist/tui/__tests__/working-directory.test.js.map +1 -1
  80. package/dist/tui/agent.d.ts +16 -2
  81. package/dist/tui/agent.d.ts.map +1 -1
  82. package/dist/tui/agent.js +83 -30
  83. package/dist/tui/agent.js.map +1 -1
  84. package/dist/tui/slashCommands.d.ts +0 -6
  85. package/dist/tui/slashCommands.d.ts.map +1 -1
  86. package/dist/tui/slashCommands.js +1 -21
  87. package/dist/tui/slashCommands.js.map +1 -1
  88. package/dist/tui/types.d.ts +12 -0
  89. package/dist/tui/types.d.ts.map +1 -1
  90. package/package.json +4 -5
  91. package/dist/commands/tools.d.ts +0 -16
  92. package/dist/commands/tools.d.ts.map +0 -1
  93. package/dist/commands/tools.js +0 -161
  94. package/dist/commands/tools.js.map +0 -1
  95. package/dist/integrations/clawtool/agents.d.ts +0 -31
  96. package/dist/integrations/clawtool/agents.d.ts.map +0 -1
  97. package/dist/integrations/clawtool/agents.js +0 -30
  98. package/dist/integrations/clawtool/agents.js.map +0 -1
  99. package/dist/integrations/clawtool/agents.test.d.ts +0 -2
  100. package/dist/integrations/clawtool/agents.test.d.ts.map +0 -1
  101. package/dist/integrations/clawtool/agents.test.js +0 -79
  102. package/dist/integrations/clawtool/agents.test.js.map +0 -1
  103. package/dist/integrations/clawtool/auth.d.ts +0 -26
  104. package/dist/integrations/clawtool/auth.d.ts.map +0 -1
  105. package/dist/integrations/clawtool/auth.js +0 -56
  106. package/dist/integrations/clawtool/auth.js.map +0 -1
  107. package/dist/integrations/clawtool/auth.test.d.ts +0 -2
  108. package/dist/integrations/clawtool/auth.test.d.ts.map +0 -1
  109. package/dist/integrations/clawtool/auth.test.js +0 -40
  110. package/dist/integrations/clawtool/auth.test.js.map +0 -1
  111. package/dist/integrations/clawtool/binary.d.ts +0 -25
  112. package/dist/integrations/clawtool/binary.d.ts.map +0 -1
  113. package/dist/integrations/clawtool/binary.js +0 -50
  114. package/dist/integrations/clawtool/binary.js.map +0 -1
  115. package/dist/integrations/clawtool/binary.test.d.ts +0 -2
  116. package/dist/integrations/clawtool/binary.test.d.ts.map +0 -1
  117. package/dist/integrations/clawtool/binary.test.js +0 -50
  118. package/dist/integrations/clawtool/binary.test.js.map +0 -1
  119. package/dist/integrations/clawtool/daemon.d.ts +0 -37
  120. package/dist/integrations/clawtool/daemon.d.ts.map +0 -1
  121. package/dist/integrations/clawtool/daemon.js +0 -109
  122. package/dist/integrations/clawtool/daemon.js.map +0 -1
  123. package/dist/integrations/clawtool/daemon.test.d.ts +0 -11
  124. package/dist/integrations/clawtool/daemon.test.d.ts.map +0 -1
  125. package/dist/integrations/clawtool/daemon.test.js +0 -118
  126. package/dist/integrations/clawtool/daemon.test.js.map +0 -1
  127. package/dist/integrations/clawtool/dispatch.d.ts +0 -33
  128. package/dist/integrations/clawtool/dispatch.d.ts.map +0 -1
  129. package/dist/integrations/clawtool/dispatch.js +0 -155
  130. package/dist/integrations/clawtool/dispatch.js.map +0 -1
  131. package/dist/integrations/clawtool/dispatch.test.d.ts +0 -2
  132. package/dist/integrations/clawtool/dispatch.test.d.ts.map +0 -1
  133. package/dist/integrations/clawtool/dispatch.test.js +0 -138
  134. package/dist/integrations/clawtool/dispatch.test.js.map +0 -1
  135. package/dist/integrations/clawtool/index.d.ts +0 -11
  136. package/dist/integrations/clawtool/index.d.ts.map +0 -1
  137. package/dist/integrations/clawtool/index.js +0 -10
  138. package/dist/integrations/clawtool/index.js.map +0 -1
  139. package/dist/integrations/clawtool/mcp.d.ts +0 -51
  140. package/dist/integrations/clawtool/mcp.d.ts.map +0 -1
  141. package/dist/integrations/clawtool/mcp.js +0 -174
  142. package/dist/integrations/clawtool/mcp.js.map +0 -1
  143. package/dist/integrations/clawtool/mcp.test.d.ts +0 -2
  144. package/dist/integrations/clawtool/mcp.test.d.ts.map +0 -1
  145. package/dist/integrations/clawtool/mcp.test.js +0 -126
  146. package/dist/integrations/clawtool/mcp.test.js.map +0 -1
  147. package/dist/integrations/clawtool/paths.d.ts +0 -8
  148. package/dist/integrations/clawtool/paths.d.ts.map +0 -1
  149. package/dist/integrations/clawtool/paths.js +0 -19
  150. package/dist/integrations/clawtool/paths.js.map +0 -1
  151. package/dist/integrations/clawtool/peers.d.ts +0 -67
  152. package/dist/integrations/clawtool/peers.d.ts.map +0 -1
  153. package/dist/integrations/clawtool/peers.js +0 -150
  154. package/dist/integrations/clawtool/peers.js.map +0 -1
  155. package/dist/integrations/clawtool/plugin.d.ts +0 -42
  156. package/dist/integrations/clawtool/plugin.d.ts.map +0 -1
  157. package/dist/integrations/clawtool/plugin.js +0 -38
  158. package/dist/integrations/clawtool/plugin.js.map +0 -1
  159. package/dist/integrations/clawtool/state.d.ts +0 -11
  160. package/dist/integrations/clawtool/state.d.ts.map +0 -1
  161. package/dist/integrations/clawtool/state.js +0 -41
  162. package/dist/integrations/clawtool/state.js.map +0 -1
  163. package/dist/integrations/clawtool/state.test.d.ts +0 -2
  164. package/dist/integrations/clawtool/state.test.d.ts.map +0 -1
  165. package/dist/integrations/clawtool/state.test.js +0 -38
  166. package/dist/integrations/clawtool/state.test.js.map +0 -1
  167. package/dist/integrations/clawtool/tooling.d.ts +0 -52
  168. package/dist/integrations/clawtool/tooling.d.ts.map +0 -1
  169. package/dist/integrations/clawtool/tooling.js +0 -91
  170. package/dist/integrations/clawtool/tooling.js.map +0 -1
  171. package/dist/integrations/clawtool/tooling.test.d.ts +0 -2
  172. package/dist/integrations/clawtool/tooling.test.d.ts.map +0 -1
  173. package/dist/integrations/clawtool/tooling.test.js +0 -58
  174. package/dist/integrations/clawtool/tooling.test.js.map +0 -1
  175. package/dist/integrations/clawtool/types.d.ts +0 -41
  176. package/dist/integrations/clawtool/types.d.ts.map +0 -1
  177. package/dist/integrations/clawtool/types.js +0 -9
  178. package/dist/integrations/clawtool/types.js.map +0 -1
  179. package/dist/integrations/providers/secrets.d.ts +0 -37
  180. package/dist/integrations/providers/secrets.d.ts.map +0 -1
  181. package/dist/integrations/providers/secrets.js +0 -69
  182. package/dist/integrations/providers/secrets.js.map +0 -1
@@ -1,126 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- import { ClawtoolMcpClient, McpProtocolError } from './mcp.js';
3
- /** Build a Response stub that mimics clawtool's Streamable HTTP SSE shape. */
4
- function sseResponse(body, sessionId) {
5
- const headers = new Headers({ 'content-type': 'text/event-stream' });
6
- if (sessionId)
7
- headers.set('Mcp-Session-Id', sessionId);
8
- const text = `data: ${JSON.stringify(body)}\n\n`;
9
- return new Response(text, { status: 200, headers });
10
- }
11
- function jsonResponse(body, status = 200) {
12
- return new Response(JSON.stringify(body), {
13
- status,
14
- headers: { 'content-type': 'application/json' },
15
- });
16
- }
17
- describe('ClawtoolMcpClient', () => {
18
- it('initialize → tools/list issues the right wire calls and threads the session id', async () => {
19
- const fetchMock = vi.fn();
20
- // 1: initialize
21
- fetchMock.mockResolvedValueOnce(sseResponse({
22
- jsonrpc: '2.0',
23
- id: 1,
24
- result: {
25
- protocolVersion: '2024-11-05',
26
- capabilities: {},
27
- serverInfo: { name: 'clawtool', version: '0.0.0' },
28
- },
29
- }, 'sid-xyz'));
30
- // 2: notifications/initialized (no body matters)
31
- fetchMock.mockResolvedValueOnce(jsonResponse({ jsonrpc: '2.0' }));
32
- // 3: tools/list
33
- fetchMock.mockResolvedValueOnce(sseResponse({
34
- jsonrpc: '2.0',
35
- id: 2,
36
- result: { tools: [{ name: 'Bash', description: 'shell', inputSchema: {} }] },
37
- }));
38
- const client = new ClawtoolMcpClient({
39
- endpoint: 'http://localhost:1234',
40
- token: 'tok',
41
- fetch: fetchMock,
42
- });
43
- const tools = await client.listTools();
44
- expect(tools).toEqual([{ name: 'Bash', description: 'shell', inputSchema: {} }]);
45
- // All three calls hit /mcp.
46
- expect(fetchMock).toHaveBeenCalledTimes(3);
47
- for (const call of fetchMock.mock.calls) {
48
- expect(call[0]).toBe('http://localhost:1234/mcp');
49
- }
50
- // Initialize carried the bearer + method headers, no session id yet.
51
- const initHeaders = fetchMock.mock.calls[0]?.[1]?.headers;
52
- expect(initHeaders.Authorization).toBe('Bearer tok');
53
- expect(initHeaders['Mcp-Method']).toBe('initialize');
54
- expect(initHeaders['Mcp-Session-Id']).toBeUndefined();
55
- // Subsequent calls echo the session id captured from the initialize response.
56
- const notifyHeaders = fetchMock.mock.calls[1]?.[1]?.headers;
57
- expect(notifyHeaders['Mcp-Session-Id']).toBe('sid-xyz');
58
- const listHeaders = fetchMock.mock.calls[2]?.[1]?.headers;
59
- expect(listHeaders['Mcp-Session-Id']).toBe('sid-xyz');
60
- expect(listHeaders['Mcp-Method']).toBe('tools/list');
61
- });
62
- it('omits the Authorization header when the token is empty (no-auth daemon)', async () => {
63
- const fetchMock = vi.fn();
64
- fetchMock.mockResolvedValue(sseResponse({
65
- jsonrpc: '2.0',
66
- id: 1,
67
- result: { protocolVersion: '2024-11-05', capabilities: {}, serverInfo: {} },
68
- }, 'sid-noauth'));
69
- const client = new ClawtoolMcpClient({
70
- endpoint: 'http://localhost:1234',
71
- token: '',
72
- fetch: fetchMock,
73
- });
74
- await client.initialize();
75
- const headers = fetchMock.mock.calls[0]?.[1]?.headers;
76
- expect(headers.Authorization).toBeUndefined();
77
- });
78
- it('tools/call adds the Mcp-Name header for the tool dispatch', async () => {
79
- const fetchMock = vi.fn();
80
- fetchMock.mockResolvedValueOnce(sseResponse({
81
- jsonrpc: '2.0',
82
- id: 1,
83
- result: { protocolVersion: '2024-11-05', capabilities: {}, serverInfo: {} },
84
- }, 'sid-call'));
85
- fetchMock.mockResolvedValueOnce(jsonResponse({ jsonrpc: '2.0' }));
86
- fetchMock.mockResolvedValueOnce(sseResponse({
87
- jsonrpc: '2.0',
88
- id: 2,
89
- result: { content: [{ type: 'text', text: 'ok' }] },
90
- }));
91
- const client = new ClawtoolMcpClient({
92
- endpoint: 'http://localhost:1234',
93
- token: 'tok',
94
- fetch: fetchMock,
95
- });
96
- const result = await client.callTool('Bash', { command: 'echo hi' });
97
- expect(result.content[0]).toEqual({ type: 'text', text: 'ok' });
98
- const callHeaders = fetchMock.mock.calls[2]?.[1]?.headers;
99
- expect(callHeaders['Mcp-Name']).toBe('Bash');
100
- });
101
- it('throws McpProtocolError on non-2xx responses', async () => {
102
- const fetchMock = vi.fn();
103
- fetchMock.mockResolvedValue(new Response('', { status: 404 }));
104
- const client = new ClawtoolMcpClient({
105
- endpoint: 'http://localhost:1234',
106
- token: '',
107
- fetch: fetchMock,
108
- });
109
- await expect(client.initialize()).rejects.toThrow(McpProtocolError);
110
- });
111
- it('throws McpProtocolError when the envelope reports a JSON-RPC error', async () => {
112
- const fetchMock = vi.fn();
113
- fetchMock.mockResolvedValueOnce(sseResponse({
114
- jsonrpc: '2.0',
115
- id: 1,
116
- error: { code: -32601, message: 'method not found' },
117
- }));
118
- const client = new ClawtoolMcpClient({
119
- endpoint: 'http://localhost:1234',
120
- token: '',
121
- fetch: fetchMock,
122
- });
123
- await expect(client.initialize()).rejects.toThrow(/method not found/);
124
- });
125
- });
126
- //# sourceMappingURL=mcp.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp.test.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/mcp.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Resolve clawtool's XDG-style config directory, honoring `XDG_CONFIG_HOME`.
3
- * Mirrors clawtool's Go `internal/daemon/daemon.go:75-77` behavior.
4
- */
5
- export declare function clawtoolConfigDir(env?: NodeJS.ProcessEnv): string;
6
- export declare function daemonStatePath(env?: NodeJS.ProcessEnv): string;
7
- export declare function listenerTokenPath(env?: NodeJS.ProcessEnv): string;
8
- //# sourceMappingURL=paths.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/integrations/clawtool/paths.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAI9E;AAED,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE5E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE9E"}
@@ -1,19 +0,0 @@
1
- import { homedir } from 'node:os';
2
- import { join } from 'node:path';
3
- /**
4
- * Resolve clawtool's XDG-style config directory, honoring `XDG_CONFIG_HOME`.
5
- * Mirrors clawtool's Go `internal/daemon/daemon.go:75-77` behavior.
6
- */
7
- export function clawtoolConfigDir(env = process.env) {
8
- const xdg = env.XDG_CONFIG_HOME;
9
- if (xdg && xdg.trim().length > 0)
10
- return join(xdg, 'clawtool');
11
- return join(homedir(), '.config', 'clawtool');
12
- }
13
- export function daemonStatePath(env = process.env) {
14
- return join(clawtoolConfigDir(env), 'daemon.json');
15
- }
16
- export function listenerTokenPath(env = process.env) {
17
- return join(clawtoolConfigDir(env), 'listener-token');
18
- }
19
- //# sourceMappingURL=paths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAA;IAC/B,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;IAC9D,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnE,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,CAAA;AACtD,CAAC"}
@@ -1,67 +0,0 @@
1
- /**
2
- * Client for clawtool's BIAM peer registry (`/v1/peers`) — the canonical
3
- * cross-terminal / cross-host agent coordination layer. namzu registers
4
- * itself here as a peer so any orchestrator (clawtool's dashboard, another
5
- * namzu's `/agents`) can see it, and messages it via the same registry.
6
- *
7
- * namzu does NOT run its own session daemon for this — clawtool already owns
8
- * peer presence, heartbeats, messaging, broadcast, mDNS LAN discovery, and a
9
- * dashboard. We just register + list + send through it.
10
- *
11
- * Every call is best-effort: with no reachable clawtool daemon the helpers
12
- * return null / [] / false so the TUI works the same with or without it.
13
- */
14
- import { type EnsureDaemonOptions } from './daemon.js';
15
- export interface Peer {
16
- readonly peer_id: string;
17
- readonly display_name: string;
18
- readonly backend: string;
19
- readonly circle?: string;
20
- readonly role?: string;
21
- readonly status?: string;
22
- readonly session_id?: string;
23
- readonly pid?: number;
24
- readonly path?: string;
25
- readonly last_seen?: string;
26
- }
27
- export interface RegisterPeerInput {
28
- readonly display_name: string;
29
- readonly backend: string;
30
- readonly path?: string;
31
- readonly session_id?: string;
32
- readonly pid?: number;
33
- readonly circle?: string;
34
- readonly metadata?: Record<string, string>;
35
- }
36
- /** Register (or refresh) this process as a BIAM peer; returns its peer_id. */
37
- export declare function registerPeer(input: RegisterPeerInput, opts?: EnsureDaemonOptions): Promise<string | null>;
38
- export declare function heartbeatPeer(peerId: string, opts?: EnsureDaemonOptions): Promise<void>;
39
- export declare function deregisterPeer(peerId: string, opts?: EnsureDaemonOptions): Promise<void>;
40
- export declare function listPeers(opts?: EnsureDaemonOptions): Promise<readonly Peer[]>;
41
- /** A message in a peer's BIAM inbox (clawtool `a2a.Message`). */
42
- export interface InboxMessage {
43
- readonly id: string;
44
- readonly type?: string;
45
- readonly from_peer: string;
46
- readonly to_peer?: string;
47
- readonly text: string;
48
- readonly correlation_id?: string;
49
- readonly timestamp?: string;
50
- }
51
- /**
52
- * Drain this peer's inbox — returns + clears pending messages other agents
53
- * sent to us. namzu polls this so clawtool / another agent can talk TO it,
54
- * not just be listed. (`peek` leaves messages in place; default drains.)
55
- */
56
- export declare function drainInbox(peerId: string, opts?: EnsureDaemonOptions & {
57
- peek?: boolean;
58
- }): Promise<readonly InboxMessage[]>;
59
- /**
60
- * Send a message to another peer's BIAM inbox. `from` is our own peer id so
61
- * the recipient knows who sent it (and can reply) — clawtool stamps it as the
62
- * message's `from_peer`.
63
- */
64
- export declare function sendPeerMessage(peerId: string, text: string, opts?: EnsureDaemonOptions & {
65
- from?: string;
66
- }): Promise<boolean>;
67
- //# sourceMappingURL=peers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"peers.d.ts","sourceRoot":"","sources":["../../../src/integrations/clawtool/peers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,mBAAmB,EAAgB,MAAM,aAAa,CAAA;AAEpE,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC1C;AAmBD,8EAA8E;AAC9E,wBAAsB,YAAY,CACjC,KAAK,EAAE,iBAAiB,EACxB,IAAI,GAAE,mBAAwB,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBxB;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAejG;AAED,wBAAsB,cAAc,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,mBAAwB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,SAAS,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAgBxF;AAED,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,mBAAmB,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GACjD,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAiBlC;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACpC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,mBAAmB,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,OAAO,CAAC,OAAO,CAAC,CAelB"}
@@ -1,150 +0,0 @@
1
- /**
2
- * Client for clawtool's BIAM peer registry (`/v1/peers`) — the canonical
3
- * cross-terminal / cross-host agent coordination layer. namzu registers
4
- * itself here as a peer so any orchestrator (clawtool's dashboard, another
5
- * namzu's `/agents`) can see it, and messages it via the same registry.
6
- *
7
- * namzu does NOT run its own session daemon for this — clawtool already owns
8
- * peer presence, heartbeats, messaging, broadcast, mDNS LAN discovery, and a
9
- * dashboard. We just register + list + send through it.
10
- *
11
- * Every call is best-effort: with no reachable clawtool daemon the helpers
12
- * return null / [] / false so the TUI works the same with or without it.
13
- */
14
- import { ensureDaemon } from './daemon.js';
15
- async function endpoint(opts) {
16
- try {
17
- return await ensureDaemon(opts);
18
- }
19
- catch {
20
- return null;
21
- }
22
- }
23
- function authHeaders(token, withBody) {
24
- const h = {};
25
- if (token.length > 0)
26
- h.Authorization = `Bearer ${token}`;
27
- if (withBody)
28
- h['content-type'] = 'application/json';
29
- return h;
30
- }
31
- /** Register (or refresh) this process as a BIAM peer; returns its peer_id. */
32
- export async function registerPeer(input, opts = {}) {
33
- const ep = await endpoint(opts);
34
- if (!ep)
35
- return null;
36
- const fetchFn = opts.fetch ?? globalThis.fetch;
37
- try {
38
- const res = await fetchFn(new URL('/v1/peers/register', ep.baseUrl).toString(), {
39
- method: 'POST',
40
- headers: authHeaders(ep.token, true),
41
- body: JSON.stringify(input),
42
- });
43
- if (!res.ok)
44
- return null;
45
- const peer = (await res.json());
46
- return typeof peer.peer_id === 'string' ? peer.peer_id : null;
47
- }
48
- catch {
49
- return null;
50
- }
51
- }
52
- export async function heartbeatPeer(peerId, opts = {}) {
53
- const ep = await endpoint(opts);
54
- if (!ep)
55
- return;
56
- const fetchFn = opts.fetch ?? globalThis.fetch;
57
- try {
58
- await fetchFn(new URL(`/v1/peers/${encodeURIComponent(peerId)}/heartbeat`, ep.baseUrl).toString(), {
59
- method: 'POST',
60
- headers: authHeaders(ep.token, false),
61
- });
62
- }
63
- catch {
64
- // best-effort
65
- }
66
- }
67
- export async function deregisterPeer(peerId, opts = {}) {
68
- const ep = await endpoint(opts);
69
- if (!ep)
70
- return;
71
- const fetchFn = opts.fetch ?? globalThis.fetch;
72
- try {
73
- await fetchFn(new URL(`/v1/peers/${encodeURIComponent(peerId)}`, ep.baseUrl).toString(), {
74
- method: 'DELETE',
75
- headers: authHeaders(ep.token, false),
76
- });
77
- }
78
- catch {
79
- // best-effort
80
- }
81
- }
82
- export async function listPeers(opts = {}) {
83
- const ep = await endpoint(opts);
84
- if (!ep)
85
- return [];
86
- const fetchFn = opts.fetch ?? globalThis.fetch;
87
- try {
88
- const res = await fetchFn(new URL('/v1/peers', ep.baseUrl).toString(), {
89
- method: 'GET',
90
- headers: authHeaders(ep.token, false),
91
- });
92
- if (!res.ok)
93
- return [];
94
- const data = (await res.json());
95
- const peers = Array.isArray(data) ? data : data.peers;
96
- return Array.isArray(peers) ? peers : [];
97
- }
98
- catch {
99
- return [];
100
- }
101
- }
102
- /**
103
- * Drain this peer's inbox — returns + clears pending messages other agents
104
- * sent to us. namzu polls this so clawtool / another agent can talk TO it,
105
- * not just be listed. (`peek` leaves messages in place; default drains.)
106
- */
107
- export async function drainInbox(peerId, opts = {}) {
108
- const ep = await endpoint(opts);
109
- if (!ep)
110
- return [];
111
- const fetchFn = opts.fetch ?? globalThis.fetch;
112
- try {
113
- const url = new URL(`/v1/peers/${encodeURIComponent(peerId)}/messages`, ep.baseUrl);
114
- if (opts.peek)
115
- url.searchParams.set('peek', '1');
116
- const res = await fetchFn(url.toString(), {
117
- method: 'GET',
118
- headers: authHeaders(ep.token, false),
119
- });
120
- if (!res.ok)
121
- return [];
122
- const data = (await res.json());
123
- return Array.isArray(data.messages) ? data.messages : [];
124
- }
125
- catch {
126
- return [];
127
- }
128
- }
129
- /**
130
- * Send a message to another peer's BIAM inbox. `from` is our own peer id so
131
- * the recipient knows who sent it (and can reply) — clawtool stamps it as the
132
- * message's `from_peer`.
133
- */
134
- export async function sendPeerMessage(peerId, text, opts = {}) {
135
- const ep = await endpoint(opts);
136
- if (!ep)
137
- return false;
138
- const fetchFn = opts.fetch ?? globalThis.fetch;
139
- const body = { text };
140
- if (opts.from)
141
- body.from_peer = opts.from;
142
- try {
143
- const res = await fetchFn(new URL(`/v1/peers/${encodeURIComponent(peerId)}/messages`, ep.baseUrl).toString(), { method: 'POST', headers: authHeaders(ep.token, true), body: JSON.stringify(body) });
144
- return res.ok;
145
- }
146
- catch {
147
- return false;
148
- }
149
- }
150
- //# sourceMappingURL=peers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"peers.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/peers.ts"],"names":[],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Clawtool default plugin.
3
- *
4
- * Connects to the local clawtool daemon (spawning it if necessary),
5
- * discovers its tool catalog via MCP `tools/list`, and adapts each tool
6
- * into the shape namzu's CLI consumes. The result is a proxy-tool list
7
- * that the agent surfaces through `namzu tools ls/run` and (later) the
8
- * M3 TUI's tool registry.
9
- *
10
- * Adapter contract is intentionally minimal — clawtool already enforces
11
- * the per-tool schema, sandboxing, and timeouts server-side. We do not
12
- * duplicate validation in TS; we forward the JSON Schema as-is so callers
13
- * (and future codegen via `sync-types`) can render it.
14
- */
15
- import { type EnsureDaemonOptions } from './daemon.js';
16
- import { ClawtoolMcpClient } from './mcp.js';
17
- import type { DaemonEndpoint, McpCallResult } from './types.js';
18
- export interface ClawtoolProxyTool {
19
- /** Tool name as advertised by clawtool (e.g. `Bash`, `Read`). */
20
- readonly name: string;
21
- readonly description: string;
22
- readonly inputSchema: Record<string, unknown>;
23
- readonly source: 'clawtool';
24
- /** Invoke the tool via clawtool's MCP `tools/call`. */
25
- call(args: Record<string, unknown>): Promise<McpCallResult>;
26
- }
27
- export interface ClawtoolPlugin {
28
- readonly name: 'clawtool';
29
- readonly endpoint: DaemonEndpoint;
30
- readonly tools: readonly ClawtoolProxyTool[];
31
- /** Underlying client, exposed for diagnostics (do not use in CLI commands). */
32
- readonly client: ClawtoolMcpClient;
33
- }
34
- export interface CreateClawtoolPluginOptions extends EnsureDaemonOptions {
35
- /** clientInfo sent on `initialize`; default `{ name: 'namzu', version: '0.0.0' }`. */
36
- readonly clientInfo?: {
37
- name: string;
38
- version: string;
39
- };
40
- }
41
- export declare function createClawtoolPlugin(opts?: CreateClawtoolPluginOptions): Promise<ClawtoolPlugin>;
42
- //# sourceMappingURL=plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/integrations/clawtool/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,KAAK,mBAAmB,EAAgB,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAqB,MAAM,YAAY,CAAA;AAElF,MAAM,WAAW,iBAAiB;IACjC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,uDAAuD;IACvD,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;CAC3D;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC5C,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAA;CAClC;AAED,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACvE,sFAAsF;IACtF,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CACvD;AAED,wBAAsB,oBAAoB,CACzC,IAAI,GAAE,2BAAgC,GACpC,OAAO,CAAC,cAAc,CAAC,CAWzB"}
@@ -1,38 +0,0 @@
1
- /**
2
- * Clawtool default plugin.
3
- *
4
- * Connects to the local clawtool daemon (spawning it if necessary),
5
- * discovers its tool catalog via MCP `tools/list`, and adapts each tool
6
- * into the shape namzu's CLI consumes. The result is a proxy-tool list
7
- * that the agent surfaces through `namzu tools ls/run` and (later) the
8
- * M3 TUI's tool registry.
9
- *
10
- * Adapter contract is intentionally minimal — clawtool already enforces
11
- * the per-tool schema, sandboxing, and timeouts server-side. We do not
12
- * duplicate validation in TS; we forward the JSON Schema as-is so callers
13
- * (and future codegen via `sync-types`) can render it.
14
- */
15
- import { ensureDaemon } from './daemon.js';
16
- import { ClawtoolMcpClient } from './mcp.js';
17
- export async function createClawtoolPlugin(opts = {}) {
18
- const endpoint = await ensureDaemon(opts);
19
- const client = new ClawtoolMcpClient({
20
- endpoint: endpoint.baseUrl,
21
- token: endpoint.token,
22
- clientInfo: opts.clientInfo,
23
- fetch: opts.fetch,
24
- });
25
- const descriptors = await client.listTools();
26
- const tools = descriptors.map((d) => toProxyTool(d, client));
27
- return { name: 'clawtool', endpoint, tools, client };
28
- }
29
- function toProxyTool(d, client) {
30
- return {
31
- name: d.name,
32
- description: d.description,
33
- inputSchema: d.inputSchema,
34
- source: 'clawtool',
35
- call: (args) => client.callTool(d.name, args),
36
- };
37
- }
38
- //# sourceMappingURL=plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAA4B,YAAY,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AA0B5C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,OAAoC,EAAE;IAEtC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC;QACpC,QAAQ,EAAE,QAAQ,CAAC,OAAO;QAC1B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;KACjB,CAAC,CAAA;IACF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAA;IAC5C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AACrD,CAAC;AAED,SAAS,WAAW,CAAC,CAAoB,EAAE,MAAyB;IACnE,OAAO;QACN,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;KAC7C,CAAA;AACF,CAAC"}
@@ -1,11 +0,0 @@
1
- import type { DaemonState } from './types.js';
2
- /**
3
- * Read clawtool's daemon state file. Returns `null` if the file is missing
4
- * (daemon not yet started) or unparseable (corrupt state — caller decides
5
- * whether to overwrite via auto-spawn).
6
- *
7
- * Path defaults to `${XDG_CONFIG_HOME:-~/.config}/clawtool/daemon.json`;
8
- * override `path` for tests.
9
- */
10
- export declare function readDaemonState(path?: string): DaemonState | null;
11
- //# sourceMappingURL=state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/integrations/clawtool/state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAejE"}
@@ -1,41 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
- import { daemonStatePath } from './paths.js';
3
- /**
4
- * Read clawtool's daemon state file. Returns `null` if the file is missing
5
- * (daemon not yet started) or unparseable (corrupt state — caller decides
6
- * whether to overwrite via auto-spawn).
7
- *
8
- * Path defaults to `${XDG_CONFIG_HOME:-~/.config}/clawtool/daemon.json`;
9
- * override `path` for tests.
10
- */
11
- export function readDaemonState(path) {
12
- const target = path ?? daemonStatePath();
13
- let raw;
14
- try {
15
- raw = readFileSync(target, 'utf8');
16
- }
17
- catch {
18
- return null;
19
- }
20
- try {
21
- const parsed = JSON.parse(raw);
22
- if (!isValidState(parsed))
23
- return null;
24
- return parsed;
25
- }
26
- catch {
27
- return null;
28
- }
29
- }
30
- function isValidState(value) {
31
- if (typeof value !== 'object' || value === null)
32
- return false;
33
- const v = value;
34
- return (typeof v.version === 'number' &&
35
- typeof v.pid === 'number' &&
36
- typeof v.port === 'number' &&
37
- typeof v.started_at === 'string' &&
38
- typeof v.token_file === 'string' &&
39
- typeof v.log_file === 'string');
40
- }
41
- //# sourceMappingURL=state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAG5C;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC5C,MAAM,MAAM,GAAG,IAAI,IAAI,eAAe,EAAE,CAAA;IACxC,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACJ,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAA;QACzC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAA;QACtC,OAAO,MAAM,CAAA;IACd,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC7D,MAAM,CAAC,GAAG,KAAgC,CAAA;IAC1C,OAAO,CACN,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAC7B,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;QACzB,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ;QAChC,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ;QAChC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAC9B,CAAA;AACF,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=state.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.test.d.ts","sourceRoot":"","sources":["../../../src/integrations/clawtool/state.test.ts"],"names":[],"mappings":""}
@@ -1,38 +0,0 @@
1
- import { mkdtempSync, writeFileSync } from 'node:fs';
2
- import { tmpdir } from 'node:os';
3
- import { join } from 'node:path';
4
- import { describe, expect, it } from 'vitest';
5
- import { readDaemonState } from './state.js';
6
- describe('readDaemonState', () => {
7
- it('returns null when the file is missing', () => {
8
- const dir = mkdtempSync(join(tmpdir(), 'namzu-state-'));
9
- expect(readDaemonState(join(dir, 'nope.json'))).toBeNull();
10
- });
11
- it('returns null on malformed JSON', () => {
12
- const dir = mkdtempSync(join(tmpdir(), 'namzu-state-'));
13
- const path = join(dir, 'daemon.json');
14
- writeFileSync(path, '{not json}');
15
- expect(readDaemonState(path)).toBeNull();
16
- });
17
- it('returns null when required fields are missing', () => {
18
- const dir = mkdtempSync(join(tmpdir(), 'namzu-state-'));
19
- const path = join(dir, 'daemon.json');
20
- writeFileSync(path, JSON.stringify({ pid: 1, port: 2 }));
21
- expect(readDaemonState(path)).toBeNull();
22
- });
23
- it('parses a valid state file', () => {
24
- const dir = mkdtempSync(join(tmpdir(), 'namzu-state-'));
25
- const path = join(dir, 'daemon.json');
26
- const state = {
27
- version: 1,
28
- pid: 1234,
29
- port: 65432,
30
- started_at: '2026-05-24T12:00:00Z',
31
- token_file: '/tmp/token',
32
- log_file: '/tmp/log',
33
- };
34
- writeFileSync(path, JSON.stringify(state));
35
- expect(readDaemonState(path)).toEqual(state);
36
- });
37
- });
38
- //# sourceMappingURL=state.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.test.js","sourceRoot":"","sources":["../../../src/integrations/clawtool/state.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAChD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAA;QACvD,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACzC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QACrC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QACjC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QACrC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACxD,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QACrC,MAAM,KAAK,GAAG;YACb,OAAO,EAAE,CAAC;YACV,GAAG,EAAE,IAAI;YACT,IAAI,EAAE,KAAK;YACX,UAAU,EAAE,sBAAsB;YAClC,UAAU,EAAE,YAAY;YACxB,QAAQ,EAAE,UAAU;SACpB,CAAA;QACD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}