shennian 0.2.5 → 0.2.6

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 (85) hide show
  1. package/package.json +1 -1
  2. package/dist/bin/shennian.d.ts +0 -2
  3. package/dist/bin/shennian.js +0 -2
  4. package/dist/src/agents/adapter.d.ts +0 -35
  5. package/dist/src/agents/adapter.js +0 -19
  6. package/dist/src/agents/claude.d.ts +0 -25
  7. package/dist/src/agents/claude.js +0 -234
  8. package/dist/src/agents/codex.d.ts +0 -49
  9. package/dist/src/agents/codex.js +0 -794
  10. package/dist/src/agents/command-spec.d.ts +0 -36
  11. package/dist/src/agents/command-spec.js +0 -303
  12. package/dist/src/agents/cursor.d.ts +0 -22
  13. package/dist/src/agents/cursor.js +0 -248
  14. package/dist/src/agents/custom.d.ts +0 -30
  15. package/dist/src/agents/custom.js +0 -210
  16. package/dist/src/agents/detect.d.ts +0 -9
  17. package/dist/src/agents/detect.js +0 -46
  18. package/dist/src/agents/gemini.d.ts +0 -17
  19. package/dist/src/agents/gemini.js +0 -172
  20. package/dist/src/agents/model-registry/cache.d.ts +0 -4
  21. package/dist/src/agents/model-registry/cache.js +0 -37
  22. package/dist/src/agents/model-registry/discovery.d.ts +0 -4
  23. package/dist/src/agents/model-registry/discovery.js +0 -161
  24. package/dist/src/agents/model-registry/parsers.d.ts +0 -11
  25. package/dist/src/agents/model-registry/parsers.js +0 -349
  26. package/dist/src/agents/model-registry/runner.d.ts +0 -6
  27. package/dist/src/agents/model-registry/runner.js +0 -29
  28. package/dist/src/agents/model-registry/service.d.ts +0 -6
  29. package/dist/src/agents/model-registry/service.js +0 -71
  30. package/dist/src/agents/model-registry/types.d.ts +0 -30
  31. package/dist/src/agents/model-registry/types.js +0 -8
  32. package/dist/src/agents/model-registry.d.ts +0 -13
  33. package/dist/src/agents/model-registry.js +0 -15
  34. package/dist/src/agents/openclaw.d.ts +0 -20
  35. package/dist/src/agents/openclaw.js +0 -273
  36. package/dist/src/agents/pi.d.ts +0 -51
  37. package/dist/src/agents/pi.js +0 -793
  38. package/dist/src/commands/agent.d.ts +0 -2
  39. package/dist/src/commands/agent.js +0 -131
  40. package/dist/src/commands/daemon.d.ts +0 -35
  41. package/dist/src/commands/daemon.js +0 -612
  42. package/dist/src/commands/pair-qr.d.ts +0 -4
  43. package/dist/src/commands/pair-qr.js +0 -6
  44. package/dist/src/commands/pair.d.ts +0 -8
  45. package/dist/src/commands/pair.js +0 -162
  46. package/dist/src/commands/upgrade.d.ts +0 -5
  47. package/dist/src/commands/upgrade.js +0 -145
  48. package/dist/src/config/index.d.ts +0 -32
  49. package/dist/src/config/index.js +0 -31
  50. package/dist/src/fs/handler.d.ts +0 -26
  51. package/dist/src/fs/handler.js +0 -130
  52. package/dist/src/fs/security.d.ts +0 -2
  53. package/dist/src/fs/security.js +0 -32
  54. package/dist/src/index.d.ts +0 -1
  55. package/dist/src/index.js +0 -277
  56. package/dist/src/log-reporter.d.ts +0 -18
  57. package/dist/src/log-reporter.js +0 -16
  58. package/dist/src/native-fusion/parsers.d.ts +0 -12
  59. package/dist/src/native-fusion/parsers.js +0 -687
  60. package/dist/src/native-fusion/service.d.ts +0 -25
  61. package/dist/src/native-fusion/service.js +0 -176
  62. package/dist/src/native-fusion/state.d.ts +0 -3
  63. package/dist/src/native-fusion/state.js +0 -22
  64. package/dist/src/native-fusion/types.d.ts +0 -24
  65. package/dist/src/native-fusion/types.js +0 -1
  66. package/dist/src/region.d.ts +0 -15
  67. package/dist/src/region.js +0 -99
  68. package/dist/src/relay/client.d.ts +0 -62
  69. package/dist/src/relay/client.js +0 -311
  70. package/dist/src/session/handlers/agents.d.ts +0 -4
  71. package/dist/src/session/handlers/agents.js +0 -55
  72. package/dist/src/session/handlers/chat.d.ts +0 -4
  73. package/dist/src/session/handlers/chat.js +0 -326
  74. package/dist/src/session/handlers/control.d.ts +0 -5
  75. package/dist/src/session/handlers/control.js +0 -57
  76. package/dist/src/session/handlers/fs.d.ts +0 -10
  77. package/dist/src/session/handlers/fs.js +0 -256
  78. package/dist/src/session/manager.d.ts +0 -28
  79. package/dist/src/session/manager.js +0 -174
  80. package/dist/src/session/store.d.ts +0 -7
  81. package/dist/src/session/store.js +0 -46
  82. package/dist/src/session/types.d.ts +0 -35
  83. package/dist/src/session/types.js +0 -4
  84. package/dist/src/upgrade/engine.d.ts +0 -64
  85. package/dist/src/upgrade/engine.js +0 -238
