shennian 0.1.28 → 0.1.30

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 (99) hide show
  1. package/dist/src/__tests__/agents-e2e.d.ts +3 -2
  2. package/dist/src/__tests__/agents-e2e.d.ts.map +1 -1
  3. package/dist/src/__tests__/agents-e2e.js +3 -2
  4. package/dist/src/__tests__/agents-e2e.js.map +1 -1
  5. package/dist/src/__tests__/claude-adapter.test.d.ts +2 -0
  6. package/dist/src/__tests__/claude-adapter.test.d.ts.map +1 -0
  7. package/dist/src/__tests__/claude-adapter.test.js +75 -0
  8. package/dist/src/__tests__/claude-adapter.test.js.map +1 -0
  9. package/dist/src/__tests__/codex-adapter.test.js +55 -0
  10. package/dist/src/__tests__/codex-adapter.test.js.map +1 -1
  11. package/dist/src/__tests__/custom-agent-flow.test.d.ts +2 -0
  12. package/dist/src/__tests__/custom-agent-flow.test.d.ts.map +1 -0
  13. package/dist/src/__tests__/custom-agent-flow.test.js +244 -0
  14. package/dist/src/__tests__/custom-agent-flow.test.js.map +1 -0
  15. package/dist/src/__tests__/e2e-relay.js +39 -1
  16. package/dist/src/__tests__/e2e-relay.js.map +1 -1
  17. package/dist/src/__tests__/model-switching.test.js +20 -0
  18. package/dist/src/__tests__/model-switching.test.js.map +1 -1
  19. package/dist/src/__tests__/native-session-sync.test.d.ts +2 -0
  20. package/dist/src/__tests__/native-session-sync.test.d.ts.map +1 -0
  21. package/dist/src/__tests__/native-session-sync.test.js +198 -0
  22. package/dist/src/__tests__/native-session-sync.test.js.map +1 -0
  23. package/dist/src/__tests__/pi-context.test.js +64 -10
  24. package/dist/src/__tests__/pi-context.test.js.map +1 -1
  25. package/dist/src/__tests__/session-manager.test.js +2 -1
  26. package/dist/src/__tests__/session-manager.test.js.map +1 -1
  27. package/dist/src/agents/claude.d.ts +5 -0
  28. package/dist/src/agents/claude.d.ts.map +1 -1
  29. package/dist/src/agents/claude.js +49 -23
  30. package/dist/src/agents/claude.js.map +1 -1
  31. package/dist/src/agents/codex.d.ts +3 -0
  32. package/dist/src/agents/codex.d.ts.map +1 -1
  33. package/dist/src/agents/codex.js +68 -5
  34. package/dist/src/agents/codex.js.map +1 -1
  35. package/dist/src/agents/detect.d.ts +1 -1
  36. package/dist/src/agents/detect.d.ts.map +1 -1
  37. package/dist/src/agents/detect.js +2 -7
  38. package/dist/src/agents/detect.js.map +1 -1
  39. package/dist/src/agents/model-registry/discovery.d.ts.map +1 -1
  40. package/dist/src/agents/model-registry/discovery.js +2 -0
  41. package/dist/src/agents/model-registry/discovery.js.map +1 -1
  42. package/dist/src/agents/model-registry/runner.d.ts.map +1 -1
  43. package/dist/src/agents/model-registry/runner.js +11 -1
  44. package/dist/src/agents/model-registry/runner.js.map +1 -1
  45. package/dist/src/agents/model-registry/types.d.ts +2 -0
  46. package/dist/src/agents/model-registry/types.d.ts.map +1 -1
  47. package/dist/src/agents/model-registry/types.js +2 -2
  48. package/dist/src/agents/model-registry/types.js.map +1 -1
  49. package/dist/src/agents/pi.d.ts +3 -0
  50. package/dist/src/agents/pi.d.ts.map +1 -1
  51. package/dist/src/agents/pi.js +129 -39
  52. package/dist/src/agents/pi.js.map +1 -1
  53. package/dist/src/commands/daemon.d.ts.map +1 -1
  54. package/dist/src/commands/daemon.js +6 -5
  55. package/dist/src/commands/daemon.js.map +1 -1
  56. package/dist/src/config/index.d.ts +2 -0
  57. package/dist/src/config/index.d.ts.map +1 -1
  58. package/dist/src/config/index.js +13 -5
  59. package/dist/src/config/index.js.map +1 -1
  60. package/dist/src/index.js +12 -7
  61. package/dist/src/index.js.map +1 -1
  62. package/dist/src/native-sync/discover.d.ts +6 -0
  63. package/dist/src/native-sync/discover.d.ts.map +1 -0
  64. package/dist/src/native-sync/discover.js +69 -0
  65. package/dist/src/native-sync/discover.js.map +1 -0
  66. package/dist/src/native-sync/parsers.d.ts +3 -0
  67. package/dist/src/native-sync/parsers.d.ts.map +1 -0
  68. package/dist/src/native-sync/parsers.js +373 -0
  69. package/dist/src/native-sync/parsers.js.map +1 -0
  70. package/dist/src/native-sync/service.d.ts +16 -0
  71. package/dist/src/native-sync/service.d.ts.map +1 -0
  72. package/dist/src/native-sync/service.js +95 -0
  73. package/dist/src/native-sync/service.js.map +1 -0
  74. package/dist/src/native-sync/state.d.ts +6 -0
  75. package/dist/src/native-sync/state.d.ts.map +1 -0
  76. package/dist/src/native-sync/state.js +34 -0
  77. package/dist/src/native-sync/state.js.map +1 -0
  78. package/dist/src/native-sync/types.d.ts +23 -0
  79. package/dist/src/native-sync/types.d.ts.map +1 -0
  80. package/dist/src/native-sync/types.js +4 -0
  81. package/dist/src/native-sync/types.js.map +1 -0
  82. package/dist/src/relay/client.d.ts +3 -0
  83. package/dist/src/relay/client.d.ts.map +1 -1
  84. package/dist/src/relay/client.js +63 -19
  85. package/dist/src/relay/client.js.map +1 -1
  86. package/dist/src/session/handlers/chat.d.ts.map +1 -1
  87. package/dist/src/session/handlers/chat.js +15 -13
  88. package/dist/src/session/handlers/chat.js.map +1 -1
  89. package/dist/src/session/manager.d.ts +3 -1
  90. package/dist/src/session/manager.d.ts.map +1 -1
  91. package/dist/src/session/manager.js +9 -2
  92. package/dist/src/session/manager.js.map +1 -1
  93. package/dist/src/session/store.d.ts.map +1 -1
  94. package/dist/src/session/store.js +2 -2
  95. package/dist/src/session/store.js.map +1 -1
  96. package/dist/src/upgrade/engine.js +4 -4
  97. package/dist/src/upgrade/engine.js.map +1 -1
  98. package/dist/tsconfig.tsbuildinfo +1 -1
  99. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * @arch docs/architecture/cli/agent-adapters.md
