@zelari/core 1.49.0 → 2.0.0-alpha.2

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 (105) hide show
  1. package/dist/experimental.d.ts +17 -0
  2. package/dist/experimental.d.ts.map +1 -0
  3. package/dist/experimental.js +31 -0
  4. package/dist/experimental.js.map +1 -0
  5. package/dist/index.d.ts +5 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +10 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/mission/index.d.ts +5 -0
  10. package/dist/mission/index.d.ts.map +1 -0
  11. package/dist/mission/index.js +5 -0
  12. package/dist/mission/index.js.map +1 -0
  13. package/dist/mission/missionState.d.ts +37 -0
  14. package/dist/mission/missionState.d.ts.map +1 -0
  15. package/dist/mission/missionState.js +61 -0
  16. package/dist/mission/missionState.js.map +1 -0
  17. package/dist/runtime/executionContext.d.ts +46 -0
  18. package/dist/runtime/executionContext.d.ts.map +1 -0
  19. package/dist/runtime/executionContext.js +63 -0
  20. package/dist/runtime/executionContext.js.map +1 -0
  21. package/dist/runtime/index.d.ts +10 -0
  22. package/dist/runtime/index.d.ts.map +1 -0
  23. package/dist/runtime/index.js +10 -0
  24. package/dist/runtime/index.js.map +1 -0
  25. package/dist/runtime/memoryProviders.d.ts +27 -0
  26. package/dist/runtime/memoryProviders.d.ts.map +1 -0
  27. package/dist/runtime/memoryProviders.js +64 -0
  28. package/dist/runtime/memoryProviders.js.map +1 -0
  29. package/dist/runtime/nodeProviders.d.ts +21 -0
  30. package/dist/runtime/nodeProviders.d.ts.map +1 -0
  31. package/dist/runtime/nodeProviders.js +138 -0
  32. package/dist/runtime/nodeProviders.js.map +1 -0
  33. package/dist/runtime/profiles.d.ts +44 -0
  34. package/dist/runtime/profiles.d.ts.map +1 -0
  35. package/dist/runtime/profiles.js +91 -0
  36. package/dist/runtime/profiles.js.map +1 -0
  37. package/dist/runtime/providers.d.ts +85 -0
  38. package/dist/runtime/providers.d.ts.map +1 -0
  39. package/dist/runtime/providers.js +58 -0
  40. package/dist/runtime/providers.js.map +1 -0
  41. package/dist/runtime/worktreeWorkspace.d.ts +38 -0
  42. package/dist/runtime/worktreeWorkspace.d.ts.map +1 -0
  43. package/dist/runtime/worktreeWorkspace.js +80 -0
  44. package/dist/runtime/worktreeWorkspace.js.map +1 -0
  45. package/dist/session/exportSession.d.ts +31 -0
  46. package/dist/session/exportSession.d.ts.map +1 -0
  47. package/dist/session/exportSession.js +37 -0
  48. package/dist/session/exportSession.js.map +1 -0
  49. package/dist/session/index.d.ts +15 -0
  50. package/dist/session/index.d.ts.map +1 -0
  51. package/dist/session/index.js +15 -0
  52. package/dist/session/index.js.map +1 -0
  53. package/dist/session/lineage.d.ts +38 -0
  54. package/dist/session/lineage.d.ts.map +1 -0
  55. package/dist/session/lineage.js +69 -0
  56. package/dist/session/lineage.js.map +1 -0
  57. package/dist/session/modelSurface.d.ts +43 -0
  58. package/dist/session/modelSurface.d.ts.map +1 -0
  59. package/dist/session/modelSurface.js +96 -0
  60. package/dist/session/modelSurface.js.map +1 -0
  61. package/dist/session/replay.d.ts +61 -0
  62. package/dist/session/replay.d.ts.map +1 -0
  63. package/dist/session/replay.js +137 -0
  64. package/dist/session/replay.js.map +1 -0
  65. package/dist/session/store.d.ts +60 -0
  66. package/dist/session/store.d.ts.map +1 -0
  67. package/dist/session/store.js +117 -0
  68. package/dist/session/store.js.map +1 -0
  69. package/dist/session/types.d.ts +85 -0
  70. package/dist/session/types.d.ts.map +1 -0
  71. package/dist/session/types.js +62 -0
  72. package/dist/session/types.js.map +1 -0
  73. package/dist/session/writer.d.ts +44 -0
  74. package/dist/session/writer.d.ts.map +1 -0
  75. package/dist/session/writer.js +114 -0
  76. package/dist/session/writer.js.map +1 -0
  77. package/dist/verification/completionPolicy.d.ts +33 -0
  78. package/dist/verification/completionPolicy.d.ts.map +1 -0
  79. package/dist/verification/completionPolicy.js +68 -0
  80. package/dist/verification/completionPolicy.js.map +1 -0
  81. package/dist/verification/criteriaPack.v1.d.ts +27 -0
  82. package/dist/verification/criteriaPack.v1.d.ts.map +1 -0
  83. package/dist/verification/criteriaPack.v1.js +58 -0
  84. package/dist/verification/criteriaPack.v1.js.map +1 -0
  85. package/dist/verification/engine.d.ts +38 -0
  86. package/dist/verification/engine.d.ts.map +1 -0
  87. package/dist/verification/engine.js +163 -0
  88. package/dist/verification/engine.js.map +1 -0
  89. package/dist/verification/index.d.ts +11 -0
  90. package/dist/verification/index.d.ts.map +1 -0
  91. package/dist/verification/index.js +11 -0
  92. package/dist/verification/index.js.map +1 -0
  93. package/dist/verification/metrics.d.ts +26 -0
  94. package/dist/verification/metrics.d.ts.map +1 -0
  95. package/dist/verification/metrics.js +29 -0
  96. package/dist/verification/metrics.js.map +1 -0
  97. package/dist/verification/types.d.ts +161 -0
  98. package/dist/verification/types.d.ts.map +1 -0
  99. package/dist/verification/types.js +92 -0
  100. package/dist/verification/types.js.map +1 -0
  101. package/dist/verification/verifier.d.ts +133 -0
  102. package/dist/verification/verifier.d.ts.map +1 -0
  103. package/dist/verification/verifier.js +215 -0
  104. package/dist/verification/verifier.js.map +1 -0
  105. package/package.json +17 -1