@@ -1,273 +0,0 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { AgentAdapter, registerAgent } from './adapter.js';
3
- import { resolveBuiltinCommand, spawnResolvedCommand } from './command-spec.js';
4
- /** Best-effort parse of `openclaw agent --json` stdout; shape may vary by version. */
5
- function extractResponseText(parsed) {
6
- if (parsed == null)
7
- return '';
8
- if (typeof parsed === 'string')
9
- return parsed;
10
- if (typeof parsed === 'object') {
11
- const o = parsed;
12
- // Primary format: { payloads: [{ text: "..." }] }
13
- if (Array.isArray(o.payloads)) {
14
- const parts = [];
15
- for (const p of o.payloads) {
16
- if (p && typeof p === 'object') {
17
- const t = p.text;
18
- if (typeof t === 'string')
19
- parts.push(t);
20
- }
21
- }
22
- if (parts.join('').trim())
23
- return parts.join('\n');
24
- }
25
- const direct = o.response ?? o.message ?? o.text ?? o.output ?? o.content ?? o.result;
26
- if (typeof direct === 'string' && direct.trim())
27
- return direct;
28
- }
29
- return '';
30
- }
31
- function extractSessionId(parsed) {
32
- if (parsed == null || typeof parsed !== 'object')
33
- return undefined;
34
- const o = parsed;
35
- const meta = o.meta;
36
- const agentMeta = meta?.agentMeta;
37
- const id = agentMeta?.sessionId ?? o.sessionId ?? o.session_id;
38
- return typeof id === 'string' && id ? id : undefined;
39
- }
40
- function extractUsage(parsed) {
41
- if (parsed == null || typeof parsed !== 'object')
42
- return undefined;
43
- const o = parsed;
44
- // Primary: meta.agentMeta.usage (openclaw format)
45
- const meta = o.meta;
46
- const agentMeta = meta?.agentMeta;
47
- const u = agentMeta?.usage ?? o.usage;
48
- if (!u || typeof u !== 'object')
49
- return undefined;
50
- const rec = u;
51
- const inTok = rec.input ?? rec.inputTokens ?? rec.input_tokens;
52
- const outTok = rec.output ?? rec.outputTokens ?? rec.output_tokens;
53
- if (typeof inTok !== 'number' && typeof outTok !== 'number')
54
- return undefined;
55
- return {
56
- inputTokens: typeof inTok === 'number' ? inTok : 0,
57
- outputTokens: typeof outTok === 'number' ? outTok : 0,
58
- };
59
- }
60
- function extractErrorMessage(parsed) {
61
- if (parsed == null || typeof parsed !== 'object')
62
- return undefined;
63
- const o = parsed;
64
- const err = o.error ?? o.err ?? o.errorMessage;
65
- if (typeof err === 'string' && err.trim())
66
- return err;
67
- return undefined;
68
- }
69
- export class OpenClawAdapter extends AgentAdapter {
70
- type = 'openclaw';
71
- process = null;
72
- sessionId = null;
73
- /** OpenClaw session id from JSON or `resume()`; falls back to app `sessionId`. */
74
- agentSessionId = null;
75
- currentModelId = null;
76
- workDir = null;
77
- seq = 0;
78
- runId = '';
79
- async start(sessionId, workDir, agentSessionId) {
80
- this.sessionId = sessionId;
81
- this.workDir = workDir;
82
- this.seq = 0;
83
- if (agentSessionId)
84
- this.agentSessionId = agentSessionId;
85
- }
86
- async send(text, modelId) {
87
- await this.killProcess();
88
- this.runId = randomUUID();
89
- this.seq = 0;
90
- const sid = this.agentSessionId ?? this.sessionId;
91
- if (!sid) {
92
- this.emitEvent({ state: 'error', message: 'openclaw: session not started' });
93
- return;
94
- }
95
- // OpenClaw `openclaw agent` uses session-scoped model; `--model` on the same CLI may not apply here.
96
- // Sending `/model <id>` as a message matches interactive `/model` and updates the session before the user turn.
97
- if (modelId && modelId !== this.currentModelId) {
98
- const modelSwitch = await this.runAgentCommand(['--message', `/model ${modelId}`, '--session-id', sid]);
99
- if (!modelSwitch.ok) {
100
- this.emitEvent({ state: 'error', message: modelSwitch.error ?? 'openclaw model switch failed' });
101
- return;
102
- }
103
- this.currentModelId = modelId;
104
- }
105
- this.spawnAgent(['--message', text, '--session-id', sid]);
106
- }
107
- async resume(agentSessionId) {
108
- await this.killProcess();
109
- this.agentSessionId = agentSessionId;
110
- this.runId = randomUUID();
111
- this.seq = 0;
112
- // No new user turn; minimal body so the CLI accepts the invocation.
113
- this.spawnAgent(['--message', '\u200b', '--session-id', agentSessionId]);
114
- }
115
- async stop() {
116
- await this.killProcess();
117
- }
118
- spawnAgent(extraArgs) {
119
- const spec = resolveBuiltinCommand('openclaw');
120
- if (!spec) {
121
- this.emit('error', new Error('Command "openclaw" not found. Is OpenClaw CLI installed?'));
122
- return;
123
- }
124
- const args = ['agent', '--local', '--json', ...extraArgs];
125
- const proc = spawnResolvedCommand(spec, args, {
126
- cwd: this.workDir ?? undefined,
127
- stdio: ['ignore', 'pipe', 'pipe'],
128
- env: { ...process.env },
129
- });
130
- this.process = proc;
131
- let stdoutBuf = '';
132
- proc.stdout?.on('data', (chunk) => {
133
- stdoutBuf += chunk.toString();
134
- });
135
- let stderrBuf = '';
136
- proc.stderr?.on('data', (chunk) => {
137
- stderrBuf += chunk.toString();
138
- });
139
- proc.on('close', (code) => {
140
- if (this.process !== proc)
141
- return;
142
- this.process = null;
143
- if (code !== 0 && code !== null) {
144
- const msg = stderrBuf.trim() || `openclaw exited with code ${code}`;
145
- this.emitEvent({ state: 'error', message: msg });
146
- return;
147
- }
148
- const raw = stdoutBuf.trim();
149
- if (!raw) {
150
- const msg = stderrBuf.trim() || 'openclaw returned empty stdout';
151
- this.emitEvent({ state: 'error', message: msg });
152
- return;
153
- }
154
- let parsed;
155
- try {
156
- parsed = JSON.parse(raw);
157
- }
158
- catch {
159
- this.emitEvent({
160
- state: 'error',
161
- message: `openclaw stdout is not valid JSON: ${raw.slice(0, 200)}`,
162
- });
163
- return;
164
- }
165
- const rec = parsed;
166
- const failed = rec.ok === false || rec.success === false;
167
- if (failed) {
168
- this.emitEvent({
169
- state: 'error',
170
- message: extractErrorMessage(parsed) ?? 'openclaw request failed',
171
- });
172
- return;
173
- }
174
- const nextSid = extractSessionId(parsed);
175
- if (nextSid)
176
- this.agentSessionId = nextSid;
177
- const text = extractResponseText(parsed);
178
- if (text) {
179
- this.emitEvent({ state: 'delta', text });
180
- }
181
- const usage = extractUsage(parsed);
182
- this.emitEvent({ state: 'final', agentSessionId: this.agentSessionId ?? undefined, usage });
183
- });
184
- proc.on('error', (err) => {
185
- if (this.process !== proc)
186
- return;
187
- this.process = null;
188
- if (err.code === 'ENOENT') {
189
- this.emit('error', new Error('Command "openclaw" not found. Is OpenClaw CLI installed?'));
190
- }
191
- else {
192
- this.emit('error', err);
193
- }
194
- });
195
- }
196
- async runAgentCommand(extraArgs) {
197
- return new Promise((resolve) => {
198
- const spec = resolveBuiltinCommand('openclaw');
199
- if (!spec) {
200
- resolve({ ok: false, error: 'Command "openclaw" not found. Is OpenClaw CLI installed?' });
201
- return;
202
- }
203
- const args = ['agent', '--local', '--json', ...extraArgs];
204
- const proc = spawnResolvedCommand(spec, args, {
205
- cwd: this.workDir ?? undefined,
206
- stdio: ['ignore', 'pipe', 'pipe'],
207
- env: { ...process.env },
208
- });
209
- let stdoutBuf = '';
210
- let stderrBuf = '';
211
- proc.stdout?.on('data', (chunk) => {
212
- stdoutBuf += chunk.toString();
213
- });
214
- proc.stderr?.on('data', (chunk) => {
215
- stderrBuf += chunk.toString();
216
- });
217
- proc.on('close', (code) => {
218
- if (code !== 0 && code !== null) {
219
- resolve({ ok: false, error: stderrBuf.trim() || `openclaw exited with code ${code}` });
220
- return;
221
- }
222
- const raw = stdoutBuf.trim();
223
- if (!raw) {
224
- resolve({ ok: true });
225
- return;
226
- }
227
- try {
228
- const parsed = JSON.parse(raw);
229
- if (parsed.ok === false || parsed.success === false) {
230
- resolve({
231
- ok: false,
232
- error: extractErrorMessage(parsed) ?? 'openclaw request failed',
233
- });
234
- return;
235
- }
236
- const nextSid = extractSessionId(parsed);
237
- if (nextSid)
238
- this.agentSessionId = nextSid;
239
- resolve({ ok: true, parsed });
240
- }
241
- catch {
242
- resolve({ ok: false, error: `openclaw stdout is not valid JSON: ${raw.slice(0, 200)}` });
243
- }
244
- });
245
- proc.on('error', (err) => {
246
- resolve({ ok: false, error: err instanceof Error ? err.message : String(err) });
247
- });
248
- });
249
- }
250
- emitEvent(partial) {
251
- const event = {
252
- ...partial,
253
- runId: this.runId,
254
- seq: this.seq++,
255
- };
256
- this.emit('agentEvent', event);
257
- }
258
- async killProcess() {
259
- const proc = this.process;
260
- if (!proc)
261
- return;
262
- this.process = null;
263
- proc.kill('SIGTERM');
264
- await new Promise((resolve) => {
265
- proc.on('close', resolve);
266
- setTimeout(() => {
267
- proc.kill('SIGKILL');
268
- resolve();
269
- }, 3000);
270
- });
271
- }
272
- }
273
- registerAgent('openclaw', () => new OpenClawAdapter());
@@ -1,51 +0,0 @@
1
- import { AgentAdapter } from './adapter.js';
2
- export declare class PiAdapter extends AgentAdapter {
3
- readonly type: "pi";
4
- private agent;
5
- private sessionId;
6
- private workDir;
7
- private seq;
8
- private runId;
9
- private emittedLengths;
10
- private terminalState;
11
- private authToken;
12
- private proxyUrl;
13
- private sessionDir;
14
- private messagesPath;
15
- private snapshotPath;
16
- private summaryPath;
17
- private cachedSummary;
18
- private restoredMessages;
19
- private compressing;
20
- private lastSummaryMsgCount;
21
- private pendingBaseMessages;
22
- private finalizePromise;
23
- private pendingSendStart;
24
- start(sessionId: string, workDir: string, _agentSessionId?: string | null): Promise<void>;
25
- send(text: string, modelId?: string): Promise<void>;
26
- private initAgent;
27
- /**
28
- * After each turn, compress old messages and actually replace them in the
29
- * Agent's internal state. This is the primary compression mechanism.
30
- */
31
- private compressAndReplace;
32
- /**
33
- * Safety fallback: if messages somehow exceed the threshold at LLM call time
34
- * (e.g. compressAndReplace hasn't run yet), return a truncated view using
35
- * the cached summary. Does NOT call LLM — avoids nested async delays.
36
- */
37
- private compressContext;
38
- private splitMessages;
39
- private generateSummary;
40
- private loadSnapshot;
41
- private loadSummary;
42
- private saveSummary;
43
- private saveSnapshot;
44
- private appendMessagesLog;
45
- private getTurnMessages;
46
- private finalizeTurn;
47
- resume(_agentSessionId: string): Promise<void>;
48
- stop(): Promise<void>;
49
- private resolvePendingSendStart;
50
- private rejectPendingSendStart;
51
- }