@agent-deck/backend 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/bootstrap/authoring-guide.d.ts +3 -0
  3. package/dist/bootstrap/authoring-guide.d.ts.map +1 -0
  4. package/dist/bootstrap/authoring-guide.js +19 -0
  5. package/dist/bootstrap/authoring-guide.js.map +1 -0
  6. package/dist/bootstrap/cursor-project-slug.d.ts +9 -0
  7. package/dist/bootstrap/cursor-project-slug.d.ts.map +1 -0
  8. package/dist/bootstrap/cursor-project-slug.js +15 -0
  9. package/dist/bootstrap/cursor-project-slug.js.map +1 -0
  10. package/dist/bootstrap/digest-cursor-session.d.ts +11 -0
  11. package/dist/bootstrap/digest-cursor-session.d.ts.map +1 -0
  12. package/dist/bootstrap/digest-cursor-session.js +162 -0
  13. package/dist/bootstrap/digest-cursor-session.js.map +1 -0
  14. package/dist/bootstrap/digest-session.d.ts +3 -0
  15. package/dist/bootstrap/digest-session.d.ts.map +1 -0
  16. package/dist/bootstrap/digest-session.js +356 -0
  17. package/dist/bootstrap/digest-session.js.map +1 -0
  18. package/dist/bootstrap/enumerate-cursor.d.ts +13 -0
  19. package/dist/bootstrap/enumerate-cursor.d.ts.map +1 -0
  20. package/dist/bootstrap/enumerate-cursor.js +105 -0
  21. package/dist/bootstrap/enumerate-cursor.js.map +1 -0
  22. package/dist/bootstrap/enumerate.d.ts +7 -0
  23. package/dist/bootstrap/enumerate.d.ts.map +1 -0
  24. package/dist/bootstrap/enumerate.js +49 -0
  25. package/dist/bootstrap/enumerate.js.map +1 -0
  26. package/dist/bootstrap/extractors.d.ts +18 -0
  27. package/dist/bootstrap/extractors.d.ts.map +1 -0
  28. package/dist/bootstrap/extractors.js +97 -0
  29. package/dist/bootstrap/extractors.js.map +1 -0
  30. package/dist/bootstrap/feedback-lexicon.d.ts +7 -0
  31. package/dist/bootstrap/feedback-lexicon.d.ts.map +1 -0
  32. package/dist/bootstrap/feedback-lexicon.js +24 -0
  33. package/dist/bootstrap/feedback-lexicon.js.map +1 -0
  34. package/dist/bootstrap/feedback-moments.d.ts +3 -0
  35. package/dist/bootstrap/feedback-moments.d.ts.map +1 -0
  36. package/dist/bootstrap/feedback-moments.js +77 -0
  37. package/dist/bootstrap/feedback-moments.js.map +1 -0
  38. package/dist/bootstrap/handoff.d.ts +5 -0
  39. package/dist/bootstrap/handoff.d.ts.map +1 -0
  40. package/dist/bootstrap/handoff.js +22 -0
  41. package/dist/bootstrap/handoff.js.map +1 -0
  42. package/dist/bootstrap/index.d.ts +8 -0
  43. package/dist/bootstrap/index.d.ts.map +1 -0
  44. package/dist/bootstrap/index.js +20 -0
  45. package/dist/bootstrap/index.js.map +1 -0
  46. package/dist/bootstrap/real-intent.d.ts +14 -0
  47. package/dist/bootstrap/real-intent.d.ts.map +1 -0
  48. package/dist/bootstrap/real-intent.js +127 -0
  49. package/dist/bootstrap/real-intent.js.map +1 -0
  50. package/dist/bootstrap/run-bootstrap.d.ts +25 -0
  51. package/dist/bootstrap/run-bootstrap.d.ts.map +1 -0
  52. package/dist/bootstrap/run-bootstrap.js +221 -0
  53. package/dist/bootstrap/run-bootstrap.js.map +1 -0
  54. package/package.json +6 -2
  55. package/static-ui/assets/{index-D64LC4cn.js → index-ByDRJHcA.js} +45 -45
  56. package/static-ui/index.html +1 -1
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractRawUserText = extractRawUserText;
4
+ exports.unwrapCursorUserEnvelope = unwrapCursorUserEnvelope;
5
+ exports.isHostInjectedUserText = isHostInjectedUserText;
6
+ exports.isCursorHostInjection = isCursorHostInjection;
7
+ exports.extractUserText = extractUserText;
8
+ exports.isRealUserIntent = isRealUserIntent;
9
+ const CURSOR_USER_QUERY_RE = /<user_query>\s*([\s\S]*?)\s*<\/user_query>/i;
10
+ const CURSOR_TIMESTAMP_RE = /<timestamp>\s*[\s\S]*?\s*<\/timestamp>\s*/gi;
11
+ /** Structural Claude / Cursor host chrome — durable, locale-independent. */
12
+ const HOST_INJECTION_TAGS = [
13
+ '<local-command-caveat>',
14
+ '<command-name>',
15
+ '<command-message>',
16
+ '<local-command-stdout>',
17
+ '<system-reminder>',
18
+ '<mcp_meta_tools>',
19
+ ];
20
+ /**
21
+ * Supplemental English / host-phrasing prefixes (Cursor injections, session-continue).
22
+ * Structural tags + Cursor `<user_query>` gate are the durable filters; this list is a safety net.
23
+ */
24
+ const HOST_INJECTION_PREFIXES = [
25
+ 'Briefly inform the user about the task result',
26
+ 'The beginning of the above subagent result is already visible to the user',
27
+ 'If the available MCP tools do not fully support what the user asked you to do',
28
+ 'This session is being continued from a previous conversation',
29
+ 'Base directory for this skill:',
30
+ '===== BEGIN SESSION TRANSCRIPT',
31
+ ];
32
+ function isRecord(value) {
33
+ return typeof value === 'object' && value !== null;
34
+ }
35
+ /** Raw message text before Cursor envelope unwrap. */
36
+ function extractRawUserText(line) {
37
+ if (!isRecord(line) || !isRecord(line.message)) {
38
+ return null;
39
+ }
40
+ const { content } = line.message;
41
+ if (typeof content === 'string') {
42
+ return content;
43
+ }
44
+ if (!Array.isArray(content) || content.some((block) => !isRecord(block) || block.type !== 'text' || typeof block.text !== 'string')) {
45
+ return null;
46
+ }
47
+ return content.map((block) => block.text).join('\n');
48
+ }
49
+ /**
50
+ * Strip Cursor `<timestamp>` / unwrap `<user_query>…</user_query>`.
51
+ * Claude string content is unchanged (no those tags).
52
+ */
53
+ function unwrapCursorUserEnvelope(raw) {
54
+ let text = raw.replace(CURSOR_TIMESTAMP_RE, '').trim();
55
+ const match = CURSOR_USER_QUERY_RE.exec(text);
56
+ if (match) {
57
+ return match[1].trim();
58
+ }
59
+ return text.trim();
60
+ }
61
+ /** Host-injected user-role text for both Claude and Cursor (not a human task intent). */
62
+ function isHostInjectedUserText(raw) {
63
+ const lowerTags = raw; // tags are ASCII
64
+ if (HOST_INJECTION_TAGS.some((tag) => lowerTags.includes(tag))) {
65
+ return true;
66
+ }
67
+ const unwrapped = unwrapCursorUserEnvelope(raw);
68
+ return HOST_INJECTION_PREFIXES.some((prefix) => unwrapped.startsWith(prefix) || raw.includes(prefix));
69
+ }
70
+ /** @deprecated Prefer isHostInjectedUserText — kept for call-site clarity in Cursor-focused tests. */
71
+ function isCursorHostInjection(raw) {
72
+ return isHostInjectedUserText(raw);
73
+ }
74
+ function extractUserText(line) {
75
+ const raw = extractRawUserText(line);
76
+ if (raw === null) {
77
+ return null;
78
+ }
79
+ const text = unwrapCursorUserEnvelope(raw);
80
+ return text.length > 0 ? text : null;
81
+ }
82
+ function isRealUserIntent(line) {
83
+ if (!isRecord(line)) {
84
+ return false;
85
+ }
86
+ const transcriptLine = line;
87
+ if (transcriptLine.isSidechain === true) {
88
+ return false;
89
+ }
90
+ if (Object.prototype.hasOwnProperty.call(transcriptLine, 'toolUseResult')) {
91
+ return false;
92
+ }
93
+ const raw = extractRawUserText(transcriptLine);
94
+ if (raw === null || raw.trim().length === 0) {
95
+ return false;
96
+ }
97
+ // Shared host-injection gate (Claude slash/hook chrome + Cursor injected role:user).
98
+ if (isHostInjectedUserText(raw)) {
99
+ return false;
100
+ }
101
+ // Cursor role:user without <user_query> is almost always host chrome.
102
+ // Real Cursor turns (dated or legacy) wrap the body in <user_query>.
103
+ const messageRole = isRecord(transcriptLine.message) ? transcriptLine.message.role : undefined;
104
+ const looksLikeCursorUser = transcriptLine.role === 'user' || (messageRole === 'user' && transcriptLine.type !== 'user');
105
+ if (looksLikeCursorUser && !CURSOR_USER_QUERY_RE.test(raw) && !raw.includes('<timestamp>')) {
106
+ return false;
107
+ }
108
+ const text = unwrapCursorUserEnvelope(raw);
109
+ if (text.length === 0) {
110
+ return false;
111
+ }
112
+ const isUser = transcriptLine.type === 'user' ||
113
+ transcriptLine.role === 'user' ||
114
+ messageRole === 'user';
115
+ if (!isUser) {
116
+ return false;
117
+ }
118
+ // Cursor control lines (turn_ended, etc.) must not count even if they carry a message blob.
119
+ if (typeof transcriptLine.type === 'string' &&
120
+ transcriptLine.type !== 'user' &&
121
+ transcriptLine.type !== 'assistant' &&
122
+ transcriptLine.role !== 'user') {
123
+ return false;
124
+ }
125
+ return true;
126
+ }
127
+ //# sourceMappingURL=real-intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"real-intent.js","sourceRoot":"","sources":["../../src/bootstrap/real-intent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type BootstrapHost, type BootstrapManifest } from '@agent-deck/shared';
2
+ export type BootstrapHostOption = BootstrapHost | 'all';
3
+ export type BootstrapOptions = {
4
+ /** @deprecated Prefer claudeProjectsDir — kept for CLI --projects-dir compat (Claude tree). */
5
+ projectsDir?: string;
6
+ claudeProjectsDir?: string;
7
+ cursorProjectsDir?: string;
8
+ host?: BootstrapHostOption;
9
+ outDir?: string;
10
+ bootstrapRoot?: string;
11
+ workspace?: string;
12
+ since?: string;
13
+ limit?: number;
14
+ now?: () => Date;
15
+ };
16
+ export type BootstrapResult = {
17
+ outDir: string;
18
+ manifestPath: string;
19
+ guidePath: string;
20
+ latestPointerPath: string;
21
+ manifest: BootstrapManifest;
22
+ warning?: string;
23
+ };
24
+ export declare function runBootstrap(options?: BootstrapOptions): BootstrapResult;
25
+ //# sourceMappingURL=run-bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap/run-bootstrap.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAEvB,MAAM,oBAAoB,CAAC;AAQ5B,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,KAAK,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+FAA+F;IAC/F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAOF,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,eAAe,CAwG5E"}
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runBootstrap = runBootstrap;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_os_1 = __importDefault(require("node:os"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const shared_1 = require("@agent-deck/shared");
11
+ const authoring_guide_1 = require("./authoring-guide");
12
+ const cursor_project_slug_1 = require("./cursor-project-slug");
13
+ const digest_cursor_session_1 = require("./digest-cursor-session");
14
+ const digest_session_1 = require("./digest-session");
15
+ const enumerate_cursor_1 = require("./enumerate-cursor");
16
+ const enumerate_1 = require("./enumerate");
17
+ function runBootstrap(options = {}) {
18
+ const now = options.now ?? (() => new Date());
19
+ const host = options.host ?? 'all';
20
+ const claudeProjectsDir = node_path_1.default.resolve(options.claudeProjectsDir ??
21
+ options.projectsDir ??
22
+ process.env.AGENT_DECK_CLAUDE_PROJECTS_DIR ??
23
+ node_path_1.default.join(node_os_1.default.homedir(), '.claude', 'projects'));
24
+ const cursorProjectsDir = node_path_1.default.resolve(options.cursorProjectsDir ??
25
+ process.env.AGENT_DECK_CURSOR_PROJECTS_DIR ??
26
+ node_path_1.default.join(node_os_1.default.homedir(), '.cursor', 'projects'));
27
+ // Host-agnostic Agent Deck data root (same home as DB / logs), not under ~/.claude.
28
+ const bootstrapRoot = node_path_1.default.resolve(options.bootstrapRoot ?? node_path_1.default.join((0, shared_1.resolveAgentDeckHome)(), 'bootstrap'));
29
+ const outDir = resolveOutDir(options.outDir, bootstrapRoot, now);
30
+ const since = parseSince(options.since);
31
+ const workspace = options.workspace ? node_path_1.default.resolve(options.workspace) : undefined;
32
+ const limit = normalizeLimit(options.limit);
33
+ if (node_fs_1.default.existsSync(outDir)) {
34
+ throw new Error(`Bootstrap output already exists: ${outDir}`);
35
+ }
36
+ const digests = [];
37
+ if (host === 'claude' || host === 'all') {
38
+ for (const session of (0, enumerate_1.enumerateSessions)(claudeProjectsDir)) {
39
+ digests.push({
40
+ digest: (0, digest_session_1.digestSession)(session.sessionId, readJsonLines(session.filePath)),
41
+ mtimeMs: session.mtimeMs,
42
+ });
43
+ }
44
+ }
45
+ if (host === 'cursor' || host === 'all') {
46
+ const cursorSlug = workspace ? (0, cursor_project_slug_1.encodeCursorProjectSlug)(workspace) : undefined;
47
+ for (const session of (0, enumerate_cursor_1.enumerateCursorSessions)(cursorProjectsDir)) {
48
+ if (cursorSlug && session.projectSlug !== cursorSlug) {
49
+ continue;
50
+ }
51
+ digests.push({
52
+ digest: (0, digest_cursor_session_1.digestCursorSession)(session.sessionId, readJsonLines(session.filePath), session.projectSlug, {
53
+ ...(workspace && session.projectSlug === cursorSlug ? { workspaceRoot: workspace } : {}),
54
+ }),
55
+ mtimeMs: session.mtimeMs,
56
+ });
57
+ }
58
+ }
59
+ const filtered = digests
60
+ .filter(({ digest, mtimeMs }) => matchesFilters(digest, mtimeMs, workspace, since))
61
+ .sort((left, right) => right.mtimeMs - left.mtimeMs)
62
+ .slice(0, limit);
63
+ const digestDir = node_path_1.default.join(outDir, 'digests');
64
+ node_fs_1.default.mkdirSync(digestDir, { recursive: true });
65
+ const digestPaths = new Map();
66
+ const filenameCounts = new Map();
67
+ for (const { digest } of filtered) {
68
+ const filename = uniqueDigestFilename(digest, filenameCounts);
69
+ const digestPath = node_path_1.default.join(digestDir, filename);
70
+ node_fs_1.default.writeFileSync(digestPath, `${JSON.stringify(digest, null, 2)}\n`, 'utf8');
71
+ digestPaths.set(digest, digestPath);
72
+ }
73
+ const guidePath = node_path_1.default.join(outDir, 'authoring-guide.md');
74
+ node_fs_1.default.writeFileSync(guidePath, authoring_guide_1.AUTHORING_GUIDE_MARKDOWN, 'utf8');
75
+ const hosts = {
76
+ claude: filtered.filter(({ digest }) => digest.host === 'claude').length,
77
+ cursor: filtered.filter(({ digest }) => digest.host === 'cursor').length,
78
+ };
79
+ const manifest = shared_1.BootstrapManifestSchema.parse({
80
+ schemaVersion: 1,
81
+ generatedAt: now().toISOString(),
82
+ digestDir,
83
+ guideRef: guidePath,
84
+ totalSessions: filtered.length,
85
+ hosts,
86
+ workspaces: buildWorkspaces(filtered, digestPaths),
87
+ });
88
+ const manifestPath = node_path_1.default.join(outDir, 'manifest.json');
89
+ node_fs_1.default.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8');
90
+ node_fs_1.default.mkdirSync(bootstrapRoot, { recursive: true });
91
+ const latestPointerPath = node_path_1.default.join(bootstrapRoot, 'latest');
92
+ writeLatestPointer(latestPointerPath, outDir);
93
+ return {
94
+ outDir,
95
+ manifestPath,
96
+ guidePath,
97
+ latestPointerPath,
98
+ manifest,
99
+ ...(filtered.length < 5
100
+ ? { warning: `Only ${filtered.length} sessions found; five or more are recommended.` }
101
+ : {}),
102
+ };
103
+ }
104
+ function writeLatestPointer(latestPointerPath, outDir) {
105
+ if (node_fs_1.default.existsSync(latestPointerPath)) {
106
+ const stat = node_fs_1.default.lstatSync(latestPointerPath);
107
+ if (!stat.isFile()) {
108
+ node_fs_1.default.unlinkSync(latestPointerPath);
109
+ }
110
+ }
111
+ node_fs_1.default.writeFileSync(latestPointerPath, `${outDir}\n`, 'utf8');
112
+ }
113
+ function resolveOutDir(outDir, bootstrapRoot, now) {
114
+ if (outDir) {
115
+ return node_path_1.default.resolve(outDir);
116
+ }
117
+ const timestamp = now().toISOString();
118
+ let candidate = node_path_1.default.join(bootstrapRoot, timestamp);
119
+ let suffix = 1;
120
+ while (node_fs_1.default.existsSync(candidate)) {
121
+ candidate = node_path_1.default.join(bootstrapRoot, `${timestamp}-${suffix}`);
122
+ suffix += 1;
123
+ }
124
+ return candidate;
125
+ }
126
+ function parseSince(since) {
127
+ if (!since) {
128
+ return undefined;
129
+ }
130
+ const parsed = Date.parse(since);
131
+ if (Number.isNaN(parsed)) {
132
+ throw new Error(`Invalid --since date: ${since}`);
133
+ }
134
+ return parsed;
135
+ }
136
+ function normalizeLimit(limit) {
137
+ if (limit === undefined) {
138
+ return Number.POSITIVE_INFINITY;
139
+ }
140
+ if (!Number.isInteger(limit) || limit < 0) {
141
+ throw new Error(`Invalid limit: ${limit}`);
142
+ }
143
+ return limit;
144
+ }
145
+ function readJsonLines(filePath) {
146
+ try {
147
+ return node_fs_1.default
148
+ .readFileSync(filePath, 'utf8')
149
+ .split('\n')
150
+ .filter((line) => line.trim())
151
+ .map((line) => {
152
+ try {
153
+ return JSON.parse(line);
154
+ }
155
+ catch {
156
+ return undefined;
157
+ }
158
+ });
159
+ }
160
+ catch {
161
+ return [];
162
+ }
163
+ }
164
+ function matchesFilters(digest, mtimeMs, workspace, since) {
165
+ if (workspace) {
166
+ const slug = (0, cursor_project_slug_1.encodeCursorProjectSlug)(workspace);
167
+ const matches = digest.workspaceRoot === workspace ||
168
+ digest.workspaceSlug === slug ||
169
+ digest.workspaceLabel === slug ||
170
+ digest.workspaceRoot === slug;
171
+ if (!matches) {
172
+ return false;
173
+ }
174
+ }
175
+ return (since === undefined ||
176
+ mtimeMs >= since ||
177
+ (!Number.isNaN(Date.parse(digest.startedAt)) && Date.parse(digest.startedAt) >= since));
178
+ }
179
+ function uniqueDigestFilename(digest, counts) {
180
+ const base = `${digest.host}__${sanitizeFilename(digest.workspaceLabel || node_path_1.default.basename(digest.workspaceRoot) || 'unknown')}__${sanitizeFilename(digest.sessionId)}`;
181
+ const count = counts.get(base) ?? 0;
182
+ counts.set(base, count + 1);
183
+ return `${base}${count === 0 ? '' : `-${count + 1}`}.json`;
184
+ }
185
+ function sanitizeFilename(value) {
186
+ return value.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'unknown';
187
+ }
188
+ function buildWorkspaces(records, digestPaths) {
189
+ const groups = new Map();
190
+ for (const { digest } of records) {
191
+ const key = digest.workspaceSlug || digest.workspaceRoot;
192
+ const existing = groups.get(key);
193
+ const absRoot = digest.workspaceRoot.startsWith('/') ? digest.workspaceRoot : undefined;
194
+ if (!existing) {
195
+ groups.set(key, {
196
+ workspaceRoot: absRoot ?? digest.workspaceRoot,
197
+ label: digest.workspaceLabel || node_path_1.default.basename(digest.workspaceRoot) || 'unknown',
198
+ ...(digest.workspaceSlug ? { workspaceSlug: digest.workspaceSlug } : {}),
199
+ digestPaths: [digestPaths.get(digest)],
200
+ });
201
+ continue;
202
+ }
203
+ existing.digestPaths.push(digestPaths.get(digest));
204
+ if (absRoot && !existing.workspaceRoot.startsWith('/')) {
205
+ existing.workspaceRoot = absRoot;
206
+ }
207
+ if (digest.workspaceSlug) {
208
+ existing.workspaceSlug = digest.workspaceSlug;
209
+ }
210
+ }
211
+ return [...groups.values()]
212
+ .sort((left, right) => left.workspaceRoot.localeCompare(right.workspaceRoot))
213
+ .map((group) => ({
214
+ workspaceRoot: group.workspaceRoot,
215
+ label: group.label,
216
+ ...(group.workspaceSlug ? { workspaceSlug: group.workspaceSlug } : {}),
217
+ sessionCount: group.digestPaths.length,
218
+ digestPaths: group.digestPaths.sort((left, right) => left.localeCompare(right)),
219
+ }));
220
+ }
221
+ //# sourceMappingURL=run-bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap/run-bootstrap.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.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "Agent Deck backend API, MCP server, and vault",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,6 +17,10 @@
17
17
  "types": "./dist/mcp-index.d.ts",
18
18
  "default": "./dist/mcp-index.js"
19
19
  },
20
+ "./bootstrap": {
21
+ "types": "./dist/bootstrap/index.d.ts",
22
+ "default": "./dist/bootstrap/index.js"
23
+ },
20
24
  "./playbooks/stub-sync": {
21
25
  "types": "./dist/playbooks/stub-sync.d.ts",
22
26
  "default": "./dist/playbooks/stub-sync.js"
@@ -42,7 +46,7 @@
42
46
  "prepublishOnly": "node ../../scripts/pre-publish-check.mjs && npm run build"
43
47
  },
44
48
  "dependencies": {
45
- "@agent-deck/shared": "^1.5.0",
49
+ "@agent-deck/shared": "^1.5.1",
46
50
  "@fastify/cors": "^10.0.0",
47
51
  "@fastify/static": "^8.0.0",
48
52
  "@fastify/websocket": "^11.2.0",