@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.
- package/README.md +135 -1
- package/THIRD_PARTY_NOTICES.md +38 -0
- package/dist/adapters/claudeAgent.d.ts +23 -0
- package/dist/adapters/claudeAgent.js +164 -0
- package/dist/adapters/claudeAgent.js.map +1 -0
- package/dist/adapters/claudeParser.d.ts +5 -0
- package/dist/adapters/claudeParser.js +120 -0
- package/dist/adapters/claudeParser.js.map +1 -0
- package/dist/adapters/codexAgent.d.ts +28 -0
- package/dist/adapters/codexAgent.js +152 -0
- package/dist/adapters/codexAgent.js.map +1 -0
- package/dist/adapters/codexParser.d.ts +5 -0
- package/dist/adapters/codexParser.js +106 -0
- package/dist/adapters/codexParser.js.map +1 -0
- package/dist/adapters/config.d.ts +29 -0
- package/dist/adapters/config.js +286 -0
- package/dist/adapters/config.js.map +1 -0
- package/dist/adapters/doctor.d.ts +12 -0
- package/dist/adapters/doctor.js +20 -0
- package/dist/adapters/doctor.js.map +1 -0
- package/dist/adapters/errors.d.ts +7 -0
- package/dist/adapters/errors.js +19 -0
- package/dist/adapters/errors.js.map +1 -0
- package/dist/adapters/fakeAgent.d.ts +11 -0
- package/dist/adapters/fakeAgent.js +149 -0
- package/dist/adapters/fakeAgent.js.map +1 -0
- package/dist/adapters/httpAgent.d.ts +19 -0
- package/dist/adapters/httpAgent.js +164 -0
- package/dist/adapters/httpAgent.js.map +1 -0
- package/dist/adapters/output.d.ts +16 -0
- package/dist/adapters/output.js +48 -0
- package/dist/adapters/output.js.map +1 -0
- package/dist/adapters/processAgent.d.ts +21 -0
- package/dist/adapters/processAgent.js +166 -0
- package/dist/adapters/processAgent.js.map +1 -0
- package/dist/adapters/provider/discovery.d.ts +31 -0
- package/dist/adapters/provider/discovery.js +102 -0
- package/dist/adapters/provider/discovery.js.map +1 -0
- package/dist/adapters/provider/json.d.ts +4 -0
- package/dist/adapters/provider/json.js +21 -0
- package/dist/adapters/provider/json.js.map +1 -0
- package/dist/adapters/provider/lineStream.d.ts +8 -0
- package/dist/adapters/provider/lineStream.js +28 -0
- package/dist/adapters/provider/lineStream.js.map +1 -0
- package/dist/adapters/provider/outputSchemaFile.d.ts +5 -0
- package/dist/adapters/provider/outputSchemaFile.js +16 -0
- package/dist/adapters/provider/outputSchemaFile.js.map +1 -0
- package/dist/adapters/provider/prompt.d.ts +2 -0
- package/dist/adapters/provider/prompt.js +52 -0
- package/dist/adapters/provider/prompt.js.map +1 -0
- package/dist/adapters/provider/result.d.ts +23 -0
- package/dist/adapters/provider/result.js +116 -0
- package/dist/adapters/provider/result.js.map +1 -0
- package/dist/adapters/provider/runProvider.d.ts +16 -0
- package/dist/adapters/provider/runProvider.js +110 -0
- package/dist/adapters/provider/runProvider.js.map +1 -0
- package/dist/adapters/provider/setup.d.ts +50 -0
- package/dist/adapters/provider/setup.js +180 -0
- package/dist/adapters/provider/setup.js.map +1 -0
- package/dist/adapters/provider/store.d.ts +19 -0
- package/dist/adapters/provider/store.js +92 -0
- package/dist/adapters/provider/store.js.map +1 -0
- package/dist/adapters/provider/types.d.ts +58 -0
- package/dist/adapters/provider/types.js +2 -0
- package/dist/adapters/provider/types.js.map +1 -0
- package/dist/adapters/provider/version.d.ts +2 -0
- package/dist/adapters/provider/version.js +25 -0
- package/dist/adapters/provider/version.js.map +1 -0
- package/dist/adapters/types.d.ts +40 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/bridge/handler.d.ts +15 -0
- package/dist/bridge/handler.js +125 -0
- package/dist/bridge/handler.js.map +1 -0
- package/dist/bridge/localBridge.d.ts +49 -0
- package/dist/bridge/localBridge.js +157 -0
- package/dist/bridge/localBridge.js.map +1 -0
- package/dist/bridge/server.d.ts +11 -0
- package/dist/bridge/server.js +86 -0
- package/dist/bridge/server.js.map +1 -0
- package/dist/bridge/sessionRegistry.d.ts +23 -0
- package/dist/bridge/sessionRegistry.js +65 -0
- package/dist/bridge/sessionRegistry.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.js +216 -0
- package/dist/cli.js.map +1 -0
- package/dist/conductorClient.d.ts +252 -0
- package/dist/conductorClient.js +223 -0
- package/dist/conductorClient.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.js +54 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon.d.ts +48 -0
- package/dist/daemon.js +284 -0
- package/dist/daemon.js.map +1 -0
- package/dist/desktop/adapterSetupView.d.ts +16 -0
- package/dist/desktop/adapterSetupView.js +13 -0
- package/dist/desktop/adapterSetupView.js.map +1 -0
- package/dist/desktop/manifest.d.ts +17 -0
- package/dist/desktop/manifest.js +24 -0
- package/dist/desktop/manifest.js.map +1 -0
- package/dist/desktop/pairing.d.ts +13 -0
- package/dist/desktop/pairing.js +20 -0
- package/dist/desktop/pairing.js.map +1 -0
- package/dist/desktop/recovery.d.ts +33 -0
- package/dist/desktop/recovery.js +71 -0
- package/dist/desktop/recovery.js.map +1 -0
- package/dist/desktop/workBoardView.d.ts +41 -0
- package/dist/desktop/workBoardView.js +133 -0
- package/dist/desktop/workBoardView.js.map +1 -0
- package/dist/desktop/workGovernanceView.d.ts +70 -0
- package/dist/desktop/workGovernanceView.js +159 -0
- package/dist/desktop/workGovernanceView.js.map +1 -0
- package/dist/pairing.d.ts +27 -0
- package/dist/pairing.js +45 -0
- package/dist/pairing.js.map +1 -0
- package/dist/redaction.d.ts +2 -0
- package/dist/redaction.js +34 -0
- package/dist/redaction.js.map +1 -0
- package/dist/release/validateDistribution.d.ts +51 -0
- package/dist/release/validateDistribution.js +54 -0
- package/dist/release/validateDistribution.js.map +1 -0
- package/dist/runtime/localLogSpool.d.ts +46 -0
- package/dist/runtime/localLogSpool.js +101 -0
- package/dist/runtime/localLogSpool.js.map +1 -0
- package/dist/runtime/localRunQueue.d.ts +31 -0
- package/dist/runtime/localRunQueue.js +76 -0
- package/dist/runtime/localRunQueue.js.map +1 -0
- package/dist/runtime/localSessionCache.d.ts +26 -0
- package/dist/runtime/localSessionCache.js +35 -0
- package/dist/runtime/localSessionCache.js.map +1 -0
- package/dist/runtime/process.d.ts +27 -0
- package/dist/runtime/process.js +128 -0
- package/dist/runtime/process.js.map +1 -0
- package/dist/runtime/runEnvironment.d.ts +12 -0
- package/dist/runtime/runEnvironment.js +59 -0
- package/dist/runtime/runEnvironment.js.map +1 -0
- package/dist/runtime/runEventRetryBuffer.d.ts +42 -0
- package/dist/runtime/runEventRetryBuffer.js +118 -0
- package/dist/runtime/runEventRetryBuffer.js.map +1 -0
- package/dist/runtime/runtimeService.d.ts +27 -0
- package/dist/runtime/runtimeService.js +112 -0
- package/dist/runtime/runtimeService.js.map +1 -0
- package/dist/runtime/sleep.d.ts +2 -0
- package/dist/runtime/sleep.js +21 -0
- package/dist/runtime/sleep.js.map +1 -0
- package/dist/runtime/taskExecution.d.ts +16 -0
- package/dist/runtime/taskExecution.js +74 -0
- package/dist/runtime/taskExecution.js.map +1 -0
- package/dist/runtime/wakeEnvelope.d.ts +76 -0
- package/dist/runtime/wakeEnvelope.js +60 -0
- package/dist/runtime/wakeEnvelope.js.map +1 -0
- package/dist/types.d.ts +121 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/dist/workTypes.d.ts +182 -0
- package/dist/workTypes.js +75 -0
- package/dist/workTypes.js.map +1 -0
- package/package.json +65 -6
package/README.md
CHANGED
|
@@ -1,3 +1,137 @@
|
|
|
1
1
|
# Sift Conductor
|
|
2
2
|
|
|
3
|
-
|
|
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 };
|