zelari-code 1.45.0 → 1.47.1

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 (65) hide show
  1. package/dist/cli/app.js +4 -1
  2. package/dist/cli/app.js.map +1 -1
  3. package/dist/cli/ast/engine.js +86 -23
  4. package/dist/cli/ast/engine.js.map +1 -1
  5. package/dist/cli/ast/engine.test.js +101 -0
  6. package/dist/cli/ast/engine.test.js.map +1 -0
  7. package/dist/cli/ast/tools.js +77 -15
  8. package/dist/cli/ast/tools.js.map +1 -1
  9. package/dist/cli/ast/tools.test.js +124 -0
  10. package/dist/cli/ast/tools.test.js.map +1 -0
  11. package/dist/cli/budget/tokenBudget.js +14 -12
  12. package/dist/cli/budget/tokenBudget.js.map +1 -1
  13. package/dist/cli/hooks/conversationContext.js +7 -4
  14. package/dist/cli/hooks/conversationContext.js.map +1 -1
  15. package/dist/cli/hooks/observationStore.js +219 -0
  16. package/dist/cli/hooks/observationStore.js.map +1 -0
  17. package/dist/cli/hooks/observationStore.test.js +135 -0
  18. package/dist/cli/hooks/observationStore.test.js.map +1 -0
  19. package/dist/cli/hooks/sessionSurface.js +171 -0
  20. package/dist/cli/hooks/sessionSurface.js.map +1 -0
  21. package/dist/cli/hooks/sessionSurface.test.js +112 -0
  22. package/dist/cli/hooks/sessionSurface.test.js.map +1 -0
  23. package/dist/cli/hooks/useChatTurn.js +27 -0
  24. package/dist/cli/hooks/useChatTurn.js.map +1 -1
  25. package/dist/cli/hooks/useSession.js +5 -3
  26. package/dist/cli/hooks/useSession.js.map +1 -1
  27. package/dist/cli/lsp/manager.js +10 -0
  28. package/dist/cli/lsp/manager.js.map +1 -1
  29. package/dist/cli/lsp/tools.js +37 -2
  30. package/dist/cli/lsp/tools.js.map +1 -1
  31. package/dist/cli/lsp/tools.test.js +90 -0
  32. package/dist/cli/lsp/tools.test.js.map +1 -0
  33. package/dist/cli/main.bundled.js +2339 -952
  34. package/dist/cli/main.bundled.js.map +4 -4
  35. package/dist/cli/metrics.js +4 -0
  36. package/dist/cli/metrics.js.map +1 -1
  37. package/dist/cli/provider/capabilities.js +53 -0
  38. package/dist/cli/provider/capabilities.js.map +1 -0
  39. package/dist/cli/provider/capabilities.test.js +46 -0
  40. package/dist/cli/provider/capabilities.test.js.map +1 -0
  41. package/dist/cli/provider/openai-compatible.js +2 -1
  42. package/dist/cli/provider/openai-compatible.js.map +1 -1
  43. package/dist/cli/toolRegistry.js +50 -5
  44. package/dist/cli/toolRegistry.js.map +1 -1
  45. package/dist/cli/tools/inspectCommand.js +346 -0
  46. package/dist/cli/tools/inspectCommand.js.map +1 -0
  47. package/dist/cli/tools/inspectCommand.test.js +311 -0
  48. package/dist/cli/tools/inspectCommand.test.js.map +1 -0
  49. package/dist/cli/tools/inspectTypecheckSafety.js +104 -0
  50. package/dist/cli/tools/inspectTypecheckSafety.js.map +1 -0
  51. package/dist/cli/tools/observeBatch.js +254 -0
  52. package/dist/cli/tools/observeBatch.js.map +1 -0
  53. package/dist/cli/tools/observeBatch.test.js +329 -0
  54. package/dist/cli/tools/observeBatch.test.js.map +1 -0
  55. package/dist/cli/tools/retrieveObservation.js +82 -0
  56. package/dist/cli/tools/retrieveObservation.js.map +1 -0
  57. package/dist/cli/tools/taskTool.js +4 -0
  58. package/dist/cli/tools/taskTool.js.map +1 -1
  59. package/dist/cli/utils/contextGrowthSummary.js +55 -0
  60. package/dist/cli/utils/contextGrowthSummary.js.map +1 -0
  61. package/dist/cli/utils/contextGrowthSummary.test.js +74 -0
  62. package/dist/cli/utils/contextGrowthSummary.test.js.map +1 -0
  63. package/dist/cli/utils/doctor.js +26 -0
  64. package/dist/cli/utils/doctor.js.map +1 -1
  65. package/package.json +2 -2
