@xenosystem/agent-interface-host 0.1.7 → 0.1.9
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/dist/acp/AcpAgentRegistryService.d.ts.map +1 -1
- package/dist/acp/AcpAgentRegistryService.js +40 -18
- package/dist/acp/AcpAgentRegistryService.js.map +1 -1
- package/dist/acp/AcpAgentTurnExecutionAdapter.d.ts.map +1 -1
- package/dist/acp/AcpAgentTurnExecutionAdapter.js +11 -0
- package/dist/acp/AcpAgentTurnExecutionAdapter.js.map +1 -1
- package/dist/acp/AcpNativeProviderLauncherResolver.d.ts +26 -0
- package/dist/acp/AcpNativeProviderLauncherResolver.d.ts.map +1 -0
- package/dist/acp/AcpNativeProviderLauncherResolver.js +145 -0
- package/dist/acp/AcpNativeProviderLauncherResolver.js.map +1 -0
- package/dist/acp/AcpProcessSupervisor.d.ts.map +1 -1
- package/dist/acp/AcpProcessSupervisor.js +4 -1
- package/dist/acp/AcpProcessSupervisor.js.map +1 -1
- package/dist/acp/AcpProviderModelService.d.ts +1 -0
- package/dist/acp/AcpProviderModelService.d.ts.map +1 -1
- package/dist/acp/AcpProviderModelService.js +2 -2
- package/dist/acp/AcpProviderModelService.js.map +1 -1
- package/dist/acp/AcpSessionService.d.ts.map +1 -1
- package/dist/acp/AcpSessionService.js +40 -2
- package/dist/acp/AcpSessionService.js.map +1 -1
- package/dist/acp/acpTypes.d.ts +3 -0
- package/dist/acp/acpTypes.d.ts.map +1 -1
- package/dist/cloud/XenoCloudAgentTurnExecutionAdapter.d.ts.map +1 -1
- package/dist/cloud/XenoCloudAgentTurnExecutionAdapter.js +4 -0
- package/dist/cloud/XenoCloudAgentTurnExecutionAdapter.js.map +1 -1
- package/dist/index.d.ts +41 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +138 -10
- package/dist/index.js.map +1 -1
- package/dist/lease/ProcessLivenessProber.d.ts +30 -0
- package/dist/lease/ProcessLivenessProber.d.ts.map +1 -0
- package/dist/lease/ProcessLivenessProber.js +95 -0
- package/dist/lease/ProcessLivenessProber.js.map +1 -0
- package/dist/lease/ProviderWriterLeaseService.d.ts +43 -0
- package/dist/lease/ProviderWriterLeaseService.d.ts.map +1 -0
- package/dist/lease/ProviderWriterLeaseService.js +148 -0
- package/dist/lease/ProviderWriterLeaseService.js.map +1 -0
- package/dist/node.d.ts +8 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +8 -0
- package/dist/node.js.map +1 -1
- package/dist/provider/ProviderLaneService.d.ts +71 -0
- package/dist/provider/ProviderLaneService.d.ts.map +1 -0
- package/dist/provider/ProviderLaneService.js +892 -0
- package/dist/provider/ProviderLaneService.js.map +1 -0
- package/dist/provider/ProviderTransitionOutboxDispatcher.d.ts +22 -0
- package/dist/provider/ProviderTransitionOutboxDispatcher.d.ts.map +1 -0
- package/dist/provider/ProviderTransitionOutboxDispatcher.js +60 -0
- package/dist/provider/ProviderTransitionOutboxDispatcher.js.map +1 -0
- package/dist/sdk/SdkNativeAgentTurnExecutionAdapter.d.ts +4 -1
- package/dist/sdk/SdkNativeAgentTurnExecutionAdapter.d.ts.map +1 -1
- package/dist/sdk/SdkNativeAgentTurnExecutionAdapter.js +37 -1
- package/dist/sdk/SdkNativeAgentTurnExecutionAdapter.js.map +1 -1
- package/dist/session/nativeTuiSessionPty.d.ts.map +1 -1
- package/dist/session/nativeTuiSessionPty.js +8 -0
- package/dist/session/nativeTuiSessionPty.js.map +1 -1
- package/dist/state/ProviderLaneSqliteStore.d.ts +64 -0
- package/dist/state/ProviderLaneSqliteStore.d.ts.map +1 -0
- package/dist/state/ProviderLaneSqliteStore.js +728 -0
- package/dist/state/ProviderLaneSqliteStore.js.map +1 -0
- package/dist/state/SqliteAgentStateRepository.d.ts +9 -0
- package/dist/state/SqliteAgentStateRepository.d.ts.map +1 -1
- package/dist/state/SqliteAgentStateRepository.js +171 -17
- package/dist/state/SqliteAgentStateRepository.js.map +1 -1
- package/dist/state/createAgentStateRepository.d.ts.map +1 -1
- package/dist/state/createAgentStateRepository.js +4 -2
- package/dist/state/createAgentStateRepository.js.map +1 -1
- package/dist/state/providerLaneSchema.d.ts +13 -0
- package/dist/state/providerLaneSchema.d.ts.map +1 -0
- package/dist/state/providerLaneSchema.js +129 -0
- package/dist/state/providerLaneSchema.js.map +1 -0
- package/dist/state/providerLaneTypes.d.ts +122 -0
- package/dist/state/providerLaneTypes.d.ts.map +1 -0
- package/dist/state/providerLaneTypes.js +28 -0
- package/dist/state/providerLaneTypes.js.map +1 -0
- package/dist/state/sdkProtectedStateCipher.d.ts +30 -0
- package/dist/state/sdkProtectedStateCipher.d.ts.map +1 -0
- package/dist/state/sdkProtectedStateCipher.js +50 -0
- package/dist/state/sdkProtectedStateCipher.js.map +1 -0
- package/dist/workspace/WorkspaceHostService.d.ts +33 -1
- package/dist/workspace/WorkspaceHostService.d.ts.map +1 -1
- package/dist/workspace/WorkspaceHostService.js +109 -14
- package/dist/workspace/WorkspaceHostService.js.map +1 -1
- package/package.json +10 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerLaneSchema.d.ts","sourceRoot":"","sources":["../../src/state/providerLaneSchema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,IAAI,CAAA;AAE3C,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QACpB,GAAG,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC,GAAG,OAAO,CAAA;KACjF,CAAA;CACF;AAED,+DAA+D;AAC/D,eAAO,MAAM,wBAAwB,+nQAyGpC,CAAA;AAED,eAAO,MAAM,oBAAoB,6GAKvB,CAAA;AAEV,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAE5E;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAS/E"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
export const AGENT_STATE_SCHEMA_VERSION = 2;
|
|
2
|
+
/** One source for both fresh creation and v1 -> v2 upgrade. */
|
|
3
|
+
export const PROVIDER_LANE_SCHEMA_DDL = `
|
|
4
|
+
CREATE TABLE IF NOT EXISTS provider_lanes (
|
|
5
|
+
lane_id TEXT PRIMARY KEY NOT NULL CHECK(length(lane_id) BETWEEN 1 AND 240),
|
|
6
|
+
conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
7
|
+
runtime_provider_id TEXT NOT NULL CHECK(length(runtime_provider_id) BETWEEN 1 AND 240),
|
|
8
|
+
provider_kind TEXT NOT NULL CHECK(length(provider_kind) BETWEEN 1 AND 120),
|
|
9
|
+
provider_display_name TEXT CHECK(provider_display_name IS NULL OR length(provider_display_name) <= 512),
|
|
10
|
+
native_provider_id TEXT CHECK(native_provider_id IS NULL OR length(native_provider_id) <= 240),
|
|
11
|
+
model_id TEXT CHECK(model_id IS NULL OR length(model_id) <= 240),
|
|
12
|
+
model_display_name TEXT CHECK(model_display_name IS NULL OR length(model_display_name) <= 512),
|
|
13
|
+
resume_compatibility_key TEXT NOT NULL CHECK(length(resume_compatibility_key) BETWEEN 1 AND 512),
|
|
14
|
+
workspace_epoch_id TEXT NOT NULL CHECK(length(workspace_epoch_id) BETWEEN 1 AND 240),
|
|
15
|
+
workspace_epoch_fingerprint TEXT NOT NULL CHECK(length(workspace_epoch_fingerprint) BETWEEN 1 AND 512),
|
|
16
|
+
workspace_epoch_wire_mode TEXT NOT NULL CHECK(workspace_epoch_wire_mode IN ('chat', 'development')),
|
|
17
|
+
workspace_epoch_kind TEXT NOT NULL CHECK(workspace_epoch_kind IN ('private-chat', 'local-workspace')),
|
|
18
|
+
workspace_epoch_label TEXT CHECK(workspace_epoch_label IS NULL OR length(workspace_epoch_label) <= 1024),
|
|
19
|
+
workspace_epoch_allowed_directory_fingerprints_json TEXT NOT NULL
|
|
20
|
+
CHECK(length(workspace_epoch_allowed_directory_fingerprints_json) <= 65536 AND json_valid(workspace_epoch_allowed_directory_fingerprints_json)),
|
|
21
|
+
status TEXT NOT NULL CHECK(status IN ('new', 'clean', 'active_structured', 'active_native', 'externally_advanced', 'needs_reconciliation', 'portable_only', 'invalidated', 'error')),
|
|
22
|
+
encrypted_continuation TEXT CHECK(encrypted_continuation IS NULL OR length(encrypted_continuation) <= 8388608),
|
|
23
|
+
continuation_hash TEXT CHECK(continuation_hash IS NULL OR length(continuation_hash) <= 128),
|
|
24
|
+
revision INTEGER NOT NULL DEFAULT 0 CHECK(revision >= 0),
|
|
25
|
+
is_active INTEGER NOT NULL DEFAULT 0 CHECK(is_active IN (0, 1)),
|
|
26
|
+
capabilities_json TEXT CHECK(capabilities_json IS NULL OR (length(capabilities_json) <= 262144 AND json_valid(capabilities_json))),
|
|
27
|
+
last_request_id TEXT CHECK(last_request_id IS NULL OR length(last_request_id) <= 240),
|
|
28
|
+
last_used_at TEXT CHECK(last_used_at IS NULL OR length(last_used_at) <= 64),
|
|
29
|
+
last_structured_commit_id TEXT CHECK(last_structured_commit_id IS NULL OR length(last_structured_commit_id) <= 240),
|
|
30
|
+
last_handoff_capsule_id TEXT CHECK(last_handoff_capsule_id IS NULL OR length(last_handoff_capsule_id) <= 240),
|
|
31
|
+
redacted_native_session_hash TEXT CHECK(redacted_native_session_hash IS NULL OR length(redacted_native_session_hash) <= 128),
|
|
32
|
+
invalidation_reason TEXT CHECK(invalidation_reason IS NULL OR length(invalidation_reason) <= 2048),
|
|
33
|
+
created_at TEXT NOT NULL CHECK(length(created_at) <= 64),
|
|
34
|
+
updated_at TEXT NOT NULL CHECK(length(updated_at) <= 64)
|
|
35
|
+
) STRICT;
|
|
36
|
+
CREATE INDEX IF NOT EXISTS idx_provider_lanes_conversation ON provider_lanes(conversation_id);
|
|
37
|
+
CREATE INDEX IF NOT EXISTS idx_provider_lanes_runtime ON provider_lanes(runtime_provider_id);
|
|
38
|
+
CREATE INDEX IF NOT EXISTS idx_provider_lanes_status ON provider_lanes(status);
|
|
39
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_provider_lanes_one_active
|
|
40
|
+
ON provider_lanes(conversation_id) WHERE is_active = 1;
|
|
41
|
+
|
|
42
|
+
CREATE TABLE IF NOT EXISTS provider_writer_leases (
|
|
43
|
+
lease_id TEXT PRIMARY KEY NOT NULL CHECK(length(lease_id) BETWEEN 1 AND 240),
|
|
44
|
+
schema_version INTEGER NOT NULL DEFAULT 1 CHECK(schema_version = 1),
|
|
45
|
+
lane_id TEXT NOT NULL REFERENCES provider_lanes(lane_id) ON DELETE CASCADE,
|
|
46
|
+
lane_revision INTEGER NOT NULL CHECK(lane_revision >= 0),
|
|
47
|
+
lease_revision INTEGER NOT NULL CHECK(lease_revision >= 1),
|
|
48
|
+
conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
49
|
+
host_instance_id TEXT NOT NULL CHECK(length(host_instance_id) BETWEEN 1 AND 240),
|
|
50
|
+
runtime_provider_id TEXT NOT NULL CHECK(length(runtime_provider_id) BETWEEN 1 AND 240),
|
|
51
|
+
native_provider_id TEXT CHECK(native_provider_id IS NULL OR length(native_provider_id) <= 240),
|
|
52
|
+
native_session_hash TEXT CHECK(native_session_hash IS NULL OR length(native_session_hash) <= 128),
|
|
53
|
+
owner_surface TEXT NOT NULL CHECK(length(owner_surface) BETWEEN 1 AND 120),
|
|
54
|
+
owner_pid INTEGER NOT NULL CHECK(owner_pid > 0),
|
|
55
|
+
owner_process_start_time TEXT NOT NULL CHECK(length(owner_process_start_time) BETWEEN 1 AND 128),
|
|
56
|
+
owner_process_identity TEXT NOT NULL CHECK(length(owner_process_identity) BETWEEN 1 AND 512),
|
|
57
|
+
state TEXT NOT NULL CHECK(state IN ('active', 'releasing', 'released', 'stale', 'unknown')),
|
|
58
|
+
acquired_at TEXT NOT NULL CHECK(length(acquired_at) <= 64),
|
|
59
|
+
expires_at TEXT NOT NULL CHECK(length(expires_at) <= 64),
|
|
60
|
+
renewed_at TEXT CHECK(renewed_at IS NULL OR length(renewed_at) <= 64),
|
|
61
|
+
last_heartbeat_at TEXT NOT NULL CHECK(length(last_heartbeat_at) <= 64),
|
|
62
|
+
workspace_epoch_id TEXT NOT NULL CHECK(length(workspace_epoch_id) BETWEEN 1 AND 240),
|
|
63
|
+
authority_snapshot_hash TEXT NOT NULL CHECK(length(authority_snapshot_hash) BETWEEN 1 AND 512),
|
|
64
|
+
created_at TEXT NOT NULL CHECK(length(created_at) <= 64),
|
|
65
|
+
updated_at TEXT NOT NULL CHECK(length(updated_at) <= 64)
|
|
66
|
+
) STRICT;
|
|
67
|
+
CREATE INDEX IF NOT EXISTS idx_provider_writer_leases_lane ON provider_writer_leases(lane_id);
|
|
68
|
+
CREATE INDEX IF NOT EXISTS idx_provider_writer_leases_expiry ON provider_writer_leases(expires_at);
|
|
69
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_provider_writer_leases_one_conflicting
|
|
70
|
+
ON provider_writer_leases(lane_id) WHERE state IN ('active', 'releasing', 'unknown');
|
|
71
|
+
|
|
72
|
+
CREATE TABLE IF NOT EXISTS provider_transition_outbox (
|
|
73
|
+
outbox_id TEXT PRIMARY KEY NOT NULL CHECK(length(outbox_id) BETWEEN 1 AND 240),
|
|
74
|
+
schema_version INTEGER NOT NULL DEFAULT 1 CHECK(schema_version = 1),
|
|
75
|
+
conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
76
|
+
lane_id TEXT NOT NULL REFERENCES provider_lanes(lane_id) ON DELETE CASCADE,
|
|
77
|
+
lane_revision INTEGER NOT NULL CHECK(lane_revision >= 0),
|
|
78
|
+
transition_type TEXT NOT NULL CHECK(length(transition_type) BETWEEN 1 AND 120),
|
|
79
|
+
event_id TEXT NOT NULL CHECK(length(event_id) BETWEEN 1 AND 240),
|
|
80
|
+
idempotency_key TEXT NOT NULL UNIQUE CHECK(length(idempotency_key) BETWEEN 1 AND 240),
|
|
81
|
+
payload_json TEXT NOT NULL CHECK(length(payload_json) <= 1048576 AND json_valid(payload_json)),
|
|
82
|
+
payload_hash TEXT NOT NULL CHECK(length(payload_hash) BETWEEN 1 AND 128),
|
|
83
|
+
status TEXT NOT NULL CHECK(status IN ('pending', 'delivered', 'failed', 'abandoned')),
|
|
84
|
+
retry_count INTEGER NOT NULL DEFAULT 0 CHECK(retry_count >= 0),
|
|
85
|
+
last_attempt_at TEXT CHECK(last_attempt_at IS NULL OR length(last_attempt_at) <= 64),
|
|
86
|
+
error TEXT CHECK(error IS NULL OR length(error) <= 2048),
|
|
87
|
+
created_at TEXT NOT NULL CHECK(length(created_at) <= 64),
|
|
88
|
+
delivered_at TEXT CHECK(delivered_at IS NULL OR length(delivered_at) <= 64),
|
|
89
|
+
updated_at TEXT NOT NULL CHECK(length(updated_at) <= 64)
|
|
90
|
+
) STRICT;
|
|
91
|
+
CREATE INDEX IF NOT EXISTS idx_provider_transition_outbox_pending
|
|
92
|
+
ON provider_transition_outbox(status, created_at);
|
|
93
|
+
|
|
94
|
+
CREATE TABLE IF NOT EXISTS idempotency_receipts (
|
|
95
|
+
idempotency_key TEXT PRIMARY KEY NOT NULL CHECK(length(idempotency_key) BETWEEN 1 AND 240),
|
|
96
|
+
scope TEXT NOT NULL CHECK(length(scope) BETWEEN 1 AND 120),
|
|
97
|
+
request_id TEXT NOT NULL CHECK(length(request_id) BETWEEN 1 AND 240),
|
|
98
|
+
request_hash TEXT NOT NULL CHECK(length(request_hash) BETWEEN 1 AND 128),
|
|
99
|
+
lane_id TEXT CHECK(lane_id IS NULL OR length(lane_id) <= 240),
|
|
100
|
+
conversation_id TEXT CHECK(conversation_id IS NULL OR length(conversation_id) <= 240),
|
|
101
|
+
response_json TEXT NOT NULL CHECK(length(response_json) <= 1048576 AND json_valid(response_json)),
|
|
102
|
+
response_hash TEXT NOT NULL CHECK(length(response_hash) BETWEEN 1 AND 128),
|
|
103
|
+
created_at TEXT NOT NULL CHECK(length(created_at) <= 64),
|
|
104
|
+
expires_at TEXT CHECK(expires_at IS NULL OR length(expires_at) <= 64)
|
|
105
|
+
) STRICT;
|
|
106
|
+
CREATE INDEX IF NOT EXISTS idx_idempotency_receipts_scope_request
|
|
107
|
+
ON idempotency_receipts(scope, request_id);
|
|
108
|
+
`;
|
|
109
|
+
export const PROVIDER_LANE_TABLES = [
|
|
110
|
+
'provider_lanes',
|
|
111
|
+
'provider_writer_leases',
|
|
112
|
+
'provider_transition_outbox',
|
|
113
|
+
'idempotency_receipts',
|
|
114
|
+
];
|
|
115
|
+
export function applyProviderLaneSchema(database) {
|
|
116
|
+
database.exec(PROVIDER_LANE_SCHEMA_DDL);
|
|
117
|
+
}
|
|
118
|
+
export function validateProviderLaneSchema(database) {
|
|
119
|
+
for (const table of PROVIDER_LANE_TABLES) {
|
|
120
|
+
const row = database.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(table);
|
|
121
|
+
if (!isRecord(row) || row.name !== table) {
|
|
122
|
+
throw new Error(`Agent state database is missing table ${table}.`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function isRecord(value) {
|
|
127
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=providerLaneSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerLaneSchema.js","sourceRoot":"","sources":["../../src/state/providerLaneSchema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAA;AAS3C,+DAA+D;AAC/D,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyGvC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,gBAAgB;IAChB,wBAAwB;IACxB,4BAA4B;IAC5B,sBAAsB;CACd,CAAA;AAEV,MAAM,UAAU,uBAAuB,CAAC,QAA8B;IACpE,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAA8B;IACvE,KAAK,MAAM,KAAK,IAAI,oBAAoB,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAC1B,kEAAkE,CACnE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,GAAG,CAAC,CAAA;QACpE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { AgentCockpitErrorCode, ProviderLaneProjectionV1, ProviderLaneStatus, ProviderLaneWorkspaceEpochProjection, ProviderSessionCapabilities } from '@xenosystem/agent-interface-contract';
|
|
2
|
+
export interface ProviderLaneWorkspaceEpochV1 extends ProviderLaneWorkspaceEpochProjection {
|
|
3
|
+
allowedDirectoryFingerprints: string[];
|
|
4
|
+
}
|
|
5
|
+
/** Host-private lane state. Continuation is encrypted before it reaches SQLite. */
|
|
6
|
+
export interface ProviderLaneRecordV1 {
|
|
7
|
+
schemaVersion: 1;
|
|
8
|
+
laneId: string;
|
|
9
|
+
conversationId: string;
|
|
10
|
+
runtimeProviderId: string;
|
|
11
|
+
providerKind: string;
|
|
12
|
+
providerDisplayName?: string;
|
|
13
|
+
nativeProviderId?: string;
|
|
14
|
+
modelId?: string;
|
|
15
|
+
modelDisplayName?: string;
|
|
16
|
+
resumeCompatibilityKey: string;
|
|
17
|
+
workspaceEpoch: ProviderLaneWorkspaceEpochV1;
|
|
18
|
+
status: ProviderLaneStatus;
|
|
19
|
+
revision: number;
|
|
20
|
+
isActive: boolean;
|
|
21
|
+
capabilities?: ProviderSessionCapabilities;
|
|
22
|
+
continuation?: unknown;
|
|
23
|
+
continuationHash?: string;
|
|
24
|
+
lastRequestId?: string;
|
|
25
|
+
lastUsedAt?: string;
|
|
26
|
+
lastStructuredCommitId?: string;
|
|
27
|
+
lastHandoffCapsuleId?: string;
|
|
28
|
+
redactedNativeSessionHash?: string;
|
|
29
|
+
invalidationReason?: string;
|
|
30
|
+
createdAt: string;
|
|
31
|
+
updatedAt: string;
|
|
32
|
+
}
|
|
33
|
+
export type WriterLeaseState = 'active' | 'releasing' | 'released' | 'stale' | 'unknown';
|
|
34
|
+
export interface ProviderWriterLeaseRecordV1 {
|
|
35
|
+
schemaVersion: 1;
|
|
36
|
+
leaseId: string;
|
|
37
|
+
laneId: string;
|
|
38
|
+
laneRevision: number;
|
|
39
|
+
leaseRevision: number;
|
|
40
|
+
conversationId: string;
|
|
41
|
+
hostInstanceId: string;
|
|
42
|
+
runtimeProviderId: string;
|
|
43
|
+
nativeProviderId?: string;
|
|
44
|
+
nativeSessionHash?: string;
|
|
45
|
+
ownerSurface: string;
|
|
46
|
+
ownerPid: number;
|
|
47
|
+
ownerProcessStartTime: string;
|
|
48
|
+
ownerProcessIdentity: string;
|
|
49
|
+
state: WriterLeaseState;
|
|
50
|
+
acquiredAt: string;
|
|
51
|
+
expiresAt: string;
|
|
52
|
+
renewedAt?: string;
|
|
53
|
+
lastHeartbeatAt: string;
|
|
54
|
+
workspaceEpochId: string;
|
|
55
|
+
authoritySnapshotHash: string;
|
|
56
|
+
createdAt: string;
|
|
57
|
+
updatedAt: string;
|
|
58
|
+
}
|
|
59
|
+
export interface ProviderTransitionOutboxDraft {
|
|
60
|
+
outboxId: string;
|
|
61
|
+
conversationId: string;
|
|
62
|
+
laneId: string;
|
|
63
|
+
laneRevision: number;
|
|
64
|
+
transitionType: string;
|
|
65
|
+
eventId: string;
|
|
66
|
+
idempotencyKey: string;
|
|
67
|
+
payload: Record<string, unknown>;
|
|
68
|
+
}
|
|
69
|
+
export interface ProviderTransitionOutboxRecord extends ProviderTransitionOutboxDraft {
|
|
70
|
+
schemaVersion: 1;
|
|
71
|
+
payloadHash: string;
|
|
72
|
+
status: 'pending' | 'delivered' | 'failed' | 'abandoned';
|
|
73
|
+
retryCount: number;
|
|
74
|
+
lastAttemptAt?: string;
|
|
75
|
+
error?: string;
|
|
76
|
+
createdAt: string;
|
|
77
|
+
deliveredAt?: string;
|
|
78
|
+
updatedAt: string;
|
|
79
|
+
}
|
|
80
|
+
export interface IdempotencyReceiptDraft {
|
|
81
|
+
idempotencyKey: string;
|
|
82
|
+
scope: string;
|
|
83
|
+
requestId: string;
|
|
84
|
+
/** Hash of canonical request input, never of the response. */
|
|
85
|
+
requestHash: string;
|
|
86
|
+
laneId?: string;
|
|
87
|
+
conversationId?: string;
|
|
88
|
+
response: Record<string, unknown>;
|
|
89
|
+
expiresAt?: string;
|
|
90
|
+
}
|
|
91
|
+
export interface IdempotencyReceiptRecord extends IdempotencyReceiptDraft {
|
|
92
|
+
responseHash: string;
|
|
93
|
+
createdAt: string;
|
|
94
|
+
}
|
|
95
|
+
export interface LaneTransitionCommitInput {
|
|
96
|
+
lane?: ProviderLaneRecordV1;
|
|
97
|
+
/** Required whenever lane is present. Use 0 to create. */
|
|
98
|
+
expectedRevision?: number;
|
|
99
|
+
outbox?: ProviderTransitionOutboxDraft | ProviderTransitionOutboxDraft[];
|
|
100
|
+
idempotency?: IdempotencyReceiptDraft;
|
|
101
|
+
lease?: ProviderWriterLeaseRecordV1;
|
|
102
|
+
}
|
|
103
|
+
export interface LaneMutationResult {
|
|
104
|
+
success: boolean;
|
|
105
|
+
code?: AgentCockpitErrorCode;
|
|
106
|
+
error?: string;
|
|
107
|
+
lane?: ProviderLaneRecordV1;
|
|
108
|
+
projection?: ProviderLaneProjectionV1;
|
|
109
|
+
}
|
|
110
|
+
export interface LaneTransitionCommitResult extends LaneMutationResult {
|
|
111
|
+
replayed?: boolean;
|
|
112
|
+
/** Exact bounded response stored for the original request. */
|
|
113
|
+
response?: Record<string, unknown>;
|
|
114
|
+
outboxIds?: string[];
|
|
115
|
+
}
|
|
116
|
+
export interface ProviderStateCipher {
|
|
117
|
+
readonly available: boolean;
|
|
118
|
+
encrypt(plaintext: string): string;
|
|
119
|
+
decrypt(ciphertext: string): string;
|
|
120
|
+
}
|
|
121
|
+
export declare function toProviderLaneProjection(lane: ProviderLaneRecordV1): ProviderLaneProjectionV1;
|
|
122
|
+
//# sourceMappingURL=providerLaneTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerLaneTypes.d.ts","sourceRoot":"","sources":["../../src/state/providerLaneTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function toProviderLaneProjection(lane) {
|
|
2
|
+
return {
|
|
3
|
+
schemaVersion: 1,
|
|
4
|
+
laneId: lane.laneId,
|
|
5
|
+
conversationId: lane.conversationId,
|
|
6
|
+
runtimeProviderId: lane.runtimeProviderId,
|
|
7
|
+
providerKind: lane.providerKind,
|
|
8
|
+
...(lane.providerDisplayName ? { providerDisplayName: lane.providerDisplayName } : {}),
|
|
9
|
+
...(lane.modelId ? { modelId: lane.modelId } : {}),
|
|
10
|
+
...(lane.modelDisplayName ? { modelDisplayName: lane.modelDisplayName } : {}),
|
|
11
|
+
resumeCompatibilityKey: lane.resumeCompatibilityKey,
|
|
12
|
+
workspaceEpoch: {
|
|
13
|
+
id: lane.workspaceEpoch.id,
|
|
14
|
+
fingerprint: lane.workspaceEpoch.fingerprint,
|
|
15
|
+
wireMode: lane.workspaceEpoch.wireMode,
|
|
16
|
+
kind: lane.workspaceEpoch.kind,
|
|
17
|
+
...(lane.workspaceEpoch.label ? { label: lane.workspaceEpoch.label } : {}),
|
|
18
|
+
},
|
|
19
|
+
status: lane.status,
|
|
20
|
+
revision: lane.revision,
|
|
21
|
+
...(lane.capabilities ? { capabilities: lane.capabilities } : {}),
|
|
22
|
+
...(lane.lastUsedAt ? { lastUsedAt: lane.lastUsedAt } : {}),
|
|
23
|
+
...(lane.lastRequestId ? { lastRequestId: lane.lastRequestId } : {}),
|
|
24
|
+
...(lane.redactedNativeSessionHash ? { redactedNativeSessionHash: lane.redactedNativeSessionHash } : {}),
|
|
25
|
+
...(lane.invalidationReason ? { invalidationReason: lane.invalidationReason } : {}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=providerLaneTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerLaneTypes.js","sourceRoot":"","sources":["../../src/state/providerLaneTypes.ts"],"names":[],"mappings":"AA2IA,MAAM,UAAU,wBAAwB,CAAC,IAA0B;IACjE,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;QACnD,cAAc,EAAE;YACd,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE;YAC1B,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW;YAC5C,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ;YACtC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;YAC9B,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E;QACD,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { LocalAgentHostPaths } from '../localHostPaths.js';
|
|
2
|
+
import type { ProviderStateCipher } from './providerLaneTypes.js';
|
|
3
|
+
interface SdkProtectedStateStore {
|
|
4
|
+
readonly available: boolean;
|
|
5
|
+
}
|
|
6
|
+
interface SdkProtectedStateEnvelopeCipher {
|
|
7
|
+
readonly available: boolean;
|
|
8
|
+
protect(plaintext: string): string;
|
|
9
|
+
unprotect(ciphertext: string): string;
|
|
10
|
+
}
|
|
11
|
+
interface SdkProtectedStateApi {
|
|
12
|
+
createOsProtectedStateStore?(options?: {
|
|
13
|
+
serviceName?: string;
|
|
14
|
+
configDir?: string;
|
|
15
|
+
storageDir?: string;
|
|
16
|
+
}): SdkProtectedStateStore;
|
|
17
|
+
createProtectedStateEnvelopeCipher?(options?: {
|
|
18
|
+
store?: SdkProtectedStateStore;
|
|
19
|
+
keyName?: string;
|
|
20
|
+
}): SdkProtectedStateEnvelopeCipher;
|
|
21
|
+
}
|
|
22
|
+
export type LoadSdkProtectedStateApi = () => Promise<SdkProtectedStateApi>;
|
|
23
|
+
/**
|
|
24
|
+
* Adapts the canonical SDK protected-state implementation to provider-lane
|
|
25
|
+
* storage. Missing or unavailable platform protection deliberately fails
|
|
26
|
+
* closed; the host never falls back to plaintext continuation state.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createSdkProviderStateCipher(paths: LocalAgentHostPaths, loadSdk?: LoadSdkProtectedStateApi): Promise<ProviderStateCipher>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=sdkProtectedStateCipher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdkProtectedStateCipher.d.ts","sourceRoot":"","sources":["../../src/state/sdkProtectedStateCipher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAKjE,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED,UAAU,+BAA+B;IACvC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAA;IAClC,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;CACtC;AAED,UAAU,oBAAoB;IAC5B,2BAA2B,CAAC,CAAC,OAAO,CAAC,EAAE;QACrC,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,GAAG,sBAAsB,CAAA;IAC1B,kCAAkC,CAAC,CAAC,OAAO,CAAC,EAAE;QAC5C,KAAK,CAAC,EAAE,sBAAsB,CAAA;QAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,GAAG,+BAA+B,CAAA;CACpC;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAA;AAE1E;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE,wBAA2C,GACnD,OAAO,CAAC,mBAAmB,CAAC,CAwB9B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
const PROVIDER_STATE_SERVICE = 'ai.xenostudio.xeno-agent.provider-lanes';
|
|
3
|
+
const PROVIDER_STATE_KEY = 'xeno.provider-lanes.encryption-key.v1';
|
|
4
|
+
/**
|
|
5
|
+
* Adapts the canonical SDK protected-state implementation to provider-lane
|
|
6
|
+
* storage. Missing or unavailable platform protection deliberately fails
|
|
7
|
+
* closed; the host never falls back to plaintext continuation state.
|
|
8
|
+
*/
|
|
9
|
+
export async function createSdkProviderStateCipher(paths, loadSdk = loadInstalledSdk) {
|
|
10
|
+
try {
|
|
11
|
+
const sdk = await loadSdk();
|
|
12
|
+
if (!sdk.createOsProtectedStateStore || !sdk.createProtectedStateEnvelopeCipher) {
|
|
13
|
+
return unavailableCipher();
|
|
14
|
+
}
|
|
15
|
+
const store = sdk.createOsProtectedStateStore({
|
|
16
|
+
serviceName: PROVIDER_STATE_SERVICE,
|
|
17
|
+
configDir: paths.stateRepositoryRoot,
|
|
18
|
+
storageDir: join(paths.stateRepositoryRoot, 'secure', 'provider-state'),
|
|
19
|
+
});
|
|
20
|
+
const cipher = sdk.createProtectedStateEnvelopeCipher({
|
|
21
|
+
store,
|
|
22
|
+
keyName: PROVIDER_STATE_KEY,
|
|
23
|
+
});
|
|
24
|
+
if (!store.available || !cipher.available)
|
|
25
|
+
return unavailableCipher();
|
|
26
|
+
return {
|
|
27
|
+
available: true,
|
|
28
|
+
encrypt: (plaintext) => cipher.protect(plaintext),
|
|
29
|
+
decrypt: (ciphertext) => cipher.unprotect(ciphertext),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return unavailableCipher();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function loadInstalledSdk() {
|
|
37
|
+
return import('@xenosystem/agent-sdk');
|
|
38
|
+
}
|
|
39
|
+
function unavailableCipher() {
|
|
40
|
+
return {
|
|
41
|
+
available: false,
|
|
42
|
+
encrypt: () => {
|
|
43
|
+
throw new Error('SDK protected provider state is unavailable.');
|
|
44
|
+
},
|
|
45
|
+
decrypt: () => {
|
|
46
|
+
throw new Error('SDK protected provider state is unavailable.');
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=sdkProtectedStateCipher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdkProtectedStateCipher.js","sourceRoot":"","sources":["../../src/state/sdkProtectedStateCipher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIhC,MAAM,sBAAsB,GAAG,yCAAyC,CAAA;AACxE,MAAM,kBAAkB,GAAG,uCAAuC,CAAA;AA0BlE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,KAA0B,EAC1B,UAAoC,gBAAgB;IAEpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAA;QAC3B,IAAI,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC;YAChF,OAAO,iBAAiB,EAAE,CAAA;QAC5B,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,2BAA2B,CAAC;YAC5C,WAAW,EAAE,sBAAsB;YACnC,SAAS,EAAE,KAAK,CAAC,mBAAmB;YACpC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,CAAC;SACxE,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,GAAG,CAAC,kCAAkC,CAAC;YACpD,KAAK;YACL,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO,iBAAiB,EAAE,CAAA;QACrE,OAAO;YACL,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;YACjD,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC;SACtD,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,iBAAiB,EAAE,CAAA;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,OAAO,MAAM,CAAC,uBAAuB,CAAkC,CAAA;AACzE,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACjE,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACjE,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import { type CommandExecutionPort } from '../isolation/CommandExecution.js';
|
|
2
2
|
import type { CommandStreamPort } from '../isolation/CommandStream.js';
|
|
3
|
-
import type { AgentHostEventType, AgentHostClientIdentity, AgentWorkspaceAccessContext, AgentWorkspaceCommandRunRequest, AgentWorkspaceCommandRunResult, AgentWorkspaceDirectoryListRequest, AgentWorkspaceDirectoryListResult, AgentWorkspaceFileReadRequest, AgentWorkspaceFileReadResult, AgentWorkspaceFileWriteRequest, AgentWorkspaceFileWriteResult, AgentWorkspaceGrantRequest, AgentWorkspaceGrantResult, AgentWorkspacePtyInputRequest, AgentWorkspacePtyResizeRequest, AgentWorkspacePtySnapshotRequest, AgentWorkspacePtySnapshotResult, AgentWorkspacePtyStartRequest, AgentWorkspacePtyStartResult, AgentWorkspaceTerminalControlRequest, AgentWorkspaceTerminalControlResult, AgentWorkspaceTerminalStartRequest, AgentWorkspaceTerminalStartResult } from '@xenosystem/agent-interface-contract';
|
|
3
|
+
import type { AgentCockpitErrorCode, AgentHostEventType, AgentHostClientIdentity, AgentWorkspaceAccessContext, AgentWorkspaceCommandRunRequest, AgentWorkspaceCommandRunResult, AgentWorkspaceDirectoryListRequest, AgentWorkspaceDirectoryListResult, AgentWorkspaceFileReadRequest, AgentWorkspaceFileReadResult, AgentWorkspaceFileWriteRequest, AgentWorkspaceFileWriteResult, AgentWorkspaceGrantRequest, AgentWorkspaceGrantResult, AgentWorkspacePtyInputRequest, AgentWorkspacePtyResizeRequest, AgentWorkspacePtySnapshotRequest, AgentWorkspacePtySnapshotResult, AgentWorkspacePtyStartRequest, AgentWorkspacePtyStartResult, ProviderSessionPtyProfile, AgentWorkspaceTerminalControlRequest, AgentWorkspaceTerminalControlResult, AgentWorkspaceTerminalStartRequest, AgentWorkspaceTerminalStartResult } from '@xenosystem/agent-interface-contract';
|
|
4
4
|
type WorkspaceEventSink = (type: AgentHostEventType, payload: Record<string, unknown>) => void;
|
|
5
5
|
interface PersistedApplicationGrant {
|
|
6
6
|
path: string;
|
|
7
7
|
source: 'user-picker' | 'legacy-migration' | 'host-managed';
|
|
8
8
|
createdAt: number;
|
|
9
9
|
}
|
|
10
|
+
export type ProviderSessionPtyResolver = (profile: ProviderSessionPtyProfile, cwd: string, platform?: NodeJS.Platform) => {
|
|
11
|
+
executable: string;
|
|
12
|
+
args: string[];
|
|
13
|
+
} | {
|
|
14
|
+
error: string;
|
|
15
|
+
code?: AgentCockpitErrorCode;
|
|
16
|
+
} | Promise<{
|
|
17
|
+
executable: string;
|
|
18
|
+
args: string[];
|
|
19
|
+
} | {
|
|
20
|
+
error: string;
|
|
21
|
+
code?: AgentCockpitErrorCode;
|
|
22
|
+
}>;
|
|
10
23
|
export interface WorkspaceHostServiceOptions {
|
|
11
24
|
rootDirectory: string;
|
|
12
25
|
managedConversationRoot?: string;
|
|
@@ -25,6 +38,7 @@ export interface WorkspaceHostServiceOptions {
|
|
|
25
38
|
* sandbox, not anything about the sandbox itself.
|
|
26
39
|
*/
|
|
27
40
|
executionEnvironment?: RunCommandExecutionEnvironment;
|
|
41
|
+
providerSessionPtyResolver?: ProviderSessionPtyResolver | undefined;
|
|
28
42
|
}
|
|
29
43
|
/**
|
|
30
44
|
* The slice of `RunExecutionEnvironment` this service needs.
|
|
@@ -85,6 +99,8 @@ export declare class WorkspaceHostService {
|
|
|
85
99
|
private readonly grantStorePath;
|
|
86
100
|
private readonly applicationGrantStorePath;
|
|
87
101
|
private readonly managedConversationRoot;
|
|
102
|
+
private readonly providerSessionTerminalRoot;
|
|
103
|
+
private readonly providerSessionPtyResolver?;
|
|
88
104
|
private readonly terminalSessions;
|
|
89
105
|
private readonly ptySessions;
|
|
90
106
|
private readonly grants;
|
|
@@ -95,6 +111,11 @@ export declare class WorkspaceHostService {
|
|
|
95
111
|
private readonly executionEnvironment;
|
|
96
112
|
constructor(options: WorkspaceHostServiceOptions);
|
|
97
113
|
setEventSink(sink: WorkspaceEventSink): void;
|
|
114
|
+
/**
|
|
115
|
+
* Creates the neutral, host-owned workspace used by Chat mode. This does not
|
|
116
|
+
* mint a renderer grant: authorization remains scoped to the conversation ID.
|
|
117
|
+
*/
|
|
118
|
+
ensureManagedConversationWorkspace(conversationId: string): string;
|
|
98
119
|
grantDirectory(request: AgentWorkspaceGrantRequest): AgentWorkspaceGrantResult;
|
|
99
120
|
/**
|
|
100
121
|
* The directories the user has explicitly granted, canonicalised.
|
|
@@ -121,6 +142,8 @@ export declare class WorkspaceHostService {
|
|
|
121
142
|
stopTerminal(request: AgentWorkspaceTerminalControlRequest): AgentWorkspaceTerminalControlResult;
|
|
122
143
|
startPty(request: AgentWorkspacePtyStartRequest): Promise<AgentWorkspacePtyStartResult>;
|
|
123
144
|
snapshotPty(request: AgentWorkspacePtySnapshotRequest): AgentWorkspacePtySnapshotResult;
|
|
145
|
+
/** Host-only ownership transfer used when a native provider TUI is reattached by another surface. */
|
|
146
|
+
transferPtyOwnership(terminalId: string, ownerInstanceId: string): boolean;
|
|
124
147
|
inputPty(request: AgentWorkspacePtyInputRequest): AgentWorkspaceTerminalControlResult;
|
|
125
148
|
resizePty(request: AgentWorkspacePtyResizeRequest): AgentWorkspaceTerminalControlResult;
|
|
126
149
|
clearPty(request: AgentWorkspaceTerminalControlRequest): AgentWorkspaceTerminalControlResult;
|
|
@@ -139,6 +162,8 @@ export declare class WorkspaceHostService {
|
|
|
139
162
|
private authorizePath;
|
|
140
163
|
private authorizeSession;
|
|
141
164
|
private effectiveAllowedRoots;
|
|
165
|
+
/** Resolve the same cwd contract for the PTY, streaming, and one-shot terminal surfaces. */
|
|
166
|
+
private resolveExecutionCwd;
|
|
142
167
|
private resolveManagedConversationRoot;
|
|
143
168
|
private cleanupTerminal;
|
|
144
169
|
private loadNodePty;
|
|
@@ -147,5 +172,12 @@ export declare class WorkspaceHostService {
|
|
|
147
172
|
private persistGrants;
|
|
148
173
|
private persistApplicationGrants;
|
|
149
174
|
}
|
|
175
|
+
export declare function resolveProviderSessionPtyLaunch(profile: AgentWorkspacePtyStartRequest['profile'], _cwd: string, _platform?: NodeJS.Platform): {
|
|
176
|
+
executable: string;
|
|
177
|
+
args: string[];
|
|
178
|
+
} | {
|
|
179
|
+
error: string;
|
|
180
|
+
code: AgentCockpitErrorCode;
|
|
181
|
+
};
|
|
150
182
|
export {};
|
|
151
183
|
//# sourceMappingURL=WorkspaceHostService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceHostService.d.ts","sourceRoot":"","sources":["../../src/workspace/WorkspaceHostService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WorkspaceHostService.d.ts","sourceRoot":"","sources":["../../src/workspace/WorkspaceHostService.ts"],"names":[],"mappings":"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"}
|