@@ -0,0 +1,138 @@
1
+ /**
2
+ * runtime/nodeProviders.ts — node-backed Fs/Shell providers over a jailed workspace.
3
+ */
4
+ import { promises as fs } from 'node:fs';
5
+ import path from 'node:path';
6
+ import { spawn } from 'node:child_process';
7
+ const DEFAULT_TIMEOUT_MS = 120_000;
8
+ const DEFAULT_MAX_OUTPUT_CHARS = 200_000;
9
+ const LIST_MAX_ENTRIES = 5_000;
10
+ const LIST_MAX_DEPTH = 12;
11
+ /**
12
+ * Kill a spawned command including its children. On Windows `child.kill()`
13
+ * only signals cmd.exe — the actual command keeps running. `taskkill /T /F`
14
+ * tears down the whole tree. On POSIX the child is spawned detached (own
15
+ * process group) so `process.kill(-pid, ...)` kills the whole group —
16
+ * `child.kill()` alone would leave grandchildren (e.g. `sleep`) running.
17
+ */
18
+ function killTree(child) {
19
+ if (typeof child.pid !== 'number')
20
+ return;
21
+ if (process.platform === 'win32') {
22
+ spawn('taskkill', ['/pid', String(child.pid), '/T', '/F'], { shell: false, windowsHide: true });
23
+ return;
24
+ }
25
+ try {
26
+ process.kill(-child.pid, 'SIGKILL');
27
+ }
28
+ catch {
29
+ // Group already gone — fall back to signaling the leader directly.
30
+ child.kill('SIGKILL');
31
+ }
32
+ }
33
+ export class NodeFsProvider {
34
+ workspace;
35
+ constructor(workspace) {
36
+ this.workspace = workspace;
37
+ }
38
+ async readFile(rel) {
39
+ return fs.readFile(this.workspace.resolve(rel), 'utf-8');
40
+ }
41
+ async writeFile(rel, data) {
42
+ const absolute = this.workspace.resolve(rel);
43
+ await fs.mkdir(path.dirname(absolute), { recursive: true });
44
+ await fs.writeFile(absolute, data, 'utf-8');
45
+ }
46
+ async exists(rel) {
47
+ try {
48
+ await fs.access(this.workspace.resolve(rel));
49
+ return true;
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ }
55
+ async list(rel = '.') {
56
+ const start = this.workspace.resolve(rel);
57
+ const root = path.resolve(this.workspace.root);
58
+ const out = [];
59
+ const walk = async (dir, depth) => {
60
+ if (depth > LIST_MAX_DEPTH || out.length >= LIST_MAX_ENTRIES)
61
+ return;
62
+ const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
63
+ for (const entry of entries) {
64
+ if (out.length >= LIST_MAX_ENTRIES)
65
+ return;
66
+ const abs = path.join(dir, entry.name);
67
+ if (entry.isDirectory()) {
68
+ if (entry.name === 'node_modules' || entry.name === '.git')
69
+ continue;
70
+ await walk(abs, depth + 1);
71
+ }
72
+ else {
73
+ out.push(path.relative(root, abs).split(path.sep).join('/'));
74
+ }
75
+ }
76
+ };
77
+ await walk(start, 0);
78
+ return out.sort();
79
+ }
80
+ }
81
+ export class NodeShellProvider {
82
+ workspace;
83
+ defaults;
84
+ constructor(workspace, defaults = {}) {
85
+ this.workspace = workspace;
86
+ this.defaults = defaults;
87
+ }
88
+ async exec(command, options = {}) {
89
+ const started = Date.now();
90
+ const cwd = this.workspace.resolve(options.cwd ?? '.');
91
+ const timeoutMs = options.timeoutMs ?? this.defaults.timeoutMs ?? DEFAULT_TIMEOUT_MS;
92
+ const maxChars = options.maxOutputChars ?? DEFAULT_MAX_OUTPUT_CHARS;
93
+ const isWindows = process.platform === 'win32';
94
+ const file = isWindows ? 'cmd.exe' : '/bin/sh';
95
+ const args = isWindows ? ['/d', '/s', '/c', command] : ['-c', command];
96
+ return await new Promise((resolve) => {
97
+ const child = spawn(file, args, {
98
+ cwd,
99
+ shell: false,
100
+ windowsHide: true,
101
+ // POSIX: own process group so the timeout can kill grandchildren too.
102
+ detached: !isWindows,
103
+ });
104
+ let stdout = '';
105
+ let stderr = '';
106
+ let timedOut = false;
107
+ const append = (current, chunk) => {
108
+ const next = current + chunk;
109
+ return next.length > maxChars ? next.slice(next.length - maxChars) : next;
110
+ };
111
+ const timer = setTimeout(() => {
112
+ timedOut = true;
113
+ killTree(child);
114
+ }, timeoutMs);
115
+ child.stdout?.on('data', (d) => {
116
+ stdout = append(stdout, d.toString('utf-8'));
117
+ });
118
+ child.stderr?.on('data', (d) => {
119
+ stderr = append(stderr, d.toString('utf-8'));
120
+ });
121
+ child.on('error', (err) => {
122
+ clearTimeout(timer);
123
+ resolve({
124
+ exitCode: null,
125
+ stdout,
126
+ stderr: `${stderr}${err.message}`,
127
+ durationMs: Date.now() - started,
128
+ timedOut,
129
+ });
130
+ });
131
+ child.on('close', (code) => {
132
+ clearTimeout(timer);
133
+ resolve({ exitCode: code, stdout, stderr, durationMs: Date.now() - started, timedOut });
134
+ });
135
+ });
136
+ }
137
+ }
138
+ //# sourceMappingURL=nodeProviders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeProviders.js","sourceRoot":"","sources":["../../src/runtime/nodeProviders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * runtime/profiles.ts — versioned capability profiles (ADR-0022).
3
+ *
4
+ * A profile is an immutable, versioned capability set + orchestration mount.
5
+ * `minimal/v1` is the benchmark baseline (P6: smallest orchestration);
6
+ * `kraken/v1` the default product profile. The tool manifest hash makes
7
+ * same-task/same-profile runs comparable.
8
+ */
9
+ import { z } from 'zod';
10
+ export declare const ProfileSchema: z.ZodObject<{
11
+ id: z.ZodString;
12
+ version: z.ZodLiteral<1>;
13
+ description: z.ZodString;
14
+ tools: z.ZodArray<z.ZodString>;
15
+ orchestration: z.ZodObject<{
16
+ kraken: z.ZodBoolean;
17
+ council: z.ZodBoolean;
18
+ subagents: z.ZodBoolean;
19
+ mission: z.ZodBoolean;
20
+ }, z.core.$strip>;
21
+ verification: z.ZodObject<{
22
+ deterministicEngine: z.ZodBoolean;
23
+ llmVerifier: z.ZodBoolean;
24
+ strictCompletion: z.ZodBoolean;
25
+ }, z.core.$strip>;
26
+ }, z.core.$strip>;
27
+ export type Profile = z.infer<typeof ProfileSchema>;
28
+ export declare const MINIMAL_TOOLS: readonly ["read_file", "edit_file", "bash", "grep_content", "list_files"];
29
+ export declare const MINIMAL_V1: Profile;
30
+ export declare const KRAKEN_V1: Profile;
31
+ export declare const COUNCIL_V1: Profile;
32
+ export declare const MISSION_V1: Profile;
33
+ export declare const BUILT_IN_PROFILES: Readonly<Record<string, Profile>>;
34
+ export declare class UnknownProfileError extends Error {
35
+ readonly requested: string;
36
+ readonly known: string[];
37
+ readonly code = "UNKNOWN_PROFILE";
38
+ constructor(requested: string, known: string[]);
39
+ }
40
+ /** Resolve a built-in profile by id (fails loudly on typos). */
41
+ export declare function resolveProfile(id: string): Profile;
42
+ /** sha256 of the sorted tool names — recorded in the session header. */
43
+ export declare function toolManifestHash(tools: readonly string[]): string;
44
+ //# sourceMappingURL=profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/runtime/profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;iBAiBxB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD,eAAO,MAAM,aAAa,2EAA4E,CAAC;AAEvG,eAAO,MAAM,UAAU,EAAE,OAOvB,CAAC;AAEH,eAAO,MAAM,SAAS,EAAE,OAOtB,CAAC;AAEH,eAAO,MAAM,UAAU,EAAE,OAOvB,CAAC;AAEH,eAAO,MAAM,UAAU,EAAE,OAOvB,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK9D,CAAC;AAEH,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,SAAS,EAAE,MAAM;aACjB,KAAK,EAAE,MAAM,EAAE;IAHjC,QAAQ,CAAC,IAAI,qBAAqB;gBAEhB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EAAE;CAKlC;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAIlD;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAGjE"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * runtime/profiles.ts — versioned capability profiles (ADR-0022).
3
+ *
4
+ * A profile is an immutable, versioned capability set + orchestration mount.
5
+ * `minimal/v1` is the benchmark baseline (P6: smallest orchestration);
6
+ * `kraken/v1` the default product profile. The tool manifest hash makes
7
+ * same-task/same-profile runs comparable.
8
+ */
9
+ import { createHash } from 'node:crypto';
10
+ import { z } from 'zod';
11
+ export const ProfileSchema = z.object({
12
+ /** `<name>/v<N>` — immutable once published. */
13
+ id: z.string().regex(/^[a-z0-9-]+\/v\d+$/, 'profile id must be <name>/v<N>'),
14
+ version: z.literal(1),
15
+ description: z.string().min(1),
16
+ tools: z.array(z.string().min(1)).min(1),
17
+ orchestration: z.object({
18
+ kraken: z.boolean(),
19
+ council: z.boolean(),
20
+ subagents: z.boolean(),
21
+ mission: z.boolean(),
22
+ }),
23
+ verification: z.object({
24
+ deterministicEngine: z.boolean(),
25
+ llmVerifier: z.boolean(),
26
+ strictCompletion: z.boolean(),
27
+ }),
28
+ });
29
+ export const MINIMAL_TOOLS = ['read_file', 'edit_file', 'bash', 'grep_content', 'list_files'];
30
+ export const MINIMAL_V1 = Object.freeze({
31
+ id: 'minimal/v1',
32
+ version: 1,
33
+ description: 'Baseline single-agent loop: no orchestration, deterministic verification only.',
34
+ tools: [...MINIMAL_TOOLS],
35
+ orchestration: { kraken: false, council: false, subagents: false, mission: false },
36
+ verification: { deterministicEngine: true, llmVerifier: false, strictCompletion: true },
37
+ });
38
+ export const KRAKEN_V1 = Object.freeze({
39
+ id: 'kraken/v1',
40
+ version: 1,
41
+ description: 'Default product profile: Kraken execution engine + tentacles + deterministic verification.',
42
+ tools: [...MINIMAL_TOOLS, 'write_file', 'apply_diff', 'task', 'web_search', 'browser_check'],
43
+ orchestration: { kraken: true, council: false, subagents: true, mission: false },
44
+ verification: { deterministicEngine: true, llmVerifier: false, strictCompletion: true },
45
+ });
46
+ export const COUNCIL_V1 = Object.freeze({
47
+ id: 'council/v1',
48
+ version: 1,
49
+ description: 'Council deliberation profile (design phase): members on the session spine, no Kraken executor.',
50
+ tools: [...MINIMAL_TOOLS, 'write_file'],
51
+ orchestration: { kraken: false, council: true, subagents: false, mission: false },
52
+ verification: { deterministicEngine: true, llmVerifier: false, strictCompletion: true },
53
+ });
54
+ export const MISSION_V1 = Object.freeze({
55
+ id: 'mission/v1',
56
+ version: 1,
57
+ description: 'Long-horizon mission profile: Kraken execution + council design + evidence-based completion.',
58
+ tools: [...KRAKEN_V1.tools],
59
+ orchestration: { kraken: true, council: true, subagents: true, mission: true },
60
+ verification: { deterministicEngine: true, llmVerifier: false, strictCompletion: true },
61
+ });
62
+ export const BUILT_IN_PROFILES = Object.freeze({
63
+ [MINIMAL_V1.id]: MINIMAL_V1,
64
+ [KRAKEN_V1.id]: KRAKEN_V1,
65
+ [COUNCIL_V1.id]: COUNCIL_V1,
66
+ [MISSION_V1.id]: MISSION_V1,
67
+ });
68
+ export class UnknownProfileError extends Error {
69
+ requested;
70
+ known;
71
+ code = 'UNKNOWN_PROFILE';
72
+ constructor(requested, known) {
73
+ super(`Unknown profile "${requested}". Known profiles: ${known.join(', ')}`);
74
+ this.requested = requested;
75
+ this.known = known;
76
+ this.name = 'UnknownProfileError';
77
+ }
78
+ }
79
+ /** Resolve a built-in profile by id (fails loudly on typos). */
80
+ export function resolveProfile(id) {
81
+ const profile = BUILT_IN_PROFILES[id];
82
+ if (!profile)
83
+ throw new UnknownProfileError(id, Object.keys(BUILT_IN_PROFILES));
84
+ return profile;
85
+ }
86
+ /** sha256 of the sorted tool names — recorded in the session header. */
87
+ export function toolManifestHash(tools) {
88
+ const manifest = [...tools].sort().join(',');
89
+ return createHash('sha256').update(manifest).digest('hex');
90
+ }
91
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/runtime/profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * runtime/providers.ts — execution seam interfaces (ADR-0022).
3
+ *
4
+ * Minimal, injectable, workspace-jailed seams. Core ships node + in-memory
5
+ * implementations; the CLI injects the real subagent provider. Providers are
6
+ * reached ONLY via ToolRegistry.invoke or the internal verification services
7
+ * — never as a side door around P2.
8
+ */
9
+ /** Thrown when a relative path escapes the workspace root (path jail). */
10
+ export declare class WorkspacePathEscapeError extends Error {
11
+ readonly root: string;
12
+ readonly attempted: string;
13
+ readonly code = "WORKSPACE_PATH_ESCAPE";
14
+ constructor(root: string, attempted: string);
15
+ }
16
+ export interface WorkspaceProvider {
17
+ readonly kind: 'local' | 'worktree' | 'memory' | 'remote';
18
+ /** Absolute root every relative path is jailed to. */
19
+ readonly root: string;
20
+ /** Resolve a workspace-relative path; throws on escape. */
21
+ resolve(rel: string): string;
22
+ /** Optional teardown (worktree removal, remote disconnect). */
23
+ dispose?(): Promise<void>;
24
+ }
25
+ /**
26
+ * Treat backslash as a path separator on every OS before resolving, so a
27
+ * relative path like `..\file` cannot smuggle out of the jail on POSIX
28
+ * (where `\` is an ordinary filename character).
29
+ */
30
+ export declare function resolveJailed(root: string, rel: string): string;
31
+ /** Path-jailed local workspace directory. */
32
+ export declare class LocalWorkspace implements WorkspaceProvider {
33
+ readonly root: string;
34
+ readonly kind: "local";
35
+ constructor(root: string);
36
+ resolve(rel: string): string;
37
+ }
38
+ export interface FsProvider {
39
+ readFile(rel: string): Promise<string>;
40
+ writeFile(rel: string, data: string): Promise<void>;
41
+ exists(rel: string): Promise<boolean>;
42
+ /** Recursive listing of files (relative paths), bounded. */
43
+ list(rel?: string): Promise<string[]>;
44
+ }
45
+ export interface ShellResult {
46
+ /** null when the process was killed by a signal/timeout. */
47
+ exitCode: number | null;
48
+ stdout: string;
49
+ stderr: string;
50
+ durationMs: number;
51
+ timedOut: boolean;
52
+ }
53
+ export interface ShellExecOptions {
54
+ /** Workspace-relative cwd (default: workspace root). */
55
+ cwd?: string;
56
+ timeoutMs?: number;
57
+ /** Output cap per stream (tail kept). Default 200k chars. */
58
+ maxOutputChars?: number;
59
+ }
60
+ export interface ShellProvider {
61
+ exec(command: string, options?: ShellExecOptions): Promise<ShellResult>;
62
+ }
63
+ export interface SubagentTask {
64
+ goal: string;
65
+ scope?: string[];
66
+ acceptance?: string[];
67
+ agent?: string;
68
+ }
69
+ export interface SubagentResult {
70
+ ok: boolean;
71
+ conclusion: string;
72
+ artifacts?: string[];
73
+ }
74
+ export interface SubagentProvider {
75
+ /** False when delegation is unavailable (core no-op default). */
76
+ readonly available: boolean;
77
+ runTask(task: SubagentTask): Promise<SubagentResult>;
78
+ }
79
+ /** Core default: delegation is a CLI-injected capability, never faked here. */
80
+ export declare class NoopSubagentProvider implements SubagentProvider {
81
+ readonly available = false;
82
+ runTask(task: SubagentTask): Promise<SubagentResult>;
83
+ }
84
+ export declare const NOOP_SUBAGENT_PROVIDER: SubagentProvider;
85
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/runtime/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * runtime/providers.ts — execution seam interfaces (ADR-0022).
3
+ *
4
+ * Minimal, injectable, workspace-jailed seams. Core ships node + in-memory
5
+ * implementations; the CLI injects the real subagent provider. Providers are
6
+ * reached ONLY via ToolRegistry.invoke or the internal verification services
7
+ * — never as a side door around P2.
8
+ */
9
+ import path from 'node:path';
10
+ /** Thrown when a relative path escapes the workspace root (path jail). */
11
+ export class WorkspacePathEscapeError extends Error {
12
+ root;
13
+ attempted;
14
+ code = 'WORKSPACE_PATH_ESCAPE';
15
+ constructor(root, attempted) {
16
+ super(`Path escapes workspace root: ${attempted} (root: ${root})`);
17
+ this.root = root;
18
+ this.attempted = attempted;
19
+ this.name = 'WorkspacePathEscapeError';
20
+ }
21
+ }
22
+ /**
23
+ * Treat backslash as a path separator on every OS before resolving, so a
24
+ * relative path like `..\file` cannot smuggle out of the jail on POSIX
25
+ * (where `\` is an ordinary filename character).
26
+ */
27
+ export function resolveJailed(root, rel) {
28
+ const normalized = rel.split('\\').join('/');
29
+ const absolute = path.resolve(root, normalized);
30
+ const rootAbs = path.resolve(root);
31
+ if (absolute !== rootAbs && !absolute.startsWith(rootAbs + path.sep)) {
32
+ throw new WorkspacePathEscapeError(rootAbs, rel);
33
+ }
34
+ return absolute;
35
+ }
36
+ /** Path-jailed local workspace directory. */
37
+ export class LocalWorkspace {
38
+ root;
39
+ kind = 'local';
40
+ constructor(root) {
41
+ this.root = root;
42
+ }
43
+ resolve(rel) {
44
+ return resolveJailed(this.root, rel);
45
+ }
46
+ }
47
+ /** Core default: delegation is a CLI-injected capability, never faked here. */
48
+ export class NoopSubagentProvider {
49
+ available = false;
50
+ async runTask(task) {
51
+ return {
52
+ ok: false,
53
+ conclusion: `Subagent delegation is not available in this context (goal: ${task.goal}).`,
54
+ };
55
+ }
56
+ }
57
+ export const NOOP_SUBAGENT_PROVIDER = new NoopSubagentProvider();
58
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/runtime/providers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,0EAA0E;AAC1E,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAG/B;IACA;IAHT,IAAI,GAAG,uBAAuB,CAAC;IACxC,YACkB,IAAY,EACZ,SAAiB;QAEjC,KAAK,CAAC,gCAAgC,SAAS,WAAW,IAAI,GAAG,CAAC,CAAC;QAHnD,SAAI,GAAJ,IAAI,CAAQ;QACZ,cAAS,GAAT,SAAS,CAAQ;QAGjC,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAYD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,GAAW;IACrD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,6CAA6C;AAC7C,MAAM,OAAO,cAAc;IAGJ;IAFZ,IAAI,GAAG,OAAgB,CAAC;IAEjC,YAAqB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAErC,OAAO,CAAC,GAAW;QACjB,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;CACF;AAkDD,+EAA+E;AAC/E,MAAM,OAAO,oBAAoB;IACtB,SAAS,GAAG,KAAK,CAAC;IAE3B,KAAK,CAAC,OAAO,CAAC,IAAkB;QAC9B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,+DAA+D,IAAI,CAAC,IAAI,IAAI;SACzF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAqB,IAAI,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * runtime/worktreeWorkspace.ts — git worktree as a WorkspaceProvider.
3
+ *
4
+ * Generalizes the CLI krakenWorktree logic (ZELARI_KRAKEN_WORKTREE) into a
5
+ * seam: two parallel writers on distinct worktrees cannot see each other's
6
+ * files. Branches are named `zelari/worktree-<id>` under
7
+ * `<sourceRoot>/.zelari/worktrees/<id>` (gitignored territory).
8
+ */
9
+ import { type WorkspaceProvider } from './providers.js';
10
+ export interface WorktreeOptions {
11
+ id?: string;
12
+ /** Keep the worktree + branch on dispose (manual merge). */
13
+ keepOnDispose?: boolean;
14
+ /** Base ref/branch for the worktree (default: HEAD). */
15
+ baseRef?: string;
16
+ }
17
+ export declare class WorktreeWorkspace implements WorkspaceProvider {
18
+ readonly root: string;
19
+ readonly branch: string;
20
+ private readonly sourceRoot;
21
+ private readonly keep;
22
+ readonly kind: "worktree";
23
+ private disposed;
24
+ private constructor();
25
+ /** Create an isolated worktree of `sourceRoot`. */
26
+ static create(sourceRoot: string, options?: WorktreeOptions): Promise<WorktreeWorkspace>;
27
+ resolve(rel: string): string;
28
+ /** Files changed in this worktree vs the base (git status --porcelain). */
29
+ status(): Promise<string[]>;
30
+ /**
31
+ * Squash-merge this branch into the currently checked-out branch of the
32
+ * source repo. Caller must be on the intended target branch.
33
+ */
34
+ mergeSquashBack(): Promise<void>;
35
+ /** Remove the worktree (and its branch unless keep). Idempotent. */
36
+ dispose(): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=worktreeWorkspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktreeWorkspace.d.ts","sourceRoot":"","sources":["../../src/runtime/worktreeWorkspace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4DAA4D;IAC5D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiBD,qBAAa,iBAAkB,YAAW,iBAAiB;IAMvD,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IARvB,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO;IAOP,mDAAmD;WACtC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQlG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI5B,2EAA2E;IACrE,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IASjC;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC,oEAAoE;IAC9D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ/B"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * runtime/worktreeWorkspace.ts — git worktree as a WorkspaceProvider.
3
+ *
4
+ * Generalizes the CLI krakenWorktree logic (ZELARI_KRAKEN_WORKTREE) into a
5
+ * seam: two parallel writers on distinct worktrees cannot see each other's
6
+ * files. Branches are named `zelari/worktree-<id>` under
7
+ * `<sourceRoot>/.zelari/worktrees/<id>` (gitignored territory).
8
+ */
9
+ import path from 'node:path';
10
+ import crypto from 'node:crypto';
11
+ import { spawn } from 'node:child_process';
12
+ import { resolveJailed } from './providers.js';
13
+ async function git(cwd, args) {
14
+ return await new Promise((resolve, reject) => {
15
+ const child = spawn('git', args, { cwd, shell: false });
16
+ let stdout = '';
17
+ let stderr = '';
18
+ child.stdout?.on('data', (d) => (stdout += d.toString('utf-8')));
19
+ child.stderr?.on('data', (d) => (stderr += d.toString('utf-8')));
20
+ child.on('error', (err) => reject(err));
21
+ child.on('close', (code) => {
22
+ if (code === 0)
23
+ resolve(stdout);
24
+ else
25
+ reject(new Error(`git ${args.join(' ')} failed (${code}): ${stderr.trim()}`));
26
+ });
27
+ });
28
+ }
29
+ export class WorktreeWorkspace {
30
+ root;
31
+ branch;
32
+ sourceRoot;
33
+ keep;
34
+ kind = 'worktree';
35
+ disposed = false;
36
+ constructor(root, branch, sourceRoot, keep) {
37
+ this.root = root;
38
+ this.branch = branch;
39
+ this.sourceRoot = sourceRoot;
40
+ this.keep = keep;
41
+ }
42
+ /** Create an isolated worktree of `sourceRoot`. */
43
+ static async create(sourceRoot, options = {}) {
44
+ const id = options.id ?? crypto.randomUUID().slice(0, 8);
45
+ const root = path.join(sourceRoot, '.zelari', 'worktrees', id);
46
+ const branch = `zelari/worktree-${id}`;
47
+ await git(sourceRoot, ['worktree', 'add', '-b', branch, root, options.baseRef ?? 'HEAD']);
48
+ return new WorktreeWorkspace(root, branch, sourceRoot, options.keepOnDispose ?? false);
49
+ }
50
+ resolve(rel) {
51
+ return resolveJailed(this.root, rel);
52
+ }
53
+ /** Files changed in this worktree vs the base (git status --porcelain). */
54
+ async status() {
55
+ const out = await git(this.root, ['status', '--porcelain']);
56
+ return out
57
+ .split('\n')
58
+ .map((l) => l.trim())
59
+ .filter(Boolean)
60
+ .map((l) => l.slice(3).trim());
61
+ }
62
+ /**
63
+ * Squash-merge this branch into the currently checked-out branch of the
64
+ * source repo. Caller must be on the intended target branch.
65
+ */
66
+ async mergeSquashBack() {
67
+ await git(this.sourceRoot, ['merge', '--squash', this.branch]);
68
+ }
69
+ /** Remove the worktree (and its branch unless keep). Idempotent. */
70
+ async dispose() {
71
+ if (this.disposed)
72
+ return;
73
+ this.disposed = true;
74
+ await git(this.sourceRoot, ['worktree', 'remove', '--force', this.root]).catch(() => undefined);
75
+ if (!this.keep) {
76
+ await git(this.sourceRoot, ['branch', '-D', this.branch]).catch(() => undefined);
77
+ }
78
+ }
79
+ }
80
+ //# sourceMappingURL=worktreeWorkspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktreeWorkspace.js","sourceRoot":"","sources":["../../src/runtime/worktreeWorkspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * session/exportSession.ts — portable, machine-readable session export.
3
+ *
4
+ * The export embeds the full event log plus a compact summary; it requires
5
+ * no lock and is safe to produce from a crashed/interrupted session.
6
+ */
7
+ import type { SessionStore } from './store.js';
8
+ export declare const SESSION_EXPORT_FORMAT = "zelari-session-export";
9
+ export declare const SESSION_EXPORT_VERSION = 1;
10
+ export interface SessionExport {
11
+ format: typeof SESSION_EXPORT_FORMAT;
12
+ version: typeof SESSION_EXPORT_VERSION;
13
+ sessionId: string;
14
+ exportedAt: number;
15
+ summary: {
16
+ lastSeq: number;
17
+ eventCount: number;
18
+ startedAt?: number;
19
+ endedAt?: number;
20
+ forkParent?: string;
21
+ toolCalls: number;
22
+ toolResults: number;
23
+ verifications: number;
24
+ issues: number;
25
+ };
26
+ events: unknown[];
27
+ }
28
+ export declare function exportSession(store: SessionStore, sessionId: string): Promise<SessionExport>;
29
+ /** Pretty-printed JSON export (headless `--session-export` output). */
30
+ export declare function exportSessionJson(store: SessionStore, sessionId: string): Promise<string>;
31
+ //# sourceMappingURL=exportSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportSession.d.ts","sourceRoot":"","sources":["../../src/session/exportSession.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,qBAAqB,CAAC;IACrC,OAAO,EAAE,OAAO,sBAAsB,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAqBlG;AAED,uEAAuE;AACvE,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/F"}