@@ -0,0 +1,346 @@
1
+ /**
2
+ * inspectCommand — allowlisted, no-shell command inspector (WS3, v0.10.0).
3
+ *
4
+ * Available in plan/readOnly sessions exactly where `bash` is NOT: it gives
5
+ * plan-mode "execution-verified" observations (git state, `tsc --noEmit`)
6
+ * without unlocking mutations. The API is a discriminated union on
7
+ * `operation` — the model picks from a menu, it never writes a command
8
+ * string, so tokenizer/quote-parsing/metacharacter injection do not exist by
9
+ * construction. Every argv is built here and executed with
10
+ * `spawn(cmd, argv, { shell: false })`.
11
+ *
12
+ * Loud results: every payload carries `inspectionClass`
13
+ * ('git-inspection' | 'project-code-execution' | 'env-info') so the model
14
+ * knows when it is executing project code (typecheck) vs reading git state.
15
+ * `typecheck` additionally applies the S3.5 artifact-safety guard (see
16
+ * inspectTypecheckSafety.ts): tsbuildinfo redirected to the OS temp dir and
17
+ * a pre/post workspace fingerprint — any delta is reported as `degraded`
18
+ * with cleanup, never silently ignored.
19
+ *
20
+ * Kill-switch: ZELARI_INSPECT_COMMAND=0 (checked at registration time).
21
+ */
22
+ import { spawn } from 'node:child_process';
23
+ import { createHash } from 'node:crypto';
24
+ import { existsSync, promises as fs } from 'node:fs';
25
+ import os from 'node:os';
26
+ import path from 'node:path';
27
+ import { z } from 'zod';
28
+ import { typedOk, typedErr } from '@zelari/core/harness/tools/toolTypes';
29
+ import { classifyTypecheckRefusal, cleanupArtifacts, diffFingerprints, fingerprintWorkspace, } from './inspectTypecheckSafety.js';
30
+ /** Combined output cap (stdout+stderr) — 8 KB, matches the plan. */
31
+ const MAX_OUTPUT_CHARS = 8 * 1024;
32
+ /** Internal process timeout; the tool-level timeoutMs is 90 s. */
33
+ const SPAWN_TIMEOUT_MS = 85_000;
34
+ /** typecheck gets a longer leash: real projects take tens of seconds. */
35
+ const TYPECHECK_TIMEOUT_MS = 85_000;
36
+ export const inspectInputSchema = z.discriminatedUnion('operation', [
37
+ z.object({ operation: z.literal('git_status'), short: z.boolean().optional() }),
38
+ z.object({
39
+ operation: z.literal('git_log'),
40
+ limit: z.number().int().min(1).max(200).optional(),
41
+ oneline: z.boolean().optional(),
42
+ }),
43
+ z.object({
44
+ operation: z.literal('git_diff'),
45
+ staged: z.boolean().optional(),
46
+ path: z.string().optional(),
47
+ }),
48
+ z.object({ operation: z.literal('git_show'), ref: z.string().min(1) }),
49
+ z.object({ operation: z.literal('git_branch_current') }),
50
+ z.object({ operation: z.literal('git_ls_files') }),
51
+ z.object({ operation: z.literal('typecheck'), project: z.string().optional() }),
52
+ z.object({ operation: z.literal('node_version') }),
53
+ z.object({ operation: z.literal('npm_ls') }),
54
+ z.object({ operation: z.literal('npm_outdated') }),
55
+ z.object({ operation: z.literal('npm_view'), package: z.string().min(1) }),
56
+ ]);
57
+ /**
58
+ * Resolve a hoisted monorepo binary (`typescript/bin/tsc`, `npm/bin/npm-cli.js`).
59
+ * Walks from `start` toward the filesystem root so `npm test --workspace=@zelari/core`
60
+ * (cwd = packages/core) still finds the root-hoisted toolchain.
61
+ */
62
+ export function resolveNodeModuleBin(start, rel) {
63
+ let dir = path.resolve(start);
64
+ for (;;) {
65
+ const candidate = path.join(dir, 'node_modules', rel);
66
+ if (existsSync(candidate))
67
+ return candidate;
68
+ const parent = path.dirname(dir);
69
+ if (parent === dir)
70
+ return undefined;
71
+ dir = parent;
72
+ }
73
+ }
74
+ /** Free-string args that must never be interpretable as flags. */
75
+ function rejectFlagLike(kind, value) {
76
+ if (value.startsWith('-')) {
77
+ return `${kind} must not start with "-" (got ${JSON.stringify(value)}) — pass a value, not a flag`;
78
+ }
79
+ return null;
80
+ }
81
+ /**
82
+ * Pure argv builder — one case per operation. No user string ever reaches a
83
+ * shell; forced safety flags (`--no-ext-diff --no-textconv` on diff/show)
84
+ * cannot be disabled by input.
85
+ */
86
+ export function buildInspectCommand(op, ctx) {
87
+ switch (op.operation) {
88
+ case 'git_status':
89
+ return {
90
+ ok: true,
91
+ command: 'git',
92
+ argv: ['status', ...(op.short ? ['--short'] : [])],
93
+ inspectionClass: 'git-inspection',
94
+ };
95
+ case 'git_log':
96
+ return {
97
+ ok: true,
98
+ command: 'git',
99
+ argv: [
100
+ 'log',
101
+ ...(op.oneline ? ['--oneline'] : []),
102
+ ...(op.limit !== undefined ? ['-n', String(op.limit)] : []),
103
+ ],
104
+ inspectionClass: 'git-inspection',
105
+ };
106
+ case 'git_diff': {
107
+ if (op.path !== undefined) {
108
+ const err = rejectFlagLike('path', op.path);
109
+ if (err)
110
+ return { ok: false, reason: err };
111
+ }
112
+ return {
113
+ ok: true,
114
+ command: 'git',
115
+ argv: [
116
+ 'diff',
117
+ '--no-ext-diff',
118
+ '--no-textconv',
119
+ ...(op.staged ? ['--staged'] : []),
120
+ ...(op.path !== undefined ? ['--', op.path] : []),
121
+ ],
122
+ inspectionClass: 'git-inspection',
123
+ };
124
+ }
125
+ case 'git_show': {
126
+ const err = rejectFlagLike('ref', op.ref);
127
+ if (err)
128
+ return { ok: false, reason: err };
129
+ return {
130
+ ok: true,
131
+ command: 'git',
132
+ argv: ['show', '--no-ext-diff', '--no-textconv', op.ref],
133
+ inspectionClass: 'git-inspection',
134
+ };
135
+ }
136
+ case 'git_branch_current':
137
+ return { ok: true, command: 'git', argv: ['branch', '--show-current'], inspectionClass: 'git-inspection' };
138
+ case 'git_ls_files':
139
+ return { ok: true, command: 'git', argv: ['ls-files'], inspectionClass: 'git-inspection' };
140
+ case 'node_version':
141
+ return { ok: true, command: process.execPath, argv: ['--version'], inspectionClass: 'env-info' };
142
+ case 'npm_ls':
143
+ case 'npm_outdated':
144
+ case 'npm_view': {
145
+ const npmCli = ctx.npmCliPath ??
146
+ resolveNodeModuleBin(ctx.root, path.join('npm', 'bin', 'npm-cli.js')) ??
147
+ path.join(ctx.root, 'node_modules', 'npm', 'bin', 'npm-cli.js');
148
+ if (op.operation === 'npm_view') {
149
+ const err = rejectFlagLike('package', op.package);
150
+ if (err)
151
+ return { ok: false, reason: err };
152
+ }
153
+ const sub = op.operation === 'npm_ls'
154
+ ? ['ls', '--depth=0']
155
+ : op.operation === 'npm_outdated'
156
+ ? ['outdated']
157
+ : ['view', op.package];
158
+ return { ok: true, command: process.execPath, argv: [npmCli, ...sub], inspectionClass: 'env-info' };
159
+ }
160
+ case 'typecheck': {
161
+ const project = path.resolve(ctx.cwd, op.project ?? 'tsconfig.json');
162
+ const hash = createHash('sha256').update(project).digest('hex').slice(0, 16);
163
+ const tsBuildInfoFile = path.join(os.tmpdir(), 'zelari-inspect', `${hash}.tsbuildinfo`);
164
+ return {
165
+ ok: true,
166
+ command: process.execPath,
167
+ argv: [
168
+ ctx.tscPath ??
169
+ resolveNodeModuleBin(ctx.root, path.join('typescript', 'bin', 'tsc')) ??
170
+ resolveNodeModuleBin(ctx.cwd, path.join('typescript', 'bin', 'tsc')) ??
171
+ path.join(ctx.root, 'node_modules', 'typescript', 'bin', 'tsc'),
172
+ '--noEmit',
173
+ // S3.5 primary mechanism: redirect, never disable — composite forces
174
+ // incremental (TS#30661), so --incremental false would break on the
175
+ // very fixture it must support. The CLI override wins over any
176
+ // tsBuildInfoFile written into the tsconfig.
177
+ '--incremental',
178
+ '--tsBuildInfoFile',
179
+ tsBuildInfoFile,
180
+ '-p',
181
+ project,
182
+ ],
183
+ inspectionClass: 'project-code-execution',
184
+ tsBuildInfoFile,
185
+ };
186
+ }
187
+ }
188
+ }
189
+ /** Spawn WITHOUT a shell; kill on timeout/abort; never reject. */
190
+ export function runSpawn(command, argv, opts) {
191
+ return new Promise((resolve) => {
192
+ let child;
193
+ try {
194
+ child = spawn(command, argv, { cwd: opts.cwd, shell: false });
195
+ }
196
+ catch (err) {
197
+ resolve({ code: null, stdout: '', stderr: String(err), timedOut: false, spawnError: String(err) });
198
+ return;
199
+ }
200
+ let stdout = '';
201
+ let stderr = '';
202
+ let timedOut = false;
203
+ let settled = false;
204
+ const timer = setTimeout(() => {
205
+ timedOut = true;
206
+ child.kill();
207
+ }, opts.timeoutMs);
208
+ const onAbort = () => {
209
+ timedOut = true;
210
+ child.kill();
211
+ };
212
+ opts.signal?.addEventListener('abort', onAbort, { once: true });
213
+ child.stdout?.on('data', (d) => (stdout += d.toString()));
214
+ child.stderr?.on('data', (d) => (stderr += d.toString()));
215
+ child.on('error', (err) => {
216
+ if (settled)
217
+ return;
218
+ settled = true;
219
+ clearTimeout(timer);
220
+ resolve({ code: null, stdout, stderr, timedOut, spawnError: err.message });
221
+ });
222
+ child.on('close', (code) => {
223
+ if (settled)
224
+ return;
225
+ settled = true;
226
+ clearTimeout(timer);
227
+ opts.signal?.removeEventListener('abort', onAbort);
228
+ resolve({ code, stdout, stderr, timedOut });
229
+ });
230
+ });
231
+ }
232
+ function capOutput(stdout, stderr) {
233
+ const combined = stderr ? `${stdout}\n[stderr]\n${stderr}` : stdout;
234
+ if (combined.length <= MAX_OUTPUT_CHARS)
235
+ return { output: combined, truncated: false };
236
+ return {
237
+ output: `${combined.slice(0, MAX_OUTPUT_CHARS)}\n… (truncated, ${combined.length} chars total)`,
238
+ truncated: true,
239
+ };
240
+ }
241
+ /** typecheck with the S3.5 pre/post artifact guard. */
242
+ async function typecheckGuarded(built, root, signal) {
243
+ const pre = await fingerprintWorkspace(root);
244
+ const r = await runSpawn(built.command, built.argv, { cwd: root, timeoutMs: TYPECHECK_TIMEOUT_MS, signal });
245
+ if (r.spawnError) {
246
+ return typedErr(`SPAWN_ERROR: typecheck could not launch: ${r.spawnError}`);
247
+ }
248
+ const { output, truncated } = capOutput(r.stdout, r.stderr);
249
+ const refusal = r.code !== 0 ? classifyTypecheckRefusal(`${r.stdout}\n${r.stderr}`) : null;
250
+ if (refusal) {
251
+ return typedOk({
252
+ status: 'unsupported_project_shape',
253
+ operation: 'typecheck',
254
+ inspectionClass: built.inspectionClass,
255
+ reason: refusal,
256
+ exitCode: r.code,
257
+ output,
258
+ truncated,
259
+ });
260
+ }
261
+ const post = await fingerprintWorkspace(root);
262
+ const delta = diffFingerprints(pre, post);
263
+ if (delta.newTsbuildinfo.length > 0 || delta.gitStatusChanged) {
264
+ const cleanup = await cleanupArtifacts(root, delta.newTsbuildinfo);
265
+ return typedOk({
266
+ status: 'degraded',
267
+ operation: 'typecheck',
268
+ inspectionClass: built.inspectionClass,
269
+ exitCode: r.code,
270
+ output,
271
+ truncated,
272
+ artifactsWritten: delta.newTsbuildinfo,
273
+ gitStatusChanged: delta.gitStatusChanged,
274
+ cleanedUp: cleanup.cleaned,
275
+ cleanupFailed: cleanup.failed,
276
+ note: 'UNEXPECTED WORKSPACE ARTIFACTS: the typecheck wrote build artifacts into the workspace ' +
277
+ 'despite the tsbuildinfo redirect. This result is NOT a clean observation — treat the ' +
278
+ 'typecheck verdict as unreliable until the artifact leak is understood. ' +
279
+ `${cleanup.cleaned.length} artifact(s) removed, ${cleanup.failed.length} could not be removed.`,
280
+ });
281
+ }
282
+ return typedOk({
283
+ status: 'ok',
284
+ operation: 'typecheck',
285
+ inspectionClass: built.inspectionClass,
286
+ exitCode: r.code,
287
+ output,
288
+ truncated,
289
+ note: r.code === 0
290
+ ? 'compiler completed with no diagnostics; tsbuildinfo was redirected to the OS temp dir — the workspace is untouched (verified by pre/post fingerprint)'
291
+ : `compiler exited ${r.code} — diagnostics above are real type errors (a successful, scoped observation: the run itself worked and wrote nothing to the workspace)`,
292
+ });
293
+ }
294
+ /**
295
+ * Create the `inspect_command` tool bound to a workspace root. Registration is
296
+ * the registry's job (readOnly/plan/explore only — full/verify keep `bash`).
297
+ */
298
+ export function createInspectCommandTool(rootOrDeps) {
299
+ const deps = typeof rootOrDeps === 'string' ? { root: rootOrDeps } : rootOrDeps;
300
+ const tool = {
301
+ name: 'inspect_command',
302
+ description: 'Allowlisted read-only command inspector for plan/read-only sessions (no shell, no mutations). ' +
303
+ 'Pick an operation instead of writing a command: git_status, git_log, git_diff, git_show, ' +
304
+ 'git_branch_current, git_ls_files, typecheck, node_version, npm_ls, npm_outdated, npm_view. ' +
305
+ 'typecheck runs the project TypeScript compiler with --noEmit and a temp-dir tsbuildinfo ' +
306
+ 'redirect, verified by a pre/post workspace fingerprint (inspectionClass: ' +
307
+ "'project-code-execution' — you are executing the project's own toolchain, not reading git).",
308
+ permissions: ['read'],
309
+ timeoutMs: 90_000,
310
+ inputSchema: inspectInputSchema,
311
+ execute: async (input, ctx) => {
312
+ const op = input;
313
+ const cwd = ctx?.cwd ?? deps.root;
314
+ const built = buildInspectCommand(op, { root: deps.root, cwd, tscPath: deps.tscPath, npmCliPath: deps.npmCliPath });
315
+ if (!built.ok)
316
+ return typedErr(`INVALID_ARGUMENT: ${built.reason}`);
317
+ if (op.operation === 'typecheck') {
318
+ const tsc = built.argv[0];
319
+ try {
320
+ await fs.access(tsc);
321
+ }
322
+ catch {
323
+ return typedErr(`TYPESCRIPT_UNAVAILABLE: no TypeScript compiler at ${tsc} — inspect_command typecheck ` +
324
+ 'uses the project toolchain (walk-up to node_modules/typescript/bin/tsc) and refuses to ' +
325
+ 'guess. Install dependencies or fall back to read_file/grep_content.');
326
+ }
327
+ return typecheckGuarded(built, deps.root, ctx?.signal);
328
+ }
329
+ const r = await runSpawn(built.command, built.argv, { cwd, timeoutMs: SPAWN_TIMEOUT_MS, signal: ctx?.signal });
330
+ if (r.spawnError)
331
+ return typedErr(`SPAWN_ERROR: ${op.operation} could not launch: ${r.spawnError}`);
332
+ const { output, truncated } = capOutput(r.stdout, r.stderr);
333
+ return typedOk({
334
+ status: r.timedOut ? 'timeout' : 'ok',
335
+ operation: op.operation,
336
+ inspectionClass: built.inspectionClass,
337
+ exitCode: r.code,
338
+ output,
339
+ truncated,
340
+ ...(r.timedOut ? { note: `command timed out after ${SPAWN_TIMEOUT_MS} ms` } : {}),
341
+ });
342
+ },
343
+ };
344
+ return tool;
345
+ }
346
+ //# sourceMappingURL=inspectCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspectCommand.js","sourceRoot":"","sources":["../../../src/cli/tools/inspectCommand.ts"],"names":[],"mappings":"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"}