@agent-deck/backend 1.8.1 → 1.8.2
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/lib/agent-deck-context.d.ts +1 -1
- package/dist/lib/agent-deck-context.d.ts.map +1 -1
- package/dist/lib/agent-deck-context.js +4 -17
- package/dist/lib/agent-deck-context.js.map +1 -1
- package/dist/lib/backend-api-error.d.ts.map +1 -1
- package/dist/lib/backend-api-error.js +0 -1
- package/dist/lib/backend-api-error.js.map +1 -1
- package/dist/lib/bound-deck-scope.d.ts.map +1 -1
- package/dist/lib/bound-deck-scope.js +0 -4
- package/dist/lib/bound-deck-scope.js.map +1 -1
- package/dist/lib/http-auth.d.ts +0 -14
- package/dist/lib/http-auth.d.ts.map +1 -1
- package/dist/lib/http-auth.js +0 -25
- package/dist/lib/http-auth.js.map +1 -1
- package/dist/lib/invalid-deck-id-path-segment.d.ts +6 -0
- package/dist/lib/invalid-deck-id-path-segment.d.ts.map +1 -0
- package/dist/lib/invalid-deck-id-path-segment.js +11 -0
- package/dist/lib/invalid-deck-id-path-segment.js.map +1 -0
- package/dist/lib/route-policy.js +2 -2
- package/dist/lib/route-policy.js.map +1 -1
- package/dist/mcp-server.d.ts +6 -13
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +64 -140
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-session-binding.d.ts +7 -15
- package/dist/mcp-session-binding.d.ts.map +1 -1
- package/dist/mcp-session-binding.js +14 -30
- package/dist/mcp-session-binding.js.map +1 -1
- package/dist/mcp-tools/policy.d.ts +0 -3
- package/dist/mcp-tools/policy.d.ts.map +1 -1
- package/dist/mcp-tools/policy.js +6 -43
- package/dist/mcp-tools/policy.js.map +1 -1
- package/dist/mcp-tools/register.d.ts +1 -5
- package/dist/mcp-tools/register.d.ts.map +1 -1
- package/dist/mcp-tools/register.js +100 -104
- package/dist/mcp-tools/register.js.map +1 -1
- package/dist/mcp-tools/test-harness.d.ts +5 -5
- package/dist/mcp-tools/test-harness.d.ts.map +1 -1
- package/dist/mcp-tools/test-harness.js +15 -21
- package/dist/mcp-tools/test-harness.js.map +1 -1
- package/dist/playbooks/stub-sync.d.ts +9 -0
- package/dist/playbooks/stub-sync.d.ts.map +1 -1
- package/dist/playbooks/stub-sync.js +51 -12
- package/dist/playbooks/stub-sync.js.map +1 -1
- package/dist/routes/decks.d.ts.map +1 -1
- package/dist/routes/decks.js +0 -1
- package/dist/routes/decks.js.map +1 -1
- package/dist/routes/execution-authority.d.ts.map +1 -1
- package/dist/routes/execution-authority.js +8 -16
- package/dist/routes/execution-authority.js.map +1 -1
- package/dist/routes/launch.d.ts +8 -0
- package/dist/routes/launch.d.ts.map +1 -0
- package/dist/routes/launch.js +35 -0
- package/dist/routes/launch.js.map +1 -0
- package/dist/routes/scope.d.ts.map +1 -1
- package/dist/routes/scope.js +1 -39
- package/dist/routes/scope.js.map +1 -1
- package/dist/routes/services.d.ts.map +1 -1
- package/dist/routes/services.js +1 -7
- package/dist/routes/services.js.map +1 -1
- package/dist/routes/trusted-session.d.ts.map +1 -1
- package/dist/routes/trusted-session.js +50 -152
- package/dist/routes/trusted-session.js.map +1 -1
- package/dist/scope/live-display-registry.d.ts +0 -2
- package/dist/scope/live-display-registry.d.ts.map +1 -1
- package/dist/scope/live-display-registry.js +0 -1
- package/dist/scope/live-display-registry.js.map +1 -1
- package/dist/server/index.d.ts +0 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -5
- package/dist/server/index.js.map +1 -1
- package/dist/test/auth-fixtures.d.ts +1 -1
- package/dist/test/auth-fixtures.d.ts.map +1 -1
- package/dist/test/auth-fixtures.js +2 -11
- package/dist/test/auth-fixtures.js.map +1 -1
- package/dist/trusted-session/auth.d.ts +1 -7
- package/dist/trusted-session/auth.d.ts.map +1 -1
- package/dist/trusted-session/auth.js +7 -54
- package/dist/trusted-session/auth.js.map +1 -1
- package/dist/trusted-session/policy-hook.d.ts.map +1 -1
- package/dist/trusted-session/policy-hook.js +1 -51
- package/dist/trusted-session/policy-hook.js.map +1 -1
- package/dist/trusted-session/route-policy-registry.d.ts.map +1 -1
- package/dist/trusted-session/route-policy-registry.js +5 -56
- package/dist/trusted-session/route-policy-registry.js.map +1 -1
- package/dist/trusted-session/store.d.ts +12 -45
- package/dist/trusted-session/store.d.ts.map +1 -1
- package/dist/trusted-session/store.js +66 -208
- package/dist/trusted-session/store.js.map +1 -1
- package/package.json +2 -2
- package/static-ui/assets/{index-DhP_UPyM.js → index-Bb9ckehB.js} +1 -1
- package/static-ui/index.html +1 -1
|
@@ -1,34 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TrustedSessionStore = void 0;
|
|
4
|
-
exports.hashGrantSecret = hashGrantSecret;
|
|
5
4
|
exports.hashDashboardSessionToken = hashDashboardSessionToken;
|
|
6
|
-
exports.generateGrantSecret = generateGrantSecret;
|
|
7
|
-
exports.verifyGrantSecret = verifyGrantSecret;
|
|
8
5
|
const node_crypto_1 = require("node:crypto");
|
|
9
6
|
const shared_1 = require("@agent-deck/shared");
|
|
10
|
-
const http_auth_1 = require("../lib/http-auth");
|
|
11
7
|
const DASHBOARD_SESSION_TOUCH_INTERVAL_MS = 60 * 1000;
|
|
12
8
|
function hashSecret(secret) {
|
|
13
9
|
return (0, node_crypto_1.createHash)('sha256').update(secret, 'utf8').digest('hex');
|
|
14
10
|
}
|
|
15
|
-
function hashGrantSecret(secret) {
|
|
16
|
-
return hashSecret(secret);
|
|
17
|
-
}
|
|
18
11
|
function hashDashboardSessionToken(token) {
|
|
19
12
|
return hashSecret(token);
|
|
20
13
|
}
|
|
21
|
-
function generateGrantSecret() {
|
|
22
|
-
return (0, node_crypto_1.randomBytes)(32).toString('base64url');
|
|
23
|
-
}
|
|
24
|
-
function verifyGrantSecret(secret, secretHash) {
|
|
25
|
-
const digest = Buffer.from(hashGrantSecret(secret), 'hex');
|
|
26
|
-
const expected = Buffer.from(secretHash, 'hex');
|
|
27
|
-
if (digest.length !== expected.length) {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
return (0, node_crypto_1.timingSafeEqual)(digest, expected);
|
|
31
|
-
}
|
|
32
14
|
function nowIso() {
|
|
33
15
|
return new Date().toISOString();
|
|
34
16
|
}
|
|
@@ -42,47 +24,25 @@ class TrustedSessionStore {
|
|
|
42
24
|
this.ensureTables();
|
|
43
25
|
}
|
|
44
26
|
ensureTables() {
|
|
27
|
+
this.maybeShedGrantSchema();
|
|
28
|
+
// NOT-107: shed legacy issuer tables (created by the deleted SQLite store).
|
|
29
|
+
this.db.exec(`
|
|
30
|
+
DROP TABLE IF EXISTS ea_audit_events;
|
|
31
|
+
DROP TABLE IF EXISTS ea_authorities;
|
|
32
|
+
DROP TABLE IF EXISTS ea_enrollments;
|
|
33
|
+
`);
|
|
45
34
|
this.db.exec(`
|
|
46
|
-
CREATE TABLE IF NOT EXISTS workspace_keys (
|
|
47
|
-
id TEXT PRIMARY KEY,
|
|
48
|
-
path_digest TEXT NOT NULL UNIQUE,
|
|
49
|
-
created_at TEXT NOT NULL
|
|
50
|
-
);
|
|
51
|
-
|
|
52
|
-
CREATE TABLE IF NOT EXISTS workspace_grants (
|
|
53
|
-
id TEXT PRIMARY KEY,
|
|
54
|
-
workspace_key_id TEXT NOT NULL,
|
|
55
|
-
deck_id TEXT NOT NULL,
|
|
56
|
-
secret_hash TEXT NOT NULL,
|
|
57
|
-
status TEXT NOT NULL CHECK (status IN ('pending', 'active', 'revoked')),
|
|
58
|
-
created_at TEXT NOT NULL,
|
|
59
|
-
activated_at TEXT,
|
|
60
|
-
revoked_at TEXT,
|
|
61
|
-
FOREIGN KEY (workspace_key_id) REFERENCES workspace_keys (id)
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
CREATE UNIQUE INDEX IF NOT EXISTS workspace_grants_one_active
|
|
65
|
-
ON workspace_grants (workspace_key_id)
|
|
66
|
-
WHERE status = 'active';
|
|
67
|
-
|
|
68
35
|
CREATE TABLE IF NOT EXISTS runtime_sessions (
|
|
69
36
|
id TEXT PRIMARY KEY,
|
|
70
37
|
mcp_session_id TEXT,
|
|
71
|
-
workspace_key_id TEXT NOT NULL,
|
|
72
|
-
workspace_grant_id TEXT NOT NULL,
|
|
73
38
|
deck_id TEXT NOT NULL,
|
|
74
39
|
mode TEXT NOT NULL CHECK (mode IN ('normal', 'agent-admin')),
|
|
75
40
|
last_seen_at TEXT NOT NULL,
|
|
76
41
|
expires_at TEXT NOT NULL,
|
|
77
42
|
admin_expires_at TEXT,
|
|
78
|
-
revoked_at TEXT
|
|
79
|
-
FOREIGN KEY (workspace_key_id) REFERENCES workspace_keys (id),
|
|
80
|
-
FOREIGN KEY (workspace_grant_id) REFERENCES workspace_grants (id)
|
|
43
|
+
revoked_at TEXT
|
|
81
44
|
);
|
|
82
45
|
|
|
83
|
-
CREATE INDEX IF NOT EXISTS runtime_sessions_grant_idx
|
|
84
|
-
ON runtime_sessions (workspace_grant_id);
|
|
85
|
-
|
|
86
46
|
CREATE TABLE IF NOT EXISTS admin_challenges (
|
|
87
47
|
id TEXT PRIMARY KEY,
|
|
88
48
|
runtime_session_id TEXT NOT NULL,
|
|
@@ -110,96 +70,37 @@ class TrustedSessionStore {
|
|
|
110
70
|
ON dashboard_sessions (expires_at);
|
|
111
71
|
`);
|
|
112
72
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
73
|
+
/**
|
|
74
|
+
* NOT-108 PR2: drop grant ledger and rebuild runtime_sessions without
|
|
75
|
+
* workspace_key_id / workspace_grant_id (same drop-and-recreate pattern as NOT-105).
|
|
76
|
+
* Literals below are intentional — this is the only place that may still name the
|
|
77
|
+
* legacy tables so upgrades can DROP them.
|
|
78
|
+
*/
|
|
79
|
+
maybeShedGrantSchema() {
|
|
80
|
+
const cols = this.db.pragma('table_info(runtime_sessions)');
|
|
81
|
+
const hasGrantColumn = cols.length > 0 && cols.some((col) => col.name === 'workspace_grant_id' || col.name === 'workspace_key_id');
|
|
82
|
+
const grantsExist = this.db.pragma('table_info(workspace_grants)').length > 0;
|
|
83
|
+
const keysExist = this.db.pragma('table_info(workspace_keys)').length > 0;
|
|
84
|
+
if (!hasGrantColumn && !grantsExist && !keysExist) {
|
|
85
|
+
return;
|
|
119
86
|
}
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
WHERE workspace_key_id = ? AND status = 'active'`)
|
|
137
|
-
.get(workspaceKeyId) ?? null);
|
|
138
|
-
}
|
|
139
|
-
getGrantById(grantId) {
|
|
140
|
-
return (this.db
|
|
141
|
-
.prepare(`SELECT id, workspace_key_id, deck_id, secret_hash, status, created_at, activated_at, revoked_at
|
|
142
|
-
FROM workspace_grants WHERE id = ?`)
|
|
143
|
-
.get(grantId) ?? null);
|
|
144
|
-
}
|
|
145
|
-
findActiveGrantBySecret(secret) {
|
|
146
|
-
const hash = hashGrantSecret((0, http_auth_1.normalizeWorkspaceGrantSecret)(secret));
|
|
147
|
-
return (this.db
|
|
148
|
-
.prepare(`SELECT id, workspace_key_id, deck_id, secret_hash, status, created_at, activated_at, revoked_at
|
|
149
|
-
FROM workspace_grants WHERE secret_hash = ? AND status = 'active'`)
|
|
150
|
-
.get(hash) ?? null);
|
|
151
|
-
}
|
|
152
|
-
createPendingGrant(workspaceKeyId, deckId, secret) {
|
|
153
|
-
const id = (0, shared_1.prefixTrustedId)('wgr', (0, node_crypto_1.randomUUID)());
|
|
154
|
-
const createdAt = nowIso();
|
|
155
|
-
const secretHash = hashGrantSecret(secret);
|
|
156
|
-
this.db
|
|
157
|
-
.prepare(`INSERT INTO workspace_grants
|
|
158
|
-
(id, workspace_key_id, deck_id, secret_hash, status, created_at)
|
|
159
|
-
VALUES (?, ?, ?, ?, 'pending', ?)`)
|
|
160
|
-
.run(id, workspaceKeyId, deckId, secretHash, createdAt);
|
|
161
|
-
return {
|
|
162
|
-
id,
|
|
163
|
-
workspace_key_id: workspaceKeyId,
|
|
164
|
-
deck_id: deckId,
|
|
165
|
-
secret_hash: secretHash,
|
|
166
|
-
status: 'pending',
|
|
167
|
-
created_at: createdAt,
|
|
168
|
-
activated_at: null,
|
|
169
|
-
revoked_at: null,
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
activateGrant(grantId) {
|
|
173
|
-
const grant = this.getGrantById(grantId);
|
|
174
|
-
if (!grant || grant.status !== 'pending') {
|
|
175
|
-
return null;
|
|
87
|
+
const foreignKeysEnabled = Number(this.db.pragma('foreign_keys', { simple: true })) === 1;
|
|
88
|
+
if (foreignKeysEnabled) {
|
|
89
|
+
this.db.pragma('foreign_keys = OFF');
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
this.db.exec(`
|
|
93
|
+
DROP TABLE IF EXISTS admin_challenges;
|
|
94
|
+
DROP TABLE IF EXISTS runtime_sessions;
|
|
95
|
+
DROP TABLE IF EXISTS workspace_grants;
|
|
96
|
+
DROP TABLE IF EXISTS workspace_keys;
|
|
97
|
+
`);
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
if (foreignKeysEnabled) {
|
|
101
|
+
this.db.pragma('foreign_keys = ON');
|
|
102
|
+
}
|
|
176
103
|
}
|
|
177
|
-
const activatedAt = nowIso();
|
|
178
|
-
const revokeActive = this.db.prepare(`UPDATE workspace_grants
|
|
179
|
-
SET status = 'revoked', revoked_at = ?
|
|
180
|
-
WHERE workspace_key_id = ? AND status = 'active'`);
|
|
181
|
-
const activate = this.db.prepare(`UPDATE workspace_grants
|
|
182
|
-
SET status = 'active', activated_at = ?
|
|
183
|
-
WHERE id = ? AND status = 'pending'`);
|
|
184
|
-
const tx = this.db.transaction(() => {
|
|
185
|
-
revokeActive.run(activatedAt, grant.workspace_key_id);
|
|
186
|
-
activate.run(activatedAt, grantId);
|
|
187
|
-
});
|
|
188
|
-
tx();
|
|
189
|
-
return this.getGrantById(grantId);
|
|
190
|
-
}
|
|
191
|
-
revokeGrant(grantId) {
|
|
192
|
-
const revokedAt = nowIso();
|
|
193
|
-
this.db
|
|
194
|
-
.prepare(`UPDATE workspace_grants SET status = 'revoked', revoked_at = ? WHERE id = ? AND status != 'revoked'`)
|
|
195
|
-
.run(revokedAt, grantId);
|
|
196
|
-
this.revokeSessionsForGrant(grantId, revokedAt);
|
|
197
|
-
}
|
|
198
|
-
revokeSessionsForGrant(grantId, revokedAt = nowIso()) {
|
|
199
|
-
const result = this.db
|
|
200
|
-
.prepare(`UPDATE runtime_sessions SET revoked_at = ? WHERE workspace_grant_id = ? AND revoked_at IS NULL`)
|
|
201
|
-
.run(revokedAt, grantId);
|
|
202
|
-
return result.changes;
|
|
203
104
|
}
|
|
204
105
|
createRuntimeSession(input) {
|
|
205
106
|
const id = (0, shared_1.prefixTrustedId)('ses', (0, node_crypto_1.randomUUID)());
|
|
@@ -207,19 +108,18 @@ class TrustedSessionStore {
|
|
|
207
108
|
const expiresAt = addMs(lastSeenAt, shared_1.RUNTIME_SESSION_LEASE_MS);
|
|
208
109
|
this.db
|
|
209
110
|
.prepare(`INSERT INTO runtime_sessions
|
|
210
|
-
(id, mcp_session_id,
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
.run(id, input.mcpSessionId ?? null, input.workspaceKeyId, input.workspaceGrantId, input.deckId, lastSeenAt, expiresAt);
|
|
111
|
+
(id, mcp_session_id, deck_id, mode, last_seen_at, expires_at, admin_expires_at)
|
|
112
|
+
VALUES (?, ?, ?, 'normal', ?, ?, NULL)`)
|
|
113
|
+
.run(id, input.mcpSessionId ?? null, input.deckId, lastSeenAt, expiresAt);
|
|
214
114
|
return this.toRuntimeSession(this.getRuntimeSessionRow(id));
|
|
215
115
|
}
|
|
216
116
|
/**
|
|
217
117
|
* Latest runtime row for an MCP transport id, including expired/revoked.
|
|
218
|
-
* Used to keep transport→
|
|
118
|
+
* Used to keep transport→deck ownership immutable after the active lease ends.
|
|
219
119
|
*/
|
|
220
120
|
findLatestRuntimeSessionByMcpSessionId(mcpSessionId) {
|
|
221
121
|
const row = this.db
|
|
222
|
-
.prepare(`SELECT id, mcp_session_id,
|
|
122
|
+
.prepare(`SELECT id, mcp_session_id, deck_id, mode,
|
|
223
123
|
last_seen_at, expires_at, admin_expires_at, revoked_at
|
|
224
124
|
FROM runtime_sessions
|
|
225
125
|
WHERE mcp_session_id = ?
|
|
@@ -231,7 +131,7 @@ class TrustedSessionStore {
|
|
|
231
131
|
findActiveRuntimeSessionByMcpSessionId(mcpSessionId) {
|
|
232
132
|
const now = nowIso();
|
|
233
133
|
const row = this.db
|
|
234
|
-
.prepare(`SELECT id, mcp_session_id,
|
|
134
|
+
.prepare(`SELECT id, mcp_session_id, deck_id, mode,
|
|
235
135
|
last_seen_at, expires_at, admin_expires_at, revoked_at
|
|
236
136
|
FROM runtime_sessions
|
|
237
137
|
WHERE mcp_session_id = ?
|
|
@@ -241,20 +141,19 @@ class TrustedSessionStore {
|
|
|
241
141
|
.get(mcpSessionId, now);
|
|
242
142
|
return row ? this.toRuntimeSession(row) : null;
|
|
243
143
|
}
|
|
244
|
-
|
|
144
|
+
findActiveLaunchSessionForMcp(mcpSessionId, deckId) {
|
|
245
145
|
const now = nowIso();
|
|
246
146
|
const row = this.db
|
|
247
|
-
.prepare(`SELECT id, mcp_session_id,
|
|
147
|
+
.prepare(`SELECT id, mcp_session_id, deck_id, mode,
|
|
248
148
|
last_seen_at, expires_at, admin_expires_at, revoked_at
|
|
249
149
|
FROM runtime_sessions
|
|
250
|
-
WHERE mcp_session_id = ? AND
|
|
150
|
+
WHERE mcp_session_id = ? AND deck_id = ?
|
|
251
151
|
AND revoked_at IS NULL AND expires_at > ?`)
|
|
252
|
-
.get(mcpSessionId,
|
|
152
|
+
.get(mcpSessionId, deckId, now);
|
|
253
153
|
if (!row) {
|
|
254
154
|
return null;
|
|
255
155
|
}
|
|
256
|
-
|
|
257
|
-
return touched;
|
|
156
|
+
return this.touchRuntimeSession(row.id);
|
|
258
157
|
}
|
|
259
158
|
getRuntimeSessionModeByMcpSessionId(mcpSessionId) {
|
|
260
159
|
return this.getRuntimeSessionModesByMcpSessionIds([mcpSessionId]).get(mcpSessionId) ?? null;
|
|
@@ -272,13 +171,6 @@ class TrustedSessionStore {
|
|
|
272
171
|
.all(...uniqueIds, now);
|
|
273
172
|
return new Map(rows.map((row) => [row.mcp_session_id, row.mode]));
|
|
274
173
|
}
|
|
275
|
-
revokePendingGrant(grantId) {
|
|
276
|
-
const revokedAt = nowIso();
|
|
277
|
-
this.db
|
|
278
|
-
.prepare(`UPDATE workspace_grants SET status = 'revoked', revoked_at = ?
|
|
279
|
-
WHERE id = ? AND status = 'pending'`)
|
|
280
|
-
.run(revokedAt, grantId);
|
|
281
|
-
}
|
|
282
174
|
createDashboardNonce(nonce, expiresAtIso) {
|
|
283
175
|
this.db
|
|
284
176
|
.prepare(`INSERT INTO dashboard_nonces (nonce, expires_at, created_at) VALUES (?, ?, ?)`)
|
|
@@ -341,7 +233,7 @@ class TrustedSessionStore {
|
|
|
341
233
|
}
|
|
342
234
|
getRuntimeSessionRow(sessionId) {
|
|
343
235
|
return (this.db
|
|
344
|
-
.prepare(`SELECT id, mcp_session_id,
|
|
236
|
+
.prepare(`SELECT id, mcp_session_id, deck_id, mode,
|
|
345
237
|
last_seen_at, expires_at, admin_expires_at, revoked_at
|
|
346
238
|
FROM runtime_sessions WHERE id = ?`)
|
|
347
239
|
.get(sessionId) ?? null);
|
|
@@ -383,6 +275,23 @@ class TrustedSessionStore {
|
|
|
383
275
|
.run(addMs(now, shared_1.ADMIN_MODE_LEASE_MS), now, addMs(now, shared_1.RUNTIME_SESSION_LEASE_MS), sessionId);
|
|
384
276
|
return this.toRuntimeSession(this.getRuntimeSessionRow(sessionId));
|
|
385
277
|
}
|
|
278
|
+
/** Launch-session deck switch after elevated assignment update (NOT-108). */
|
|
279
|
+
setRuntimeSessionDeck(sessionId, deckId) {
|
|
280
|
+
const row = this.getRuntimeSessionRow(sessionId);
|
|
281
|
+
if (!row || row.revoked_at || Date.parse(row.expires_at) <= Date.now()) {
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
if (row.mode !== 'agent-admin') {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
const now = nowIso();
|
|
288
|
+
this.db
|
|
289
|
+
.prepare(`UPDATE runtime_sessions
|
|
290
|
+
SET deck_id = ?, last_seen_at = ?, expires_at = ?
|
|
291
|
+
WHERE id = ?`)
|
|
292
|
+
.run(deckId, now, addMs(now, shared_1.RUNTIME_SESSION_LEASE_MS), sessionId);
|
|
293
|
+
return this.toRuntimeSession(this.getRuntimeSessionRow(sessionId));
|
|
294
|
+
}
|
|
386
295
|
downgradeSessionToNormal(sessionId) {
|
|
387
296
|
const row = this.getRuntimeSessionRow(sessionId);
|
|
388
297
|
if (!row || row.revoked_at) {
|
|
@@ -451,55 +360,6 @@ class TrustedSessionStore {
|
|
|
451
360
|
createdAt: row.created_at,
|
|
452
361
|
}));
|
|
453
362
|
}
|
|
454
|
-
countWorkspacesForDeck(deckId) {
|
|
455
|
-
const row = this.db
|
|
456
|
-
.prepare(`SELECT COUNT(DISTINCT workspace_key_id) AS count
|
|
457
|
-
FROM workspace_grants
|
|
458
|
-
WHERE deck_id = ? AND status = 'active'`)
|
|
459
|
-
.get(deckId);
|
|
460
|
-
return row.count;
|
|
461
|
-
}
|
|
462
|
-
/**
|
|
463
|
-
* C8: elevated-agent deck change — rotate grant, rebind approving session, revoke peers.
|
|
464
|
-
* Plaintext grant secret is stored hashed only; caller must run `agent-deck use` to refresh local grant file.
|
|
465
|
-
*/
|
|
466
|
-
rotateGrantForElevatedSession(runtimeSessionId, newDeckId) {
|
|
467
|
-
const row = this.getRuntimeSessionRow(runtimeSessionId);
|
|
468
|
-
if (!row || row.revoked_at || Date.parse(row.expires_at) <= Date.now()) {
|
|
469
|
-
return null;
|
|
470
|
-
}
|
|
471
|
-
if (row.mode !== 'agent-admin') {
|
|
472
|
-
return null;
|
|
473
|
-
}
|
|
474
|
-
if (row.deck_id === newDeckId) {
|
|
475
|
-
const session = this.touchRuntimeSession(runtimeSessionId);
|
|
476
|
-
return session
|
|
477
|
-
? { session, peersRevoked: 0, grantId: row.workspace_grant_id }
|
|
478
|
-
: null;
|
|
479
|
-
}
|
|
480
|
-
const oldGrantId = row.workspace_grant_id;
|
|
481
|
-
const secret = generateGrantSecret();
|
|
482
|
-
const pending = this.createPendingGrant(row.workspace_key_id, newDeckId, secret);
|
|
483
|
-
const activated = this.activateGrant(pending.id);
|
|
484
|
-
if (!activated) {
|
|
485
|
-
this.revokePendingGrant(pending.id);
|
|
486
|
-
return null;
|
|
487
|
-
}
|
|
488
|
-
const revokedAt = nowIso();
|
|
489
|
-
const peersRevoked = this.db
|
|
490
|
-
.prepare(`UPDATE runtime_sessions SET revoked_at = ?
|
|
491
|
-
WHERE workspace_grant_id = ? AND id != ? AND revoked_at IS NULL`)
|
|
492
|
-
.run(revokedAt, oldGrantId, runtimeSessionId).changes;
|
|
493
|
-
const now = nowIso();
|
|
494
|
-
const adminExpiresAt = row.admin_expires_at;
|
|
495
|
-
this.db
|
|
496
|
-
.prepare(`UPDATE runtime_sessions
|
|
497
|
-
SET workspace_grant_id = ?, deck_id = ?, last_seen_at = ?, expires_at = ?
|
|
498
|
-
WHERE id = ?`)
|
|
499
|
-
.run(activated.id, newDeckId, now, addMs(now, shared_1.RUNTIME_SESSION_LEASE_MS), runtimeSessionId);
|
|
500
|
-
const session = this.toRuntimeSession(this.getRuntimeSessionRow(runtimeSessionId));
|
|
501
|
-
return { session, peersRevoked, grantId: activated.id };
|
|
502
|
-
}
|
|
503
363
|
expireStaleSessions() {
|
|
504
364
|
const now = nowIso();
|
|
505
365
|
const downgrade = this.db.prepare(`UPDATE runtime_sessions
|
|
@@ -520,8 +380,6 @@ class TrustedSessionStore {
|
|
|
520
380
|
return {
|
|
521
381
|
sessionId: row.id,
|
|
522
382
|
mcpSessionId: row.mcp_session_id ?? undefined,
|
|
523
|
-
workspaceKey: row.workspace_key_id,
|
|
524
|
-
workspaceGrantId: row.workspace_grant_id,
|
|
525
383
|
deckId: row.deck_id,
|
|
526
384
|
mode: row.mode,
|
|
527
385
|
lastSeenAt: row.last_seen_at,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/trusted-session/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/trusted-session/store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-deck/backend",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.2",
|
|
4
4
|
"description": "Agent Deck backend API, MCP server, and vault",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"prepublishOnly": "node ../../scripts/pre-publish-check.mjs && npm run build"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@agent-deck/shared": "^1.8.
|
|
49
|
+
"@agent-deck/shared": "^1.8.2",
|
|
50
50
|
"@fastify/cors": "^10.0.0",
|
|
51
51
|
"@fastify/static": "^8.0.0",
|
|
52
52
|
"@fastify/websocket": "^11.2.0",
|
|
@@ -232,4 +232,4 @@ ${F.data.oauth.issuer?`Issuer: ${F.data.oauth.issuer}`:``}`;A({title:`OAuth Setu
|
|
|
232
232
|
`));let n=[],r=e.split(/(\n|\r\n)/);r[r.length-1]||r.pop();for(let e=0;e<r.length;e++){let i=r[e];e%2&&!t.newlineIsToken?n[n.length-1]+=i:n.push(i)}return n}function $V(e){return e==`.`||e==`!`||e==`?`}new class extends PV{tokenize(e){let t=[],n=0;for(let r=0;r<e.length;r++){if(r==e.length-1){t.push(e.slice(n));break}if($V(e[r])&&e[r+1].match(/\s/)){for(t.push(e.slice(n,r+1)),r=n=r+1;e[r+1]?.match(/\s/);)r++;t.push(e.slice(n,r+1)),n=r+1}}return t}},new class extends PV{tokenize(e){return e.split(/([{}:;,]|\s+)/)}},new class extends PV{constructor(){super(...arguments),this.tokenize=QV}get useLongestToken(){return!0}castInput(e,t){let{undefinedReplacement:n,stringifyReplacer:r=(e,t)=>t===void 0?n:t}=t;return typeof e==`string`?e:JSON.stringify(eH(e,null,null,r),null,` `)}equals(e,t,n){return super.equals(e.replace(/,([\r\n])/g,`$1`),t.replace(/,([\r\n])/g,`$1`),n)}};function eH(e,t,n,r,i){t||=[],n||=[],r&&(e=r(i===void 0?``:i,e));let a=0;for(;a<t.length;a+=1)if(t[a]===e)return n[a];let o;if(Object.prototype.toString.call(e)===`[object Array]`){for(t.push(e),o=Array(e.length),n.push(o),a=0;a<e.length;a+=1)o[a]=eH(e[a],t,n,r,String(a));return t.pop(),n.pop(),o}if(e&&e.toJSON&&(e=e.toJSON()),typeof e==`object`&&e){t.push(e),o={},n.push(o);let i=[],s;for(s in e)Object.prototype.hasOwnProperty.call(e,s)&&i.push(s);for(i.sort(),a=0;a<i.length;a+=1)s=i[a],o[s]=eH(e[s],t,n,r,s);t.pop(),n.pop()}else o=e;return o}new class extends PV{tokenize(e){return e.slice()}join(e){return e}removeEmpty(e){return e}};var tH=3,nH=10;function rH(e){return e===``?[]:e.replace(/\n$/,``).split(`
|
|
233
233
|
`)}function iH(e,t){let n=ZV(e,t),r=[],i=1,a=1;for(let e of n){let t=rH(e.value);if(!e.added&&!e.removed&&t.length>=nH){let e=t.slice(0,tH),n=t.slice(-3),o=t.length-6;for(let t of e)r.push({kind:`unchanged`,text:t,oldLine:i++,newLine:a++});o>0&&(r.push({kind:`ellipsis`,text:`${o} unchanged lines`}),i+=o,a+=o);for(let e of n)r.push({kind:`unchanged`,text:e,oldLine:i++,newLine:a++});continue}for(let n of t)e.added?r.push({kind:`added`,text:n,newLine:a++}):e.removed?r.push({kind:`removed`,text:n,oldLine:i++}):r.push({kind:`unchanged`,text:n,oldLine:i++,newLine:a++})}return r}function aH(e){return e.some(e=>e.kind===`added`||e.kind===`removed`)}var oH=`max-w-full overflow-x-auto rounded-md border border-gray-800 bg-gray-950 font-mono text-xs leading-5`;function sH(e){switch(e){case`added`:return`bg-emerald-950/70 text-emerald-100`;case`removed`:return`bg-rose-950/70 text-rose-100`;case`ellipsis`:return`bg-gray-900 text-gray-500 italic`;default:return`bg-gray-950 text-gray-300`}}function cH(e){switch(e){case`added`:return`+`;case`removed`:return`-`;case`ellipsis`:return`…`;default:return` `}}function lH({rows:e,emptyLabel:t}){return e.length===0?(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:t}):(0,V.jsx)(`div`,{className:oH,children:e.map((e,t)=>(0,V.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[3rem_3rem_minmax(0,1fr)] gap-0 ${sH(e.kind)}`,children:[(0,V.jsx)(`span`,{className:`select-none border-r border-gray-800/80 px-2 py-0.5 text-right text-gray-600`,children:e.oldLine??``}),(0,V.jsx)(`span`,{className:`select-none border-r border-gray-800/80 px-2 py-0.5 text-right text-gray-600`,children:e.newLine??``}),(0,V.jsxs)(`div`,{className:`flex min-w-0 gap-2 px-2 py-0.5`,children:[(0,V.jsx)(`span`,{className:`w-3 shrink-0 select-none text-gray-500`,children:cH(e.kind)}),(0,V.jsx)(`span`,{className:`min-w-0 whitespace-pre-wrap break-words`,children:e.text||` `})]})]},`${e.kind}-${t}-${e.oldLine??``}-${e.newLine??``}`))})}function uH({before:e,after:t}){let n=e.filter(e=>!t.includes(e)),r=t.filter(t=>!e.includes(t));return n.length===0&&r.length===0?null:(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(`h4`,{className:`text-sm font-medium text-gray-400`,children:`Triggers`}),(0,V.jsxs)(`div`,{className:`${oH} p-0`,children:[n.map(e=>(0,V.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[3rem_3rem_minmax(0,1fr)] bg-rose-950/70 text-rose-100`,children:[(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsxs)(`div`,{className:`flex gap-2 px-2 py-0.5`,children:[(0,V.jsx)(`span`,{className:`w-3 shrink-0 text-gray-500`,children:`-`}),(0,V.jsx)(`span`,{children:e})]})]},`removed-${e}`)),r.map(e=>(0,V.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[3rem_3rem_minmax(0,1fr)] bg-emerald-950/70 text-emerald-100`,children:[(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsxs)(`div`,{className:`flex gap-2 px-2 py-0.5`,children:[(0,V.jsx)(`span`,{className:`w-3 shrink-0 text-gray-500`,children:`+`}),(0,V.jsx)(`span`,{children:e})]})]},`added-${e}`))]})]})}function dH({preview:e}){let t=NV(e),n=iH(e.before.body,e.after.body),r=e.before.body.trim()!==e.after.body.trim()&&e.after.body.length>0&&!e.after.body.includes(e.before.body.slice(0,40))&&aH(n),i=e.before.title!==e.after.title,a=e.before.triggers.join(`
|
|
234
234
|
`)!==e.after.triggers.join(`
|
|
235
|
-
`);return(0,V.jsxs)(`div`,{className:`min-w-0 space-y-4`,children:[!t&&(0,V.jsxs)(`div`,{className:`rounded-md border border-amber-500/50 bg-amber-500/10 p-3 text-sm text-amber-100`,children:[`No change detected — ops did not alter the playbook body or triggers. Reject this proposal and re-propose with a matching list anchor or `,(0,V.jsx)(`code`,{children:`rewrite_body`}),`.`]}),r&&(0,V.jsx)(`div`,{className:`rounded-md border border-amber-500/50 bg-amber-500/10 p-3 text-sm text-amber-100`,children:`Full-body rewrite proposed — review carefully.`}),i&&(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(`h4`,{className:`text-sm font-medium text-gray-400`,children:`Title`}),(0,V.jsxs)(`div`,{className:`${oH} p-0`,children:[e.before.title&&(0,V.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[3rem_3rem_minmax(0,1fr)] bg-rose-950/70 text-rose-100`,children:[(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsxs)(`div`,{className:`flex gap-2 px-2 py-0.5`,children:[(0,V.jsx)(`span`,{className:`w-3 shrink-0 text-gray-500`,children:`-`}),(0,V.jsx)(`span`,{children:e.before.title})]})]}),e.after.title&&(0,V.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[3rem_3rem_minmax(0,1fr)] bg-emerald-950/70 text-emerald-100`,children:[(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsxs)(`div`,{className:`flex gap-2 px-2 py-0.5`,children:[(0,V.jsx)(`span`,{className:`w-3 shrink-0 text-gray-500`,children:`+`}),(0,V.jsx)(`span`,{children:e.after.title})]})]})]})]}),(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(`h4`,{className:`text-sm font-medium text-gray-400`,children:`Body`}),(0,V.jsx)(lH,{rows:n,emptyLabel:`No body changes.`})]}),a&&(0,V.jsx)(uH,{before:e.before.triggers,after:e.after.triggers})]})}function fH(e){if(!e)return[];try{return JSON.parse(e)}catch{return[]}}function pH({conflicts:e,title:t=`Trigger overlap warnings`}){return e.length===0?null:(0,V.jsxs)(`div`,{className:`rounded-md border border-amber-500/40 bg-amber-500/10 p-4 text-sm text-amber-50`,children:[(0,V.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-wide text-amber-200/90`,children:t}),(0,V.jsx)(`p`,{className:`mt-2 text-amber-100/90`,children:`These triggers overlap with other playbooks on the deck. Accept is still allowed — disambiguate triggers or propose a merge if the wrong playbook keeps firing.`}),(0,V.jsx)(`ul`,{className:`mt-3 space-y-2`,children:e.map(e=>(0,V.jsxs)(`li`,{className:`rounded border border-amber-500/20 bg-gray-950/60 p-3`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(jh,{variant:`outline`,className:`border-amber-400/40 text-amber-100`,children:e.level}),(0,V.jsx)(`span`,{className:`font-medium text-amber-50`,children:e.otherPlaybookTitle}),(0,V.jsx)(`span`,{className:`font-mono text-xs text-amber-200/70`,children:e.otherPlaybookId})]}),(0,V.jsxs)(`p`,{className:`mt-2 text-amber-100/90`,children:[(0,V.jsx)(`span`,{className:`text-amber-200/80`,children:`Candidate:`}),` `,e.trigger]}),(0,V.jsxs)(`p`,{className:`text-amber-100/80`,children:[(0,V.jsx)(`span`,{className:`text-amber-200/80`,children:`Other:`}),` `,e.otherTrigger]})]},`${e.trigger}-${e.otherPlaybookId}-${e.level}`))})]})}var mH=8,hH=[{value:`proposed`,label:`Waiting`},{value:`accepted`,label:`Accepted`},{value:`rejected`,label:`Rejected`},{value:`superseded`,label:`Superseded`},{value:`stale`,label:`Stale`},{value:`all`,label:`All`}];function gH(e){if(!e.evidenceJson)return null;try{return JSON.parse(e.evidenceJson)}catch{return null}}function _H(e){switch(e){case`proposed`:return`border-blue-500/40 text-blue-200`;case`accepted`:return`border-emerald-500/40 text-emerald-200`;case`rejected`:return`border-rose-500/40 text-rose-200`;case`superseded`:return`border-violet-500/40 text-violet-200`;case`stale`:return`border-amber-500/40 text-amber-200`}}function vH(){let[e,t]=(0,b.useState)(null),[n,r]=(0,b.useState)(`proposed`),[i,a]=(0,b.useState)(0),{toast:o}=on(),s=Et();function c(e){t(e)}function l(e){r(e),a(0),t(null)}let{data:u=[]}=Vt({queryKey:[`/api/playbook-patches`,`proposed`],queryFn:()=>hh(`proposed`)}),d=n===`all`?void 0:n,{data:f=[],isLoading:p}=Vt({queryKey:[`/api/playbook-patches`,n],queryFn:()=>hh(d)}),m=Math.max(1,Math.ceil(f.length/mH)),h=Math.min(i,m-1),g=(0,b.useMemo)(()=>{let e=h*mH;return f.slice(e,e+mH)},[f,h]);(0,b.useEffect)(()=>{i!==h&&a(h)},[i,h]);let{data:_,isLoading:v,isError:y,error:x}=Vt({queryKey:[`/api/playbook-patches`,e,`preview`],queryFn:()=>gh(e),enabled:!!e}),S=_?NV(_):!1,C=f.find(t=>t.id===e)??null,w=C?.status===`proposed`,T=Ht({mutationFn:e=>_h(e),onSuccess:()=>{o({title:`Patch accepted`}),t(null),s.invalidateQueries({queryKey:[`/api/playbook-patches`]}),s.invalidateQueries({queryKey:[`/api/playbooks`]}),s.invalidateQueries({queryKey:[`/api/feedback-signals`]})},onError:e=>{o({title:`Accept failed`,description:e.message,variant:`destructive`})}}),E=Ht({mutationFn:e=>vh(e),onSuccess:()=>{o({title:`Patch rejected`}),t(null),s.invalidateQueries({queryKey:[`/api/playbook-patches`]}),s.invalidateQueries({queryKey:[`/api/feedback-signals`]})},onError:e=>{o({title:`Reject failed`,description:e.message,variant:`destructive`})}}),D=n===`proposed`?`No proposals waiting for review.`:n===`all`?`No playbook patches yet.`:`No ${n} patches.`;return(0,V.jsxs)(`div`,{className:`flex h-dvh flex-col overflow-hidden bg-gray-950 text-gray-100`,children:[(0,V.jsx)(`header`,{className:`shrink-0 border-b border-gray-800 px-4 py-4 sm:px-6`,children:(0,V.jsxs)(`div`,{className:`mx-auto flex max-w-7xl flex-wrap items-center gap-3`,children:[(0,V.jsx)(ye,{href:`/`,children:(0,V.jsxs)(G,{variant:`ghost`,size:`sm`,className:`text-gray-300`,children:[(0,V.jsx)(li,{className:`mr-1 h-4 w-4`}),`Deck`]})}),(0,V.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Playbook review queue`}),(0,V.jsxs)(jh,{variant:`secondary`,children:[u.length,` waiting`]}),(0,V.jsx)(ye,{href:`/feedback-signals`,className:`ml-auto text-sm hover:underline`,style:{color:`#92E4DD`},children:`Feedback data →`})]})}),(0,V.jsxs)(`main`,{className:`mx-auto grid w-full max-w-7xl min-h-0 flex-1 gap-6 overflow-hidden px-4 py-6 sm:px-6 lg:grid-cols-[minmax(18rem,20rem)_minmax(0,1fr)] lg:items-stretch`,children:[(0,V.jsxs)(`section`,{className:`flex min-h-0 min-w-0 flex-col`,children:[(0,V.jsx)(`h2`,{className:`mb-3 shrink-0 text-sm font-medium text-gray-400`,children:`Proposals`}),(0,V.jsx)(`div`,{className:`mb-3 flex shrink-0 flex-wrap gap-1`,children:hH.map(({value:e,label:t})=>{let r=n===e;return(0,V.jsx)(G,{size:`sm`,variant:r?`gold`:`outline`,className:r?void 0:`border-gray-600 bg-transparent text-gray-300 hover:bg-gray-800 hover:text-gray-100`,"aria-pressed":r,onClick:()=>l(e),children:t},e)})}),(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[p&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:`Loading…`}),!p&&f.length===0&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:D}),(0,V.jsx)(`ul`,{className:`space-y-2`,children:g.map(t=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(`button`,{type:`button`,onClick:()=>c(t.id),className:`w-full rounded-lg border p-3 text-left transition ${e===t.id?`border-blue-500 bg-gray-900`:`border-gray-800 bg-gray-900/50 hover:border-gray-700`}`,children:[(0,V.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,V.jsxs)(`div`,{className:`min-w-0`,children:[(0,V.jsx)(`span`,{className:`block font-medium leading-snug`,children:t.kind===`create`?`New: ${t.displayTitle}`:t.displayTitle}),t.playbookId&&t.kind!==`create`&&(0,V.jsx)(`span`,{className:`mt-0.5 block truncate font-mono text-xs text-gray-600`,children:t.playbookId}),mh(t.deckNames)&&(0,V.jsxs)(`span`,{className:`mt-1 block text-xs text-gray-500`,children:[`Decks: `,mh(t.deckNames)]})]}),(0,V.jsxs)(`div`,{className:`flex shrink-0 flex-col items-end gap-1`,children:[(0,V.jsx)(jh,{variant:`outline`,className:`shrink-0`,children:t.kind}),n!==`proposed`&&(0,V.jsx)(jh,{variant:`outline`,className:`shrink-0 ${_H(t.status)}`,children:t.status})]})]}),(0,V.jsx)(`p`,{className:`mt-1 line-clamp-2 text-sm text-gray-400`,children:t.rationale}),(0,V.jsxs)(`p`,{className:`mt-1 text-xs text-gray-600`,children:[t.source,` · `,new Date(t.createdAt).toLocaleString()]})]})},t.id))})]}),f.length>mH&&(0,V.jsxs)(`div`,{className:`mt-3 flex shrink-0 items-center justify-between gap-2 border-t border-gray-800 pt-3`,children:[(0,V.jsxs)(G,{type:`button`,size:`sm`,variant:`outline`,className:`border-gray-600 bg-transparent text-gray-300 hover:bg-gray-800`,disabled:h<=0,onClick:()=>a(e=>Math.max(0,e-1)),children:[(0,V.jsx)(gi,{className:`mr-1 h-4 w-4`}),`Newer`]}),(0,V.jsxs)(`span`,{className:`text-xs text-gray-500`,children:[h+1,` / `,m,(0,V.jsxs)(`span`,{className:`ml-1 text-gray-600`,children:[`(`,f.length,`)`]})]}),(0,V.jsxs)(G,{type:`button`,size:`sm`,variant:`outline`,className:`border-gray-600 bg-transparent text-gray-300 hover:bg-gray-800`,disabled:h>=m-1,onClick:()=>a(e=>Math.min(m-1,e+1)),children:[`Older`,(0,V.jsx)(_i,{className:`ml-1 h-4 w-4`})]})]})]}),(0,V.jsxs)(`section`,{className:`flex min-h-0 min-w-0 flex-col overflow-hidden`,children:[(0,V.jsx)(`h2`,{className:`mb-3 shrink-0 text-sm font-medium text-gray-400`,children:`Detail`}),!C&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:`Select a proposal to preview the diff.`}),C&&(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden rounded-lg border border-gray-800 bg-gray-900/50`,children:[(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto overscroll-contain p-4 sm:p-5`,children:(0,V.jsxs)(`div`,{className:`min-w-0 space-y-4`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(jh,{variant:`outline`,className:_H(C.status),children:C.status}),C.resolvedAt&&(0,V.jsxs)(`span`,{className:`text-xs text-gray-500`,children:[`Resolved `,new Date(C.resolvedAt).toLocaleString()]})]}),(0,V.jsx)(`p`,{className:`text-sm leading-relaxed text-gray-300`,children:C.rationale}),C.status===`rejected`&&C.rejectionReason&&(0,V.jsxs)(`div`,{className:`rounded-md border border-rose-500/40 bg-rose-500/10 p-3 text-sm text-rose-100`,children:[(0,V.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-wide text-rose-300/80`,children:`Rejection reason`}),(0,V.jsx)(`p`,{className:`mt-1`,children:C.rejectionReason})]}),C.status===`superseded`&&C.supersededBy&&(0,V.jsxs)(`div`,{className:`rounded-md border border-violet-500/40 bg-violet-500/10 p-3 text-sm text-violet-100`,children:[(0,V.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-wide text-violet-300/80`,children:`Superseded by`}),(0,V.jsx)(`button`,{type:`button`,className:`mt-1 font-mono text-sm underline-offset-2 hover:underline`,onClick:()=>{let e=C.supersededBy;r(`all`),a(0),c(e)},children:C.supersededBy})]}),(()=>{let e=gH(C);return e?(0,V.jsxs)(`div`,{className:`rounded-md border border-gray-700 bg-gray-950 p-4 text-sm`,children:[(0,V.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-wide text-gray-500`,children:`Your correction`}),(0,V.jsxs)(`p`,{className:`mt-2 italic text-gray-200`,children:[`“`,e.user_feedback_excerpt,`”`]}),e.failure_summary&&(0,V.jsx)(`p`,{className:`mt-2 text-gray-400`,children:e.failure_summary})]}):null})(),(()=>{let e=fH(C.conflictsJson),t=_?.trigger_conflicts??[],n=t.length>0?t:e;return(0,V.jsx)(pH,{conflicts:n})})(),v&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:`Loading preview…`}),y&&(0,V.jsxs)(`div`,{className:`rounded-md border border-rose-500/50 bg-rose-500/10 p-3 text-sm text-rose-100`,children:[`Preview failed —`,` `,x?.message??`could not apply ops to the current playbook.`,w?` Reject and re-propose with exact list anchors or rewrite_body.`:` Historical preview may be incomplete if the playbook changed.`]}),_&&(0,V.jsx)(dH,{preview:_}),C.status===`stale`&&(0,V.jsx)(`p`,{className:`text-sm text-amber-400`,children:`Stale — playbook changed since proposal. Re-propose from a fresh session.`})]})}),w?(0,V.jsxs)(`div`,{className:`relative z-10 shrink-0 space-y-3 border-t border-gray-800 bg-gray-950 p-4 shadow-[0_-16px_32px_rgba(0,0,0,0.55)] sm:p-5`,children:[(0,V.jsx)(`h3`,{className:`text-sm font-medium text-gray-400`,children:`Your decision`}),(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,V.jsx)(G,{variant:`gold`,onClick:()=>T.mutate(C.id),disabled:T.isPending||y||!S,children:`Accept`}),(0,V.jsx)(G,{variant:`destructive`,onClick:()=>E.mutate(C.id),disabled:E.isPending,children:`Reject`})]})]}):(0,V.jsxs)(`div`,{className:`shrink-0 border-t border-gray-800 bg-gray-950 px-4 py-3 text-sm text-gray-500 sm:px-5`,children:[`Read-only — already `,C.status,`. Switch to Waiting to review open proposals.`]})]})]})]})]})}var yH=`border-[#C4B643] data-[state=checked]:bg-[#C4B643] data-[state=checked]:text-[#0A0A07] data-[state=indeterminate]:bg-[#C4B643] data-[state=indeterminate]:text-[#0A0A07]`;function bH(){let{toast:e}=on(),t=Et(),[n,r]=(0,b.useState)(`open`),[i,a]=(0,b.useState)(``),[o,s]=(0,b.useState)(!1),[c,l]=(0,b.useState)(new Set),{data:u}=Vt({queryKey:[`/api/playbooks/vault`]}),d=u?.data??[],f=(0,b.useMemo)(()=>{let e=new Map;for(let t of d)e.set(t.id,t.title);return e},[d]),p={status:n===`all`?void 0:n,playbookId:i||void 0,excludeInProposal:n===`open`?!o:void 0},{data:m=[],isLoading:h}=Vt({queryKey:[`/api/feedback-signals`,p],queryFn:()=>Sh(p)}),g=Ht({mutationFn:e=>Ch(e),onSuccess:n=>{e({title:`Discarded ${n.discarded} signal(s)`}),l(new Set),t.invalidateQueries({queryKey:[`/api/feedback-signals`]})},onError:t=>{e({title:`Discard failed`,description:t.message,variant:`destructive`})}}),_=e=>{l(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},v=async()=>{let t=c.size>0?m.filter(e=>c.has(e.id)):m;if(t.length!==0){if(t.some(e=>!e.id)){e({title:`Copy blocked`,description:`Every signal must include an id for tracking.`,variant:`destructive`});return}try{await navigator.clipboard.writeText(Dh(t)),e({title:`Copied curation prompt`,description:`${t.length} signal id(s) included — paste into your IDE agent.`})}catch(t){e({title:`Copy failed`,description:t instanceof Error?t.message:`Clipboard unavailable`,variant:`destructive`})}}},y=[...c].filter(e=>m.find(t=>t.id===e)?.status===`open`),x=m.length>0&&m.every(e=>c.has(e.id)),S=m.some(e=>c.has(e.id));return(0,V.jsxs)(`div`,{className:`flex min-h-dvh flex-col bg-gray-950 text-gray-100`,children:[(0,V.jsx)(`header`,{className:`shrink-0 border-b border-gray-800 px-4 py-4 sm:px-6`,children:(0,V.jsxs)(`div`,{className:`mx-auto flex max-w-7xl flex-wrap items-center gap-3`,children:[(0,V.jsx)(ye,{href:`/`,children:(0,V.jsxs)(G,{variant:`ghost`,size:`sm`,className:`text-gray-300`,children:[(0,V.jsx)(li,{className:`mr-1 h-4 w-4`}),`Home`]})}),(0,V.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Feedback`}),(0,V.jsx)(jh,{variant:`outline`,children:m.length}),(0,V.jsx)(ye,{href:`/playbook-patches`,className:`ml-auto text-sm hover:underline`,style:{color:`#92E4DD`},children:`Playbook proposals →`})]})}),(0,V.jsxs)(`main`,{className:`mx-auto w-full max-w-7xl flex-1 space-y-4 px-4 py-6 sm:px-6`,children:[(0,V.jsx)(`p`,{className:`text-sm text-gray-400`,children:`Durable correction data for playbook enhancement. Filter by playbook, copy rows (with ids) for an IDE agent to propose, then accept the proposal to mark feedback solved.`}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3 rounded-lg border border-gray-800 bg-gray-900/40 p-3`,children:[(0,V.jsxs)(`label`,{className:`text-xs text-gray-500`,children:[`Playbook`,(0,V.jsxs)(`select`,{className:`mt-1 block min-w-[12rem] rounded border border-gray-700 bg-gray-950 px-2 py-1.5 text-sm text-gray-100`,value:i,onChange:e=>{a(e.target.value),l(new Set)},children:[(0,V.jsx)(`option`,{value:``,children:`All`}),d.map(e=>(0,V.jsx)(`option`,{value:e.id,children:e.title},e.id))]})]}),(0,V.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:[[`open`,`Open`],[`actioned`,`Actioned`],[`discarded`,`Discarded`],[`all`,`All`]].map(([e,t])=>{let i=n===e;return(0,V.jsx)(G,{size:`sm`,variant:i?`gold`:`outline`,className:i?void 0:`border-gray-600 bg-transparent text-gray-300 hover:bg-gray-800 hover:text-gray-100`,"aria-pressed":i,onClick:()=>{r(e),l(new Set)},children:t},e)})}),n===`open`&&(0,V.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-gray-400`,children:[(0,V.jsx)(`input`,{type:`checkbox`,checked:o,onChange:e=>s(e.target.checked)}),`Include already in an open proposal`]}),(0,V.jsxs)(`div`,{className:`ml-auto flex flex-wrap gap-2`,children:[(0,V.jsxs)(G,{size:`sm`,variant:`outline`,disabled:m.length===0,onClick:()=>void v(),children:[(0,V.jsx)(Ci,{className:`mr-1 h-3.5 w-3.5`}),`Copy for agent`,c.size>0?` (${c.size})`:``]}),(0,V.jsxs)(G,{size:`sm`,variant:`destructive`,disabled:y.length===0||g.isPending,onClick:()=>g.mutate(y),children:[(0,V.jsx)(Vi,{className:`mr-1 h-3.5 w-3.5`}),`Discard selected`]})]})]}),h&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:`Loading…`}),!h&&m.length===0&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:`No signals match these filters.`}),!h&&m.length>0&&(0,V.jsx)(`div`,{className:`overflow-x-auto rounded-lg border border-gray-800`,children:(0,V.jsxs)(`table`,{className:`w-full min-w-[48rem] text-left text-sm`,children:[(0,V.jsx)(`thead`,{className:`border-b border-gray-800 bg-gray-900/80 text-xs uppercase text-gray-500`,children:(0,V.jsxs)(`tr`,{children:[(0,V.jsx)(`th`,{className:`w-10 px-3 py-2`,children:(0,V.jsx)(Dg,{checked:x?!0:S?`indeterminate`:!1,onCheckedChange:()=>{if(x){l(new Set);return}l(new Set(m.map(e=>e.id)))},"aria-label":`Select all visible signals`,disabled:m.length===0,className:yH})}),(0,V.jsx)(`th`,{className:`px-3 py-2`,children:`Excerpt`}),(0,V.jsx)(`th`,{className:`px-3 py-2`,children:`Failure`}),(0,V.jsx)(`th`,{className:`px-3 py-2`,children:`Playbook`}),(0,V.jsx)(`th`,{className:`px-3 py-2`,children:`Source`}),(0,V.jsx)(`th`,{className:`px-3 py-2`,children:`When`})]})}),(0,V.jsx)(`tbody`,{children:m.map(e=>{let t=wh(e);return(0,V.jsxs)(`tr`,{className:`border-b border-gray-800/80 align-top`,children:[(0,V.jsx)(`td`,{className:`px-3 py-2`,children:(0,V.jsx)(Dg,{checked:c.has(e.id),onCheckedChange:()=>_(e.id),"aria-label":`Select ${e.id}`,className:yH})}),(0,V.jsxs)(`td`,{className:`px-3 py-2`,children:[(0,V.jsx)(`p`,{className:`font-mono text-[11px] text-gray-600`,children:e.id}),(0,V.jsxs)(`p`,{className:`text-gray-200`,children:[`“`,e.userFeedbackExcerpt,`”`]}),t&&(0,V.jsx)(jh,{variant:`outline`,className:`mt-1 text-[10px]`,children:`In proposal`})]}),(0,V.jsx)(`td`,{className:`px-3 py-2 text-gray-400`,children:e.failureSummary}),(0,V.jsx)(`td`,{className:`px-3 py-2 text-gray-300`,children:e.candidatePlaybookId?f.get(e.candidatePlaybookId)??e.candidatePlaybookId:`—`}),(0,V.jsx)(`td`,{className:`px-3 py-2 text-gray-500`,children:e.source}),(0,V.jsx)(`td`,{className:`px-3 py-2 whitespace-nowrap text-gray-500`,children:new Date(e.createdAt).toLocaleString()})]},e.id)})})]})})]})]})}function xH(){let e=new URLSearchParams(window.location.search),t=e.get(`challenge`)??``,n=e.get(`session`)??``,[r,i]=(0,b.useState)(`idle`),[a,o]=(0,b.useState)(``);(0,b.useEffect)(()=>{(!t||!n)&&(i(`error`),o(`Missing challenge or session in URL.`))},[t,n]);async function s(){if(t&&n){i(`loading`);try{await H(`POST`,`/api/trusted-session/admin/approve`,{challengeId:t,runtimeSessionId:n}),i(`success`),o(`Admin elevation approved for this MCP session. Return to the agent.`)}catch(e){i(`error`),o(e instanceof Error?e.message:`Approval failed`)}}}return(0,V.jsx)(`div`,{className:`min-h-screen flex items-center justify-center p-6 bg-muted/30`,children:(0,V.jsxs)(IO,{className:`w-full max-w-md`,children:[(0,V.jsxs)(LO,{children:[(0,V.jsx)(RO,{children:`Approve agent-admin elevation`}),(0,V.jsx)(zO,{children:`Grants ephemeral deck-admin mode to one MCP session (30-minute lease). This does not change the persistent workspace grant.`})]}),(0,V.jsxs)(BO,{className:`space-y-4`,children:[t&&n?(0,V.jsxs)(`dl`,{className:`text-sm space-y-1 text-muted-foreground`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`dt`,{className:`inline font-medium text-foreground`,children:`Session `}),(0,V.jsx)(`dd`,{className:`inline font-mono text-xs`,children:n})]}),(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`dt`,{className:`inline font-medium text-foreground`,children:`Challenge `}),(0,V.jsx)(`dd`,{className:`inline font-mono text-xs`,children:t})]})]}):null,r===`success`?(0,V.jsx)(`p`,{className:`text-sm text-green-700 dark:text-green-400`,children:a}):r===`error`?(0,V.jsx)(`p`,{className:`text-sm text-destructive`,children:a}):null,r!==`success`&&t&&n?(0,V.jsx)(G,{onClick:()=>void s(),disabled:r===`loading`,className:`w-full`,children:r===`loading`?`Approving…`:`Approve elevation`}):null]})]})})}function SH(){return(0,V.jsxs)(xe,{children:[(0,V.jsx)(ve,{path:`/`,component:FO}),(0,V.jsx)(ve,{path:`/oauth/callback`,component:UO}),(0,V.jsx)(ve,{path:`/playbook-patches`,component:vH}),(0,V.jsx)(ve,{path:`/feedback-signals`,component:bH}),(0,V.jsx)(ve,{path:`/admin/approve`,component:xH}),(0,V.jsx)(ve,{path:`/mcp-test`,component:MV}),(0,V.jsx)(ve,{component:HO})]})}function CH(){let[e,t]=(0,b.useState)(!1);return(0,b.useEffect)(()=>{let e=!1;return qt().finally(()=>{e||t(!0)}),()=>{e=!0}},[]),e?(0,V.jsx)(Dt,{client:Kt,children:(0,V.jsxs)(wl,{children:[(0,V.jsx)(Za,{}),(0,V.jsx)(SH,{})]})}):(0,V.jsx)(`div`,{className:`flex min-h-screen items-center justify-center bg-[#0B1220] text-sm text-gray-300`,children:`Loading AgentDeck...`})}(0,x.createRoot)(document.getElementById(`root`)).render((0,V.jsx)(b.StrictMode,{children:(0,V.jsx)(CH,{})}));
|
|
235
|
+
`);return(0,V.jsxs)(`div`,{className:`min-w-0 space-y-4`,children:[!t&&(0,V.jsxs)(`div`,{className:`rounded-md border border-amber-500/50 bg-amber-500/10 p-3 text-sm text-amber-100`,children:[`No change detected — ops did not alter the playbook body or triggers. Reject this proposal and re-propose with a matching list anchor or `,(0,V.jsx)(`code`,{children:`rewrite_body`}),`.`]}),r&&(0,V.jsx)(`div`,{className:`rounded-md border border-amber-500/50 bg-amber-500/10 p-3 text-sm text-amber-100`,children:`Full-body rewrite proposed — review carefully.`}),i&&(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(`h4`,{className:`text-sm font-medium text-gray-400`,children:`Title`}),(0,V.jsxs)(`div`,{className:`${oH} p-0`,children:[e.before.title&&(0,V.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[3rem_3rem_minmax(0,1fr)] bg-rose-950/70 text-rose-100`,children:[(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsxs)(`div`,{className:`flex gap-2 px-2 py-0.5`,children:[(0,V.jsx)(`span`,{className:`w-3 shrink-0 text-gray-500`,children:`-`}),(0,V.jsx)(`span`,{children:e.before.title})]})]}),e.after.title&&(0,V.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[3rem_3rem_minmax(0,1fr)] bg-emerald-950/70 text-emerald-100`,children:[(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsx)(`span`,{className:`border-r border-gray-800/80 px-2 py-0.5`}),(0,V.jsxs)(`div`,{className:`flex gap-2 px-2 py-0.5`,children:[(0,V.jsx)(`span`,{className:`w-3 shrink-0 text-gray-500`,children:`+`}),(0,V.jsx)(`span`,{children:e.after.title})]})]})]})]}),(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(`h4`,{className:`text-sm font-medium text-gray-400`,children:`Body`}),(0,V.jsx)(lH,{rows:n,emptyLabel:`No body changes.`})]}),a&&(0,V.jsx)(uH,{before:e.before.triggers,after:e.after.triggers})]})}function fH(e){if(!e)return[];try{return JSON.parse(e)}catch{return[]}}function pH({conflicts:e,title:t=`Trigger overlap warnings`}){return e.length===0?null:(0,V.jsxs)(`div`,{className:`rounded-md border border-amber-500/40 bg-amber-500/10 p-4 text-sm text-amber-50`,children:[(0,V.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-wide text-amber-200/90`,children:t}),(0,V.jsx)(`p`,{className:`mt-2 text-amber-100/90`,children:`These triggers overlap with other playbooks on the deck. Accept is still allowed — disambiguate triggers or propose a merge if the wrong playbook keeps firing.`}),(0,V.jsx)(`ul`,{className:`mt-3 space-y-2`,children:e.map(e=>(0,V.jsxs)(`li`,{className:`rounded border border-amber-500/20 bg-gray-950/60 p-3`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(jh,{variant:`outline`,className:`border-amber-400/40 text-amber-100`,children:e.level}),(0,V.jsx)(`span`,{className:`font-medium text-amber-50`,children:e.otherPlaybookTitle}),(0,V.jsx)(`span`,{className:`font-mono text-xs text-amber-200/70`,children:e.otherPlaybookId})]}),(0,V.jsxs)(`p`,{className:`mt-2 text-amber-100/90`,children:[(0,V.jsx)(`span`,{className:`text-amber-200/80`,children:`Candidate:`}),` `,e.trigger]}),(0,V.jsxs)(`p`,{className:`text-amber-100/80`,children:[(0,V.jsx)(`span`,{className:`text-amber-200/80`,children:`Other:`}),` `,e.otherTrigger]})]},`${e.trigger}-${e.otherPlaybookId}-${e.level}`))})]})}var mH=8,hH=[{value:`proposed`,label:`Waiting`},{value:`accepted`,label:`Accepted`},{value:`rejected`,label:`Rejected`},{value:`superseded`,label:`Superseded`},{value:`stale`,label:`Stale`},{value:`all`,label:`All`}];function gH(e){if(!e.evidenceJson)return null;try{return JSON.parse(e.evidenceJson)}catch{return null}}function _H(e){switch(e){case`proposed`:return`border-blue-500/40 text-blue-200`;case`accepted`:return`border-emerald-500/40 text-emerald-200`;case`rejected`:return`border-rose-500/40 text-rose-200`;case`superseded`:return`border-violet-500/40 text-violet-200`;case`stale`:return`border-amber-500/40 text-amber-200`}}function vH(){let[e,t]=(0,b.useState)(null),[n,r]=(0,b.useState)(`proposed`),[i,a]=(0,b.useState)(0),{toast:o}=on(),s=Et();function c(e){t(e)}function l(e){r(e),a(0),t(null)}let{data:u=[]}=Vt({queryKey:[`/api/playbook-patches`,`proposed`],queryFn:()=>hh(`proposed`)}),d=n===`all`?void 0:n,{data:f=[],isLoading:p}=Vt({queryKey:[`/api/playbook-patches`,n],queryFn:()=>hh(d)}),m=Math.max(1,Math.ceil(f.length/mH)),h=Math.min(i,m-1),g=(0,b.useMemo)(()=>{let e=h*mH;return f.slice(e,e+mH)},[f,h]);(0,b.useEffect)(()=>{i!==h&&a(h)},[i,h]);let{data:_,isLoading:v,isError:y,error:x}=Vt({queryKey:[`/api/playbook-patches`,e,`preview`],queryFn:()=>gh(e),enabled:!!e}),S=_?NV(_):!1,C=f.find(t=>t.id===e)??null,w=C?.status===`proposed`,T=Ht({mutationFn:e=>_h(e),onSuccess:()=>{o({title:`Patch accepted`}),t(null),s.invalidateQueries({queryKey:[`/api/playbook-patches`]}),s.invalidateQueries({queryKey:[`/api/playbooks`]}),s.invalidateQueries({queryKey:[`/api/feedback-signals`]})},onError:e=>{o({title:`Accept failed`,description:e.message,variant:`destructive`})}}),E=Ht({mutationFn:e=>vh(e),onSuccess:()=>{o({title:`Patch rejected`}),t(null),s.invalidateQueries({queryKey:[`/api/playbook-patches`]}),s.invalidateQueries({queryKey:[`/api/feedback-signals`]})},onError:e=>{o({title:`Reject failed`,description:e.message,variant:`destructive`})}}),D=n===`proposed`?`No proposals waiting for review.`:n===`all`?`No playbook patches yet.`:`No ${n} patches.`;return(0,V.jsxs)(`div`,{className:`flex h-dvh flex-col overflow-hidden bg-gray-950 text-gray-100`,children:[(0,V.jsx)(`header`,{className:`shrink-0 border-b border-gray-800 px-4 py-4 sm:px-6`,children:(0,V.jsxs)(`div`,{className:`mx-auto flex max-w-7xl flex-wrap items-center gap-3`,children:[(0,V.jsx)(ye,{href:`/`,children:(0,V.jsxs)(G,{variant:`ghost`,size:`sm`,className:`text-gray-300`,children:[(0,V.jsx)(li,{className:`mr-1 h-4 w-4`}),`Deck`]})}),(0,V.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Playbook review queue`}),(0,V.jsxs)(jh,{variant:`secondary`,children:[u.length,` waiting`]}),(0,V.jsx)(ye,{href:`/feedback-signals`,className:`ml-auto text-sm hover:underline`,style:{color:`#92E4DD`},children:`Feedback data →`})]})}),(0,V.jsxs)(`main`,{className:`mx-auto grid w-full max-w-7xl min-h-0 flex-1 gap-6 overflow-hidden px-4 py-6 sm:px-6 lg:grid-cols-[minmax(18rem,20rem)_minmax(0,1fr)] lg:items-stretch`,children:[(0,V.jsxs)(`section`,{className:`flex min-h-0 min-w-0 flex-col`,children:[(0,V.jsx)(`h2`,{className:`mb-3 shrink-0 text-sm font-medium text-gray-400`,children:`Proposals`}),(0,V.jsx)(`div`,{className:`mb-3 flex shrink-0 flex-wrap gap-1`,children:hH.map(({value:e,label:t})=>{let r=n===e;return(0,V.jsx)(G,{size:`sm`,variant:r?`gold`:`outline`,className:r?void 0:`border-gray-600 bg-transparent text-gray-300 hover:bg-gray-800 hover:text-gray-100`,"aria-pressed":r,onClick:()=>l(e),children:t},e)})}),(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[p&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:`Loading…`}),!p&&f.length===0&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:D}),(0,V.jsx)(`ul`,{className:`space-y-2`,children:g.map(t=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(`button`,{type:`button`,onClick:()=>c(t.id),className:`w-full rounded-lg border p-3 text-left transition ${e===t.id?`border-blue-500 bg-gray-900`:`border-gray-800 bg-gray-900/50 hover:border-gray-700`}`,children:[(0,V.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,V.jsxs)(`div`,{className:`min-w-0`,children:[(0,V.jsx)(`span`,{className:`block font-medium leading-snug`,children:t.kind===`create`?`New: ${t.displayTitle}`:t.displayTitle}),t.playbookId&&t.kind!==`create`&&(0,V.jsx)(`span`,{className:`mt-0.5 block truncate font-mono text-xs text-gray-600`,children:t.playbookId}),mh(t.deckNames)&&(0,V.jsxs)(`span`,{className:`mt-1 block text-xs text-gray-500`,children:[`Decks: `,mh(t.deckNames)]})]}),(0,V.jsxs)(`div`,{className:`flex shrink-0 flex-col items-end gap-1`,children:[(0,V.jsx)(jh,{variant:`outline`,className:`shrink-0`,children:t.kind}),n!==`proposed`&&(0,V.jsx)(jh,{variant:`outline`,className:`shrink-0 ${_H(t.status)}`,children:t.status})]})]}),(0,V.jsx)(`p`,{className:`mt-1 line-clamp-2 text-sm text-gray-400`,children:t.rationale}),(0,V.jsxs)(`p`,{className:`mt-1 text-xs text-gray-600`,children:[t.source,` · `,new Date(t.createdAt).toLocaleString()]})]})},t.id))})]}),f.length>mH&&(0,V.jsxs)(`div`,{className:`mt-3 flex shrink-0 items-center justify-between gap-2 border-t border-gray-800 pt-3`,children:[(0,V.jsxs)(G,{type:`button`,size:`sm`,variant:`outline`,className:`border-gray-600 bg-transparent text-gray-300 hover:bg-gray-800`,disabled:h<=0,onClick:()=>a(e=>Math.max(0,e-1)),children:[(0,V.jsx)(gi,{className:`mr-1 h-4 w-4`}),`Newer`]}),(0,V.jsxs)(`span`,{className:`text-xs text-gray-500`,children:[h+1,` / `,m,(0,V.jsxs)(`span`,{className:`ml-1 text-gray-600`,children:[`(`,f.length,`)`]})]}),(0,V.jsxs)(G,{type:`button`,size:`sm`,variant:`outline`,className:`border-gray-600 bg-transparent text-gray-300 hover:bg-gray-800`,disabled:h>=m-1,onClick:()=>a(e=>Math.min(m-1,e+1)),children:[`Older`,(0,V.jsx)(_i,{className:`ml-1 h-4 w-4`})]})]})]}),(0,V.jsxs)(`section`,{className:`flex min-h-0 min-w-0 flex-col overflow-hidden`,children:[(0,V.jsx)(`h2`,{className:`mb-3 shrink-0 text-sm font-medium text-gray-400`,children:`Detail`}),!C&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:`Select a proposal to preview the diff.`}),C&&(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden rounded-lg border border-gray-800 bg-gray-900/50`,children:[(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto overscroll-contain p-4 sm:p-5`,children:(0,V.jsxs)(`div`,{className:`min-w-0 space-y-4`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(jh,{variant:`outline`,className:_H(C.status),children:C.status}),C.resolvedAt&&(0,V.jsxs)(`span`,{className:`text-xs text-gray-500`,children:[`Resolved `,new Date(C.resolvedAt).toLocaleString()]})]}),(0,V.jsx)(`p`,{className:`text-sm leading-relaxed text-gray-300`,children:C.rationale}),C.status===`rejected`&&C.rejectionReason&&(0,V.jsxs)(`div`,{className:`rounded-md border border-rose-500/40 bg-rose-500/10 p-3 text-sm text-rose-100`,children:[(0,V.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-wide text-rose-300/80`,children:`Rejection reason`}),(0,V.jsx)(`p`,{className:`mt-1`,children:C.rejectionReason})]}),C.status===`superseded`&&C.supersededBy&&(0,V.jsxs)(`div`,{className:`rounded-md border border-violet-500/40 bg-violet-500/10 p-3 text-sm text-violet-100`,children:[(0,V.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-wide text-violet-300/80`,children:`Superseded by`}),(0,V.jsx)(`button`,{type:`button`,className:`mt-1 font-mono text-sm underline-offset-2 hover:underline`,onClick:()=>{let e=C.supersededBy;r(`all`),a(0),c(e)},children:C.supersededBy})]}),(()=>{let e=gH(C);return e?(0,V.jsxs)(`div`,{className:`rounded-md border border-gray-700 bg-gray-950 p-4 text-sm`,children:[(0,V.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-wide text-gray-500`,children:`Your correction`}),(0,V.jsxs)(`p`,{className:`mt-2 italic text-gray-200`,children:[`“`,e.user_feedback_excerpt,`”`]}),e.failure_summary&&(0,V.jsx)(`p`,{className:`mt-2 text-gray-400`,children:e.failure_summary})]}):null})(),(()=>{let e=fH(C.conflictsJson),t=_?.trigger_conflicts??[],n=t.length>0?t:e;return(0,V.jsx)(pH,{conflicts:n})})(),v&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:`Loading preview…`}),y&&(0,V.jsxs)(`div`,{className:`rounded-md border border-rose-500/50 bg-rose-500/10 p-3 text-sm text-rose-100`,children:[`Preview failed —`,` `,x?.message??`could not apply ops to the current playbook.`,w?` Reject and re-propose with exact list anchors or rewrite_body.`:` Historical preview may be incomplete if the playbook changed.`]}),_&&(0,V.jsx)(dH,{preview:_}),C.status===`stale`&&(0,V.jsx)(`p`,{className:`text-sm text-amber-400`,children:`Stale — playbook changed since proposal. Re-propose from a fresh session.`})]})}),w?(0,V.jsxs)(`div`,{className:`relative z-10 shrink-0 space-y-3 border-t border-gray-800 bg-gray-950 p-4 shadow-[0_-16px_32px_rgba(0,0,0,0.55)] sm:p-5`,children:[(0,V.jsx)(`h3`,{className:`text-sm font-medium text-gray-400`,children:`Your decision`}),(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,V.jsx)(G,{variant:`gold`,onClick:()=>T.mutate(C.id),disabled:T.isPending||y||!S,children:`Accept`}),(0,V.jsx)(G,{variant:`destructive`,onClick:()=>E.mutate(C.id),disabled:E.isPending,children:`Reject`})]})]}):(0,V.jsxs)(`div`,{className:`shrink-0 border-t border-gray-800 bg-gray-950 px-4 py-3 text-sm text-gray-500 sm:px-5`,children:[`Read-only — already `,C.status,`. Switch to Waiting to review open proposals.`]})]})]})]})]})}var yH=`border-[#C4B643] data-[state=checked]:bg-[#C4B643] data-[state=checked]:text-[#0A0A07] data-[state=indeterminate]:bg-[#C4B643] data-[state=indeterminate]:text-[#0A0A07]`;function bH(){let{toast:e}=on(),t=Et(),[n,r]=(0,b.useState)(`open`),[i,a]=(0,b.useState)(``),[o,s]=(0,b.useState)(!1),[c,l]=(0,b.useState)(new Set),{data:u}=Vt({queryKey:[`/api/playbooks/vault`]}),d=u?.data??[],f=(0,b.useMemo)(()=>{let e=new Map;for(let t of d)e.set(t.id,t.title);return e},[d]),p={status:n===`all`?void 0:n,playbookId:i||void 0,excludeInProposal:n===`open`?!o:void 0},{data:m=[],isLoading:h}=Vt({queryKey:[`/api/feedback-signals`,p],queryFn:()=>Sh(p)}),g=Ht({mutationFn:e=>Ch(e),onSuccess:n=>{e({title:`Discarded ${n.discarded} signal(s)`}),l(new Set),t.invalidateQueries({queryKey:[`/api/feedback-signals`]})},onError:t=>{e({title:`Discard failed`,description:t.message,variant:`destructive`})}}),_=e=>{l(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},v=async()=>{let t=c.size>0?m.filter(e=>c.has(e.id)):m;if(t.length!==0){if(t.some(e=>!e.id)){e({title:`Copy blocked`,description:`Every signal must include an id for tracking.`,variant:`destructive`});return}try{await navigator.clipboard.writeText(Dh(t)),e({title:`Copied curation prompt`,description:`${t.length} signal id(s) included — paste into your IDE agent.`})}catch(t){e({title:`Copy failed`,description:t instanceof Error?t.message:`Clipboard unavailable`,variant:`destructive`})}}},y=[...c].filter(e=>m.find(t=>t.id===e)?.status===`open`),x=m.length>0&&m.every(e=>c.has(e.id)),S=m.some(e=>c.has(e.id));return(0,V.jsxs)(`div`,{className:`flex min-h-dvh flex-col bg-gray-950 text-gray-100`,children:[(0,V.jsx)(`header`,{className:`shrink-0 border-b border-gray-800 px-4 py-4 sm:px-6`,children:(0,V.jsxs)(`div`,{className:`mx-auto flex max-w-7xl flex-wrap items-center gap-3`,children:[(0,V.jsx)(ye,{href:`/`,children:(0,V.jsxs)(G,{variant:`ghost`,size:`sm`,className:`text-gray-300`,children:[(0,V.jsx)(li,{className:`mr-1 h-4 w-4`}),`Home`]})}),(0,V.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Feedback`}),(0,V.jsx)(jh,{variant:`outline`,children:m.length}),(0,V.jsx)(ye,{href:`/playbook-patches`,className:`ml-auto text-sm hover:underline`,style:{color:`#92E4DD`},children:`Playbook proposals →`})]})}),(0,V.jsxs)(`main`,{className:`mx-auto w-full max-w-7xl flex-1 space-y-4 px-4 py-6 sm:px-6`,children:[(0,V.jsx)(`p`,{className:`text-sm text-gray-400`,children:`Durable correction data for playbook enhancement. Filter by playbook, copy rows (with ids) for an IDE agent to propose, then accept the proposal to mark feedback solved.`}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3 rounded-lg border border-gray-800 bg-gray-900/40 p-3`,children:[(0,V.jsxs)(`label`,{className:`text-xs text-gray-500`,children:[`Playbook`,(0,V.jsxs)(`select`,{className:`mt-1 block min-w-[12rem] rounded border border-gray-700 bg-gray-950 px-2 py-1.5 text-sm text-gray-100`,value:i,onChange:e=>{a(e.target.value),l(new Set)},children:[(0,V.jsx)(`option`,{value:``,children:`All`}),d.map(e=>(0,V.jsx)(`option`,{value:e.id,children:e.title},e.id))]})]}),(0,V.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:[[`open`,`Open`],[`actioned`,`Actioned`],[`discarded`,`Discarded`],[`all`,`All`]].map(([e,t])=>{let i=n===e;return(0,V.jsx)(G,{size:`sm`,variant:i?`gold`:`outline`,className:i?void 0:`border-gray-600 bg-transparent text-gray-300 hover:bg-gray-800 hover:text-gray-100`,"aria-pressed":i,onClick:()=>{r(e),l(new Set)},children:t},e)})}),n===`open`&&(0,V.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-gray-400`,children:[(0,V.jsx)(`input`,{type:`checkbox`,checked:o,onChange:e=>s(e.target.checked)}),`Include already in an open proposal`]}),(0,V.jsxs)(`div`,{className:`ml-auto flex flex-wrap gap-2`,children:[(0,V.jsxs)(G,{size:`sm`,variant:`outline`,disabled:m.length===0,onClick:()=>void v(),children:[(0,V.jsx)(Ci,{className:`mr-1 h-3.5 w-3.5`}),`Copy for agent`,c.size>0?` (${c.size})`:``]}),(0,V.jsxs)(G,{size:`sm`,variant:`destructive`,disabled:y.length===0||g.isPending,onClick:()=>g.mutate(y),children:[(0,V.jsx)(Vi,{className:`mr-1 h-3.5 w-3.5`}),`Discard selected`]})]})]}),h&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:`Loading…`}),!h&&m.length===0&&(0,V.jsx)(`p`,{className:`text-sm text-gray-500`,children:`No signals match these filters.`}),!h&&m.length>0&&(0,V.jsx)(`div`,{className:`overflow-x-auto rounded-lg border border-gray-800`,children:(0,V.jsxs)(`table`,{className:`w-full min-w-[48rem] text-left text-sm`,children:[(0,V.jsx)(`thead`,{className:`border-b border-gray-800 bg-gray-900/80 text-xs uppercase text-gray-500`,children:(0,V.jsxs)(`tr`,{children:[(0,V.jsx)(`th`,{className:`w-10 px-3 py-2`,children:(0,V.jsx)(Dg,{checked:x?!0:S?`indeterminate`:!1,onCheckedChange:()=>{if(x){l(new Set);return}l(new Set(m.map(e=>e.id)))},"aria-label":`Select all visible signals`,disabled:m.length===0,className:yH})}),(0,V.jsx)(`th`,{className:`px-3 py-2`,children:`Excerpt`}),(0,V.jsx)(`th`,{className:`px-3 py-2`,children:`Failure`}),(0,V.jsx)(`th`,{className:`px-3 py-2`,children:`Playbook`}),(0,V.jsx)(`th`,{className:`px-3 py-2`,children:`Source`}),(0,V.jsx)(`th`,{className:`px-3 py-2`,children:`When`})]})}),(0,V.jsx)(`tbody`,{children:m.map(e=>{let t=wh(e);return(0,V.jsxs)(`tr`,{className:`border-b border-gray-800/80 align-top`,children:[(0,V.jsx)(`td`,{className:`px-3 py-2`,children:(0,V.jsx)(Dg,{checked:c.has(e.id),onCheckedChange:()=>_(e.id),"aria-label":`Select ${e.id}`,className:yH})}),(0,V.jsxs)(`td`,{className:`px-3 py-2`,children:[(0,V.jsx)(`p`,{className:`font-mono text-[11px] text-gray-600`,children:e.id}),(0,V.jsxs)(`p`,{className:`text-gray-200`,children:[`“`,e.userFeedbackExcerpt,`”`]}),t&&(0,V.jsx)(jh,{variant:`outline`,className:`mt-1 text-[10px]`,children:`In proposal`})]}),(0,V.jsx)(`td`,{className:`px-3 py-2 text-gray-400`,children:e.failureSummary}),(0,V.jsx)(`td`,{className:`px-3 py-2 text-gray-300`,children:e.candidatePlaybookId?f.get(e.candidatePlaybookId)??e.candidatePlaybookId:`—`}),(0,V.jsx)(`td`,{className:`px-3 py-2 text-gray-500`,children:e.source}),(0,V.jsx)(`td`,{className:`px-3 py-2 whitespace-nowrap text-gray-500`,children:new Date(e.createdAt).toLocaleString()})]},e.id)})})]})})]})]})}function xH(){let e=new URLSearchParams(window.location.search),t=e.get(`challenge`)??``,n=e.get(`session`)??``,[r,i]=(0,b.useState)(`idle`),[a,o]=(0,b.useState)(``);(0,b.useEffect)(()=>{(!t||!n)&&(i(`error`),o(`Missing challenge or session in URL.`))},[t,n]);async function s(){if(t&&n){i(`loading`);try{await H(`POST`,`/api/trusted-session/admin/approve`,{challengeId:t,runtimeSessionId:n}),i(`success`),o(`Admin elevation approved for this MCP session. Return to the agent.`)}catch(e){i(`error`),o(e instanceof Error?e.message:`Approval failed`)}}}return(0,V.jsx)(`div`,{className:`min-h-screen flex items-center justify-center p-6 bg-muted/30`,children:(0,V.jsxs)(IO,{className:`w-full max-w-md`,children:[(0,V.jsxs)(LO,{children:[(0,V.jsx)(RO,{children:`Approve agent-admin elevation`}),(0,V.jsx)(zO,{children:`Grants ephemeral deck-admin mode to one MCP session (30-minute lease). This does not change the folder's deck assignment.`})]}),(0,V.jsxs)(BO,{className:`space-y-4`,children:[t&&n?(0,V.jsxs)(`dl`,{className:`text-sm space-y-1 text-muted-foreground`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`dt`,{className:`inline font-medium text-foreground`,children:`Session `}),(0,V.jsx)(`dd`,{className:`inline font-mono text-xs`,children:n})]}),(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`dt`,{className:`inline font-medium text-foreground`,children:`Challenge `}),(0,V.jsx)(`dd`,{className:`inline font-mono text-xs`,children:t})]})]}):null,r===`success`?(0,V.jsx)(`p`,{className:`text-sm text-green-700 dark:text-green-400`,children:a}):r===`error`?(0,V.jsx)(`p`,{className:`text-sm text-destructive`,children:a}):null,r!==`success`&&t&&n?(0,V.jsx)(G,{onClick:()=>void s(),disabled:r===`loading`,className:`w-full`,children:r===`loading`?`Approving…`:`Approve elevation`}):null]})]})})}function SH(){return(0,V.jsxs)(xe,{children:[(0,V.jsx)(ve,{path:`/`,component:FO}),(0,V.jsx)(ve,{path:`/oauth/callback`,component:UO}),(0,V.jsx)(ve,{path:`/playbook-patches`,component:vH}),(0,V.jsx)(ve,{path:`/feedback-signals`,component:bH}),(0,V.jsx)(ve,{path:`/admin/approve`,component:xH}),(0,V.jsx)(ve,{path:`/mcp-test`,component:MV}),(0,V.jsx)(ve,{component:HO})]})}function CH(){let[e,t]=(0,b.useState)(!1);return(0,b.useEffect)(()=>{let e=!1;return qt().finally(()=>{e||t(!0)}),()=>{e=!0}},[]),e?(0,V.jsx)(Dt,{client:Kt,children:(0,V.jsxs)(wl,{children:[(0,V.jsx)(Za,{}),(0,V.jsx)(SH,{})]})}):(0,V.jsx)(`div`,{className:`flex min-h-screen items-center justify-center bg-[#0B1220] text-sm text-gray-300`,children:`Loading AgentDeck...`})}(0,x.createRoot)(document.getElementById(`root`)).render((0,V.jsx)(b.StrictMode,{children:(0,V.jsx)(CH,{})}));
|
package/static-ui/index.html
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
10
|
<link href="https://fonts.googleapis.com/css2?family=Architects+Daughter&family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&family=Fira+Code:wght@300..700&family=Geist+Mono:wght@100..900&family=Geist:wght@100..900&family=IBM+Plex+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=IBM+Plex+Sans:ital,wght@0,100..700;1,100..700&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&family=Lora:ital,wght@0,400..700;1,400..700&family=Merriweather:ital,opsz,wght@0,18..144,300..900;1,18..144,300..900&family=Montserrat:ital,wght@0,100..900;1,100..900&family=Open+Sans:ital,wght@0,300..800;1,300..800&family=Outfit:wght@100..900&family=Oxanium:wght@200..800&family=Playfair+Display:ital,wght@0,400..900;1,400..900&family=Plus+Jakarta+Sans:ital,wght@0,200..800;1,200..800&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto+Mono:ital,wght@0,100..700;1,100..700&family=Roboto:ital,wght@0,100..900;1,100..900&family=Source+Code+Pro:ital,wght@0,200..900;1,200..900&family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900&family=Space+Grotesk:wght@300..700&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet">
|
|
11
|
-
<script type="module" crossorigin src="/assets/index-
|
|
11
|
+
<script type="module" crossorigin src="/assets/index-Bb9ckehB.js"></script>
|
|
12
12
|
<link rel="stylesheet" crossorigin href="/assets/index-DRG5q9lJ.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|