@sift-wiki/conductor 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +135 -1
  2. package/THIRD_PARTY_NOTICES.md +38 -0
  3. package/dist/adapters/claudeAgent.d.ts +23 -0
  4. package/dist/adapters/claudeAgent.js +164 -0
  5. package/dist/adapters/claudeAgent.js.map +1 -0
  6. package/dist/adapters/claudeParser.d.ts +5 -0
  7. package/dist/adapters/claudeParser.js +120 -0
  8. package/dist/adapters/claudeParser.js.map +1 -0
  9. package/dist/adapters/codexAgent.d.ts +28 -0
  10. package/dist/adapters/codexAgent.js +152 -0
  11. package/dist/adapters/codexAgent.js.map +1 -0
  12. package/dist/adapters/codexParser.d.ts +5 -0
  13. package/dist/adapters/codexParser.js +106 -0
  14. package/dist/adapters/codexParser.js.map +1 -0
  15. package/dist/adapters/config.d.ts +29 -0
  16. package/dist/adapters/config.js +286 -0
  17. package/dist/adapters/config.js.map +1 -0
  18. package/dist/adapters/doctor.d.ts +12 -0
  19. package/dist/adapters/doctor.js +20 -0
  20. package/dist/adapters/doctor.js.map +1 -0
  21. package/dist/adapters/errors.d.ts +7 -0
  22. package/dist/adapters/errors.js +19 -0
  23. package/dist/adapters/errors.js.map +1 -0
  24. package/dist/adapters/fakeAgent.d.ts +11 -0
  25. package/dist/adapters/fakeAgent.js +149 -0
  26. package/dist/adapters/fakeAgent.js.map +1 -0
  27. package/dist/adapters/httpAgent.d.ts +19 -0
  28. package/dist/adapters/httpAgent.js +164 -0
  29. package/dist/adapters/httpAgent.js.map +1 -0
  30. package/dist/adapters/output.d.ts +16 -0
  31. package/dist/adapters/output.js +48 -0
  32. package/dist/adapters/output.js.map +1 -0
  33. package/dist/adapters/processAgent.d.ts +21 -0
  34. package/dist/adapters/processAgent.js +166 -0
  35. package/dist/adapters/processAgent.js.map +1 -0
  36. package/dist/adapters/provider/discovery.d.ts +31 -0
  37. package/dist/adapters/provider/discovery.js +102 -0
  38. package/dist/adapters/provider/discovery.js.map +1 -0
  39. package/dist/adapters/provider/json.d.ts +4 -0
  40. package/dist/adapters/provider/json.js +21 -0
  41. package/dist/adapters/provider/json.js.map +1 -0
  42. package/dist/adapters/provider/lineStream.d.ts +8 -0
  43. package/dist/adapters/provider/lineStream.js +28 -0
  44. package/dist/adapters/provider/lineStream.js.map +1 -0
  45. package/dist/adapters/provider/outputSchemaFile.d.ts +5 -0
  46. package/dist/adapters/provider/outputSchemaFile.js +16 -0
  47. package/dist/adapters/provider/outputSchemaFile.js.map +1 -0
  48. package/dist/adapters/provider/prompt.d.ts +2 -0
  49. package/dist/adapters/provider/prompt.js +52 -0
  50. package/dist/adapters/provider/prompt.js.map +1 -0
  51. package/dist/adapters/provider/result.d.ts +23 -0
  52. package/dist/adapters/provider/result.js +116 -0
  53. package/dist/adapters/provider/result.js.map +1 -0
  54. package/dist/adapters/provider/runProvider.d.ts +16 -0
  55. package/dist/adapters/provider/runProvider.js +110 -0
  56. package/dist/adapters/provider/runProvider.js.map +1 -0
  57. package/dist/adapters/provider/setup.d.ts +50 -0
  58. package/dist/adapters/provider/setup.js +180 -0
  59. package/dist/adapters/provider/setup.js.map +1 -0
  60. package/dist/adapters/provider/store.d.ts +19 -0
  61. package/dist/adapters/provider/store.js +92 -0
  62. package/dist/adapters/provider/store.js.map +1 -0
  63. package/dist/adapters/provider/types.d.ts +58 -0
  64. package/dist/adapters/provider/types.js +2 -0
  65. package/dist/adapters/provider/types.js.map +1 -0
  66. package/dist/adapters/provider/version.d.ts +2 -0
  67. package/dist/adapters/provider/version.js +25 -0
  68. package/dist/adapters/provider/version.js.map +1 -0
  69. package/dist/adapters/types.d.ts +40 -0
  70. package/dist/adapters/types.js +2 -0
  71. package/dist/adapters/types.js.map +1 -0
  72. package/dist/bridge/handler.d.ts +15 -0
  73. package/dist/bridge/handler.js +125 -0
  74. package/dist/bridge/handler.js.map +1 -0
  75. package/dist/bridge/localBridge.d.ts +49 -0
  76. package/dist/bridge/localBridge.js +157 -0
  77. package/dist/bridge/localBridge.js.map +1 -0
  78. package/dist/bridge/server.d.ts +11 -0
  79. package/dist/bridge/server.js +86 -0
  80. package/dist/bridge/server.js.map +1 -0
  81. package/dist/bridge/sessionRegistry.d.ts +23 -0
  82. package/dist/bridge/sessionRegistry.js +65 -0
  83. package/dist/bridge/sessionRegistry.js.map +1 -0
  84. package/dist/cli.d.ts +17 -0
  85. package/dist/cli.js +216 -0
  86. package/dist/cli.js.map +1 -0
  87. package/dist/conductorClient.d.ts +252 -0
  88. package/dist/conductorClient.js +223 -0
  89. package/dist/conductorClient.js.map +1 -0
  90. package/dist/config.d.ts +9 -0
  91. package/dist/config.js +54 -0
  92. package/dist/config.js.map +1 -0
  93. package/dist/daemon.d.ts +48 -0
  94. package/dist/daemon.js +284 -0
  95. package/dist/daemon.js.map +1 -0
  96. package/dist/desktop/adapterSetupView.d.ts +16 -0
  97. package/dist/desktop/adapterSetupView.js +13 -0
  98. package/dist/desktop/adapterSetupView.js.map +1 -0
  99. package/dist/desktop/manifest.d.ts +17 -0
  100. package/dist/desktop/manifest.js +24 -0
  101. package/dist/desktop/manifest.js.map +1 -0
  102. package/dist/desktop/pairing.d.ts +13 -0
  103. package/dist/desktop/pairing.js +20 -0
  104. package/dist/desktop/pairing.js.map +1 -0
  105. package/dist/desktop/recovery.d.ts +33 -0
  106. package/dist/desktop/recovery.js +71 -0
  107. package/dist/desktop/recovery.js.map +1 -0
  108. package/dist/desktop/workBoardView.d.ts +41 -0
  109. package/dist/desktop/workBoardView.js +133 -0
  110. package/dist/desktop/workBoardView.js.map +1 -0
  111. package/dist/desktop/workGovernanceView.d.ts +70 -0
  112. package/dist/desktop/workGovernanceView.js +159 -0
  113. package/dist/desktop/workGovernanceView.js.map +1 -0
  114. package/dist/pairing.d.ts +27 -0
  115. package/dist/pairing.js +45 -0
  116. package/dist/pairing.js.map +1 -0
  117. package/dist/redaction.d.ts +2 -0
  118. package/dist/redaction.js +34 -0
  119. package/dist/redaction.js.map +1 -0
  120. package/dist/release/validateDistribution.d.ts +51 -0
  121. package/dist/release/validateDistribution.js +54 -0
  122. package/dist/release/validateDistribution.js.map +1 -0
  123. package/dist/runtime/localLogSpool.d.ts +46 -0
  124. package/dist/runtime/localLogSpool.js +101 -0
  125. package/dist/runtime/localLogSpool.js.map +1 -0
  126. package/dist/runtime/localRunQueue.d.ts +31 -0
  127. package/dist/runtime/localRunQueue.js +76 -0
  128. package/dist/runtime/localRunQueue.js.map +1 -0
  129. package/dist/runtime/localSessionCache.d.ts +26 -0
  130. package/dist/runtime/localSessionCache.js +35 -0
  131. package/dist/runtime/localSessionCache.js.map +1 -0
  132. package/dist/runtime/process.d.ts +27 -0
  133. package/dist/runtime/process.js +128 -0
  134. package/dist/runtime/process.js.map +1 -0
  135. package/dist/runtime/runEnvironment.d.ts +12 -0
  136. package/dist/runtime/runEnvironment.js +59 -0
  137. package/dist/runtime/runEnvironment.js.map +1 -0
  138. package/dist/runtime/runEventRetryBuffer.d.ts +42 -0
  139. package/dist/runtime/runEventRetryBuffer.js +118 -0
  140. package/dist/runtime/runEventRetryBuffer.js.map +1 -0
  141. package/dist/runtime/runtimeService.d.ts +27 -0
  142. package/dist/runtime/runtimeService.js +112 -0
  143. package/dist/runtime/runtimeService.js.map +1 -0
  144. package/dist/runtime/sleep.d.ts +2 -0
  145. package/dist/runtime/sleep.js +21 -0
  146. package/dist/runtime/sleep.js.map +1 -0
  147. package/dist/runtime/taskExecution.d.ts +16 -0
  148. package/dist/runtime/taskExecution.js +74 -0
  149. package/dist/runtime/taskExecution.js.map +1 -0
  150. package/dist/runtime/wakeEnvelope.d.ts +76 -0
  151. package/dist/runtime/wakeEnvelope.js +60 -0
  152. package/dist/runtime/wakeEnvelope.js.map +1 -0
  153. package/dist/types.d.ts +121 -0
  154. package/dist/types.js +2 -0
  155. package/dist/types.js.map +1 -0
  156. package/dist/version.d.ts +2 -0
  157. package/dist/version.js +3 -0
  158. package/dist/version.js.map +1 -0
  159. package/dist/workTypes.d.ts +182 -0
  160. package/dist/workTypes.js +75 -0
  161. package/dist/workTypes.js.map +1 -0
  162. package/package.json +65 -6
