@agent-deck/backend 1.10.5 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/data/oauth-provider-guides.js +1 -1
- package/dist/data/oauth-provider-guides.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +27 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-session-binding.d.ts +18 -0
- package/dist/mcp-session-binding.d.ts.map +1 -1
- package/dist/mcp-session-binding.js +25 -0
- package/dist/mcp-session-binding.js.map +1 -1
- package/dist/mcp-tools/elicitation.d.ts +129 -0
- package/dist/mcp-tools/elicitation.d.ts.map +1 -0
- package/dist/mcp-tools/elicitation.js +231 -0
- package/dist/mcp-tools/elicitation.js.map +1 -0
- package/dist/mcp-tools/policy.d.ts.map +1 -1
- package/dist/mcp-tools/policy.js +2 -0
- package/dist/mcp-tools/policy.js.map +1 -1
- package/dist/mcp-tools/register.d.ts +14 -0
- package/dist/mcp-tools/register.d.ts.map +1 -1
- package/dist/mcp-tools/register.js +109 -129
- package/dist/mcp-tools/register.js.map +1 -1
- package/dist/playbooks/stub-sync.d.ts +55 -12
- package/dist/playbooks/stub-sync.d.ts.map +1 -1
- package/dist/playbooks/stub-sync.js +136 -197
- package/dist/playbooks/stub-sync.js.map +1 -1
- package/dist/routes/trusted-session.d.ts.map +1 -1
- package/dist/routes/trusted-session.js +241 -6
- package/dist/routes/trusted-session.js.map +1 -1
- package/dist/trusted-session/route-policy-registry.d.ts.map +1 -1
- package/dist/trusted-session/route-policy-registry.js +22 -0
- package/dist/trusted-session/route-policy-registry.js.map +1 -1
- package/dist/trusted-session/store.d.ts +174 -2
- package/dist/trusted-session/store.d.ts.map +1 -1
- package/dist/trusted-session/store.js +459 -2
- package/dist/trusted-session/store.js.map +1 -1
- package/package.json +2 -2
- package/static-ui/assets/{index-DKn5XqhM.js → index-B86VjIYT.js} +4 -4
- package/static-ui/assets/index-DlL_F4GS.css +1 -0
- package/static-ui/index.html +2 -2
- package/static-ui/assets/index-CbccleVj.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AgentSessionMode, type RuntimeSession } from '@agent-deck/shared';
|
|
1
|
+
import { type AgentSessionMode, type DeckSwitchDecision, type RuntimeSession } from '@agent-deck/shared';
|
|
2
2
|
import type Database from 'better-sqlite3';
|
|
3
3
|
export type RuntimeSessionRow = {
|
|
4
4
|
id: string;
|
|
@@ -23,10 +23,117 @@ export type DashboardSessionRow = {
|
|
|
23
23
|
last_seen_at: string;
|
|
24
24
|
expires_at: string;
|
|
25
25
|
};
|
|
26
|
+
/** Default validity of a deck-switch request (NOT-205). */
|
|
27
|
+
export declare const DECK_SWITCH_REQUEST_TTL_MS: number;
|
|
28
|
+
export type DeckSwitchRequestStatus = 'pending' | 'approved' | 'declined' | 'expired' | 'consumed';
|
|
29
|
+
export type DeckSwitchRequestRow = {
|
|
30
|
+
id: string;
|
|
31
|
+
runtime_session_id: string;
|
|
32
|
+
mcp_session_id: string | null;
|
|
33
|
+
current_deck_id: string;
|
|
34
|
+
requested_deck_id: string;
|
|
35
|
+
workspace_root: string | null;
|
|
36
|
+
status: DeckSwitchRequestStatus;
|
|
37
|
+
created_at: string;
|
|
38
|
+
expires_at: string;
|
|
39
|
+
resolved_at: string | null;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Server-side deck-switch request (NOT-205).
|
|
43
|
+
* The requested deck id and workspace root stay server-side; client-facing
|
|
44
|
+
* readers get {@link DeckSwitchRequestSummary} instead.
|
|
45
|
+
*/
|
|
46
|
+
export type DeckSwitchRequest = {
|
|
47
|
+
requestId: string;
|
|
48
|
+
runtimeSessionId: string;
|
|
49
|
+
mcpSessionId?: string;
|
|
50
|
+
currentDeckId: string;
|
|
51
|
+
requestedDeckId: string;
|
|
52
|
+
workspaceRoot?: string;
|
|
53
|
+
status: DeckSwitchRequestStatus;
|
|
54
|
+
createdAt: string;
|
|
55
|
+
expiresAt: string;
|
|
56
|
+
resolvedAt: string | null;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Display-safe client view of a deck-switch request: opaque request id plus
|
|
60
|
+
* lifecycle fields only. Never carries the requested deck id or workspace
|
|
61
|
+
* root, so a pending/declined request exposes nothing of the target deck.
|
|
62
|
+
*/
|
|
63
|
+
export type DeckSwitchRequestSummary = {
|
|
64
|
+
requestId: string;
|
|
65
|
+
status: DeckSwitchRequestStatus;
|
|
66
|
+
createdAt: string;
|
|
67
|
+
expiresAt: string;
|
|
68
|
+
};
|
|
69
|
+
/** Result of the atomic approval commit (NOT-207). */
|
|
70
|
+
export type DeckSwitchResolutionOutcome = {
|
|
71
|
+
outcome: 'not-found';
|
|
72
|
+
} | {
|
|
73
|
+
outcome: 'unauthorized';
|
|
74
|
+
} | {
|
|
75
|
+
outcome: 'expired';
|
|
76
|
+
request: DeckSwitchRequest;
|
|
77
|
+
} | {
|
|
78
|
+
outcome: 'already-resolved';
|
|
79
|
+
request: DeckSwitchRequest;
|
|
80
|
+
} | {
|
|
81
|
+
outcome: 'declined';
|
|
82
|
+
request: DeckSwitchRequest;
|
|
83
|
+
} | {
|
|
84
|
+
outcome: 'resolved';
|
|
85
|
+
request: DeckSwitchRequest;
|
|
86
|
+
workspaceRoot?: string;
|
|
87
|
+
} | {
|
|
88
|
+
outcome: 'target-missing';
|
|
89
|
+
} | {
|
|
90
|
+
outcome: 'session-invalid';
|
|
91
|
+
} | {
|
|
92
|
+
outcome: 'workspace-required';
|
|
93
|
+
} | {
|
|
94
|
+
outcome: 'assignment-failed';
|
|
95
|
+
error: string;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Workspace-default assignment writer seam (NOT-207).
|
|
99
|
+
*
|
|
100
|
+
* Preferred injection point is {@link TrustedSessionStoreOptions}; the
|
|
101
|
+
* per-call `deps` override on {@link TrustedSessionStore.applyDeckSwitchResolution}
|
|
102
|
+
* is kept for backwards compatibility. Custom writers own their side effects:
|
|
103
|
+
* snapshot/restore compensation below only applies to the default file writer.
|
|
104
|
+
*/
|
|
105
|
+
export type WorkspaceAssignmentWriter = (workspaceRoot: string, deckId: string, nowIso: string) => void;
|
|
106
|
+
export type TrustedSessionStoreOptions = {
|
|
107
|
+
workspaceAssignmentWriter?: WorkspaceAssignmentWriter;
|
|
108
|
+
deckExists?: (deckId: string) => boolean;
|
|
109
|
+
};
|
|
26
110
|
export declare function hashDashboardSessionToken(token: string): string;
|
|
111
|
+
/**
|
|
112
|
+
* NOT-205: project a request to its display-safe client view.
|
|
113
|
+
* Only the opaque request id plus lifecycle fields are exposed; the
|
|
114
|
+
* requested deck id, session identity, and workspace root stay server-side.
|
|
115
|
+
*/
|
|
116
|
+
export declare function toDeckSwitchRequestSummary(request: DeckSwitchRequest): DeckSwitchRequestSummary;
|
|
27
117
|
export declare class TrustedSessionStore {
|
|
28
118
|
private readonly db;
|
|
29
|
-
|
|
119
|
+
private readonly options?;
|
|
120
|
+
constructor(db: Database.Database, options?: TrustedSessionStoreOptions | undefined);
|
|
121
|
+
/**
|
|
122
|
+
* Default workspace-default assignment write (NOT-207): the v3 `use.json`
|
|
123
|
+
* at the request's workspaceRoot. Preserves the existing `mcpUrl`, if any.
|
|
124
|
+
* Never touches `deck_workspaces` — that registry only records which
|
|
125
|
+
* folders receive stub syncs for a deck; the assignment file is the source
|
|
126
|
+
* of truth launchers and the CLI read for the folder's default deck.
|
|
127
|
+
*/
|
|
128
|
+
private writeWorkspaceAssignmentFile;
|
|
129
|
+
/**
|
|
130
|
+
* Approval-path session rebind: move the requesting session to the new deck
|
|
131
|
+
* and renew its lease. Unlike {@link setRuntimeSessionDeck} (agent-initiated,
|
|
132
|
+
* agent-admin-gated), approval acts as the human, so no mode check applies;
|
|
133
|
+
* the session must still be live. Returns false when the row is gone,
|
|
134
|
+
* revoked, or expired.
|
|
135
|
+
*/
|
|
136
|
+
private rebindRuntimeSessionDeck;
|
|
30
137
|
private ensureTables;
|
|
31
138
|
/**
|
|
32
139
|
* NOT-108 PR2: drop grant ledger and rebuild runtime_sessions without
|
|
@@ -70,6 +177,71 @@ export declare class TrustedSessionStore {
|
|
|
70
177
|
expiresAt: string;
|
|
71
178
|
createdAt: string;
|
|
72
179
|
}>;
|
|
180
|
+
/**
|
|
181
|
+
* NOT-205: record a human-decision deck-switch request.
|
|
182
|
+
* Never mutates the runtime session binding — the session keeps serving
|
|
183
|
+
* its current deck while the request is pending (or declined).
|
|
184
|
+
* Duplicate pending requests for the same session and requested target are
|
|
185
|
+
* idempotent: the existing pending request is returned as-is.
|
|
186
|
+
*/
|
|
187
|
+
createDeckSwitchRequest(input: {
|
|
188
|
+
runtimeSessionId: string;
|
|
189
|
+
mcpSessionId?: string;
|
|
190
|
+
currentDeckId: string;
|
|
191
|
+
requestedDeckId: string;
|
|
192
|
+
workspaceRoot?: string;
|
|
193
|
+
ttlMs?: number;
|
|
194
|
+
}): DeckSwitchRequest;
|
|
195
|
+
private getDeckSwitchRequestRow;
|
|
196
|
+
/**
|
|
197
|
+
* Read a request, lazily marking it expired when its TTL has passed.
|
|
198
|
+
* An expired request is returned with status `expired` and can never be
|
|
199
|
+
* approved afterwards.
|
|
200
|
+
*/
|
|
201
|
+
getDeckSwitchRequest(requestId: string): DeckSwitchRequest | null;
|
|
202
|
+
/** Client-safe view: opaque id plus lifecycle fields, no target deck data. */
|
|
203
|
+
getDeckSwitchRequestSummary(requestId: string): DeckSwitchRequestSummary | null;
|
|
204
|
+
listPendingDeckSwitchRequests(runtimeSessionId?: string): DeckSwitchRequest[];
|
|
205
|
+
/**
|
|
206
|
+
* Compare-and-set status transition. Returns the updated request on success,
|
|
207
|
+
* or null when the request is missing, the current status differs from
|
|
208
|
+
* `expectedStatus`, the transition is illegal, or an expired pending request
|
|
209
|
+
* is resolved to anything but `expired`. Exactly one concurrent resolver
|
|
210
|
+
* wins because the UPDATE is conditional on the expected status.
|
|
211
|
+
*/
|
|
212
|
+
transitionDeckSwitchRequestStatus(requestId: string, expectedStatus: DeckSwitchRequestStatus, nextStatus: DeckSwitchRequestStatus): DeckSwitchRequest | null;
|
|
213
|
+
/**
|
|
214
|
+
* NOT-207: approval commit for a deck-switch request.
|
|
215
|
+
*
|
|
216
|
+
* The only commit point for changing a deck binding from a request.
|
|
217
|
+
*
|
|
218
|
+
* Ordering is rollback-safe because a file write cannot join the SQLite
|
|
219
|
+
* transaction: for `workspace-default` the v3 `use.json` at the request's
|
|
220
|
+
* workspaceRoot is written *before* the database transaction runs. A failed
|
|
221
|
+
* write returns `assignment-failed` with zero database mutation, so the
|
|
222
|
+
* session stays on the prior deck. The transaction then atomically covers
|
|
223
|
+
* pending→approved, the requesting session's rebind, and approved→consumed;
|
|
224
|
+
* if it fails after the file was written (only possible when the session
|
|
225
|
+
* row vanishes concurrently), the file is restored from its snapshot and
|
|
226
|
+
* `session-invalid` is returned. Either way the prior binding stays
|
|
227
|
+
* effective and no partial commit is visible.
|
|
228
|
+
*
|
|
229
|
+
* - `session`: rebind requesting session only; workspace default untouched.
|
|
230
|
+
* - `workspace-default`: as `session`, plus replace the workspace-root
|
|
231
|
+
* assignment file (never `deck_workspaces`).
|
|
232
|
+
* - `decline`: pending→declined; bindings untouched.
|
|
233
|
+
*/
|
|
234
|
+
applyDeckSwitchResolution(requestId: string, runtimeSessionId: string, decision: DeckSwitchDecision, deps?: {
|
|
235
|
+
deckExists?: (deckId: string) => boolean;
|
|
236
|
+
writeWorkspaceAssignment?: (workspaceRoot: string, deckId: string, nowIso: string) => void;
|
|
237
|
+
}): DeckSwitchResolutionOutcome;
|
|
238
|
+
/**
|
|
239
|
+
* Sweep pending requests past their TTL to `expired`. Returns the number
|
|
240
|
+
* of requests newly expired.
|
|
241
|
+
*/
|
|
242
|
+
expireDeckSwitchRequests(): number;
|
|
243
|
+
private markDeckSwitchRequestExpired;
|
|
244
|
+
private toDeckSwitchRequest;
|
|
73
245
|
expireStaleSessions(): number;
|
|
74
246
|
private toRuntimeSession;
|
|
75
247
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/trusted-session/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/trusted-session/store.ts"],"names":[],"mappings":"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"}
|