@xenosystem/acp-agent 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +9 -0
- package/README.md +22 -0
- package/dist/acpAgentServer.d.ts +43 -0
- package/dist/acpAgentServer.d.ts.map +1 -0
- package/dist/acpAgentServer.js +450 -0
- package/dist/acpAgentServer.js.map +1 -0
- package/dist/adapters/adapterContractVersion.d.ts +24 -0
- package/dist/adapters/adapterContractVersion.d.ts.map +1 -0
- package/dist/adapters/adapterContractVersion.js +29 -0
- package/dist/adapters/adapterContractVersion.js.map +1 -0
- package/dist/adapters/adapterDiagnostics.d.ts +19 -0
- package/dist/adapters/adapterDiagnostics.d.ts.map +1 -0
- package/dist/adapters/adapterDiagnostics.js +18 -0
- package/dist/adapters/adapterDiagnostics.js.map +1 -0
- package/dist/adapters/adapterErrors.d.ts +19 -0
- package/dist/adapters/adapterErrors.d.ts.map +1 -0
- package/dist/adapters/adapterErrors.js +23 -0
- package/dist/adapters/adapterErrors.js.map +1 -0
- package/dist/adapters/adapterEventMapper.d.ts +22 -0
- package/dist/adapters/adapterEventMapper.d.ts.map +1 -0
- package/dist/adapters/adapterEventMapper.js +70 -0
- package/dist/adapters/adapterEventMapper.js.map +1 -0
- package/dist/adapters/adapterEventParser.d.ts +16 -0
- package/dist/adapters/adapterEventParser.d.ts.map +1 -0
- package/dist/adapters/adapterEventParser.js +95 -0
- package/dist/adapters/adapterEventParser.js.map +1 -0
- package/dist/adapters/adapterEventProtocol.d.ts +85 -0
- package/dist/adapters/adapterEventProtocol.d.ts.map +1 -0
- package/dist/adapters/adapterEventProtocol.js +74 -0
- package/dist/adapters/adapterEventProtocol.js.map +1 -0
- package/dist/adapters/adapterFailureTaxonomy.d.ts +19 -0
- package/dist/adapters/adapterFailureTaxonomy.d.ts.map +1 -0
- package/dist/adapters/adapterFailureTaxonomy.js +62 -0
- package/dist/adapters/adapterFailureTaxonomy.js.map +1 -0
- package/dist/adapters/adapterHarnessTypes.d.ts +103 -0
- package/dist/adapters/adapterHarnessTypes.d.ts.map +1 -0
- package/dist/adapters/adapterHarnessTypes.js +15 -0
- package/dist/adapters/adapterHarnessTypes.js.map +1 -0
- package/dist/adapters/adapterProcessHarness.d.ts +23 -0
- package/dist/adapters/adapterProcessHarness.d.ts.map +1 -0
- package/dist/adapters/adapterProcessHarness.js +235 -0
- package/dist/adapters/adapterProcessHarness.js.map +1 -0
- package/dist/adapters/providerContractTypes.d.ts +64 -0
- package/dist/adapters/providerContractTypes.d.ts.map +1 -0
- package/dist/adapters/providerContractTypes.js +79 -0
- package/dist/adapters/providerContractTypes.js.map +1 -0
- package/dist/adapters/testAdapterProvider.d.ts +19 -0
- package/dist/adapters/testAdapterProvider.d.ts.map +1 -0
- package/dist/adapters/testAdapterProvider.js +95 -0
- package/dist/adapters/testAdapterProvider.js.map +1 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1059 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/providerApprovalStore.d.ts +39 -0
- package/dist/config/providerApprovalStore.d.ts.map +1 -0
- package/dist/config/providerApprovalStore.js +87 -0
- package/dist/config/providerApprovalStore.js.map +1 -0
- package/dist/config/providerApprovalTypes.d.ts +30 -0
- package/dist/config/providerApprovalTypes.d.ts.map +1 -0
- package/dist/config/providerApprovalTypes.js +11 -0
- package/dist/config/providerApprovalTypes.js.map +1 -0
- package/dist/config/providerPolicyConfig.d.ts +31 -0
- package/dist/config/providerPolicyConfig.d.ts.map +1 -0
- package/dist/config/providerPolicyConfig.js +111 -0
- package/dist/config/providerPolicyConfig.js.map +1 -0
- package/dist/config/providerPolicyDiagnostics.d.ts +49 -0
- package/dist/config/providerPolicyDiagnostics.d.ts.map +1 -0
- package/dist/config/providerPolicyDiagnostics.js +76 -0
- package/dist/config/providerPolicyDiagnostics.js.map +1 -0
- package/dist/config/providerPolicyHash.d.ts +14 -0
- package/dist/config/providerPolicyHash.d.ts.map +1 -0
- package/dist/config/providerPolicyHash.js +65 -0
- package/dist/config/providerPolicyHash.js.map +1 -0
- package/dist/config/providerPolicySchema.d.ts +32 -0
- package/dist/config/providerPolicySchema.d.ts.map +1 -0
- package/dist/config/providerPolicySchema.js +130 -0
- package/dist/config/providerPolicySchema.js.map +1 -0
- package/dist/config/providerRunnability.d.ts +36 -0
- package/dist/config/providerRunnability.d.ts.map +1 -0
- package/dist/config/providerRunnability.js +72 -0
- package/dist/config/providerRunnability.js.map +1 -0
- package/dist/errors.d.ts +31 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +45 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/process/providerProcessAudit.d.ts +14 -0
- package/dist/process/providerProcessAudit.d.ts.map +1 -0
- package/dist/process/providerProcessAudit.js +27 -0
- package/dist/process/providerProcessAudit.js.map +1 -0
- package/dist/process/providerProcessDiagnostics.d.ts +30 -0
- package/dist/process/providerProcessDiagnostics.d.ts.map +1 -0
- package/dist/process/providerProcessDiagnostics.js +51 -0
- package/dist/process/providerProcessDiagnostics.js.map +1 -0
- package/dist/process/providerProcessEnvironment.d.ts +29 -0
- package/dist/process/providerProcessEnvironment.d.ts.map +1 -0
- package/dist/process/providerProcessEnvironment.js +37 -0
- package/dist/process/providerProcessEnvironment.js.map +1 -0
- package/dist/process/providerProcessErrors.d.ts +21 -0
- package/dist/process/providerProcessErrors.d.ts.map +1 -0
- package/dist/process/providerProcessErrors.js +25 -0
- package/dist/process/providerProcessErrors.js.map +1 -0
- package/dist/process/providerProcessOutput.d.ts +24 -0
- package/dist/process/providerProcessOutput.d.ts.map +1 -0
- package/dist/process/providerProcessOutput.js +52 -0
- package/dist/process/providerProcessOutput.js.map +1 -0
- package/dist/process/providerProcessSupervisor.d.ts +40 -0
- package/dist/process/providerProcessSupervisor.d.ts.map +1 -0
- package/dist/process/providerProcessSupervisor.js +305 -0
- package/dist/process/providerProcessSupervisor.js.map +1 -0
- package/dist/process/providerProcessTypes.d.ts +114 -0
- package/dist/process/providerProcessTypes.d.ts.map +1 -0
- package/dist/process/providerProcessTypes.js +30 -0
- package/dist/process/providerProcessTypes.js.map +1 -0
- package/dist/process/providerProcessValidation.d.ts +26 -0
- package/dist/process/providerProcessValidation.d.ts.map +1 -0
- package/dist/process/providerProcessValidation.js +112 -0
- package/dist/process/providerProcessValidation.js.map +1 -0
- package/dist/process/providerProcessWorkspace.d.ts +38 -0
- package/dist/process/providerProcessWorkspace.d.ts.map +1 -0
- package/dist/process/providerProcessWorkspace.js +86 -0
- package/dist/process/providerProcessWorkspace.js.map +1 -0
- package/dist/providers/claudeLocalProvider.d.ts +68 -0
- package/dist/providers/claudeLocalProvider.d.ts.map +1 -0
- package/dist/providers/claudeLocalProvider.js +217 -0
- package/dist/providers/claudeLocalProvider.js.map +1 -0
- package/dist/providers/claudeStreamJsonParser.d.ts +39 -0
- package/dist/providers/claudeStreamJsonParser.d.ts.map +1 -0
- package/dist/providers/claudeStreamJsonParser.js +180 -0
- package/dist/providers/claudeStreamJsonParser.js.map +1 -0
- package/dist/providers/codexExecJsonParser.d.ts +38 -0
- package/dist/providers/codexExecJsonParser.d.ts.map +1 -0
- package/dist/providers/codexExecJsonParser.js +245 -0
- package/dist/providers/codexExecJsonParser.js.map +1 -0
- package/dist/providers/codexLocalProvider.d.ts +46 -0
- package/dist/providers/codexLocalProvider.d.ts.map +1 -0
- package/dist/providers/codexLocalProvider.js +430 -0
- package/dist/providers/codexLocalProvider.js.map +1 -0
- package/dist/providers/codexModelCatalog.d.ts +13 -0
- package/dist/providers/codexModelCatalog.d.ts.map +1 -0
- package/dist/providers/codexModelCatalog.js +133 -0
- package/dist/providers/codexModelCatalog.js.map +1 -0
- package/dist/providers/fixtureProvider.d.ts +14 -0
- package/dist/providers/fixtureProvider.d.ts.map +1 -0
- package/dist/providers/fixtureProvider.js +160 -0
- package/dist/providers/fixtureProvider.js.map +1 -0
- package/dist/providers/providerDiscovery.d.ts +24 -0
- package/dist/providers/providerDiscovery.d.ts.map +1 -0
- package/dist/providers/providerDiscovery.js +128 -0
- package/dist/providers/providerDiscovery.js.map +1 -0
- package/dist/providers/providerErrors.d.ts +64 -0
- package/dist/providers/providerErrors.d.ts.map +1 -0
- package/dist/providers/providerErrors.js +101 -0
- package/dist/providers/providerErrors.js.map +1 -0
- package/dist/providers/providerEvents.d.ts +63 -0
- package/dist/providers/providerEvents.d.ts.map +1 -0
- package/dist/providers/providerEvents.js +86 -0
- package/dist/providers/providerEvents.js.map +1 -0
- package/dist/providers/providerRegistry.d.ts +31 -0
- package/dist/providers/providerRegistry.d.ts.map +1 -0
- package/dist/providers/providerRegistry.js +234 -0
- package/dist/providers/providerRegistry.js.map +1 -0
- package/dist/providers/providerSafety.d.ts +17 -0
- package/dist/providers/providerSafety.d.ts.map +1 -0
- package/dist/providers/providerSafety.js +36 -0
- package/dist/providers/providerSafety.js.map +1 -0
- package/dist/providers/providerTypes.d.ts +212 -0
- package/dist/providers/providerTypes.d.ts.map +1 -0
- package/dist/providers/providerTypes.js +15 -0
- package/dist/providers/providerTypes.js.map +1 -0
- package/dist/providers/xenoLocalProvider.d.ts +35 -0
- package/dist/providers/xenoLocalProvider.d.ts.map +1 -0
- package/dist/providers/xenoLocalProvider.js +159 -0
- package/dist/providers/xenoLocalProvider.js.map +1 -0
- package/dist/sandbox/providerSandbox.d.ts +35 -0
- package/dist/sandbox/providerSandbox.d.ts.map +1 -0
- package/dist/sandbox/providerSandbox.js +93 -0
- package/dist/sandbox/providerSandbox.js.map +1 -0
- package/dist/sandbox/providerSandboxAudit.d.ts +12 -0
- package/dist/sandbox/providerSandboxAudit.d.ts.map +1 -0
- package/dist/sandbox/providerSandboxAudit.js +25 -0
- package/dist/sandbox/providerSandboxAudit.js.map +1 -0
- package/dist/sandbox/providerSandboxDiagnostics.d.ts +13 -0
- package/dist/sandbox/providerSandboxDiagnostics.d.ts.map +1 -0
- package/dist/sandbox/providerSandboxDiagnostics.js +28 -0
- package/dist/sandbox/providerSandboxDiagnostics.js.map +1 -0
- package/dist/sandbox/providerSandboxTypes.d.ts +138 -0
- package/dist/sandbox/providerSandboxTypes.d.ts.map +1 -0
- package/dist/sandbox/providerSandboxTypes.js +17 -0
- package/dist/sandbox/providerSandboxTypes.js.map +1 -0
- package/dist/sandbox/sandboxCancellation.d.ts +6 -0
- package/dist/sandbox/sandboxCancellation.d.ts.map +1 -0
- package/dist/sandbox/sandboxCancellation.js +24 -0
- package/dist/sandbox/sandboxCancellation.js.map +1 -0
- package/dist/sandbox/sandboxErrors.d.ts +17 -0
- package/dist/sandbox/sandboxErrors.d.ts.map +1 -0
- package/dist/sandbox/sandboxErrors.js +21 -0
- package/dist/sandbox/sandboxErrors.js.map +1 -0
- package/dist/sandbox/sandboxFilesystem.d.ts +14 -0
- package/dist/sandbox/sandboxFilesystem.d.ts.map +1 -0
- package/dist/sandbox/sandboxFilesystem.js +51 -0
- package/dist/sandbox/sandboxFilesystem.js.map +1 -0
- package/dist/sandbox/sandboxNetwork.d.ts +14 -0
- package/dist/sandbox/sandboxNetwork.d.ts.map +1 -0
- package/dist/sandbox/sandboxNetwork.js +60 -0
- package/dist/sandbox/sandboxNetwork.js.map +1 -0
- package/dist/sandbox/sandboxSecrets.d.ts +17 -0
- package/dist/sandbox/sandboxSecrets.d.ts.map +1 -0
- package/dist/sandbox/sandboxSecrets.js +61 -0
- package/dist/sandbox/sandboxSecrets.js.map +1 -0
- package/dist/sandbox/sandboxTerminal.d.ts +14 -0
- package/dist/sandbox/sandboxTerminal.d.ts.map +1 -0
- package/dist/sandbox/sandboxTerminal.js +32 -0
- package/dist/sandbox/sandboxTerminal.js.map +1 -0
- package/dist/security/authPolicy.d.ts +31 -0
- package/dist/security/authPolicy.d.ts.map +1 -0
- package/dist/security/authPolicy.js +72 -0
- package/dist/security/authPolicy.js.map +1 -0
- package/dist/security/capabilityGate.d.ts +16 -0
- package/dist/security/capabilityGate.d.ts.map +1 -0
- package/dist/security/capabilityGate.js +101 -0
- package/dist/security/capabilityGate.js.map +1 -0
- package/dist/security/egressPolicy.d.ts +31 -0
- package/dist/security/egressPolicy.d.ts.map +1 -0
- package/dist/security/egressPolicy.js +120 -0
- package/dist/security/egressPolicy.js.map +1 -0
- package/dist/security/redaction.d.ts +16 -0
- package/dist/security/redaction.d.ts.map +1 -0
- package/dist/security/redaction.js +65 -0
- package/dist/security/redaction.js.map +1 -0
- package/dist/security/secretBinding.d.ts +34 -0
- package/dist/security/secretBinding.d.ts.map +1 -0
- package/dist/security/secretBinding.js +66 -0
- package/dist/security/secretBinding.js.map +1 -0
- package/dist/security/secretStore.d.ts +37 -0
- package/dist/security/secretStore.d.ts.map +1 -0
- package/dist/security/secretStore.js +55 -0
- package/dist/security/secretStore.js.map +1 -0
- package/dist/security/securityDiagnostics.d.ts +39 -0
- package/dist/security/securityDiagnostics.d.ts.map +1 -0
- package/dist/security/securityDiagnostics.js +36 -0
- package/dist/security/securityDiagnostics.js.map +1 -0
- package/dist/security/securityTypes.d.ts +77 -0
- package/dist/security/securityTypes.d.ts.map +1 -0
- package/dist/security/securityTypes.js +17 -0
- package/dist/security/securityTypes.js.map +1 -0
- package/dist/sessionStore.d.ts +33 -0
- package/dist/sessionStore.d.ts.map +1 -0
- package/dist/sessionStore.js +42 -0
- package/dist/sessionStore.js.map +1 -0
- package/dist/stdioJsonRpc.d.ts +43 -0
- package/dist/stdioJsonRpc.d.ts.map +1 -0
- package/dist/stdioJsonRpc.js +219 -0
- package/dist/stdioJsonRpc.js.map +1 -0
- package/dist/types.d.ts +78 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +7 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Temp-workspace preparation/cleanup for the minimal supervisor (XACP-010).
|
|
3
|
+
*
|
|
4
|
+
* SCOPED FILESYSTEM EXCEPTION. This is the only file in the process/ layer that mutates the
|
|
5
|
+
* filesystem, and it does so ONLY to create and later remove a supervisor-OWNED temp directory.
|
|
6
|
+
* Rules (enforced below):
|
|
7
|
+
* - it creates directories ONLY under `os.tmpdir()` or an explicit absolute `workspaceRoot`;
|
|
8
|
+
* - it removes ONLY directories it created itself (tracked by an in-process token);
|
|
9
|
+
* - it never deletes an override `cwd` it did not create, and never touches user paths.
|
|
10
|
+
*
|
|
11
|
+
* This is workspace hygiene for *cooperative* test/fixture processes. It is NOT a filesystem
|
|
12
|
+
* jail — a launched process can still read/write anywhere it has OS permission. See
|
|
13
|
+
* `MINIMAL_SUPERVISOR_ENFORCEMENT.filesystem = "not_enforced_against_hostile_process"`.
|
|
14
|
+
*/
|
|
15
|
+
export interface PreparedWorkspace {
|
|
16
|
+
/** Absolute path the child should use as cwd. */
|
|
17
|
+
path: string;
|
|
18
|
+
/** True only when this directory was created by the supervisor (and may be cleaned up). */
|
|
19
|
+
ownedBySupervisor: boolean;
|
|
20
|
+
/** Remove the directory — a no-op unless the supervisor created it. */
|
|
21
|
+
cleanup(): Promise<{
|
|
22
|
+
attempted: boolean;
|
|
23
|
+
succeeded: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create a fresh supervisor-owned temp workspace. Used by tests/smokes that don't bring their
|
|
28
|
+
* own cwd. The directory lives under `root` (default `os.tmpdir()`), which must be absolute.
|
|
29
|
+
*/
|
|
30
|
+
export declare function createTempWorkspace(providerId: string, root?: string): Promise<PreparedWorkspace>;
|
|
31
|
+
/**
|
|
32
|
+
* Wrap an externally-supplied absolute cwd. The supervisor did NOT create it, so cleanup is a
|
|
33
|
+
* no-op — we never delete a directory we didn't make.
|
|
34
|
+
*/
|
|
35
|
+
export declare function useExistingWorkspace(providerId: string, cwd: string): PreparedWorkspace;
|
|
36
|
+
/** A redacted marker for diagnostics — never the raw personal path. */
|
|
37
|
+
export declare function redactWorkspace(ws: PreparedWorkspace): string;
|
|
38
|
+
//# sourceMappingURL=providerProcessWorkspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerProcessWorkspace.d.ts","sourceRoot":"","sources":["../../src/process/providerProcessWorkspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,iBAAiB,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,OAAO,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAChE;AAID;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkCvG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAevF;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,EAAE,EAAE,iBAAiB,GAAG,MAAM,CAE7D"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Temp-workspace preparation/cleanup for the minimal supervisor (XACP-010).
|
|
3
|
+
*
|
|
4
|
+
* SCOPED FILESYSTEM EXCEPTION. This is the only file in the process/ layer that mutates the
|
|
5
|
+
* filesystem, and it does so ONLY to create and later remove a supervisor-OWNED temp directory.
|
|
6
|
+
* Rules (enforced below):
|
|
7
|
+
* - it creates directories ONLY under `os.tmpdir()` or an explicit absolute `workspaceRoot`;
|
|
8
|
+
* - it removes ONLY directories it created itself (tracked by an in-process token);
|
|
9
|
+
* - it never deletes an override `cwd` it did not create, and never touches user paths.
|
|
10
|
+
*
|
|
11
|
+
* This is workspace hygiene for *cooperative* test/fixture processes. It is NOT a filesystem
|
|
12
|
+
* jail — a launched process can still read/write anywhere it has OS permission. See
|
|
13
|
+
* `MINIMAL_SUPERVISOR_ENFORCEMENT.filesystem = "not_enforced_against_hostile_process"`.
|
|
14
|
+
*/
|
|
15
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
16
|
+
import { tmpdir } from "node:os";
|
|
17
|
+
import { isAbsolute, join } from "node:path";
|
|
18
|
+
import { ProviderProcessError } from "./providerProcessErrors.js";
|
|
19
|
+
const PREFIX = "xeno-acp-supervisor-";
|
|
20
|
+
/**
|
|
21
|
+
* Create a fresh supervisor-owned temp workspace. Used by tests/smokes that don't bring their
|
|
22
|
+
* own cwd. The directory lives under `root` (default `os.tmpdir()`), which must be absolute.
|
|
23
|
+
*/
|
|
24
|
+
export async function createTempWorkspace(providerId, root) {
|
|
25
|
+
const base = root ?? tmpdir();
|
|
26
|
+
if (!isAbsolute(base)) {
|
|
27
|
+
throw new ProviderProcessError({
|
|
28
|
+
code: "PROCESS_WORKSPACE_INVALID",
|
|
29
|
+
safeMessage: "workspace root must be an absolute path",
|
|
30
|
+
providerId,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
let dir;
|
|
34
|
+
try {
|
|
35
|
+
dir = await mkdtemp(join(base, PREFIX));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
throw new ProviderProcessError({
|
|
39
|
+
code: "PROCESS_WORKSPACE_INVALID",
|
|
40
|
+
safeMessage: "failed to create temp workspace",
|
|
41
|
+
providerId,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
let cleaned = false;
|
|
45
|
+
return {
|
|
46
|
+
path: dir,
|
|
47
|
+
ownedBySupervisor: true,
|
|
48
|
+
async cleanup() {
|
|
49
|
+
if (cleaned)
|
|
50
|
+
return { attempted: false, succeeded: true };
|
|
51
|
+
cleaned = true;
|
|
52
|
+
try {
|
|
53
|
+
await rm(dir, { recursive: true, force: true });
|
|
54
|
+
return { attempted: true, succeeded: true };
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return { attempted: true, succeeded: false };
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Wrap an externally-supplied absolute cwd. The supervisor did NOT create it, so cleanup is a
|
|
64
|
+
* no-op — we never delete a directory we didn't make.
|
|
65
|
+
*/
|
|
66
|
+
export function useExistingWorkspace(providerId, cwd) {
|
|
67
|
+
if (!isAbsolute(cwd)) {
|
|
68
|
+
throw new ProviderProcessError({
|
|
69
|
+
code: "PROCESS_CWD_INVALID",
|
|
70
|
+
safeMessage: "cwd must be an absolute path",
|
|
71
|
+
providerId,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
path: cwd,
|
|
76
|
+
ownedBySupervisor: false,
|
|
77
|
+
async cleanup() {
|
|
78
|
+
return { attempted: false, succeeded: true };
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/** A redacted marker for diagnostics — never the raw personal path. */
|
|
83
|
+
export function redactWorkspace(ws) {
|
|
84
|
+
return ws.ownedBySupervisor ? "<supervisor-temp-workspace>" : "<configured-cwd>";
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=providerProcessWorkspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerProcessWorkspace.js","sourceRoot":"","sources":["../../src/process/providerProcessWorkspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAWlE,MAAM,MAAM,GAAG,sBAAsB,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB,EAAE,IAAa;IACzE,MAAM,IAAI,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,oBAAoB,CAAC;YAC7B,IAAI,EAAE,2BAA2B;YACjC,WAAW,EAAE,yCAAyC;YACtD,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,oBAAoB,CAAC;YAC7B,IAAI,EAAE,2BAA2B;YACjC,WAAW,EAAE,iCAAiC;YAC9C,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO;QACL,IAAI,EAAE,GAAG;QACT,iBAAiB,EAAE,IAAI;QACvB,KAAK,CAAC,OAAO;YACX,IAAI,OAAO;gBAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC1D,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC9C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC/C,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB,EAAE,GAAW;IAClE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,oBAAoB,CAAC;YAC7B,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,8BAA8B;YAC3C,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,IAAI,EAAE,GAAG;QACT,iBAAiB,EAAE,KAAK;QACxB,KAAK,CAAC,OAAO;YACX,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,eAAe,CAAC,EAAqB;IACnD,OAAO,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `claude-local` — the first XENO-authored adapter around a REAL local third-party CLI (XACP-021).
|
|
3
|
+
*
|
|
4
|
+
* It wraps the installed **Claude Code** CLI (`claude -p <prompt> --output-format stream-json
|
|
5
|
+
* --verbose`) and routes its native stream-json output through the SAME path every adapter uses:
|
|
6
|
+
* runnability gate (policy + manual approval) → sandbox context → minimal process supervisor
|
|
7
|
+
* (shell:false, clean env allowlist, isolated cwd, timeout) → `parseClaudeStreamJson` →
|
|
8
|
+
* `ProviderEvent` → ACP `session/update`.
|
|
9
|
+
*
|
|
10
|
+
* IMPORTANT scope/labelling:
|
|
11
|
+
* - This is a **XENO-authored local adapter for the installed Claude CLI** — NOT "official Claude
|
|
12
|
+
* ACP", NOT third-party ACP certification, NOT a production integration.
|
|
13
|
+
* - `trustClass: third-party`; approval-gated (it never runs "just because it exists").
|
|
14
|
+
* - It relies on the Claude CLI's OWN existing local auth (via a minimal env allowlist the caller
|
|
15
|
+
* supplies, e.g. HOME/USERPROFILE/PATH) — this adapter never reads, stores, or logs secret
|
|
16
|
+
* values, makes no direct network call, spawns nothing itself (the supervisor launches claude),
|
|
17
|
+
* and grants no filesystem-write or terminal authority.
|
|
18
|
+
* - The parent runner's per-session markers (e.g. `CLAUDECODE`) are NOT allowlisted, so Claude's
|
|
19
|
+
* nested-session guard is naturally avoided.
|
|
20
|
+
*/
|
|
21
|
+
import type { ProviderCapabilitySet, ProviderDefinition, ProviderPromptRequest } from "./providerTypes.js";
|
|
22
|
+
import type { RunnabilityInput } from "../config/providerRunnability.js";
|
|
23
|
+
export declare const CLAUDE_LOCAL_ID = "claude-local";
|
|
24
|
+
/** Default executable name (resolved on PATH by the supervisor's resolver). */
|
|
25
|
+
export declare const CLAUDE_LOCAL_DEFAULT_EXECUTABLE = "claude";
|
|
26
|
+
export declare const CLAUDE_LOCAL_CAPABILITIES: ProviderCapabilitySet;
|
|
27
|
+
/** Minimal non-secret env keys the Claude CLI may need to find its own local auth/session. */
|
|
28
|
+
export declare const CLAUDE_LOCAL_ENV_ALLOWLIST_KEYS: readonly ["PATH", "Path", "HOME", "USERPROFILE", "APPDATA", "LOCALAPPDATA", "SystemRoot", "windir", "TEMP", "TMP", "ComSpec", "PATHEXT", "XDG_CONFIG_HOME"];
|
|
29
|
+
/** Parent-session / secret-bearing env keys that must never be forwarded to nested Claude. */
|
|
30
|
+
export declare const CLAUDE_LOCAL_ENV_BLOCKLIST_KEYS: readonly ["CLAUDECODE", "CLAUDE_CODE_ENTRYPOINT", "CLAUDE_CODE_SSE_PORT", "*_API_KEY", "*_TOKEN", "*_SECRET"];
|
|
31
|
+
/** Render the prompt content blocks into a single text prompt for the CLI. */
|
|
32
|
+
export declare function renderPromptText(prompt: ProviderPromptRequest["prompt"], systemPrompt?: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Build the real Claude CLI argv for a non-interactive, deterministic, tool-free turn.
|
|
35
|
+
* `--output-format stream-json --verbose` yields the event stream `parseClaudeStreamJson` reads.
|
|
36
|
+
*/
|
|
37
|
+
export declare function claudeLocalCommand(promptText: string, opts?: {
|
|
38
|
+
executable?: string;
|
|
39
|
+
model?: string;
|
|
40
|
+
argsPrefix?: string[];
|
|
41
|
+
continueSession?: boolean;
|
|
42
|
+
sessionId?: string;
|
|
43
|
+
resumeSessionId?: string;
|
|
44
|
+
}): {
|
|
45
|
+
executable: string;
|
|
46
|
+
args: string[];
|
|
47
|
+
};
|
|
48
|
+
export declare function stableClaudeSessionUuid(acpSessionId: string): string;
|
|
49
|
+
export interface ClaudeLocalOptions {
|
|
50
|
+
/** Runnability inputs (policy entry / approval) so the harness re-gates at run time. */
|
|
51
|
+
runnability?: RunnabilityInput;
|
|
52
|
+
/** Override the executable (tests inject a fake claude; live uses the resolved `claude`). */
|
|
53
|
+
executable?: string;
|
|
54
|
+
/** Prepended args (tests run `node fake-claude.mjs <claude-args>`; empty in production). */
|
|
55
|
+
argsPrefix?: string[];
|
|
56
|
+
/** Minimal env the CLI needs for ITS OWN auth (e.g. HOME/USERPROFILE/PATH). Never secrets. */
|
|
57
|
+
envAllowlist?: Record<string, string>;
|
|
58
|
+
cwd?: string;
|
|
59
|
+
model?: string;
|
|
60
|
+
timeoutMs?: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The `claude-local` provider definition: a REAL, enabled, **approval-gated**, third-party local
|
|
64
|
+
* adapter. `authRequirement`/`networkRequirement` are `required` (truthful), so the safety gate
|
|
65
|
+
* returns `requires_approval` — it never runs without a current, hash-pinned local approval.
|
|
66
|
+
*/
|
|
67
|
+
export declare function createClaudeLocalDefinition(): ProviderDefinition;
|
|
68
|
+
//# sourceMappingURL=claudeLocalProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeLocalProvider.d.ts","sourceRoot":"","sources":["../../src/providers/claudeLocalProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EAMtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAE9C,+EAA+E;AAC/E,eAAO,MAAM,+BAA+B,WAAW,CAAC;AAExD,eAAO,MAAM,yBAAyB,EAAE,qBAYvC,CAAC;AAYF,8FAA8F;AAC9F,eAAO,MAAM,+BAA+B,6JAclC,CAAC;AAEX,8FAA8F;AAC9F,eAAO,MAAM,+BAA+B,+GAOlC,CAAC;AAEX,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAQvG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAO,GACjJ;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAiBxC;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,8FAA8F;IAC9F,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqED;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,kBAAkB,CAsChE"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `claude-local` — the first XENO-authored adapter around a REAL local third-party CLI (XACP-021).
|
|
3
|
+
*
|
|
4
|
+
* It wraps the installed **Claude Code** CLI (`claude -p <prompt> --output-format stream-json
|
|
5
|
+
* --verbose`) and routes its native stream-json output through the SAME path every adapter uses:
|
|
6
|
+
* runnability gate (policy + manual approval) → sandbox context → minimal process supervisor
|
|
7
|
+
* (shell:false, clean env allowlist, isolated cwd, timeout) → `parseClaudeStreamJson` →
|
|
8
|
+
* `ProviderEvent` → ACP `session/update`.
|
|
9
|
+
*
|
|
10
|
+
* IMPORTANT scope/labelling:
|
|
11
|
+
* - This is a **XENO-authored local adapter for the installed Claude CLI** — NOT "official Claude
|
|
12
|
+
* ACP", NOT third-party ACP certification, NOT a production integration.
|
|
13
|
+
* - `trustClass: third-party`; approval-gated (it never runs "just because it exists").
|
|
14
|
+
* - It relies on the Claude CLI's OWN existing local auth (via a minimal env allowlist the caller
|
|
15
|
+
* supplies, e.g. HOME/USERPROFILE/PATH) — this adapter never reads, stores, or logs secret
|
|
16
|
+
* values, makes no direct network call, spawns nothing itself (the supervisor launches claude),
|
|
17
|
+
* and grants no filesystem-write or terminal authority.
|
|
18
|
+
* - The parent runner's per-session markers (e.g. `CLAUDECODE`) are NOT allowlisted, so Claude's
|
|
19
|
+
* nested-session guard is naturally avoided.
|
|
20
|
+
*/
|
|
21
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
22
|
+
import { runAdapterPrompt } from "../adapters/adapterProcessHarness.js";
|
|
23
|
+
import { parseClaudeStreamJson } from "./claudeStreamJsonParser.js";
|
|
24
|
+
import { ProviderConfigurationError } from "./providerErrors.js";
|
|
25
|
+
import { staticModelDiscovery } from "./providerDiscovery.js";
|
|
26
|
+
export const CLAUDE_LOCAL_ID = "claude-local";
|
|
27
|
+
/** Default executable name (resolved on PATH by the supervisor's resolver). */
|
|
28
|
+
export const CLAUDE_LOCAL_DEFAULT_EXECUTABLE = "claude";
|
|
29
|
+
export const CLAUDE_LOCAL_CAPABILITIES = {
|
|
30
|
+
streamsText: true,
|
|
31
|
+
emitsPlan: false,
|
|
32
|
+
emitsToolCalls: true,
|
|
33
|
+
emitsUsage: true,
|
|
34
|
+
supportsCancel: true,
|
|
35
|
+
supportsMultipleSessions: true,
|
|
36
|
+
requiresAuth: true, // uses Claude CLI's OWN local auth (adapter stores no secrets)
|
|
37
|
+
usesNetwork: true, // Claude's normal cloud call
|
|
38
|
+
canReadFiles: false, // tools disabled for the harmless prompt; no fs authority granted
|
|
39
|
+
canWriteFiles: false,
|
|
40
|
+
canRunTerminal: false,
|
|
41
|
+
};
|
|
42
|
+
const CLAUDE_LOCAL_MODEL_DISCOVERY = staticModelDiscovery("Claude CLI model aliases from `claude --help`; the CLI resolves each alias to the latest available model.", [
|
|
43
|
+
{ id: "sonnet", label: "Claude Sonnet", default: true, available: true, reason: null },
|
|
44
|
+
{ id: "opus", label: "Claude Opus", default: false, available: true, reason: null },
|
|
45
|
+
{ id: "fable", label: "Claude Fable", default: false, available: true, reason: null },
|
|
46
|
+
], "sonnet");
|
|
47
|
+
/** Minimal non-secret env keys the Claude CLI may need to find its own local auth/session. */
|
|
48
|
+
export const CLAUDE_LOCAL_ENV_ALLOWLIST_KEYS = [
|
|
49
|
+
"PATH",
|
|
50
|
+
"Path",
|
|
51
|
+
"HOME",
|
|
52
|
+
"USERPROFILE",
|
|
53
|
+
"APPDATA",
|
|
54
|
+
"LOCALAPPDATA",
|
|
55
|
+
"SystemRoot",
|
|
56
|
+
"windir",
|
|
57
|
+
"TEMP",
|
|
58
|
+
"TMP",
|
|
59
|
+
"ComSpec",
|
|
60
|
+
"PATHEXT",
|
|
61
|
+
"XDG_CONFIG_HOME",
|
|
62
|
+
];
|
|
63
|
+
/** Parent-session / secret-bearing env keys that must never be forwarded to nested Claude. */
|
|
64
|
+
export const CLAUDE_LOCAL_ENV_BLOCKLIST_KEYS = [
|
|
65
|
+
"CLAUDECODE",
|
|
66
|
+
"CLAUDE_CODE_ENTRYPOINT",
|
|
67
|
+
"CLAUDE_CODE_SSE_PORT",
|
|
68
|
+
"*_API_KEY",
|
|
69
|
+
"*_TOKEN",
|
|
70
|
+
"*_SECRET",
|
|
71
|
+
];
|
|
72
|
+
/** Render the prompt content blocks into a single text prompt for the CLI. */
|
|
73
|
+
export function renderPromptText(prompt, systemPrompt) {
|
|
74
|
+
const promptText = prompt
|
|
75
|
+
.map((b) => (b && b.type === "text" && typeof b.text === "string" ? b.text : ""))
|
|
76
|
+
.filter((s) => s.length > 0)
|
|
77
|
+
.join("\n\n")
|
|
78
|
+
.trim();
|
|
79
|
+
const systemText = systemPrompt?.trim();
|
|
80
|
+
return systemText ? `<xeno_system_context>\n${systemText}\n</xeno_system_context>\n\nUser request:\n${promptText}`.trim() : promptText;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build the real Claude CLI argv for a non-interactive, deterministic, tool-free turn.
|
|
84
|
+
* `--output-format stream-json --verbose` yields the event stream `parseClaudeStreamJson` reads.
|
|
85
|
+
*/
|
|
86
|
+
export function claudeLocalCommand(promptText, opts = {}) {
|
|
87
|
+
// `argsPrefix` lets a test drive a fake claude via `node fake-claude.mjs <claude-args>`; in
|
|
88
|
+
// production it is empty and the resolved `claude` executable receives only the claude flags.
|
|
89
|
+
const args = [
|
|
90
|
+
...(opts.argsPrefix ?? []),
|
|
91
|
+
...(opts.resumeSessionId ? ["--resume", opts.resumeSessionId] : opts.sessionId ? ["--session-id", opts.sessionId] : opts.continueSession ? ["--continue"] : []),
|
|
92
|
+
"--safe-mode",
|
|
93
|
+
"--tools",
|
|
94
|
+
"",
|
|
95
|
+
"-p",
|
|
96
|
+
promptText,
|
|
97
|
+
"--output-format",
|
|
98
|
+
"stream-json",
|
|
99
|
+
"--verbose",
|
|
100
|
+
];
|
|
101
|
+
if (opts.model)
|
|
102
|
+
args.push("--model", opts.model);
|
|
103
|
+
return { executable: opts.executable ?? CLAUDE_LOCAL_DEFAULT_EXECUTABLE, args };
|
|
104
|
+
}
|
|
105
|
+
export function stableClaudeSessionUuid(acpSessionId) {
|
|
106
|
+
const hex = createHash("sha256").update(`xeno-acp:claude-local:${acpSessionId}`).digest("hex").slice(0, 32).split("");
|
|
107
|
+
hex[12] = "5";
|
|
108
|
+
hex[16] = ((parseInt(hex[16], 16) & 0x3) | 0x8).toString(16);
|
|
109
|
+
return `${hex.slice(0, 8).join("")}-${hex.slice(8, 12).join("")}-${hex.slice(12, 16).join("")}-${hex.slice(16, 20).join("")}-${hex.slice(20, 32).join("")}`;
|
|
110
|
+
}
|
|
111
|
+
class ClaudeLocalRuntime {
|
|
112
|
+
definition;
|
|
113
|
+
options;
|
|
114
|
+
sessionSeq = 0;
|
|
115
|
+
promptCount = 0;
|
|
116
|
+
nativeSessionIds = new Map();
|
|
117
|
+
completedSessions = new Set();
|
|
118
|
+
constructor(definition, config) {
|
|
119
|
+
this.definition = definition;
|
|
120
|
+
this.options = (config?.options ?? {});
|
|
121
|
+
}
|
|
122
|
+
initialize() { }
|
|
123
|
+
createSession() {
|
|
124
|
+
this.sessionSeq += 1;
|
|
125
|
+
return { sessionId: `${CLAUDE_LOCAL_ID}-session-${this.sessionSeq}`, createdAt: `s${this.sessionSeq}` };
|
|
126
|
+
}
|
|
127
|
+
cancel() {
|
|
128
|
+
/* cancellation flows via the prompt AbortSignal into the supervisor */
|
|
129
|
+
}
|
|
130
|
+
dispose() { }
|
|
131
|
+
diagnostics() {
|
|
132
|
+
return { provider: this.definition.id, sessionsCreated: this.sessionSeq, promptsRun: this.promptCount };
|
|
133
|
+
}
|
|
134
|
+
async prompt(request, ctx) {
|
|
135
|
+
this.promptCount += 1;
|
|
136
|
+
if (!this.options.runnability) {
|
|
137
|
+
throw new ProviderConfigurationError({
|
|
138
|
+
safeMessage: "claude-local requires runnability inputs (policy + approval) at runtime",
|
|
139
|
+
providerId: this.definition.id,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const promptText = renderPromptText(request.prompt, request.systemPrompt) || "Reply concisely.";
|
|
143
|
+
const nativeSessionId = this.nativeSessionIds.get(request.sessionId) ?? randomUUID();
|
|
144
|
+
this.nativeSessionIds.set(request.sessionId, nativeSessionId);
|
|
145
|
+
const shouldResume = this.completedSessions.has(request.sessionId);
|
|
146
|
+
const command = claudeLocalCommand(promptText, {
|
|
147
|
+
...(this.options.executable ? { executable: this.options.executable } : {}),
|
|
148
|
+
...(this.options.argsPrefix ? { argsPrefix: this.options.argsPrefix } : {}),
|
|
149
|
+
...(request.model || this.options.model ? { model: request.model || this.options.model } : {}),
|
|
150
|
+
...(shouldResume ? { resumeSessionId: nativeSessionId } : { sessionId: nativeSessionId }),
|
|
151
|
+
});
|
|
152
|
+
const harness = await runAdapterPrompt({
|
|
153
|
+
definition: this.definition,
|
|
154
|
+
runnability: this.options.runnability,
|
|
155
|
+
request,
|
|
156
|
+
adapter: command,
|
|
157
|
+
parseStdout: parseClaudeStreamJson,
|
|
158
|
+
signal: ctx.signal,
|
|
159
|
+
emit: ctx.emit,
|
|
160
|
+
// The CLI's own local auth needs a minimal, explicit, non-secret env (no ambient leak,
|
|
161
|
+
// no CLAUDECODE). Empty by default → a live run would fail closed (safe).
|
|
162
|
+
...(this.options.envAllowlist ? { envAllowlist: this.options.envAllowlist } : {}),
|
|
163
|
+
// Real cloud round-trips are slower than the fixture default; allow more headroom.
|
|
164
|
+
...(request.cwd || this.options.cwd ? { cwd: request.cwd || this.options.cwd } : {}),
|
|
165
|
+
timeoutMs: this.options.timeoutMs ?? 120_000,
|
|
166
|
+
stdoutLimitBytes: 256 * 1024,
|
|
167
|
+
stderrLimitBytes: 64 * 1024,
|
|
168
|
+
});
|
|
169
|
+
if (harness.result.disposition === "completed")
|
|
170
|
+
this.completedSessions.add(request.sessionId);
|
|
171
|
+
return harness.result;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* The `claude-local` provider definition: a REAL, enabled, **approval-gated**, third-party local
|
|
176
|
+
* adapter. `authRequirement`/`networkRequirement` are `required` (truthful), so the safety gate
|
|
177
|
+
* returns `requires_approval` — it never runs without a current, hash-pinned local approval.
|
|
178
|
+
*/
|
|
179
|
+
export function createClaudeLocalDefinition() {
|
|
180
|
+
const definition = {
|
|
181
|
+
id: CLAUDE_LOCAL_ID,
|
|
182
|
+
displayName: "Claude CLI",
|
|
183
|
+
description: "XENO-authored local adapter for the installed Claude Code CLI (claude -p --output-format stream-json). Third-party, approval-gated; relies on the CLI's own local auth; no secret loading, no fs-write, no terminal.",
|
|
184
|
+
kind: "local-adapter",
|
|
185
|
+
trustClass: "third-party",
|
|
186
|
+
authRequirement: "required",
|
|
187
|
+
networkRequirement: "required",
|
|
188
|
+
ioAuthority: { filesystem: "none", terminal: "none" },
|
|
189
|
+
capabilities: CLAUDE_LOCAL_CAPABILITIES,
|
|
190
|
+
enabled: true,
|
|
191
|
+
metadata: {
|
|
192
|
+
acpEntrypoint: "adapter",
|
|
193
|
+
installedLocally: true,
|
|
194
|
+
displayAlias: "Claude CLI",
|
|
195
|
+
versionReadiness: {
|
|
196
|
+
status: "not_checked",
|
|
197
|
+
cliName: "claude",
|
|
198
|
+
installedVersion: null,
|
|
199
|
+
minimumKnownGoodVersion: "2.1.183",
|
|
200
|
+
versionCommand: ["claude", "--version"],
|
|
201
|
+
safeUpgradeHint: "Run `claude update` outside xeno-acp when the operator chooses to upgrade.",
|
|
202
|
+
},
|
|
203
|
+
streaming: {
|
|
204
|
+
mode: "buffered",
|
|
205
|
+
safeMessage: "claude-local currently buffers Claude stream-json output through the minimal supervisor before ACP updates are emitted.",
|
|
206
|
+
},
|
|
207
|
+
setupHints: ["Install/authenticate Claude CLI.", "Review policy.", "Approve provider.", "Run providers test.", "Certify from Hub if needed."],
|
|
208
|
+
note: "XACP-021 XENO-authored adapter around the installed Claude CLI; NOT official Claude ACP; NOT third-party certified.",
|
|
209
|
+
},
|
|
210
|
+
modelDiscovery: CLAUDE_LOCAL_MODEL_DISCOVERY,
|
|
211
|
+
createRuntime(config) {
|
|
212
|
+
return new ClaudeLocalRuntime(definition, config);
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
return definition;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=claudeLocalProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeLocalProvider.js","sourceRoot":"","sources":["../../src/providers/claudeLocalProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Claude Code's `--output-format stream-json --verbose` stdout (XACP-021).
|
|
3
|
+
*
|
|
4
|
+
* Claude Code emits newline-delimited JSON events. We map the relevant ones to normalized
|
|
5
|
+
* `ProviderEvent`s (the SAME model the ACP server consumes), so the real `claude` CLI flows
|
|
6
|
+
* through the existing supervisor → ProviderEvent → ACP path:
|
|
7
|
+
*
|
|
8
|
+
* - `{"type":"assistant","message":{"content":[{"type":"text","text":...}|{"type":"tool_use",...}]}}`
|
|
9
|
+
* → `message_delta` (per text block) / `tool_started` (per tool_use block)
|
|
10
|
+
* - `{"type":"user","message":{"content":[{"type":"tool_result",...}]}}`
|
|
11
|
+
* → `tool_completed` / `tool_failed`
|
|
12
|
+
* - `{"type":"result","subtype":"success","is_error":false,"stop_reason":"end_turn","usage":{...}}`
|
|
13
|
+
* → `usage` + `completed`
|
|
14
|
+
* - `{"type":"result","is_error":true,...}` → `failed` (SAFE message; provider error text is NOT
|
|
15
|
+
* echoed verbatim)
|
|
16
|
+
* - `{"type":"system"|"rate_limit_event"|"user",...}` → counted as a diagnostic (not surfaced to
|
|
17
|
+
* ACP)
|
|
18
|
+
* - malformed / unknown lines → counted as a diagnostic; NEVER throws
|
|
19
|
+
*
|
|
20
|
+
* Pure function: no I/O, no network, no secrets. The model's answer text (a deliverable, not a
|
|
21
|
+
* secret) is passed through unredacted; provider error/diagnostic strings are not echoed.
|
|
22
|
+
*/
|
|
23
|
+
import { type ProviderEvent } from "./providerEvents.js";
|
|
24
|
+
import type { ProviderErrorCode } from "./providerErrors.js";
|
|
25
|
+
export interface ClaudeParseResult {
|
|
26
|
+
events: ProviderEvent[];
|
|
27
|
+
terminal: "completed" | "failed" | null;
|
|
28
|
+
failureCode?: ProviderErrorCode;
|
|
29
|
+
failureMessage?: string;
|
|
30
|
+
diagnosticsCount: number;
|
|
31
|
+
}
|
|
32
|
+
export interface ClaudeParseContext {
|
|
33
|
+
providerId: string;
|
|
34
|
+
sessionId: string;
|
|
35
|
+
requestId: string;
|
|
36
|
+
now: () => string;
|
|
37
|
+
}
|
|
38
|
+
export declare function parseClaudeStreamJson(stdout: string, ctx: ClaudeParseContext): ClaudeParseResult;
|
|
39
|
+
//# sourceMappingURL=claudeStreamJsonParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeStreamJsonParser.d.ts","sourceRoot":"","sources":["../../src/providers/claudeStreamJsonParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,iBAAiB,CAyHhG"}
|