3
3
  * @covers src/agents/adapter.ts
4
- * @covers src/agents/claude.ts, codex.ts, gemini.ts, cursor.ts, openclaw.ts
4
+ * @covers src/agents/claude.ts, codex.ts, gemini.ts, cursor.ts, openclaw.ts, pi.ts
5
5
  * @covers src/agents/custom.ts
6
6
  *
7
- * E2E smoke test for all agent adapters (built-in + custom).
7
+ * E2E smoke test for all currently enabled agent adapters (built-in + custom).
8
8
  *
9
9
  * Usage: npx tsx src/__tests__/agents-e2e.ts [agent-name]
10
10
  *
@@ -17,4 +17,5 @@ import '../agents/codex.js';
17
17
  import '../agents/gemini.js';
18
18
  import '../agents/cursor.js';
19
19
  import '../agents/openclaw.js';
20
+ import '../agents/pi.js';
20
21
  //# sourceMappingURL=agents-e2e.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents-e2e.d.ts","sourceRoot":"","sources":["../../../src/__tests__/agents-e2e.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,qBAAqB,CAAA;AAC5B,OAAO,oBAAoB,CAAA;AAC3B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,uBAAuB,CAAA"}
1
+ {"version":3,"file":"agents-e2e.d.ts","sourceRoot":"","sources":["../../../src/__tests__/agents-e2e.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,qBAAqB,CAAA;AAC5B,OAAO,oBAAoB,CAAA;AAC3B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,uBAAuB,CAAA;AAC9B,OAAO,iBAAiB,CAAA"}
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * @arch docs/architecture/cli/agent-adapters.md
3
3
  * @covers src/agents/adapter.ts
4
- * @covers src/agents/claude.ts, codex.ts, gemini.ts, cursor.ts, openclaw.ts
4
+ * @covers src/agents/claude.ts, codex.ts, gemini.ts, cursor.ts, openclaw.ts, pi.ts
5
5
  * @covers src/agents/custom.ts
6
6
  *
7
- * E2E smoke test for all agent adapters (built-in + custom).
7
+ * E2E smoke test for all currently enabled agent adapters (built-in + custom).
8
8
  *
9
9
  * Usage: npx tsx src/__tests__/agents-e2e.ts [agent-name]
10
10
  *
@@ -19,6 +19,7 @@ import '../agents/codex.js';
19
19
  import '../agents/gemini.js';
20
20
  import '../agents/cursor.js';
21
21
  import '../agents/openclaw.js';
22
+ import '../agents/pi.js';
22
23
  import { registerCustomAgent } from '../agents/custom.js';
23
24
  import { createAgent, getRegisteredAgents } from '../agents/adapter.js';
24
25
  // Register the built-in example agent as a custom agent for e2e testing.
@@ -1 +1 @@
1
- {"version":3,"file":"agents-e2e.js","sourceRoot":"","sources":["../../../src/__tests__/agents-e2e.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents-e2e.js","sourceRoot":"","sources":["../../../src/__tests__/agents-e2e.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=claude-adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-adapter.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/claude-adapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ // @arch docs/architecture/cli/agent-adapters.md
2
+ // @covers src/agents/claude.ts
3
+ import { describe, expect, it } from 'vitest';
4
+ import { ClaudeAdapter } from '../agents/claude.js';
5
+ function createHarness() {
6
+ const adapter = new ClaudeAdapter();
7
+ const internal = adapter;
8
+ internal.runId = 'run-claude-test';
9
+ internal.seq = 0;
10
+ const events = [];
11
+ adapter.on('agentEvent', (event) => events.push(event));
12
+ return { internal, events };
13
+ }
14
+ describe('ClaudeAdapter', () => {
15
+ it('emits final only once when success is followed by process close fallback', () => {
16
+ const { internal, events } = createHarness();
17
+ internal.handleStreamEvent({
18
+ type: 'result',
19
+ subtype: 'success',
20
+ session_id: 'claude-session-1',
21
+ usage: { input_tokens: 12, output_tokens: 34 },
22
+ });
23
+ internal.handleProcessClose(0, '');
24
+ expect(events.filter((event) => event.state === 'final')).toEqual([
25
+ expect.objectContaining({
26
+ state: 'final',
27
+ agentSessionId: 'claude-session-1',
28
+ usage: { inputTokens: 12, outputTokens: 34 },
29
+ }),
30
+ ]);
31
+ });
32
+ it('falls back to final when the stream ends cleanly without an explicit success event', () => {
33
+ const { internal, events } = createHarness();
34
+ internal.agentSessionId = 'claude-session-2';
35
+ internal.handleProcessClose(0, '');
36
+ expect(events).toEqual([
37
+ expect.objectContaining({
38
+ state: 'final',
39
+ agentSessionId: 'claude-session-2',
40
+ }),
41
+ ]);
42
+ });
43
+ it('suppresses close fallback errors after a terminal stream error', () => {
44
+ const { internal, events } = createHarness();
45
+ internal.handleStreamEvent({
46
+ type: 'result',
47
+ subtype: 'error',
48
+ error: 'rate limited',
49
+ });
50
+ internal.handleProcessClose(1, 'claude exited with code 1');
51
+ expect(events.filter((event) => event.state === 'error')).toEqual([
52
+ expect.objectContaining({
53
+ state: 'error',
54
+ message: 'rate limited',
55
+ }),
56
+ ]);
57
+ });
58
+ it('fails fast when Claude reports authentication_failed retries', () => {
59
+ const { internal, events } = createHarness();
60
+ internal.handleStreamEvent({
61
+ type: 'system',
62
+ subtype: 'api_retry',
63
+ error: 'authentication_failed',
64
+ error_status: 401,
65
+ });
66
+ internal.handleProcessClose(1, 'authentication failed');
67
+ expect(events.filter((event) => event.state === 'error')).toEqual([
68
+ expect.objectContaining({
69
+ state: 'error',
70
+ message: 'Claude authentication failed. Run "claude auth login" and retry.',
71
+ }),
72
+ ]);
73
+ });
74
+ });
75
+ //# sourceMappingURL=claude-adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-adapter.test.js","sourceRoot":"","sources":["../../../src/__tests__/claude-adapter.test.ts"],"names":[],"mappings":"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"}
@@ -66,6 +66,48 @@ describe('CodexAdapter', () => {
66
66
  }),
67
67
  ]);
68
68
  });
