@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,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalized provider event model.
|
|
3
|
+
*
|
|
4
|
+
* Providers emit append-only `ProviderEvent`s; the ACP server maps the streamable ones to ACP
|
|
5
|
+
* `session/update` notifications (`providerEventToAcpUpdate`). Terminal events
|
|
6
|
+
* (`completed`/`cancelled`/`failed`) and `diagnostic` do NOT map to ACP updates — the prompt's
|
|
7
|
+
* disposition is the source of truth, and diagnostics go to stderr. A provider never writes to
|
|
8
|
+
* stdout and never executes a tool by itself.
|
|
9
|
+
*/
|
|
10
|
+
export function createEventFactory(opts) {
|
|
11
|
+
let seq = 0;
|
|
12
|
+
return {
|
|
13
|
+
next(kind, payload) {
|
|
14
|
+
seq += 1;
|
|
15
|
+
return {
|
|
16
|
+
eventId: `${opts.requestId}-evt-${seq}`,
|
|
17
|
+
providerId: opts.providerId,
|
|
18
|
+
sessionId: opts.sessionId,
|
|
19
|
+
requestId: opts.requestId,
|
|
20
|
+
timestamp: opts.now(),
|
|
21
|
+
kind,
|
|
22
|
+
payload,
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** Map a streamable provider event to an ACP `session/update` payload (or null). */
|
|
28
|
+
export function providerEventToAcpUpdate(event) {
|
|
29
|
+
switch (event.kind) {
|
|
30
|
+
case "plan":
|
|
31
|
+
return { sessionUpdate: "plan", entries: event.payload.entries };
|
|
32
|
+
case "message_delta":
|
|
33
|
+
return {
|
|
34
|
+
sessionUpdate: "agent_message_chunk",
|
|
35
|
+
content: { type: "text", text: event.payload.text },
|
|
36
|
+
};
|
|
37
|
+
case "tool_started": {
|
|
38
|
+
const p = event.payload;
|
|
39
|
+
return {
|
|
40
|
+
sessionUpdate: "tool_call",
|
|
41
|
+
toolCallId: p.toolCallId,
|
|
42
|
+
title: p.title ?? p.toolCallId,
|
|
43
|
+
...(p.kind ? { kind: p.kind } : {}),
|
|
44
|
+
status: "pending",
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
case "tool_updated": {
|
|
48
|
+
const p = event.payload;
|
|
49
|
+
return { sessionUpdate: "tool_call_update", toolCallId: p.toolCallId, status: p.status ?? "in_progress" };
|
|
50
|
+
}
|
|
51
|
+
case "tool_completed": {
|
|
52
|
+
const p = event.payload;
|
|
53
|
+
return {
|
|
54
|
+
sessionUpdate: "tool_call_update",
|
|
55
|
+
toolCallId: p.toolCallId,
|
|
56
|
+
status: "completed",
|
|
57
|
+
...(p.outcome ? { _meta: { "xeno.dev": { outcome: p.outcome } } } : {}),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
case "tool_failed": {
|
|
61
|
+
const p = event.payload;
|
|
62
|
+
return {
|
|
63
|
+
sessionUpdate: "tool_call_update",
|
|
64
|
+
toolCallId: p.toolCallId,
|
|
65
|
+
status: "failed",
|
|
66
|
+
...(p.outcome ? { _meta: { "xeno.dev": { outcome: p.outcome } } } : {}),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
case "usage": {
|
|
70
|
+
const p = event.payload;
|
|
71
|
+
return { sessionUpdate: "usage_update", used: p.used, size: p.size };
|
|
72
|
+
}
|
|
73
|
+
// Terminal + diagnostic events do not map to ACP session/update notifications.
|
|
74
|
+
case "completed":
|
|
75
|
+
case "cancelled":
|
|
76
|
+
case "failed":
|
|
77
|
+
case "diagnostic":
|
|
78
|
+
default:
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** True for the terminal event kinds (completed/cancelled/failed). */
|
|
83
|
+
export function isTerminalEvent(kind) {
|
|
84
|
+
return kind === "completed" || kind === "cancelled" || kind === "failed";
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=providerEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerEvents.js","sourceRoot":"","sources":["../../src/providers/providerEvents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal provider registry for @xenosystem/acp-agent.
|
|
3
|
+
*
|
|
4
|
+
* Lists provider definitions, gates runnability through `validateProviderSafety`, and builds
|
|
5
|
+
* runtimes. The default registry includes the fixture plus approval-gated local adapters
|
|
6
|
+
* (`xeno-local`, `claude-local`, `codex-local`); base provider placeholders such as `codex`,
|
|
7
|
+
* `claude`, `gemini`, `opencode`, `kimi`, `glm`, and `hermes` remain disabled metadata until separately
|
|
8
|
+
* implemented. The registry never falls back to fixture for an unknown/blocked provider - it
|
|
9
|
+
* returns a safe error. It does NOT import or depend on XENO Hub.
|
|
10
|
+
*/
|
|
11
|
+
import { type SafetyResult } from "./providerSafety.js";
|
|
12
|
+
import type { ProviderDefinition, ProviderRuntime, ProviderRuntimeConfig } from "./providerTypes.js";
|
|
13
|
+
export declare class ProviderRegistry {
|
|
14
|
+
private readonly defs;
|
|
15
|
+
register(def: ProviderDefinition): this;
|
|
16
|
+
list(): ProviderDefinition[];
|
|
17
|
+
get(id: string): ProviderDefinition | undefined;
|
|
18
|
+
has(id: string): boolean;
|
|
19
|
+
safetyOf(id: string): SafetyResult | undefined;
|
|
20
|
+
/** A provider is runnable only if it is enabled AND passes the full capability gate. */
|
|
21
|
+
isRunnable(id: string): boolean;
|
|
22
|
+
/** Build a runtime, or throw a SAFE ProviderError (unknown / not-implemented / blocked). */
|
|
23
|
+
createRuntime(id: string, config?: ProviderRuntimeConfig): ProviderRuntime;
|
|
24
|
+
}
|
|
25
|
+
export declare function createPlaceholderDefinitions(): ProviderDefinition[];
|
|
26
|
+
/**
|
|
27
|
+
* The default registry: the runnable fixture provider, the XENO-owned `xeno-local` adapter
|
|
28
|
+
* (XACP-014 — real but approval-gated), and the disabled third-party placeholders.
|
|
29
|
+
*/
|
|
30
|
+
export declare function createDefaultRegistry(): ProviderRegistry;
|
|
31
|
+
//# sourceMappingURL=providerRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerRegistry.d.ts","sourceRoot":"","sources":["../../src/providers/providerRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EAA0B,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAShF,OAAO,KAAK,EAEV,kBAAkB,EAGlB,eAAe,EACf,qBAAqB,EAEtB,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyC;IAE9D,QAAQ,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI;IAKvC,IAAI,IAAI,kBAAkB,EAAE;IAG5B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAG/C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAK9C,wFAAwF;IACxF,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAK/B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,qBAAqB,GAAG,eAAe;CAuC3E;AAkID,wBAAgB,4BAA4B,IAAI,kBAAkB,EAAE,CAsBnE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,CAQxD"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal provider registry for @xenosystem/acp-agent.
|
|
3
|
+
*
|
|
4
|
+
* Lists provider definitions, gates runnability through `validateProviderSafety`, and builds
|
|
5
|
+
* runtimes. The default registry includes the fixture plus approval-gated local adapters
|
|
6
|
+
* (`xeno-local`, `claude-local`, `codex-local`); base provider placeholders such as `codex`,
|
|
7
|
+
* `claude`, `gemini`, `opencode`, `kimi`, `glm`, and `hermes` remain disabled metadata until separately
|
|
8
|
+
* implemented. The registry never falls back to fixture for an unknown/blocked provider - it
|
|
9
|
+
* returns a safe error. It does NOT import or depend on XENO Hub.
|
|
10
|
+
*/
|
|
11
|
+
import { ProviderNotImplementedError, ProviderSafetyViolationError, ProviderUnavailableError, } from "./providerErrors.js";
|
|
12
|
+
import { validateProviderSafety } from "./providerSafety.js";
|
|
13
|
+
import { createFixtureProviderDefinition } from "./fixtureProvider.js";
|
|
14
|
+
import { createXenoLocalDefinition } from "./xenoLocalProvider.js";
|
|
15
|
+
import { createClaudeLocalDefinition } from "./claudeLocalProvider.js";
|
|
16
|
+
import { createCodexLocalDefinition } from "./codexLocalProvider.js";
|
|
17
|
+
import { evaluateProviderSafety, isGateAllowed } from "../security/capabilityGate.js";
|
|
18
|
+
import { applyPolicyToDefinition } from "../config/providerPolicyConfig.js";
|
|
19
|
+
export class ProviderRegistry {
|
|
20
|
+
defs = new Map();
|
|
21
|
+
register(def) {
|
|
22
|
+
this.defs.set(def.id, def);
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
list() {
|
|
26
|
+
return [...this.defs.values()];
|
|
27
|
+
}
|
|
28
|
+
get(id) {
|
|
29
|
+
return this.defs.get(id);
|
|
30
|
+
}
|
|
31
|
+
has(id) {
|
|
32
|
+
return this.defs.has(id);
|
|
33
|
+
}
|
|
34
|
+
safetyOf(id) {
|
|
35
|
+
const def = this.defs.get(id);
|
|
36
|
+
return def ? validateProviderSafety(def) : undefined;
|
|
37
|
+
}
|
|
38
|
+
/** A provider is runnable only if it is enabled AND passes the full capability gate. */
|
|
39
|
+
isRunnable(id) {
|
|
40
|
+
const def = this.defs.get(id);
|
|
41
|
+
return Boolean(def && def.enabled && isGateAllowed(def));
|
|
42
|
+
}
|
|
43
|
+
/** Build a runtime, or throw a SAFE ProviderError (unknown / not-implemented / blocked). */
|
|
44
|
+
createRuntime(id, config) {
|
|
45
|
+
const def = this.defs.get(id);
|
|
46
|
+
if (!def) {
|
|
47
|
+
throw new ProviderUnavailableError({ safeMessage: `unknown provider: ${id}`, providerId: id });
|
|
48
|
+
}
|
|
49
|
+
if (!def.enabled) {
|
|
50
|
+
throw new ProviderNotImplementedError({
|
|
51
|
+
safeMessage: `provider '${id}' is not implemented (blocked)`,
|
|
52
|
+
providerId: id,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// Fail-closed capability gate — never bypassed by `enabled` alone. A definitively `blocked`
|
|
56
|
+
// provider can never build a runtime. A `requires_approval` provider (e.g. xeno-local,
|
|
57
|
+
// claude-local) MAY build a runtime — building is not running: the authoritative run-gate is
|
|
58
|
+
// the caller's `resolveProviderStatus` (definition + policy + approval) plus the harness
|
|
59
|
+
// re-check inside the runtime; neither lets it run without a current approval.
|
|
60
|
+
//
|
|
61
|
+
// XACP-022 fix: gate the EFFECTIVE definition — the caller's declared policy applied onto the
|
|
62
|
+
// definition — not the bare definition. A provider like `claude-local` declares
|
|
63
|
+
// `authRequirement/networkRequirement: required` but carries no auth/egress policy on the bare
|
|
64
|
+
// definition (the policy lives in the operator's config), so the bare definition gates as
|
|
65
|
+
// `blocked` (auth/egress required, no policy). That wrongly blocked runtime creation BEFORE the
|
|
66
|
+
// adapter could launch, even when a valid policy + current approval had been resolved. Applying
|
|
67
|
+
// the policy here makes the build-time gate see what the caller resolved; without a policy the
|
|
68
|
+
// bare definition is still gated (fail-closed).
|
|
69
|
+
const runnability = config?.options?.runnability;
|
|
70
|
+
const effectiveDef = runnability?.policyEntry ? applyPolicyToDefinition(def, runnability.policyEntry) : def;
|
|
71
|
+
const gate = evaluateProviderSafety(effectiveDef);
|
|
72
|
+
if (gate.overallDecision.status === "blocked") {
|
|
73
|
+
const hint = runnability?.policyEntry
|
|
74
|
+
? gate.overallDecision.safeMessage
|
|
75
|
+
: `${gate.overallDecision.safeMessage} (no provider policy was applied — supply --provider-policy / runnability.policyEntry)`;
|
|
76
|
+
throw new ProviderSafetyViolationError({
|
|
77
|
+
safeMessage: `provider '${id}' is blocked: ${hint}`,
|
|
78
|
+
providerId: id,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return def.createRuntime(config);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** High-authority capability profile used for the disabled real-agent placeholders. */
|
|
85
|
+
const REAL_AGENT_CAPABILITIES = {
|
|
86
|
+
streamsText: true,
|
|
87
|
+
emitsPlan: true,
|
|
88
|
+
emitsToolCalls: true,
|
|
89
|
+
emitsUsage: true,
|
|
90
|
+
supportsCancel: true,
|
|
91
|
+
supportsMultipleSessions: true,
|
|
92
|
+
requiresAuth: true,
|
|
93
|
+
usesNetwork: true,
|
|
94
|
+
canReadFiles: true,
|
|
95
|
+
canWriteFiles: true,
|
|
96
|
+
canRunTerminal: true,
|
|
97
|
+
};
|
|
98
|
+
function authPolicyFor(secretId, label, kind) {
|
|
99
|
+
return {
|
|
100
|
+
requirement: "required",
|
|
101
|
+
allowedSecretRefs: [{ id: secretId, kind, label, required: true, redactionHint: "credential" }],
|
|
102
|
+
allowPlainEnv: false,
|
|
103
|
+
allowProcessEnv: false,
|
|
104
|
+
allowCredentialFiles: false,
|
|
105
|
+
allowInteractiveLogin: false,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function egressPolicyFor(host) {
|
|
109
|
+
return {
|
|
110
|
+
mode: "allowlist",
|
|
111
|
+
allowedHosts: [host],
|
|
112
|
+
blockedHosts: [],
|
|
113
|
+
allowLocalhost: false,
|
|
114
|
+
allowPrivateNetwork: false,
|
|
115
|
+
allowHttp: false,
|
|
116
|
+
allowHttps: true,
|
|
117
|
+
maxRedirects: 0,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Disabled, doc-only placeholders mirroring the XACP-004 candidate matrix, each carrying
|
|
122
|
+
* explicit (metadata-only) auth + egress policy + readiness. They are NEVER runnable — the
|
|
123
|
+
* capability gate blocks them as not-implemented; the policies exist only for diagnostics.
|
|
124
|
+
*/
|
|
125
|
+
const PLACEHOLDER_SPECS = [
|
|
126
|
+
{
|
|
127
|
+
id: "codex",
|
|
128
|
+
displayName: "Codex (via adapter)",
|
|
129
|
+
kind: "local-adapter",
|
|
130
|
+
secretId: "OPENAI_API_KEY",
|
|
131
|
+
secretLabel: "OpenAI / ChatGPT credential",
|
|
132
|
+
secretKind: "manual",
|
|
133
|
+
host: "api.openai.com",
|
|
134
|
+
metadata: { acpEntrypoint: "adapter", installedLocally: true, localReadiness: "base CLI installed; `codex exec --json` observed locally", note: "base codex CLI exposes MCP, not ACP; a future XENO-authored adapter would parse exec JSONL" },
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: "claude",
|
|
138
|
+
displayName: "Claude (via adapter)",
|
|
139
|
+
kind: "local-adapter",
|
|
140
|
+
secretId: "ANTHROPIC_API_KEY",
|
|
141
|
+
secretLabel: "Anthropic credential",
|
|
142
|
+
secretKind: "manual",
|
|
143
|
+
host: "api.anthropic.com",
|
|
144
|
+
metadata: { acpEntrypoint: "adapter", installedLocally: true, localReadiness: "base CLI installed (no native ACP)", note: "base claude CLI exposes MCP/print/stream-json, not ACP; requires an adapter" },
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: "gemini",
|
|
148
|
+
displayName: "Gemini ACP",
|
|
149
|
+
kind: "external-acp",
|
|
150
|
+
secretId: "GEMINI_API_KEY",
|
|
151
|
+
secretLabel: "Google / Gemini credential",
|
|
152
|
+
secretKind: "env",
|
|
153
|
+
host: "generativelanguage.googleapis.com",
|
|
154
|
+
metadata: { acpEntrypoint: "native", installedLocally: true, localReadiness: "native `gemini --acp` observed locally", note: "third-party; auth + network required" },
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: "opencode",
|
|
158
|
+
displayName: "OpenCode ACP",
|
|
159
|
+
kind: "external-acp",
|
|
160
|
+
secretId: "OPENCODE_PROVIDER_AUTH",
|
|
161
|
+
secretLabel: "OpenCode provider credential",
|
|
162
|
+
secretKind: "manual",
|
|
163
|
+
host: "opencode.ai",
|
|
164
|
+
metadata: { acpEntrypoint: "native", installedLocally: true, localReadiness: "native `opencode acp` observed locally", note: "third-party; provider auth + network required" },
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
id: "kimi",
|
|
168
|
+
displayName: "Kimi CLI ACP",
|
|
169
|
+
kind: "external-acp",
|
|
170
|
+
secretId: "KIMI_PROVIDER_AUTH",
|
|
171
|
+
secretLabel: "Kimi provider credential",
|
|
172
|
+
secretKind: "manual",
|
|
173
|
+
host: "api.moonshot.ai",
|
|
174
|
+
metadata: { acpEntrypoint: "native", installedLocally: false, localReadiness: "official docs expose native `kimi acp`; NOT verified locally", note: "third-party; provider auth + network required" },
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
id: "glm",
|
|
178
|
+
displayName: "GLM Agent ACP",
|
|
179
|
+
kind: "external-acp",
|
|
180
|
+
secretId: "Z_AI_API_KEY",
|
|
181
|
+
secretLabel: "Z.AI Coding Plan credential",
|
|
182
|
+
secretKind: "env",
|
|
183
|
+
host: "api.z.ai",
|
|
184
|
+
metadata: { acpEntrypoint: "native", installedLocally: false, localReadiness: "ACP Registry package `glm-acp-agent`; NOT verified locally", note: "third-party; Z.AI auth + network required" },
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
id: "hermes",
|
|
188
|
+
displayName: "Hermes ACP",
|
|
189
|
+
kind: "external-acp",
|
|
190
|
+
secretId: "HERMES_PROVIDER_AUTH",
|
|
191
|
+
secretLabel: "Hermes provider credential",
|
|
192
|
+
secretKind: "manual",
|
|
193
|
+
host: "hermes-agent.nousresearch.com",
|
|
194
|
+
metadata: { acpEntrypoint: "native", installedLocally: false, localReadiness: "native `hermes acp` upstream; NOT installed locally", note: "third-party; not installed; auth + network required" },
|
|
195
|
+
},
|
|
196
|
+
];
|
|
197
|
+
export function createPlaceholderDefinitions() {
|
|
198
|
+
return PLACEHOLDER_SPECS.map((s) => ({
|
|
199
|
+
id: s.id,
|
|
200
|
+
displayName: s.displayName,
|
|
201
|
+
description: `Placeholder for ${s.displayName}. NOT implemented (foundation/safety only).`,
|
|
202
|
+
kind: s.kind,
|
|
203
|
+
trustClass: "third-party",
|
|
204
|
+
authRequirement: "required",
|
|
205
|
+
networkRequirement: "required",
|
|
206
|
+
ioAuthority: { filesystem: "unknown", terminal: "unknown" },
|
|
207
|
+
capabilities: REAL_AGENT_CAPABILITIES,
|
|
208
|
+
enabled: false,
|
|
209
|
+
authPolicy: authPolicyFor(s.secretId, s.secretLabel, s.secretKind),
|
|
210
|
+
egressPolicy: egressPolicyFor(s.host),
|
|
211
|
+
metadata: s.metadata,
|
|
212
|
+
createRuntime() {
|
|
213
|
+
throw new ProviderNotImplementedError({
|
|
214
|
+
safeMessage: `provider '${s.id}' is not implemented (blocked)`,
|
|
215
|
+
providerId: s.id,
|
|
216
|
+
});
|
|
217
|
+
},
|
|
218
|
+
}));
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* The default registry: the runnable fixture provider, the XENO-owned `xeno-local` adapter
|
|
222
|
+
* (XACP-014 — real but approval-gated), and the disabled third-party placeholders.
|
|
223
|
+
*/
|
|
224
|
+
export function createDefaultRegistry() {
|
|
225
|
+
const registry = new ProviderRegistry();
|
|
226
|
+
registry.register(createFixtureProviderDefinition());
|
|
227
|
+
registry.register(createXenoLocalDefinition());
|
|
228
|
+
registry.register(createClaudeLocalDefinition());
|
|
229
|
+
registry.register(createCodexLocalDefinition());
|
|
230
|
+
for (const p of createPlaceholderDefinitions())
|
|
231
|
+
registry.register(p);
|
|
232
|
+
return registry;
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=providerRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerRegistry.js","sourceRoot":"","sources":["../../src/providers/providerRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider safety validation.
|
|
3
|
+
*
|
|
4
|
+
* Classifies a provider definition before it can be made runnable. The certified fixture
|
|
5
|
+
* endpoint (zero I/O authority, no auth, no network, XENO-owned) must classify `approved`.
|
|
6
|
+
* Any provider that needs auth/network or claims file-write/terminal authority (or unknown
|
|
7
|
+
* trust/IO) is blocked here until a future, explicitly-scoped milestone approves it.
|
|
8
|
+
*/
|
|
9
|
+
import type { ProviderDefinition } from "./providerTypes.js";
|
|
10
|
+
export type SafetyClassification = "approved" | "blocked_auth_required" | "blocked_network_required" | "blocked_io_authority" | "blocked_unknown_trust" | "blocked_not_implemented";
|
|
11
|
+
export interface SafetyResult {
|
|
12
|
+
classification: SafetyClassification;
|
|
13
|
+
reasons: string[];
|
|
14
|
+
approved: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function validateProviderSafety(def: ProviderDefinition): SafetyResult;
|
|
17
|
+
//# sourceMappingURL=providerSafety.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerSafety.d.ts","sourceRoot":"","sources":["../../src/providers/providerSafety.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,MAAM,oBAAoB,GAC5B,UAAU,GACV,uBAAuB,GACvB,0BAA0B,GAC1B,sBAAsB,GACtB,uBAAuB,GACvB,yBAAyB,CAAC;AAE9B,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,oBAAoB,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,kBAAkB,GAAG,YAAY,CA+B5E"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider safety validation.
|
|
3
|
+
*
|
|
4
|
+
* Classifies a provider definition before it can be made runnable. The certified fixture
|
|
5
|
+
* endpoint (zero I/O authority, no auth, no network, XENO-owned) must classify `approved`.
|
|
6
|
+
* Any provider that needs auth/network or claims file-write/terminal authority (or unknown
|
|
7
|
+
* trust/IO) is blocked here until a future, explicitly-scoped milestone approves it.
|
|
8
|
+
*/
|
|
9
|
+
export function validateProviderSafety(def) {
|
|
10
|
+
const reasons = [];
|
|
11
|
+
if (!def.enabled) {
|
|
12
|
+
return block("blocked_not_implemented", ["provider is a placeholder / not implemented"]);
|
|
13
|
+
}
|
|
14
|
+
if (def.trustClass === "unknown") {
|
|
15
|
+
return block("blocked_unknown_trust", ["provider trust class is unknown"]);
|
|
16
|
+
}
|
|
17
|
+
if (def.authRequirement === "required" || def.capabilities.requiresAuth) {
|
|
18
|
+
return block("blocked_auth_required", ["provider requires authentication"]);
|
|
19
|
+
}
|
|
20
|
+
if (def.networkRequirement === "required" || def.capabilities.usesNetwork) {
|
|
21
|
+
return block("blocked_network_required", ["provider requires network access"]);
|
|
22
|
+
}
|
|
23
|
+
if (def.capabilities.canWriteFiles ||
|
|
24
|
+
def.capabilities.canRunTerminal ||
|
|
25
|
+
def.ioAuthority.filesystem === "unknown" ||
|
|
26
|
+
def.ioAuthority.terminal === "unknown") {
|
|
27
|
+
return block("blocked_io_authority", [
|
|
28
|
+
"provider claims file-write/terminal authority or unknown I/O authority",
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
return { classification: "approved", reasons, approved: true };
|
|
32
|
+
function block(classification, rs) {
|
|
33
|
+
return { classification, reasons: rs, approved: false };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=providerSafety.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerSafety.js","sourceRoot":"","sources":["../../src/providers/providerSafety.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,MAAM,UAAU,sBAAsB,CAAC,GAAuB;IAC5D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC,yBAAyB,EAAE,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,uBAAuB,EAAE,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,GAAG,CAAC,eAAe,KAAK,UAAU,IAAI,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC,uBAAuB,EAAE,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,GAAG,CAAC,kBAAkB,KAAK,UAAU,IAAI,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC,0BAA0B,EAAE,CAAC,kCAAkC,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,IACE,GAAG,CAAC,YAAY,CAAC,aAAa;QAC9B,GAAG,CAAC,YAAY,CAAC,cAAc;QAC/B,GAAG,CAAC,WAAW,CAAC,UAAU,KAAK,SAAS;QACxC,GAAG,CAAC,WAAW,CAAC,QAAQ,KAAK,SAAS,EACtC,CAAC;QACD,OAAO,KAAK,CAAC,sBAAsB,EAAE;YACnC,wEAAwE;SACzE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE/D,SAAS,KAAK,CAAC,cAAoC,EAAE,EAAY;QAC/D,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC1D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider adapter contract for @xenosystem/acp-agent (XACP-005 foundation).
|
|
3
|
+
*
|
|
4
|
+
* A *provider* produces an agent's response. The fixture provider is the only IMPLEMENTED
|
|
5
|
+
* provider in XACP-005 — this file defines the contract that future Codex/Claude/Gemini/
|
|
6
|
+
* OpenCode/Hermes/XENO-authored adapters will implement, so they can be added cleanly,
|
|
7
|
+
* safely, and testably WITHOUT mixing real-provider risk into the certified fixture endpoint.
|
|
8
|
+
*
|
|
9
|
+
* The contract is protocol-neutral: providers emit normalized `ProviderEvent`s (see
|
|
10
|
+
* providerEvents.ts); the ACP server maps those to ACP `session/update` notifications. A
|
|
11
|
+
* provider NEVER writes to stdout and NEVER executes tools/fs/terminal/network itself in
|
|
12
|
+
* XACP-005. The contract does NOT depend on XENO Hub.
|
|
13
|
+
*/
|
|
14
|
+
import type { ProviderEvent } from "./providerEvents.js";
|
|
15
|
+
import type { ProviderError } from "./providerErrors.js";
|
|
16
|
+
import type { ProviderAuthPolicy, ProviderEgressPolicy } from "../security/securityTypes.js";
|
|
17
|
+
import type { ProviderSandboxContext } from "../sandbox/providerSandboxTypes.js";
|
|
18
|
+
export type ProviderKind = "fixture" | "local-adapter" | "external-acp" | "gateway";
|
|
19
|
+
export type TrustClass = "xeno-owned" | "third-party" | "unknown";
|
|
20
|
+
export type Requirement = "none" | "optional" | "required";
|
|
21
|
+
export type IoAuthorityLevel = "none" | "workspace-scoped" | "unknown";
|
|
22
|
+
/** Declared capabilities of a provider (used for safety classification + diagnostics). */
|
|
23
|
+
export interface ProviderCapabilitySet {
|
|
24
|
+
streamsText: boolean;
|
|
25
|
+
emitsPlan: boolean;
|
|
26
|
+
emitsToolCalls: boolean;
|
|
27
|
+
emitsUsage: boolean;
|
|
28
|
+
supportsCancel: boolean;
|
|
29
|
+
supportsMultipleSessions: boolean;
|
|
30
|
+
requiresAuth: boolean;
|
|
31
|
+
usesNetwork: boolean;
|
|
32
|
+
canReadFiles: boolean;
|
|
33
|
+
canWriteFiles: boolean;
|
|
34
|
+
canRunTerminal: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface ProviderIoAuthority {
|
|
37
|
+
filesystem: IoAuthorityLevel;
|
|
38
|
+
terminal: IoAuthorityLevel;
|
|
39
|
+
}
|
|
40
|
+
export interface ProviderRuntimeConfig {
|
|
41
|
+
/** Provider-specific options (e.g. fixture's delayMs/fail/stderrTest). */
|
|
42
|
+
options?: Record<string, unknown>;
|
|
43
|
+
/** Diagnostic logger (stderr only — never stdout). */
|
|
44
|
+
log?: (message: string) => void;
|
|
45
|
+
}
|
|
46
|
+
export interface ProviderSession {
|
|
47
|
+
sessionId: string;
|
|
48
|
+
createdAt: string;
|
|
49
|
+
}
|
|
50
|
+
export interface ProviderPromptRequest {
|
|
51
|
+
sessionId: string;
|
|
52
|
+
requestId: string;
|
|
53
|
+
model?: string;
|
|
54
|
+
cwd?: string;
|
|
55
|
+
additionalDirectories?: string[];
|
|
56
|
+
systemPrompt?: string;
|
|
57
|
+
prompt: Array<{
|
|
58
|
+
type: string;
|
|
59
|
+
text?: string;
|
|
60
|
+
}>;
|
|
61
|
+
}
|
|
62
|
+
export type ProviderDisposition = "completed" | "cancelled" | "failed";
|
|
63
|
+
export interface ProviderUsage {
|
|
64
|
+
inputTokens?: number;
|
|
65
|
+
outputTokens?: number;
|
|
66
|
+
totalTokens?: number;
|
|
67
|
+
}
|
|
68
|
+
export interface ProviderPromptResult {
|
|
69
|
+
disposition: ProviderDisposition;
|
|
70
|
+
usage?: ProviderUsage;
|
|
71
|
+
/** Present when disposition === "failed"; carries a safe message. */
|
|
72
|
+
error?: ProviderError;
|
|
73
|
+
}
|
|
74
|
+
export interface ProviderHostChooseDirectoryRequest {
|
|
75
|
+
title?: string;
|
|
76
|
+
/** Correlates the host request with a provider-authored tool lifecycle. */
|
|
77
|
+
toolCallId?: string;
|
|
78
|
+
}
|
|
79
|
+
export interface ProviderHostChooseDirectoryResponse {
|
|
80
|
+
path?: string;
|
|
81
|
+
cancelled?: boolean;
|
|
82
|
+
timedOut?: boolean;
|
|
83
|
+
error?: string;
|
|
84
|
+
}
|
|
85
|
+
export interface ProviderHostChooseWorkspacePlacementRequest {
|
|
86
|
+
directory: string;
|
|
87
|
+
title?: string;
|
|
88
|
+
/** Correlates the host request with a provider-authored tool lifecycle. */
|
|
89
|
+
toolCallId?: string;
|
|
90
|
+
}
|
|
91
|
+
export interface ProviderHostChooseWorkspacePlacementResponse {
|
|
92
|
+
choice?: "inbox" | "reuse" | "create";
|
|
93
|
+
directory?: string;
|
|
94
|
+
workspaceName?: string;
|
|
95
|
+
result?: string;
|
|
96
|
+
cancelled?: boolean;
|
|
97
|
+
timedOut?: boolean;
|
|
98
|
+
error?: string;
|
|
99
|
+
}
|
|
100
|
+
export interface ProviderHostContext {
|
|
101
|
+
/**
|
|
102
|
+
* Ask the ACP client to open its trusted directory picker and return the selected path.
|
|
103
|
+
* This is a client-mediated request, not provider-side filesystem or shell authority.
|
|
104
|
+
*/
|
|
105
|
+
chooseDirectory(request?: ProviderHostChooseDirectoryRequest): Promise<ProviderHostChooseDirectoryResponse>;
|
|
106
|
+
/**
|
|
107
|
+
* Ask the ACP client how to place a selected conversation folder in XENO Hub.
|
|
108
|
+
* This is a separate client-mediated operation that runs after directory selection.
|
|
109
|
+
*/
|
|
110
|
+
chooseWorkspacePlacement(request: ProviderHostChooseWorkspacePlacementRequest): Promise<ProviderHostChooseWorkspacePlacementResponse>;
|
|
111
|
+
}
|
|
112
|
+
export interface ProviderRuntimeContext {
|
|
113
|
+
/** Emit a normalized provider event (the server maps it to an ACP update). */
|
|
114
|
+
emit: (event: ProviderEvent) => void;
|
|
115
|
+
/** Aborts when the client cancels this prompt. */
|
|
116
|
+
signal: AbortSignal;
|
|
117
|
+
/** Diagnostic logging (stderr only). */
|
|
118
|
+
log: (message: string) => void;
|
|
119
|
+
/**
|
|
120
|
+
* The runtime enforcement boundary (XACP-008). Provided by the ACP server for a runnable
|
|
121
|
+
* provider; a real adapter accesses network/secrets/fs/terminal ONLY through this (all
|
|
122
|
+
* deny-by-default). Optional so in-process unit tests can omit it; the fixture ignores it.
|
|
123
|
+
*/
|
|
124
|
+
sandbox?: ProviderSandboxContext;
|
|
125
|
+
/** Optional client-mediated host helpers exposed by XENO ACP extensions. */
|
|
126
|
+
host?: ProviderHostContext;
|
|
127
|
+
}
|
|
128
|
+
/** A live provider instance. One per agent process; sessions/prompts run against it. */
|
|
129
|
+
export interface ProviderRuntime {
|
|
130
|
+
readonly definition: ProviderDefinition;
|
|
131
|
+
initialize(): Promise<void> | void;
|
|
132
|
+
createSession(): ProviderSession;
|
|
133
|
+
prompt(request: ProviderPromptRequest, ctx: ProviderRuntimeContext): Promise<ProviderPromptResult>;
|
|
134
|
+
cancel(sessionId: string): void;
|
|
135
|
+
dispose(): Promise<void> | void;
|
|
136
|
+
diagnostics(): Record<string, unknown>;
|
|
137
|
+
}
|
|
138
|
+
/** Declarative description of a provider + a factory for its runtime. */
|
|
139
|
+
export interface ProviderDefinition {
|
|
140
|
+
id: string;
|
|
141
|
+
displayName: string;
|
|
142
|
+
description: string;
|
|
143
|
+
kind: ProviderKind;
|
|
144
|
+
trustClass: TrustClass;
|
|
145
|
+
authRequirement: Requirement;
|
|
146
|
+
networkRequirement: Requirement;
|
|
147
|
+
ioAuthority: ProviderIoAuthority;
|
|
148
|
+
capabilities: ProviderCapabilitySet;
|
|
149
|
+
/** Whether this provider is implemented & runnable. Placeholders are `false`. */
|
|
150
|
+
enabled: boolean;
|
|
151
|
+
/** Declared auth policy (metadata; XACP-006). Absent → fail-closed if auth is required. */
|
|
152
|
+
authPolicy?: ProviderAuthPolicy;
|
|
153
|
+
/** Declared egress policy (metadata; XACP-006). Absent → fail-closed if network is required. */
|
|
154
|
+
egressPolicy?: ProviderEgressPolicy;
|
|
155
|
+
/** Non-security descriptive metadata (from the XACP-004 readiness matrix). */
|
|
156
|
+
metadata?: ProviderMetadata;
|
|
157
|
+
/** Provider-owned model/default discovery metadata. Downstream UIs must not hardcode this. */
|
|
158
|
+
modelDiscovery?: ProviderModelDiscovery;
|
|
159
|
+
/** Build a runtime. MUST throw a `ProviderError` if the provider is not enabled. */
|
|
160
|
+
createRuntime(config?: ProviderRuntimeConfig): ProviderRuntime;
|
|
161
|
+
}
|
|
162
|
+
export interface ProviderMetadata {
|
|
163
|
+
acpEntrypoint?: "native" | "adapter" | "none";
|
|
164
|
+
installedLocally?: boolean;
|
|
165
|
+
localReadiness?: string;
|
|
166
|
+
note?: string;
|
|
167
|
+
/** Optional UI-safe alias for persisted or technical ids. */
|
|
168
|
+
displayAlias?: string;
|
|
169
|
+
/** Safe CLI version/readiness metadata; never includes account, path, or secret values. */
|
|
170
|
+
versionReadiness?: ProviderVersionReadiness;
|
|
171
|
+
/** Honest stream behavior for UIs that want to promise live token/tool progress. */
|
|
172
|
+
streaming?: ProviderStreamingMetadata;
|
|
173
|
+
/** Short safe next-step hints for setup surfaces. */
|
|
174
|
+
setupHints?: string[];
|
|
175
|
+
}
|
|
176
|
+
export type ProviderModelDiscoveryStatus = "available" | "default_only" | "blocked" | "unavailable";
|
|
177
|
+
export type ProviderModelDiscoverySource = "provider_cli" | "adapter_static" | "operator_config" | "none";
|
|
178
|
+
export interface ProviderModelChoice {
|
|
179
|
+
id: string;
|
|
180
|
+
label: string;
|
|
181
|
+
default: boolean;
|
|
182
|
+
available: boolean;
|
|
183
|
+
reason: string | null;
|
|
184
|
+
}
|
|
185
|
+
export interface ProviderModelDiscovery {
|
|
186
|
+
status: ProviderModelDiscoveryStatus;
|
|
187
|
+
source: ProviderModelDiscoverySource;
|
|
188
|
+
defaultModelId: string | null;
|
|
189
|
+
allowCustomModel: boolean;
|
|
190
|
+
models: ProviderModelChoice[];
|
|
191
|
+
safeMessage: string;
|
|
192
|
+
}
|
|
193
|
+
export interface ProviderVersionReadiness {
|
|
194
|
+
status: "not_checked" | "known_good" | "upgrade_recommended" | "not_installed" | "unknown";
|
|
195
|
+
cliName?: string;
|
|
196
|
+
installedVersion?: string | null;
|
|
197
|
+
minimumKnownGoodVersion?: string | null;
|
|
198
|
+
versionCommand?: string[];
|
|
199
|
+
safeUpgradeHint?: string;
|
|
200
|
+
}
|
|
201
|
+
export interface ProviderStreamingMetadata {
|
|
202
|
+
mode: "streaming" | "buffered" | "none";
|
|
203
|
+
safeMessage: string;
|
|
204
|
+
}
|
|
205
|
+
/** A provider safety profile is derived from a definition (see providerSafety.ts). */
|
|
206
|
+
export interface ProviderSafetyProfile {
|
|
207
|
+
providerId: string;
|
|
208
|
+
trustClass: TrustClass;
|
|
209
|
+
capabilities: ProviderCapabilitySet;
|
|
210
|
+
ioAuthority: ProviderIoAuthority;
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=providerTypes.d.ts.map
|