package/README.md CHANGED
@@ -1,3 +1,137 @@
1
1
  # Sift Conductor
2
2
 
3
- Bootstrap package used to configure trusted publishing. Install the latest stable release after `0.1.0` is published.
3
+ Sift Conductor is the optional local execution plane for Sift. It pairs one
4
+ computer with a Sift workspace, advertises verified local agents, executes Sift
5
+ jobs through Codex CLI or Claude Code, and reports bounded progress and terminal
6
+ results back to canonical Sift task/run state.
7
+
8
+ Provider credentials and working-directory paths stay on the local machine.
9
+
10
+ ## Requirements
11
+
12
+ - Node.js 20 or newer for the headless CLI.
13
+ - A Sift pairing code.
14
+ - Codex CLI `0.100.0` or newer and/or Claude Code `2.1.0` or newer.
15
+ - The selected provider already installed or installed through its official
16
+ setup flow.
17
+
18
+ ## Run From npm
19
+
20
+ After the public npm release is enabled:
21
+
22
+ ```bash
23
+ npx @sift-wiki/conductor@latest --version
24
+ npx @sift-wiki/conductor@latest pair \
25
+ --api https://api.sift.wiki \
26
+ --code SC-... \
27
+ --display-name "My computer" \
28
+ --adapters ./agents.json
29
+ npx @sift-wiki/conductor@latest run --adapters ./agents.json
30
+ ```
31
+
32
+ Persistent headless installation:
33
+
34
+ ```bash
35
+ npm install --global @sift-wiki/conductor
36
+ sift-conductor --help
37
+ ```
38
+
39
+ Example provider configuration:
40
+
41
+ ```json
42
+ {
43
+ "adapters": [
44
+ {
45
+ "type": "codex",
46
+ "localKey": "product-codex",
47
+ "displayName": "Product engineer",
48
+ "workspacePath": "/absolute/path/to/project",
49
+ "accessProfile": "workspace",
50
+ "enabled": true
51
+ },
52
+ {
53
+ "type": "claude-code",
54
+ "localKey": "review-claude",
55
+ "displayName": "Code reviewer",
56
+ "workspacePath": "/absolute/path/to/project",
57
+ "accessProfile": "inspect",
58
+ "enabled": true
59
+ }
60
+ ]
61
+ }
62
+ ```
63
+
64
+ Use a stable `localKey`. Do not place API keys, OAuth tokens, or the Sift
65
+ Conductor credential in this file.
66
+
67
+ ## Desktop App
68
+
69
+ The Electron desktop app is the primary local-agent setup surface for average
70
+ users. It provides:
71
+
72
+ - Sift machine pairing;
73
+ - Codex CLI and Claude Code discovery and provider-owned login;
74
+ - native local-folder selection through an opaque renderer token;
75
+ - `inspect` and `workspace` access profiles;
76
+ - a quota-aware structured smoke test before advertisement;
77
+ - retest, edit, pause/resume, remove, and local runtime controls.
78
+
79
+ Development build:
80
+
81
+ ```bash
82
+ pnpm install
83
+ pnpm desktop:dev
84
+ ```
85
+
86
+ Signed DMG and Windows installers remain a separate distribution release gate.
87
+
88
+ ## Runtime Contract
89
+
90
+ For each claimed job Conductor:
91
+
92
+ 1. checks out task-linked work and opens a run-scoped local bridge;
93
+ 2. renders the Sift wake envelope into a bounded provider prompt;
94
+ 3. invokes the provider noninteractively in the selected workspace;
95
+ 4. normalizes allowlisted provider actions into concise progress events;
96
+ 5. validates one structured `done`, `in_review`, or `blocked` result;
97
+ 6. settles the Sift task/run/job and closes the run-scoped bridge.
98
+
99
+ The generic fake, process, and HTTP adapters remain available. Codex and Claude
100
+ Code do not require a user-authored shell wrapper.
101
+
102
+ ## Security
103
+
104
+ - Conductor never stores Codex or Claude Code credentials.
105
+ - The long-lived Sift machine credential is never passed to an agent process.
106
+ - Provider processes receive only an expiring run-scoped bridge token.
107
+ - Local workspace paths are not advertised to Sift or exposed to the desktop
108
+ renderer.
109
+ - Raw prompts, hidden reasoning, full provider streams, and environment dumps
110
+ are not sent to Sift.
111
+ - The initial desktop wizard does not offer dangerous bypass/full-machine
112
+ permission modes.
113
+
114
+ ## Development
115
+
116
+ ```bash
117
+ pnpm lint
118
+ pnpm typecheck
119
+ pnpm test
120
+ pnpm build
121
+ pnpm desktop:build
122
+ pnpm test:package
123
+ openspec validate add-codex-claude-desktop-presets --strict
124
+ ```
125
+
126
+ Additional documentation:
127
+
128
+ - [Provider setup](docs/provider-setup.md)
129
+ - [Troubleshooting](docs/troubleshooting.md)
130
+ - [npm release process](docs/npm-release.md)
131
+ - [Sift API contract](docs/api-contract.md)
132
+ - [Paperclip reference record](docs/provider-adapter-references.md)
133
+
134
+ ## License
135
+
136
+ Apache-2.0. Paperclip-derived behavioral references and notices are recorded in
137
+ [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md).
@@ -0,0 +1,38 @@
1
+ # Third-Party Notices
2
+
3
+ ## Paperclip
4
+
5
+ Parts of the Sift Conductor provider adapter design and parsing behavior were
6
+ adapted from Paperclip adapter utilities and its Codex Local and Claude Local
7
+ adapters.
8
+
9
+ - Project: https://github.com/paperclipai/paperclip
10
+ - Reference revision: `d166069bc4da847357b2a5b82241048fd4563b83`
11
+ - Copyright: Copyright (c) 2025 Paperclip AI
12
+ - License: MIT
13
+
14
+ MIT License
15
+
16
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
17
+ this software and associated documentation files (the "Software"), to deal in
18
+ the Software without restriction, including without limitation the rights to
19
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
20
+ the Software, and to permit persons to whom the Software is furnished to do so,
21
+ subject to the following conditions:
22
+
23
+ The above copyright notice and this permission notice shall be included in all
24
+ copies or substantial portions of the Software.
25
+
26
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
29
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32
+ SOFTWARE.
33
+
34
+ The Sift/Paperclip visual prototype was used as an interface reference rather
35
+ than copied as a backend or bundled dependency:
36
+
37
+ - Project: https://github.com/Sift-wiki/paperclip-sift-visual-prototype
38
+ - Reference revision: `70788a1faf0909c490eb0c4ea928f8cb623f5ce0`
@@ -0,0 +1,23 @@
1
+ import type { AdapterReadiness, LocalAgentAdapter } from "./types.js";
2
+ import { type ProviderProbeDeps } from "./provider/discovery.js";
3
+ import type { ProviderAgentConfig } from "./provider/types.js";
4
+ export declare const MINIMUM_CLAUDE_CODE_VERSION = "2.1.0";
5
+ export type ClaudeAgentConfig = ProviderAgentConfig & {
6
+ type: "claude-code";
7
+ };
8
+ export type ClaudeAgentDeps = ProviderProbeDeps;
9
+ export declare function createClaudeAgentAdapter(config: ClaudeAgentConfig, deps?: ClaudeAgentDeps): LocalAgentAdapter;
10
+ export declare function checkClaudeAgent(config: ClaudeAgentConfig, deps?: ClaudeAgentDeps): Promise<AdapterReadiness>;
11
+ export declare function buildClaudeInvocation(input: {
12
+ config: ClaudeAgentConfig;
13
+ executablePath: string;
14
+ prompt: string;
15
+ env?: Record<string, string> | undefined;
16
+ remainingCostMicros?: number | undefined;
17
+ }): {
18
+ command: string;
19
+ args: string[];
20
+ cwd: string;
21
+ env: Record<string, string>;
22
+ stdin: string;
23
+ };
@@ -0,0 +1,164 @@
1
+ import { createClaudeStreamParser } from "./claudeParser.js";
2
+ import { probeCommand, resolveProviderExecutable, safeExecutableLabel, validateWorkspace, } from "./provider/discovery.js";
3
+ import { composeProviderPrompt } from "./provider/prompt.js";
4
+ import { providerTerminalJsonSchema } from "./provider/result.js";
5
+ import { runProviderAdapter } from "./provider/runProvider.js";
6
+ import { extractVersion, versionAtLeast } from "./provider/version.js";
7
+ export const MINIMUM_CLAUDE_CODE_VERSION = "2.1.0";
8
+ export function createClaudeAgentAdapter(config, deps = {}) {
9
+ return {
10
+ localKey: config.localKey,
11
+ displayName: config.displayName,
12
+ adapterType: "claude-code",
13
+ enabled: config.enabled,
14
+ capabilities: {
15
+ provider: "anthropic",
16
+ streaming: true,
17
+ structuredOutput: true,
18
+ cancellation: "process-tree",
19
+ accessProfile: config.accessProfile,
20
+ },
21
+ check: () => checkClaudeAgent(config, deps),
22
+ run: (input) => runClaudeAgent(input, config, deps),
23
+ };
24
+ }
25
+ export async function checkClaudeAgent(config, deps = {}) {
26
+ if (!config.enabled) {
27
+ return {
28
+ status: "error",
29
+ message: "Claude Code agent is paused.",
30
+ hint: "Resume it before assigning work.",
31
+ remediation: "resume",
32
+ };
33
+ }
34
+ const workspace = await validateWorkspace(config);
35
+ if (!workspace.ok) {
36
+ return { status: "error", message: workspace.message, remediation: "select-folder" };
37
+ }
38
+ const executablePath = await resolveProviderExecutable({
39
+ provider: "claude-code",
40
+ executablePath: config.executablePath,
41
+ cwd: config.workspacePath,
42
+ env: deps.env,
43
+ });
44
+ if (executablePath === undefined) {
45
+ return {
46
+ status: "error",
47
+ message: "Claude Code was not found.",
48
+ hint: "Install Claude Code or choose its executable in Sift Conductor.",
49
+ remediation: "install",
50
+ };
51
+ }
52
+ const versionProbe = await probeCommand({
53
+ command: executablePath,
54
+ args: ["--version"],
55
+ cwd: config.workspacePath,
56
+ deps,
57
+ });
58
+ const version = extractVersion(`${versionProbe.stdout}\n${versionProbe.stderr}`);
59
+ if (version === undefined || !versionAtLeast(version, MINIMUM_CLAUDE_CODE_VERSION)) {
60
+ return {
61
+ status: "error",
62
+ message: "Claude Code version is unsupported.",
63
+ hint: `Upgrade Claude Code to ${MINIMUM_CLAUDE_CODE_VERSION} or newer.`,
64
+ remediation: "upgrade",
65
+ };
66
+ }
67
+ const authProbe = await probeCommand({
68
+ command: executablePath,
69
+ args: ["auth", "status", "--json"],
70
+ cwd: config.workspacePath,
71
+ deps,
72
+ });
73
+ if (!claudeAuthReady(authProbe.stdout, authProbe.exitCode)) {
74
+ return {
75
+ status: "error",
76
+ message: "Claude Code authentication is required.",
77
+ hint: "Sign in through the Claude Code login flow, then retest this agent.",
78
+ remediation: "login",
79
+ };
80
+ }
81
+ return {
82
+ status: "ready",
83
+ message: `${safeExecutableLabel(executablePath)} ${version} is ready.`,
84
+ metadata: { providerVersion: version, accessProfile: config.accessProfile },
85
+ };
86
+ }
87
+ export function buildClaudeInvocation(input) {
88
+ const args = [
89
+ "--print",
90
+ "--input-format",
91
+ "text",
92
+ "--output-format",
93
+ "stream-json",
94
+ "--verbose",
95
+ "--no-session-persistence",
96
+ "--json-schema",
97
+ JSON.stringify(providerTerminalJsonSchema),
98
+ ];
99
+ if (input.config.accessProfile === "inspect") {
100
+ args.push("--permission-mode", "plan", "--tools", "Read,Glob,Grep");
101
+ }
102
+ else {
103
+ args.push("--permission-mode", "acceptEdits", "--tools", "Read,Glob,Grep,Edit,Write", "--disallowedTools", "Bash,WebFetch,WebSearch");
104
+ }
105
+ if (input.config.model !== undefined)
106
+ args.push("--model", input.config.model);
107
+ if (input.remainingCostMicros !== undefined && input.remainingCostMicros > 0) {
108
+ args.push("--max-budget-usd", String(input.remainingCostMicros / 1_000_000));
109
+ }
110
+ return {
111
+ command: input.executablePath,
112
+ args,
113
+ cwd: input.config.workspacePath,
114
+ env: input.env ?? {},
115
+ stdin: input.prompt,
116
+ };
117
+ }
118
+ async function runClaudeAgent(input, config, deps) {
119
+ return runProviderAdapter({
120
+ provider: "claude-code",
121
+ runInput: input,
122
+ timeoutMs: config.timeoutMs,
123
+ graceMs: config.graceMs,
124
+ outputLimitBytes: config.outputLimitBytes,
125
+ ...(deps.runProcess === undefined ? {} : { runProcess: deps.runProcess }),
126
+ prepare: async () => buildClaudeInvocation({
127
+ config,
128
+ executablePath: await requiredExecutable(config, deps),
129
+ prompt: composeProviderPrompt(input),
130
+ env: input.env,
131
+ remainingCostMicros: input.wakeEnvelope?.limits.remainingCostMicros,
132
+ }),
133
+ createParser: () => createClaudeStreamParser({
134
+ emit: (event) => input.emit(event),
135
+ outputLimitBytes: config.outputLimitBytes,
136
+ }),
137
+ });
138
+ }
139
+ function claudeAuthReady(stdout, exitCode) {
140
+ if ((exitCode ?? 1) !== 0)
141
+ return false;
142
+ try {
143
+ const parsed = JSON.parse(stdout);
144
+ return typeof parsed === "object"
145
+ && parsed !== null
146
+ && !Array.isArray(parsed)
147
+ && parsed.loggedIn === true;
148
+ }
149
+ catch {
150
+ return false;
151
+ }
152
+ }
153
+ async function requiredExecutable(config, deps) {
154
+ const resolved = await resolveProviderExecutable({
155
+ provider: "claude-code",
156
+ executablePath: config.executablePath,
157
+ cwd: config.workspacePath,
158
+ env: deps.env,
159
+ });
160
+ if (resolved === undefined)
161
+ throw new Error("Claude Code was not found.");
162
+ return resolved;
163
+ }
164
+ //# sourceMappingURL=claudeAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeAgent.js","sourceRoot":"","sources":["../../src/adapters/claudeAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ParsedProviderOutput, ProviderParserInput } from "./provider/types.js";
2
+ export declare function createClaudeStreamParser(input: ProviderParserInput): {
3
+ push: (stream: "stdout" | "stderr", chunk: string) => Promise<void>;
4
+ finish(): Promise<ParsedProviderOutput>;
5
+ };
@@ -0,0 +1,120 @@
1
+ import { boundAndRedactText } from "./output.js";
2
+ import { asRecord, numberValue, parseJsonRecord, stringValue } from "./provider/json.js";
3
+ import { ProviderLineStream } from "./provider/lineStream.js";
4
+ import { parseProviderTerminalResult } from "./provider/result.js";
5
+ export function createClaudeStreamParser(input) {
6
+ let sessionId;
7
+ let model;
8
+ let terminalRaw;
9
+ let errorMessage;
10
+ let stderrDiagnostic;
11
+ let usage;
12
+ const lines = new ProviderLineStream(async (stream, rawLine) => {
13
+ const line = rawLine.trim();
14
+ if (line.length === 0)
15
+ return;
16
+ if (stream === "stderr") {
17
+ stderrDiagnostic ??= boundAndRedactText(line, 2_000).text;
18
+ return;
19
+ }
20
+ const event = parseJsonRecord(line);
21
+ if (event === undefined)
22
+ return;
23
+ const type = stringValue(event.type);
24
+ sessionId = stringValue(event.session_id) ?? sessionId;
25
+ if (type === "system" && stringValue(event.subtype) === "init") {
26
+ model = stringValue(event.model) ?? model;
27
+ return;
28
+ }
29
+ if (type === "assistant") {
30
+ const message = asRecord(event.message);
31
+ const content = Array.isArray(message?.content) ? message.content : [];
32
+ for (const blockValue of content) {
33
+ const block = asRecord(blockValue);
34
+ if (stringValue(block?.type) !== "tool_use")
35
+ continue;
36
+ const toolName = stringValue(block?.name);
37
+ await input.emit({
38
+ eventType: "progress",
39
+ payload: { summary: claudeToolSummary(toolName) },
40
+ });
41
+ }
42
+ return;
43
+ }
44
+ if (type !== "result")
45
+ return;
46
+ const rawUsage = asRecord(event.usage);
47
+ const costUsd = numberValue(event.total_cost_usd);
48
+ usage = {
49
+ ...(numberValue(rawUsage?.input_tokens) === undefined
50
+ ? {}
51
+ : { inputTokens: numberValue(rawUsage?.input_tokens) }),
52
+ ...(numberValue(rawUsage?.cache_read_input_tokens) === undefined
53
+ ? {}
54
+ : { cachedInputTokens: numberValue(rawUsage?.cache_read_input_tokens) }),
55
+ ...(numberValue(rawUsage?.output_tokens) === undefined
56
+ ? {}
57
+ : { outputTokens: numberValue(rawUsage?.output_tokens) }),
58
+ ...(costUsd === undefined ? {} : { costMicros: Math.round(costUsd * 1_000_000) }),
59
+ };
60
+ if (event.is_error === true) {
61
+ errorMessage = boundAndRedactText(stringValue(event.result) ?? claudeErrors(event) ?? "Claude Code reported an error.", 2_000).text;
62
+ return;
63
+ }
64
+ terminalRaw = event.structured_output ?? event.result;
65
+ });
66
+ return {
67
+ push: (stream, chunk) => lines.push(stream, chunk),
68
+ async finish() {
69
+ await lines.finish();
70
+ let terminalResult;
71
+ if (terminalRaw !== undefined) {
72
+ try {
73
+ terminalResult = parseProviderTerminalResult(terminalRaw);
74
+ }
75
+ catch (error) {
76
+ errorMessage ??= error instanceof Error ? error.message : "Claude Code terminal result is invalid.";
77
+ }
78
+ }
79
+ if (terminalResult === undefined)
80
+ errorMessage ??= stderrDiagnostic;
81
+ return {
82
+ ...(terminalResult === undefined ? {} : { terminalResult }),
83
+ ...(usage === undefined ? {} : { usage }),
84
+ ...(sessionId === undefined ? {} : { sessionId }),
85
+ ...(model === undefined ? {} : { model }),
86
+ ...(errorMessage === undefined ? {} : { errorMessage }),
87
+ };
88
+ },
89
+ };
90
+ }
91
+ function claudeToolSummary(toolName) {
92
+ switch (toolName) {
93
+ case "Read":
94
+ case "Glob":
95
+ case "Grep":
96
+ return "Inspecting workspace context.";
97
+ case "Edit":
98
+ case "Write":
99
+ case "NotebookEdit":
100
+ return "Updating workspace files.";
101
+ case "Bash":
102
+ return "Running a local workspace command.";
103
+ default:
104
+ return "Using a local agent tool.";
105
+ }
106
+ }
107
+ function claudeErrors(event) {
108
+ if (!Array.isArray(event.errors))
109
+ return undefined;
110
+ for (const value of event.errors) {
111
+ if (typeof value === "string" && value.trim().length > 0)
112
+ return value;
113
+ const error = asRecord(value);
114
+ const message = stringValue(error?.message) ?? stringValue(error?.error);
115
+ if (message !== undefined)
116
+ return message;
117
+ }
118
+ return undefined;
119
+ }
120
+ //# sourceMappingURL=claudeParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeParser.js","sourceRoot":"","sources":["../../src/adapters/claudeParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { AdapterReadiness, LocalAgentAdapter } from "./types.js";
2
+ import { type ProviderProbeDeps } from "./provider/discovery.js";
3
+ import { type PreparedOutputSchema } from "./provider/outputSchemaFile.js";
4
+ import type { ProviderAgentConfig } from "./provider/types.js";
5
+ import type { RunProcess } from "../runtime/process.js";
6
+ export declare const MINIMUM_CODEX_VERSION = "0.100.0";
7
+ export type CodexAgentConfig = ProviderAgentConfig & {
8
+ type: "codex";
9
+ };
10
+ export type CodexAgentDeps = ProviderProbeDeps & {
11
+ prepareOutputSchema?: (() => Promise<PreparedOutputSchema>) | undefined;
12
+ };
13
+ export declare function createCodexAgentAdapter(config: CodexAgentConfig, deps?: CodexAgentDeps): LocalAgentAdapter;
14
+ export declare function checkCodexAgent(config: CodexAgentConfig, deps?: CodexAgentDeps): Promise<AdapterReadiness>;
15
+ export declare function buildCodexInvocation(input: {
16
+ config: CodexAgentConfig;
17
+ executablePath: string;
18
+ schemaPath: string;
19
+ prompt: string;
20
+ env?: Record<string, string> | undefined;
21
+ }): {
22
+ command: string;
23
+ args: string[];
24
+ cwd: string;
25
+ env: Record<string, string>;
26
+ stdin: string;
27
+ };
28
+ export type { RunProcess };