@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
@@ -0,0 +1,152 @@
1
+ import { createCodexStreamParser } from "./codexParser.js";
2
+ import { composeProviderPrompt } from "./provider/prompt.js";
3
+ import { probeCommand, resolveProviderExecutable, safeExecutableLabel, validateWorkspace, } from "./provider/discovery.js";
4
+ import { prepareProviderOutputSchema, } from "./provider/outputSchemaFile.js";
5
+ import { runProviderAdapter } from "./provider/runProvider.js";
6
+ import { extractVersion, versionAtLeast } from "./provider/version.js";
7
+ export const MINIMUM_CODEX_VERSION = "0.100.0";
8
+ export function createCodexAgentAdapter(config, deps = {}) {
9
+ return {
10
+ localKey: config.localKey,
11
+ displayName: config.displayName,
12
+ adapterType: "codex",
13
+ enabled: config.enabled,
14
+ capabilities: {
15
+ provider: "openai",
16
+ streaming: true,
17
+ structuredOutput: true,
18
+ cancellation: "process-tree",
19
+ accessProfile: config.accessProfile,
20
+ },
21
+ check: () => checkCodexAgent(config, deps),
22
+ run: (input) => runCodexAgent(input, config, deps),
23
+ };
24
+ }
25
+ export async function checkCodexAgent(config, deps = {}) {
26
+ if (!config.enabled) {
27
+ return {
28
+ status: "error",
29
+ message: "Codex 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: "codex",
40
+ executablePath: config.executablePath,
41
+ cwd: config.workspacePath,
42
+ env: deps.env,
43
+ });
44
+ if (executablePath === undefined) {
45
+ return {
46
+ status: "error",
47
+ message: "Codex CLI was not found.",
48
+ hint: "Install Codex CLI 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_CODEX_VERSION)) {
60
+ return {
61
+ status: "error",
62
+ message: "Codex CLI version is unsupported.",
63
+ hint: `Upgrade Codex CLI to ${MINIMUM_CODEX_VERSION} or newer.`,
64
+ remediation: "upgrade",
65
+ };
66
+ }
67
+ const authProbe = await probeCommand({
68
+ command: executablePath,
69
+ args: ["login", "status"],
70
+ cwd: config.workspacePath,
71
+ deps,
72
+ });
73
+ if ((authProbe.exitCode ?? 1) !== 0 || !/logged\s+in/iu.test(`${authProbe.stdout}\n${authProbe.stderr}`)) {
74
+ return {
75
+ status: "error",
76
+ message: "Codex CLI authentication is required.",
77
+ hint: "Sign in through the Codex 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 buildCodexInvocation(input) {
88
+ const args = [
89
+ "exec",
90
+ "--json",
91
+ "--ephemeral",
92
+ "--skip-git-repo-check",
93
+ "--cd",
94
+ input.config.workspacePath,
95
+ "--sandbox",
96
+ input.config.accessProfile === "inspect" ? "read-only" : "workspace-write",
97
+ "--output-schema",
98
+ input.schemaPath,
99
+ ];
100
+ if (input.config.model !== undefined)
101
+ args.push("--model", input.config.model);
102
+ args.push("-");
103
+ return {
104
+ command: input.executablePath,
105
+ args,
106
+ cwd: input.config.workspacePath,
107
+ env: input.env ?? {},
108
+ stdin: input.prompt,
109
+ };
110
+ }
111
+ async function runCodexAgent(input, config, deps) {
112
+ let schema;
113
+ return runProviderAdapter({
114
+ provider: "codex",
115
+ runInput: input,
116
+ timeoutMs: config.timeoutMs,
117
+ graceMs: config.graceMs,
118
+ outputLimitBytes: config.outputLimitBytes,
119
+ ...(deps.runProcess === undefined ? {} : { runProcess: deps.runProcess }),
120
+ prepare: async () => {
121
+ const executablePath = await requiredExecutable(config, deps);
122
+ schema = await (deps.prepareOutputSchema ?? prepareProviderOutputSchema)();
123
+ const preparedSchema = schema;
124
+ return {
125
+ ...buildCodexInvocation({
126
+ config,
127
+ executablePath,
128
+ schemaPath: schema.path,
129
+ prompt: composeProviderPrompt(input),
130
+ env: input.env,
131
+ }),
132
+ cleanup: () => preparedSchema.cleanup(),
133
+ };
134
+ },
135
+ createParser: () => createCodexStreamParser({
136
+ emit: (event) => input.emit(event),
137
+ outputLimitBytes: config.outputLimitBytes,
138
+ }),
139
+ });
140
+ }
141
+ async function requiredExecutable(config, deps) {
142
+ const resolved = await resolveProviderExecutable({
143
+ provider: "codex",
144
+ executablePath: config.executablePath,
145
+ cwd: config.workspacePath,
146
+ env: deps.env,
147
+ });
148
+ if (resolved === undefined)
149
+ throw new Error("Codex CLI was not found.");
150
+ return resolved;
151
+ }
152
+ //# sourceMappingURL=codexAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexAgent.js","sourceRoot":"","sources":["../../src/adapters/codexAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ParsedProviderOutput, ProviderParserInput } from "./provider/types.js";
2
+ export declare function createCodexStreamParser(input: ProviderParserInput): {
3
+ push: (stream: "stdout" | "stderr", chunk: string) => Promise<void>;
4
+ finish(): Promise<ParsedProviderOutput>;
5
+ };
@@ -0,0 +1,106 @@
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 createCodexStreamParser(input) {
6
+ let sessionId;
7
+ let model;
8
+ let terminalText;
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
+ if (type === "thread.started") {
25
+ sessionId = stringValue(event.thread_id) ?? sessionId;
26
+ model = stringValue(event.model) ?? model;
27
+ return;
28
+ }
29
+ if (type === "error") {
30
+ errorMessage = boundAndRedactText(stringValue(event.message) ?? "Codex reported an error.", 2_000).text;
31
+ return;
32
+ }
33
+ if (type === "item.started" || type === "item.completed") {
34
+ const item = asRecord(event.item);
35
+ const itemType = stringValue(item?.type);
36
+ if (type === "item.completed" && itemType === "agent_message") {
37
+ terminalText = stringValue(item?.text) ?? terminalText;
38
+ return;
39
+ }
40
+ const summary = codexProgressSummary(type, itemType);
41
+ if (summary !== undefined) {
42
+ await input.emit({ eventType: "progress", payload: { summary } });
43
+ }
44
+ return;
45
+ }
46
+ if (type === "turn.completed") {
47
+ const rawUsage = asRecord(event.usage);
48
+ usage = {
49
+ ...(numberValue(rawUsage?.input_tokens) === undefined
50
+ ? {}
51
+ : { inputTokens: numberValue(rawUsage?.input_tokens) }),
52
+ ...(numberValue(rawUsage?.cached_input_tokens) === undefined
53
+ ? {}
54
+ : { cachedInputTokens: numberValue(rawUsage?.cached_input_tokens) }),
55
+ ...(numberValue(rawUsage?.output_tokens) === undefined
56
+ ? {}
57
+ : { outputTokens: numberValue(rawUsage?.output_tokens) }),
58
+ };
59
+ return;
60
+ }
61
+ if (type === "turn.failed") {
62
+ const error = asRecord(event.error);
63
+ errorMessage = boundAndRedactText(stringValue(error?.message) ?? "Codex turn failed.", 2_000).text;
64
+ }
65
+ });
66
+ return {
67
+ push: (stream, chunk) => lines.push(stream, chunk),
68
+ async finish() {
69
+ await lines.finish();
70
+ let terminalResult;
71
+ if (terminalText !== undefined) {
72
+ try {
73
+ terminalResult = parseProviderTerminalResult(terminalText);
74
+ }
75
+ catch (error) {
76
+ errorMessage ??= error instanceof Error ? error.message : "Codex 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 codexProgressSummary(eventType, itemType) {
92
+ const phase = eventType === "item.started" ? "Starting" : "Finished";
93
+ switch (itemType) {
94
+ case "command_execution":
95
+ return `${phase} a local command.`;
96
+ case "file_change":
97
+ return `${phase} workspace file updates.`;
98
+ case "mcp_tool_call":
99
+ return `${phase} a connected tool action.`;
100
+ case "web_search":
101
+ return `${phase} a web search.`;
102
+ default:
103
+ return undefined;
104
+ }
105
+ }
106
+ //# sourceMappingURL=codexParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexParser.js","sourceRoot":"","sources":["../../src/adapters/codexParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { type CodexAgentConfig } from "./codexAgent.js";
3
+ import { type ClaudeAgentConfig } from "./claudeAgent.js";
4
+ import { type FetchLike, type HttpAgentConfig } from "./httpAgent.js";
5
+ import { type ProcessAgentConfig } from "./processAgent.js";
6
+ import type { LocalAgentAdapter } from "./types.js";
7
+ import type { RunProcess } from "../runtime/process.js";
8
+ import type { JsonObject } from "../types.js";
9
+ export type FakeAdapterConfig = {
10
+ type: "fake";
11
+ localKey: string;
12
+ displayName: string;
13
+ capabilities: JsonObject;
14
+ };
15
+ export type AdapterConfig = FakeAdapterConfig | ({
16
+ type: "process";
17
+ } & ProcessAgentConfig) | ({
18
+ type: "http";
19
+ } & HttpAgentConfig) | CodexAgentConfig | ClaudeAgentConfig;
20
+ export type AdapterFactoryDeps = {
21
+ runProcess?: RunProcess;
22
+ fetch?: FetchLike;
23
+ env?: NodeJS.ProcessEnv;
24
+ };
25
+ export declare function defaultAdapterConfigs(): AdapterConfig[];
26
+ export declare function loadAdapterConfigsFromFile(configPath: string | undefined, read?: typeof readFile): Promise<AdapterConfig[]>;
27
+ export declare function parseAdapterConfigs(raw: unknown): AdapterConfig[];
28
+ export declare function createConfiguredAdapters(configs?: AdapterConfig[], deps?: AdapterFactoryDeps): LocalAgentAdapter[];
29
+ export declare function capabilitiesForAdapters(adapters: LocalAgentAdapter[]): JsonObject;
@@ -0,0 +1,286 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { z } from "zod";
3
+ import { createFakeAgentAdapter } from "./fakeAgent.js";
4
+ import { createCodexAgentAdapter } from "./codexAgent.js";
5
+ import { createClaudeAgentAdapter } from "./claudeAgent.js";
6
+ import { createHttpAgentAdapter } from "./httpAgent.js";
7
+ import { createProcessAgentAdapter } from "./processAgent.js";
8
+ const rawRecordSchema = z.record(z.string(), z.unknown());
9
+ export function defaultAdapterConfigs() {
10
+ return [
11
+ {
12
+ type: "fake",
13
+ localKey: "fake-agent",
14
+ displayName: "Fake Agent",
15
+ capabilities: { streaming: false },
16
+ },
17
+ ];
18
+ }
19
+ export async function loadAdapterConfigsFromFile(configPath, read = readFile) {
20
+ if (configPath === undefined) {
21
+ return defaultAdapterConfigs();
22
+ }
23
+ let parsed;
24
+ try {
25
+ parsed = JSON.parse(await read(configPath, "utf8"));
26
+ }
27
+ catch (error) {
28
+ const message = error instanceof Error ? error.message : "Unknown parse error.";
29
+ throw new Error(`Invalid adapter config file: ${message}`);
30
+ }
31
+ return parseAdapterConfigs(parsed);
32
+ }
33
+ export function parseAdapterConfigs(raw) {
34
+ const entries = parseAdapterEntries(raw);
35
+ if (entries.length === 0) {
36
+ return defaultAdapterConfigs();
37
+ }
38
+ return entries.map((entry, index) => normalizeAdapterConfig(entry, index));
39
+ }
40
+ export function createConfiguredAdapters(configs = defaultAdapterConfigs(), deps = {}) {
41
+ return configs.map((config) => {
42
+ switch (config.type) {
43
+ case "fake":
44
+ return createFakeAgentAdapter({
45
+ localKey: config.localKey,
46
+ displayName: config.displayName,
47
+ capabilities: config.capabilities,
48
+ });
49
+ case "process":
50
+ return createProcessAgentAdapter(config, {
51
+ ...(deps.runProcess === undefined ? {} : { runProcess: deps.runProcess }),
52
+ ...(deps.env === undefined ? {} : { env: deps.env }),
53
+ });
54
+ case "http":
55
+ return createHttpAgentAdapter(config, {
56
+ ...(deps.fetch === undefined ? {} : { fetch: deps.fetch }),
57
+ });
58
+ case "codex":
59
+ return createCodexAgentAdapter(config, {
60
+ ...(deps.runProcess === undefined ? {} : { runProcess: deps.runProcess }),
61
+ ...(deps.env === undefined ? {} : { env: deps.env }),
62
+ });
63
+ case "claude-code":
64
+ return createClaudeAgentAdapter(config, {
65
+ ...(deps.runProcess === undefined ? {} : { runProcess: deps.runProcess }),
66
+ ...(deps.env === undefined ? {} : { env: deps.env }),
67
+ });
68
+ }
69
+ });
70
+ }
71
+ export function capabilitiesForAdapters(adapters) {
72
+ return {
73
+ platform: process.platform,
74
+ adapters: [...new Set(adapters.filter((adapter) => adapter.enabled !== false).map((adapter) => adapter.adapterType))],
75
+ };
76
+ }
77
+ function parseAdapterEntries(raw) {
78
+ if (Array.isArray(raw)) {
79
+ return raw.map((entry) => rawRecordSchema.parse(entry));
80
+ }
81
+ const root = rawRecordSchema.parse(raw);
82
+ const adapters = root.adapters;
83
+ if (!Array.isArray(adapters)) {
84
+ throw new Error("Adapter config must be an array or an object with an adapters array.");
85
+ }
86
+ return adapters.map((entry) => rawRecordSchema.parse(entry));
87
+ }
88
+ function normalizeAdapterConfig(raw, index) {
89
+ const nested = recordField(raw, "adapterConfig") ?? raw;
90
+ const type = stringField(raw, "type")
91
+ ?? stringField(raw, "adapterType")
92
+ ?? stringField(nested, "type")
93
+ ?? stringField(nested, "adapterType");
94
+ const normalizedType = type === "codex_local"
95
+ ? "codex"
96
+ : type === "claude_local"
97
+ ? "claude-code"
98
+ : type;
99
+ if (normalizedType !== "fake"
100
+ && normalizedType !== "process"
101
+ && normalizedType !== "http"
102
+ && normalizedType !== "codex"
103
+ && normalizedType !== "claude-code") {
104
+ throw new Error(`Unsupported adapter type: ${type ?? "<missing>"}`);
105
+ }
106
+ const localKey = stringField(raw, "localKey")
107
+ ?? stringField(raw, "id")
108
+ ?? stringField(nested, "localKey")
109
+ ?? `${normalizedType}-${String(index + 1)}`;
110
+ const displayName = stringField(raw, "displayName")
111
+ ?? stringField(raw, "name")
112
+ ?? stringField(nested, "displayName")
113
+ ?? defaultDisplayName(normalizedType);
114
+ const capabilities = recordField(raw, "capabilities")
115
+ ?? recordField(nested, "capabilities")
116
+ ?? { streaming: false };
117
+ if (normalizedType === "fake") {
118
+ return {
119
+ type: normalizedType,
120
+ localKey,
121
+ displayName,
122
+ capabilities,
123
+ };
124
+ }
125
+ if (normalizedType === "process") {
126
+ const command = stringField(nested, "command") ?? stringField(raw, "command");
127
+ if (command === undefined) {
128
+ throw new Error(`Process adapter ${localKey} missing command.`);
129
+ }
130
+ return {
131
+ type: normalizedType,
132
+ localKey,
133
+ displayName,
134
+ command,
135
+ args: stringArrayField(nested, "args") ?? stringArrayField(raw, "args") ?? [],
136
+ cwd: stringField(nested, "cwd") ?? stringField(raw, "cwd") ?? process.cwd(),
137
+ env: stringRecordField(nested, "env") ?? stringRecordField(raw, "env") ?? {},
138
+ timeoutMs: timeoutMsField(nested) ?? timeoutMsField(raw) ?? 0,
139
+ graceMs: graceMsField(nested) ?? graceMsField(raw) ?? 15_000,
140
+ outputLimitBytes: positiveNumberField(nested, "outputLimitBytes")
141
+ ?? positiveNumberField(raw, "outputLimitBytes")
142
+ ?? 32 * 1024,
143
+ capabilities,
144
+ paperclipEnvAliases: booleanField(nested, "paperclipEnvAliases")
145
+ ?? booleanField(nested, "includePaperclipAliases")
146
+ ?? booleanField(raw, "paperclipEnvAliases")
147
+ ?? booleanField(raw, "includePaperclipAliases")
148
+ ?? false,
149
+ };
150
+ }
151
+ if (normalizedType === "codex" || normalizedType === "claude-code") {
152
+ const workspacePath = stringField(nested, "workspacePath")
153
+ ?? stringField(nested, "cwd")
154
+ ?? stringField(raw, "workspacePath")
155
+ ?? stringField(raw, "cwd");
156
+ if (workspacePath === undefined) {
157
+ throw new Error(`${defaultDisplayName(normalizedType)} ${localKey} missing workspacePath.`);
158
+ }
159
+ const accessProfile = stringField(nested, "accessProfile")
160
+ ?? stringField(raw, "accessProfile")
161
+ ?? "workspace";
162
+ if (accessProfile !== "inspect" && accessProfile !== "workspace") {
163
+ throw new Error(`Provider adapter ${localKey} has invalid accessProfile.`);
164
+ }
165
+ return {
166
+ type: normalizedType,
167
+ localKey,
168
+ displayName,
169
+ workspacePath,
170
+ executablePath: stringField(nested, "executablePath")
171
+ ?? stringField(nested, "command")
172
+ ?? stringField(raw, "executablePath")
173
+ ?? stringField(raw, "command"),
174
+ accessProfile,
175
+ enabled: booleanField(nested, "enabled") ?? booleanField(raw, "enabled") ?? true,
176
+ model: stringField(nested, "model") ?? stringField(raw, "model"),
177
+ timeoutMs: timeoutMsField(nested) ?? timeoutMsField(raw) ?? 0,
178
+ graceMs: graceMsField(nested) ?? graceMsField(raw) ?? 15_000,
179
+ outputLimitBytes: positiveNumberField(nested, "outputLimitBytes")
180
+ ?? positiveNumberField(raw, "outputLimitBytes")
181
+ ?? 64 * 1024,
182
+ };
183
+ }
184
+ const url = stringField(nested, "url") ?? stringField(raw, "url");
185
+ if (url === undefined) {
186
+ throw new Error(`HTTP adapter ${localKey} missing url.`);
187
+ }
188
+ return {
189
+ type: "http",
190
+ localKey,
191
+ displayName,
192
+ url,
193
+ method: stringField(nested, "method") ?? stringField(raw, "method") ?? "POST",
194
+ headers: stringRecordField(nested, "headers") ?? stringRecordField(raw, "headers") ?? {},
195
+ payloadTemplate: recordField(nested, "payloadTemplate")
196
+ ?? recordField(raw, "payloadTemplate")
197
+ ?? {},
198
+ timeoutMs: timeoutMsField(nested) ?? timeoutMsField(raw) ?? 0,
199
+ outputLimitBytes: positiveNumberField(nested, "outputLimitBytes")
200
+ ?? positiveNumberField(raw, "outputLimitBytes")
201
+ ?? 32 * 1024,
202
+ capabilities,
203
+ };
204
+ }
205
+ function defaultDisplayName(type) {
206
+ switch (type) {
207
+ case "fake":
208
+ return "Fake Agent";
209
+ case "process":
210
+ return "Process Agent";
211
+ case "http":
212
+ return "HTTP Agent";
213
+ case "codex":
214
+ return "Codex Agent";
215
+ case "claude-code":
216
+ return "Claude Code Agent";
217
+ }
218
+ }
219
+ function stringField(record, key) {
220
+ const value = record[key];
221
+ return typeof value === "string" && value.trim().length > 0 ? value : undefined;
222
+ }
223
+ function recordField(record, key) {
224
+ const value = record[key];
225
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
226
+ return undefined;
227
+ }
228
+ return value;
229
+ }
230
+ function stringRecordField(record, key) {
231
+ const value = recordField(record, key);
232
+ if (value === undefined) {
233
+ return undefined;
234
+ }
235
+ const entries = {};
236
+ for (const [entryKey, entryValue] of Object.entries(value)) {
237
+ if (typeof entryValue !== "string") {
238
+ throw new Error(`${key}.${entryKey} must be a string.`);
239
+ }
240
+ entries[entryKey] = entryValue;
241
+ }
242
+ return entries;
243
+ }
244
+ function stringArrayField(record, key) {
245
+ const value = record[key];
246
+ if (value === undefined) {
247
+ return undefined;
248
+ }
249
+ if (!Array.isArray(value) || !value.every((entry) => typeof entry === "string")) {
250
+ throw new Error(`${key} must be an array of strings.`);
251
+ }
252
+ return value;
253
+ }
254
+ function timeoutMsField(record) {
255
+ return positiveNumberField(record, "timeoutMs")
256
+ ?? secondsField(record, "timeoutSec");
257
+ }
258
+ function graceMsField(record) {
259
+ return positiveNumberField(record, "graceMs")
260
+ ?? secondsField(record, "graceSec");
261
+ }
262
+ function secondsField(record, key) {
263
+ const seconds = positiveNumberField(record, key);
264
+ return seconds === undefined ? undefined : seconds * 1000;
265
+ }
266
+ function positiveNumberField(record, key) {
267
+ const value = record[key];
268
+ if (value === undefined) {
269
+ return undefined;
270
+ }
271
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
272
+ throw new Error(`${key} must be a non-negative number.`);
273
+ }
274
+ return value;
275
+ }
276
+ function booleanField(record, key) {
277
+ const value = record[key];
278
+ if (value === undefined) {
279
+ return undefined;
280
+ }
281
+ if (typeof value !== "boolean") {
282
+ throw new Error(`${key} must be a boolean.`);
283
+ }
284
+ return value;
285
+ }
286
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/adapters/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { AdapterReadiness, LocalAgentAdapter } from "./types.js";
2
+ import type { JsonObject } from "../types.js";
3
+ export type AdapterDoctorEntry = {
4
+ localKey: string;
5
+ displayName: string;
6
+ adapterType: string;
7
+ status: AdapterReadiness["status"];
8
+ message: string;
9
+ hint?: string | undefined;
10
+ metadata?: JsonObject | undefined;
11
+ };
12
+ export declare function checkAdapters(adapters: LocalAgentAdapter[]): Promise<AdapterDoctorEntry[]>;
@@ -0,0 +1,20 @@
1
+ import { safeMessage } from "./output.js";
2
+ export async function checkAdapters(adapters) {
3
+ const entries = [];
4
+ for (const adapter of adapters) {
5
+ const readiness = adapter.check === undefined
6
+ ? { status: "ready", message: "No adapter-specific checks." }
7
+ : await adapter.check();
8
+ entries.push({
9
+ localKey: adapter.localKey,
10
+ displayName: adapter.displayName,
11
+ adapterType: adapter.adapterType,
12
+ status: readiness.status,
13
+ message: safeMessage(readiness.message),
14
+ ...(readiness.hint === undefined ? {} : { hint: safeMessage(readiness.hint) }),
15
+ ...(readiness.metadata === undefined ? {} : { metadata: readiness.metadata }),
16
+ });
17
+ }
18
+ return entries;
19
+ }
20
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/adapters/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAc1C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAA6B;IAC/D,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS;YAC3C,CAAC,CAAC,EAAE,MAAM,EAAE,OAAgB,EAAE,OAAO,EAAE,6BAA6B,EAAE;YACtE,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC;YACvC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9E,GAAG,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;SAC9E,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}