69
+ it('emits web_search items as block text so they do not stick to the previous paragraph', () => {
70
+ const { internal, events } = createHarness();
71
+ internal.handleStreamEvent({
72
+ type: 'item.completed',
73
+ item: { type: 'agent_message', text: '先看一下资料。' },
74
+ });
75
+ internal.handleStreamEvent({
76
+ type: 'item.completed',
77
+ item: { type: 'web_search', query: 'site:help.aliyun.com DashScope response_format' },
78
+ });
79
+ expect(events.filter((event) => event.state === 'delta')).toEqual([
80
+ expect.objectContaining({ state: 'delta', text: '先看一下资料。' }),
81
+ expect.objectContaining({
82
+ state: 'delta',
83
+ text: '\n\n[web_search] site:help.aliyun.com DashScope response_format',
84
+ }),
85
+ ]);
86
+ });
87
+ it('emits file_change summaries as block text so update lines keep their own paragraph', () => {
88
+ const { internal, events } = createHarness();
89
+ internal.handleStreamEvent({
90
+ type: 'item.completed',
91
+ item: { type: 'agent_message', text: '我已经修改了这些文件:' },
92
+ });
93
+ internal.handleStreamEvent({
94
+ type: 'item.completed',
95
+ item: {
96
+ type: 'file_change',
97
+ changes: [
98
+ { kind: 'update', path: '/root/shennian/packages/app/src/components/chat/ChatWebView.web.tsx' },
99
+ { kind: 'update', path: '/root/shennian/packages/app/src/components/chat/webview/chat.js' },
100
+ ],
101
+ },
102
+ });
103
+ expect(events.filter((event) => event.state === 'delta')).toEqual([
104
+ expect.objectContaining({ state: 'delta', text: '我已经修改了这些文件:' }),
105
+ expect.objectContaining({
106
+ state: 'delta',
107
+ text: '\n\nupdate: /root/shennian/packages/app/src/components/chat/ChatWebView.web.tsx\nupdate: /root/shennian/packages/app/src/components/chat/webview/chat.js',
108
+ }),
109
+ ]);
110
+ });
69
111
  it('emits final on turn.completed with usage and agent session id', () => {
70
112
  const { internal, events } = createHarness();
71
113
  internal.agentSessionId = 'thread-123';
@@ -117,6 +159,19 @@ describe('CodexAdapter', () => {
117
159
  }),
118
160
  ]);
119
161
  });
162
+ it('ignores known codex tail stderr noise on zero exit', () => {
163
+ const { internal, events } = createHarness();
164
+ internal.handleProcessClose(0, [
165
+ 'WARNING: proceeding, even though we could not update PATH: Operation not permitted (os error 1)',
166
+ 'Reading additional input from stdin...',
167
+ '2026-04-18T03:38:55.217996Z ERROR codex_core::codex: failed to record rollout items: failed to queue rollout items: channel closed',
168
+ ].join('\n'));
169
+ expect(events).toEqual([
170
+ expect.objectContaining({
171
+ state: 'final',
172
+ }),
173
+ ]);
174
+ });
120
175
  it('suppresses close fallback after a terminal error has already been emitted', () => {
121
176
  const { internal, events } = createHarness();
122
177
  internal.handleStreamEvent({
@@ -1 +1 @@
1
- {"version":3,"file":"codex-adapter.test.js","sourceRoot":"","sources":["../../../src/__tests__/codex-adapter.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-adapter.test.js","sourceRoot":"","sources":["../../../src/__tests__/codex-adapter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=custom-agent-flow.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-agent-flow.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/custom-agent-flow.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,244 @@
1
+ // @covers src/commands/agent.ts
2
+ // @covers src/agents/custom.ts
3
+ // @covers src/session/manager.ts
4
+ import fs from 'node:fs';
5
+ import http from 'node:http';
6
+ import os from 'node:os';
7
+ import path from 'node:path';
8
+ import { spawn } from 'node:child_process';
9
+ import { fileURLToPath } from 'node:url';
10
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
11
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
12
+ const repoRoot = path.resolve(__dirname, '../../../..');
13
+ const cliEntry = path.resolve(__dirname, '../index.ts');
14
+ const nodeDemoSource = path.resolve(repoRoot, 'packages/agent-protocol/examples/node/agent.mjs');
15
+ const pythonDemoSource = path.resolve(repoRoot, 'packages/agent-protocol/examples/python/agent.py');
16
+ class MockRelayClient {
17
+ events = [];
18
+ agentEvents = [];
19
+ responses = [];
20
+ sendRes(payload) {
21
+ this.responses.push(payload);
22
+ }
23
+ sendEvent(payload) {
24
+ this.events.push(payload);
25
+ }
26
+ sendAgentEvent(payload) {
27
+ this.agentEvents.push(payload);
28
+ }
29
+ waitForTerminal(sessionId, timeoutMs = 10_000) {
30
+ const start = Date.now();
31
+ return new Promise((resolve, reject) => {
32
+ const poll = () => {
33
+ const found = this.agentEvents.find((event) => {
34
+ const payload = event.payload;
35
+ return payload?.sessionId === sessionId && (payload.state === 'final' || payload.state === 'error');
36
+ });
37
+ if (found) {
38
+ resolve(found);
39
+ return;
40
+ }
41
+ if (Date.now() - start > timeoutMs) {
42
+ reject(new Error(`Timed out waiting for terminal event of ${sessionId}`));
43
+ return;
44
+ }
45
+ setTimeout(poll, 20);
46
+ };
47
+ poll();
48
+ });
49
+ }
50
+ }
51
+ function runCli(args, env) {
52
+ return new Promise((resolve, reject) => {
53
+ const proc = spawn(process.execPath, ['--import', 'tsx', cliEntry, ...args], {
54
+ cwd: repoRoot,
55
+ env: { ...process.env, ...env },
56
+ stdio: ['ignore', 'pipe', 'pipe'],
57
+ });
58
+ let stdout = '';
59
+ let stderr = '';
60
+ proc.stdout.on('data', (chunk) => { stdout += chunk.toString(); });
61
+ proc.stderr.on('data', (chunk) => { stderr += chunk.toString(); });
62
+ proc.on('error', reject);
63
+ proc.on('close', (code) => {
64
+ if (code === 0) {
65
+ resolve({ stdout, stderr });
66
+ return;
67
+ }
68
+ reject(new Error(`CLI exited with ${code}\nstdout:\n${stdout}\nstderr:\n${stderr}`));
69
+ });
70
+ });
71
+ }
72
+ async function startMockDeepSeek() {
73
+ const requests = [];
74
+ const server = http.createServer((req, res) => {
75
+ if (req.method !== 'POST' || req.url !== '/chat/completions') {
76
+ res.writeHead(404).end();
77
+ return;
78
+ }
79
+ const chunks = [];
80
+ req.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
81
+ req.on('end', () => {
82
+ const payload = JSON.parse(Buffer.concat(chunks).toString('utf8'));
83
+ requests.push(payload);
84
+ const userMessages = payload.messages.filter((message) => message.role === 'user');
85
+ const lastUser = userMessages[userMessages.length - 1]?.content ?? '';
86
+ const content = `model=${payload.model};turn=${userMessages.length};last=${lastUser}`;
87
+ res.writeHead(200, { 'content-type': 'application/json' });
88
+ res.end(JSON.stringify({
89
+ choices: [{ message: { content } }],
90
+ usage: {
91
+ prompt_tokens: 100 + userMessages.length,
92
+ completion_tokens: 10 + userMessages.length,
93
+ },
94
+ }));
95
+ });
96
+ });
97
+ await new Promise((resolve) => server.listen(0, '127.0.0.1', () => resolve()));
98
+ const address = server.address();
99
+ if (!address || typeof address === 'string')
100
+ throw new Error('Failed to bind mock DeepSeek server');
101
+ return {
102
+ requests,
103
+ url: `http://127.0.0.1:${address.port}`,
104
+ async close() {
105
+ await new Promise((resolve, reject) => server.close((error) => error ? reject(error) : resolve()));
106
+ },
107
+ };
108
+ }
109
+ function writeDemoFixture(sourcePath, demoRoot, envLines) {
110
+ fs.mkdirSync(demoRoot, { recursive: true });
111
+ const targetPath = path.join(demoRoot, path.basename(sourcePath));
112
+ fs.copyFileSync(sourcePath, targetPath);
113
+ fs.writeFileSync(path.join(demoRoot, '.env'), envLines.join('\n') + '\n');
114
+ return targetPath;
115
+ }
116
+ async function importFreshCliModules() {
117
+ vi.resetModules();
118
+ const [{ SessionManager }, adapterModule] = await Promise.all([
119
+ import('../session/manager.js'),
120
+ import('../agents/adapter.js'),
121
+ ]);
122
+ return {
123
+ SessionManager,
124
+ getRegisteredAgents: adapterModule.getRegisteredAgents,
125
+ };
126
+ }
127
+ describe('custom agent flow', () => {
128
+ let tempHome;
129
+ let tempRoot;
130
+ beforeEach(() => {
131
+ tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'shennian-custom-home-'));
132
+ tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'shennian-custom-demo-'));
133
+ process.env.SHENNIAN_HOME = tempHome;
134
+ });
135
+ afterEach(() => {
136
+ delete process.env.SHENNIAN_HOME;
137
+ });
138
+ it('registers node and python demos, runs chat + resume, and removes them', async () => {
139
+ const mockDeepSeek = await startMockDeepSeek();
140
+ try {
141
+ const nodeAgentPath = writeDemoFixture(nodeDemoSource, path.join(tempRoot, 'node-demo'), [
142
+ 'DEEPSEEK_API_KEY=test-key',
143
+ `DEEPSEEK_BASE_URL=${mockDeepSeek.url}`,
144
+ 'DEEPSEEK_DEFAULT_MODEL=deepseek-chat',
145
+ 'DEEPSEEK_REASONER_MODEL=deepseek-reasoner',
146
+ ]);
147
+ const pythonAgentPath = writeDemoFixture(pythonDemoSource, path.join(tempRoot, 'python-demo'), [
148
+ 'DEEPSEEK_API_KEY=test-key',
149
+ `DEEPSEEK_BASE_URL=${mockDeepSeek.url}`,
150
+ 'DEEPSEEK_DEFAULT_MODEL=deepseek-chat',
151
+ 'DEEPSEEK_REASONER_MODEL=deepseek-reasoner',
152
+ ]);
153
+ await runCli(['agent', 'add', 'demo-node', '--command', `node ${nodeAgentPath}`], { SHENNIAN_HOME: tempHome });
154
+ await runCli(['agent', 'add', 'demo-python', '--command', `python3 ${pythonAgentPath}`], { SHENNIAN_HOME: tempHome });
155
+ const listed = await runCli(['agent', 'list'], { SHENNIAN_HOME: tempHome });
156
+ expect(listed.stdout).toContain('demo-node');
157
+ expect(listed.stdout).toContain('demo-python');
158
+ expect(listed.stdout).toContain('deepseek-chat, deepseek-reasoner');
159
+ const config = JSON.parse(fs.readFileSync(path.join(tempHome, 'config.json'), 'utf8'));
160
+ expect(config.customAgents['demo-node'].caps.models).toEqual(['deepseek-chat', 'deepseek-reasoner']);
161
+ expect(config.customAgents['demo-node'].caps.resume).toBe(true);
162
+ expect(config.customAgents['demo-python'].caps.resume).toBe(true);
163
+ const { SessionManager, getRegisteredAgents } = await importFreshCliModules();
164
+ const client = new MockRelayClient();
165
+ const manager = new SessionManager(client);
166
+ expect(getRegisteredAgents()).toContain('custom:demo-node');
167
+ expect(getRegisteredAgents()).toContain('custom:demo-python');
168
+ for (const entry of [
169
+ { name: 'demo-node', agentType: 'custom:demo-node' },
170
+ { name: 'demo-python', agentType: 'custom:demo-python' },
171
+ ]) {
172
+ const firstSessionId = `${entry.name}-session`;
173
+ const firstPrompt = `${entry.name} first turn`;
174
+ const secondPrompt = `${entry.name} second turn`;
175
+ const firstTerminal = client.waitForTerminal(firstSessionId);
176
+ await manager.handleReq({
177
+ type: 'req',
178
+ id: `${entry.name}-req-1`,
179
+ method: 'chat.send',
180
+ params: {
181
+ sessionId: firstSessionId,
182
+ text: firstPrompt,
183
+ agentType: entry.agentType,
184
+ workDir: tempRoot,
185
+ modelId: 'deepseek-reasoner',
186
+ },
187
+ });
188
+ await firstTerminal;
189
+ const firstDelta = client.agentEvents.find((event) => {
190
+ const payload = event.payload;
191
+ return payload?.sessionId === firstSessionId && payload.state === 'delta';
192
+ });
193
+ expect(firstDelta?.payload?.text).toContain('model=deepseek-reasoner;turn=1');
194
+ const sessionUpdate = client.events.find((event) => {
195
+ const session = event.payload?.session;
196
+ return event.event === 'session.update' && session?.id === firstSessionId;
197
+ });
198
+ const agentSessionId = sessionUpdate?.payload?.session?.agentSessionId;
199
+ expect(agentSessionId).toBeTruthy();
200
+ manager.cleanup();
201
+ const resumedClient = new MockRelayClient();
202
+ const resumedManager = new SessionManager(resumedClient);
203
+ const secondTerminal = resumedClient.waitForTerminal(firstSessionId);
204
+ await resumedManager.handleReq({
205
+ type: 'req',
206
+ id: `${entry.name}-req-2`,
207
+ method: 'chat.send',
208
+ params: {
209
+ sessionId: firstSessionId,
210
+ text: secondPrompt,
211
+ agentType: entry.agentType,
212
+ workDir: tempRoot,
213
+ agentSessionId,
214
+ modelId: 'deepseek-chat',
215
+ },
216
+ });
217
+ await secondTerminal;
218
+ const secondDelta = resumedClient.agentEvents.find((event) => {
219
+ const payload = event.payload;
220
+ return payload?.sessionId === firstSessionId && payload.state === 'delta';
221
+ });
222
+ expect(secondDelta?.payload?.text).toContain('model=deepseek-chat;turn=2');
223
+ const matchingRequests = mockDeepSeek.requests.filter((request) => request.messages.some((message) => message.role === 'user' && typeof message.content === 'string' && message.content.includes(entry.name)));
224
+ expect(matchingRequests).toHaveLength(2);
225
+ expect(matchingRequests[1]?.messages.map((message) => message.content)).toContain(firstPrompt);
226
+ expect(matchingRequests[1]?.messages.some((message) => message.role === 'assistant' && message.content.includes('turn=1'))).toBe(true);
227
+ resumedManager.cleanup();
228
+ }
229
+ await runCli(['agent', 'remove', 'demo-node'], { SHENNIAN_HOME: tempHome });
230
+ await runCli(['agent', 'remove', 'demo-python'], { SHENNIAN_HOME: tempHome });
231
+ const listedAfterRemove = await runCli(['agent', 'list'], { SHENNIAN_HOME: tempHome });
232
+ expect(listedAfterRemove.stdout).toContain('No custom agents registered.');
233
+ const { SessionManager: EmptySessionManager, getRegisteredAgents: getAgentsAfterRemove } = await importFreshCliModules();
234
+ const emptyManager = new EmptySessionManager(new MockRelayClient());
235
+ expect(getAgentsAfterRemove()).not.toContain('custom:demo-node');
236
+ expect(getAgentsAfterRemove()).not.toContain('custom:demo-python');
237
+ emptyManager.cleanup();
238
+ }
239
+ finally {
240
+ await mockDeepSeek.close();
241
+ }
242
+ }, 30_000);
243
+ });
244
+ //# sourceMappingURL=custom-agent-flow.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-agent-flow.test.js","sourceRoot":"","sources":["../../../src/__tests__/custom-agent-flow.test.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,9 @@ if (!USER_TOKEN) {
27
27
  process.exit(1);
28
28
  }
29
29
  const WS_BASE = SERVER.replace(/^https:/, 'wss:').replace(/^http:/, 'ws:');
30
- const API_BASE = SERVER.endsWith('/api') ? SERVER : `${SERVER}/api`;
30
+ const API_BASE = SERVER.endsWith('/api') || SERVER.startsWith('http://localhost') || SERVER.startsWith('http://127.0.0.1')
31
+ ? SERVER
32
+ : `${SERVER}/api`;
31
33
  let idCounter = 0;
32
34
  function nextId() {
33
35
  return `test_${Date.now()}_${++idCounter}`;
@@ -137,17 +139,53 @@ async function runForAgent(machineId, agentType, relay) {
137
139
  let collectedText = '';
138
140
  let gotFinal = false;
139
141
  let gotError = '';
142
+ let sawSessionActivity = false;
143
+ const extractMessageText = (rawPayload) => {
144
+ if (typeof rawPayload !== 'string')
145
+ return '';
146
+ try {
147
+ const parsed = JSON.parse(rawPayload);
148
+ if (parsed.type === 'text')
149
+ return `${parsed.thinking ?? ''}${parsed.content ?? ''}`;
150
+ if (parsed.type === 'error')
151
+ return parsed.content ?? '';
152
+ return rawPayload;
153
+ }
154
+ catch {
155
+ return rawPayload;
156
+ }
157
+ };
140
158
  await new Promise((resolve) => {
141
159
  const check = setInterval(() => {
142
160
  for (const evt of events) {
143
161
  const payload = evt.payload;
144
162
  if (!payload)
145
163
  continue;
164
+ if (evt.event === 'session.message' && payload.sessionId === sessionId) {
165
+ const message = payload.message;
166
+ const text = extractMessageText(message?.payload);
167
+ if (text)
168
+ collectedText += text;
169
+ continue;
170
+ }
171
+ if (evt.event === 'session.activity' && payload.sessionId === sessionId) {
172
+ const activity = payload.activity;
173
+ if (activity) {
174
+ sawSessionActivity = true;
175
+ }
176
+ else if (sawSessionActivity) {
177
+ gotFinal = true;
178
+ }
179
+ continue;
180
+ }
181
+ // Backward compatibility for older relay servers that still forward raw agent events.
146
182
  if (payload.state === 'delta' && typeof payload.text === 'string') {
147
183
  collectedText += payload.text;
184
+ continue;
148
185
  }
149
186
  if (payload.state === 'final') {
150
187
  gotFinal = true;
188
+ continue;
151
189
  }
152
190
  if (payload.state === 'error') {
153
191
  gotError = String(payload.message ?? 'unknown error');