@spool-lab/core 0.4.1 → 0.4.20
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/db/db.d.ts +28 -1
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +320 -17
- package/dist/db/db.js.map +1 -1
- package/dist/db/queries.d.ts +36 -11
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +118 -83
- package/dist/db/queries.js.map +1 -1
- package/dist/db/share-drafts.d.ts +51 -0
- package/dist/db/share-drafts.d.ts.map +1 -0
- package/dist/db/share-drafts.js +47 -0
- package/dist/db/share-drafts.js.map +1 -0
- package/dist/doctor/checks/config.d.ts +3 -0
- package/dist/doctor/checks/config.d.ts.map +1 -0
- package/dist/doctor/checks/config.js +123 -0
- package/dist/doctor/checks/config.js.map +1 -0
- package/dist/doctor/checks/db.d.ts +3 -0
- package/dist/doctor/checks/db.d.ts.map +1 -0
- package/dist/doctor/checks/db.js +225 -0
- package/dist/doctor/checks/db.js.map +1 -0
- package/dist/doctor/checks/env.d.ts +3 -0
- package/dist/doctor/checks/env.d.ts.map +1 -0
- package/dist/doctor/checks/env.js +70 -0
- package/dist/doctor/checks/env.js.map +1 -0
- package/dist/doctor/checks/index.d.ts +3 -0
- package/dist/doctor/checks/index.d.ts.map +1 -0
- package/dist/doctor/checks/index.js +13 -0
- package/dist/doctor/checks/index.js.map +1 -0
- package/dist/doctor/checks/native.d.ts +3 -0
- package/dist/doctor/checks/native.d.ts.map +1 -0
- package/dist/doctor/checks/native.js +42 -0
- package/dist/doctor/checks/native.js.map +1 -0
- package/dist/doctor/checks/versions.d.ts +3 -0
- package/dist/doctor/checks/versions.d.ts.map +1 -0
- package/dist/doctor/checks/versions.js +79 -0
- package/dist/doctor/checks/versions.js.map +1 -0
- package/dist/doctor/index.d.ts +3 -0
- package/dist/doctor/index.d.ts.map +1 -0
- package/dist/doctor/index.js +3 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/preflight.d.ts +18 -0
- package/dist/doctor/preflight.d.ts.map +1 -0
- package/dist/doctor/preflight.js +27 -0
- package/dist/doctor/preflight.js.map +1 -0
- package/dist/doctor/runner.d.ts +12 -0
- package/dist/doctor/runner.d.ts.map +1 -0
- package/dist/doctor/runner.js +37 -0
- package/dist/doctor/runner.js.map +1 -0
- package/dist/doctor/types.d.ts +27 -0
- package/dist/doctor/types.d.ts.map +1 -0
- package/dist/doctor/types.js +2 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/migrations/agent-search-cleanup.d.ts +36 -0
- package/dist/migrations/agent-search-cleanup.d.ts.map +1 -0
- package/dist/migrations/agent-search-cleanup.js +182 -0
- package/dist/migrations/agent-search-cleanup.js.map +1 -0
- package/dist/migrations/worktree-identity-upgrade.d.ts +31 -0
- package/dist/migrations/worktree-identity-upgrade.d.ts.map +1 -0
- package/dist/migrations/worktree-identity-upgrade.js +22 -0
- package/dist/migrations/worktree-identity-upgrade.js.map +1 -0
- package/dist/parsers/claude.d.ts.map +1 -1
- package/dist/parsers/claude.js +25 -12
- package/dist/parsers/claude.js.map +1 -1
- package/dist/parsers/codex.d.ts.map +1 -1
- package/dist/parsers/codex.js +32 -5
- package/dist/parsers/codex.js.map +1 -1
- package/dist/parsers/gemini.d.ts.map +1 -1
- package/dist/parsers/gemini.js +5 -5
- package/dist/parsers/gemini.js.map +1 -1
- package/dist/parsers/spool-prelude.d.ts +16 -0
- package/dist/parsers/spool-prelude.d.ts.map +1 -0
- package/dist/parsers/spool-prelude.js +21 -0
- package/dist/parsers/spool-prelude.js.map +1 -0
- package/dist/projects/display-name.d.ts +2 -0
- package/dist/projects/display-name.d.ts.map +1 -0
- package/dist/projects/display-name.js +8 -0
- package/dist/projects/display-name.js.map +1 -0
- package/dist/projects/fs.d.ts +3 -0
- package/dist/projects/fs.d.ts.map +1 -0
- package/dist/projects/fs.js +20 -0
- package/dist/projects/fs.js.map +1 -0
- package/dist/projects/groups.d.ts +4 -0
- package/dist/projects/groups.d.ts.map +1 -0
- package/dist/projects/groups.js +20 -0
- package/dist/projects/groups.js.map +1 -0
- package/dist/projects/identity-synthesizers.d.ts +22 -0
- package/dist/projects/identity-synthesizers.d.ts.map +1 -0
- package/dist/projects/identity-synthesizers.js +29 -0
- package/dist/projects/identity-synthesizers.js.map +1 -0
- package/dist/projects/identity.d.ts +16 -0
- package/dist/projects/identity.d.ts.map +1 -0
- package/dist/projects/identity.js +172 -0
- package/dist/projects/identity.js.map +1 -0
- package/dist/projects/sessions.d.ts +40 -0
- package/dist/projects/sessions.d.ts.map +1 -0
- package/dist/projects/sessions.js +151 -0
- package/dist/projects/sessions.js.map +1 -0
- package/dist/projects/worktree-resolvers.d.ts +19 -0
- package/dist/projects/worktree-resolvers.d.ts.map +1 -0
- package/dist/projects/worktree-resolvers.js +65 -0
- package/dist/projects/worktree-resolvers.js.map +1 -0
- package/dist/security/index.d.ts +14 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +7 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/maintenance.d.ts +15 -0
- package/dist/security/maintenance.d.ts.map +1 -0
- package/dist/security/maintenance.js +68 -0
- package/dist/security/maintenance.js.map +1 -0
- package/dist/security/profile.d.ts +47 -0
- package/dist/security/profile.d.ts.map +1 -0
- package/dist/security/profile.js +122 -0
- package/dist/security/profile.js.map +1 -0
- package/dist/security/purge.d.ts +49 -0
- package/dist/security/purge.d.ts.map +1 -0
- package/dist/security/purge.js +159 -0
- package/dist/security/purge.js.map +1 -0
- package/dist/security/repo.d.ts +141 -0
- package/dist/security/repo.d.ts.map +1 -0
- package/dist/security/repo.js +469 -0
- package/dist/security/repo.js.map +1 -0
- package/dist/security/scan.d.ts +50 -0
- package/dist/security/scan.d.ts.map +1 -0
- package/dist/security/scan.js +120 -0
- package/dist/security/scan.js.map +1 -0
- package/dist/security/types.d.ts +128 -0
- package/dist/security/types.d.ts.map +1 -0
- package/dist/security/types.js +10 -0
- package/dist/security/types.js.map +1 -0
- package/dist/security/worker.d.ts +53 -0
- package/dist/security/worker.d.ts.map +1 -0
- package/dist/security/worker.js +180 -0
- package/dist/security/worker.js.map +1 -0
- package/dist/sync/source-paths.d.ts +1 -0
- package/dist/sync/source-paths.d.ts.map +1 -1
- package/dist/sync/source-paths.js +13 -3
- package/dist/sync/source-paths.js.map +1 -1
- package/dist/sync/syncer.d.ts +8 -1
- package/dist/sync/syncer.d.ts.map +1 -1
- package/dist/sync/syncer.js +37 -17
- package/dist/sync/syncer.js.map +1 -1
- package/dist/types.d.ts +28 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/util/resolve-bin.d.ts +34 -0
- package/dist/util/resolve-bin.d.ts.map +1 -1
- package/dist/util/resolve-bin.js +175 -20
- package/dist/util/resolve-bin.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type SqliteStatus = {
|
|
2
|
+
ok: true;
|
|
3
|
+
} | {
|
|
4
|
+
ok: false;
|
|
5
|
+
error: Error;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Confirms the bundled better-sqlite3 binary can actually load and open a
|
|
9
|
+
* database. The most common failure is a Node ABI mismatch (NODE_MODULE_VERSION)
|
|
10
|
+
* after upgrading Node without rebuilding native modules — that error message
|
|
11
|
+
* is verbose, so we capture it once here and let downstream checks short-circuit
|
|
12
|
+
* with a short pointer to `native.sqlite`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function probeSqlite(): SqliteStatus;
|
|
15
|
+
/** Test hook — reset the cache between runs. */
|
|
16
|
+
export declare function _resetProbeForTest(): void;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/doctor/preflight.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAA;AAI9D;;;;;;GAMG;AACH,wBAAgB,WAAW,IAAI,YAAY,CAU1C;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
let cached = null;
|
|
3
|
+
/**
|
|
4
|
+
* Confirms the bundled better-sqlite3 binary can actually load and open a
|
|
5
|
+
* database. The most common failure is a Node ABI mismatch (NODE_MODULE_VERSION)
|
|
6
|
+
* after upgrading Node without rebuilding native modules — that error message
|
|
7
|
+
* is verbose, so we capture it once here and let downstream checks short-circuit
|
|
8
|
+
* with a short pointer to `native.sqlite`.
|
|
9
|
+
*/
|
|
10
|
+
export function probeSqlite() {
|
|
11
|
+
if (cached)
|
|
12
|
+
return cached;
|
|
13
|
+
try {
|
|
14
|
+
const db = new Database(':memory:');
|
|
15
|
+
db.close();
|
|
16
|
+
cached = { ok: true };
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
cached = { ok: false, error: err instanceof Error ? err : new Error(String(err)) };
|
|
20
|
+
}
|
|
21
|
+
return cached;
|
|
22
|
+
}
|
|
23
|
+
/** Test hook — reset the cache between runs. */
|
|
24
|
+
export function _resetProbeForTest() {
|
|
25
|
+
cached = null;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/doctor/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAIrC,IAAI,MAAM,GAAwB,IAAI,CAAA;AAEtC;;;;;;GAMG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IACzB,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAA;QACnC,EAAE,CAAC,KAAK,EAAE,CAAA;QACV,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA;IACpF,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,IAAI,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Check, CheckResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Run every check (or a filtered subset by id). Each check is isolated:
|
|
4
|
+
* a thrown error is converted into an `error` result so one bad check
|
|
5
|
+
* cannot mask the rest of the report.
|
|
6
|
+
*
|
|
7
|
+
* Checks are run sequentially — they share filesystem state and a few
|
|
8
|
+
* (read-only) sqlite connections, and parallelism would buy almost nothing.
|
|
9
|
+
*/
|
|
10
|
+
export declare function runChecks(filterIds?: readonly string[]): Promise<CheckResult[]>;
|
|
11
|
+
export declare function listChecks(): Array<Pick<Check, 'id' | 'category' | 'title'>>;
|
|
12
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/doctor/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGpD;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CASrF;AAgBD,wBAAgB,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC,CAAC,CAE5E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { allChecks } from './checks/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Run every check (or a filtered subset by id). Each check is isolated:
|
|
4
|
+
* a thrown error is converted into an `error` result so one bad check
|
|
5
|
+
* cannot mask the rest of the report.
|
|
6
|
+
*
|
|
7
|
+
* Checks are run sequentially — they share filesystem state and a few
|
|
8
|
+
* (read-only) sqlite connections, and parallelism would buy almost nothing.
|
|
9
|
+
*/
|
|
10
|
+
export async function runChecks(filterIds) {
|
|
11
|
+
const selected = filterIds && filterIds.length > 0
|
|
12
|
+
? allChecks.filter(c => filterIds.includes(c.id))
|
|
13
|
+
: allChecks;
|
|
14
|
+
const results = [];
|
|
15
|
+
for (const check of selected) {
|
|
16
|
+
results.push(await runOne(check));
|
|
17
|
+
}
|
|
18
|
+
return results;
|
|
19
|
+
}
|
|
20
|
+
async function runOne(check) {
|
|
21
|
+
try {
|
|
22
|
+
return await check.run();
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
return {
|
|
26
|
+
id: check.id,
|
|
27
|
+
category: check.category,
|
|
28
|
+
title: check.title,
|
|
29
|
+
severity: 'error',
|
|
30
|
+
message: `Check threw: ${err instanceof Error ? err.message : String(err)}`,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function listChecks() {
|
|
35
|
+
return allChecks.map(({ id, category, title }) => ({ id, category, title }));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/doctor/runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE7C;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,SAA6B;IAC3D,MAAM,QAAQ,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,OAAO,GAAkB,EAAE,CAAA;IACjC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACnC,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,KAAY;IAChC,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,CAAA;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,gBAAgB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SAC5E,CAAA;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;AAC9E,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type Severity = 'ok' | 'warn' | 'error';
|
|
2
|
+
export type Category = 'env' | 'versions' | 'db' | 'config' | 'native';
|
|
3
|
+
export interface FixDescriptor {
|
|
4
|
+
description: string;
|
|
5
|
+
destructive: boolean;
|
|
6
|
+
apply: () => Promise<FixResult> | FixResult;
|
|
7
|
+
}
|
|
8
|
+
export interface FixResult {
|
|
9
|
+
ok: boolean;
|
|
10
|
+
message: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CheckResult {
|
|
13
|
+
id: string;
|
|
14
|
+
category: Category;
|
|
15
|
+
title: string;
|
|
16
|
+
severity: Severity;
|
|
17
|
+
message: string;
|
|
18
|
+
details?: Record<string, unknown>;
|
|
19
|
+
fix?: FixDescriptor;
|
|
20
|
+
}
|
|
21
|
+
export interface Check {
|
|
22
|
+
id: string;
|
|
23
|
+
category: Category;
|
|
24
|
+
title: string;
|
|
25
|
+
run: () => Promise<CheckResult> | CheckResult;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/doctor/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAA;AAE9C,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEtE,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;CAC5C;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,QAAQ,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,GAAG,CAAC,EAAE,aAAa,CAAA;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAA;CAC9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/doctor/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
export * from './types.js';
|
|
2
2
|
export * from './db/db.js';
|
|
3
3
|
export * from './db/queries.js';
|
|
4
|
+
export * from './db/share-drafts.js';
|
|
4
5
|
export * from './parsers/claude.js';
|
|
5
6
|
export * from './parsers/codex.js';
|
|
6
7
|
export * from './parsers/gemini.js';
|
|
8
|
+
export * from './parsers/spool-prelude.js';
|
|
7
9
|
export * from './sync/syncer.js';
|
|
8
10
|
export * from './sync/watcher.js';
|
|
9
|
-
export
|
|
11
|
+
export * from './projects/groups.js';
|
|
12
|
+
export * from './projects/sessions.js';
|
|
13
|
+
export { resolveSystemBinary, resolveSystemBinaryAsync, cachedResolve, cachedResolveAsync, clearResolveCache, hydrateResolveCache, getResolveCacheSnapshot, } from './util/resolve-bin.js';
|
|
14
|
+
export * from './doctor/index.js';
|
|
15
|
+
export * from './security/index.js';
|
|
10
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
export * from './types.js';
|
|
2
2
|
export * from './db/db.js';
|
|
3
3
|
export * from './db/queries.js';
|
|
4
|
+
export * from './db/share-drafts.js';
|
|
4
5
|
export * from './parsers/claude.js';
|
|
5
6
|
export * from './parsers/codex.js';
|
|
6
7
|
export * from './parsers/gemini.js';
|
|
8
|
+
export * from './parsers/spool-prelude.js';
|
|
7
9
|
export * from './sync/syncer.js';
|
|
8
10
|
export * from './sync/watcher.js';
|
|
9
|
-
export
|
|
11
|
+
export * from './projects/groups.js';
|
|
12
|
+
export * from './projects/sessions.js';
|
|
13
|
+
export { resolveSystemBinary, resolveSystemBinaryAsync, cachedResolve, cachedResolveAsync, clearResolveCache, hydrateResolveCache, getResolveCacheSnapshot, } from './util/resolve-bin.js';
|
|
14
|
+
export * from './doctor/index.js';
|
|
15
|
+
export * from './security/index.js';
|
|
10
16
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
import type { SessionSource } from '../types.js';
|
|
3
|
+
export interface Candidate {
|
|
4
|
+
sessionId: number;
|
|
5
|
+
sessionUuid: string;
|
|
6
|
+
source: SessionSource;
|
|
7
|
+
sourceId: number;
|
|
8
|
+
currentProjectId: number;
|
|
9
|
+
currentTitle: string;
|
|
10
|
+
extractedQuery: string | null;
|
|
11
|
+
}
|
|
12
|
+
export interface MigrationPlan {
|
|
13
|
+
candidates: Candidate[];
|
|
14
|
+
/** projectId → number of candidate sessions currently in it */
|
|
15
|
+
affectedProjects: Map<number, number>;
|
|
16
|
+
}
|
|
17
|
+
export interface MigrationResult {
|
|
18
|
+
sessionsTouched: number;
|
|
19
|
+
sessionsTitleUpdated: number;
|
|
20
|
+
sessionsExtractionFailed: number;
|
|
21
|
+
projectsDeleted: number[];
|
|
22
|
+
}
|
|
23
|
+
export declare function computeMigrationPlan(db: Database.Database): MigrationPlan;
|
|
24
|
+
/**
|
|
25
|
+
* Find the user's real query inside a candidate session's stored messages.
|
|
26
|
+
* Walks user messages in seq order, skips known-noise rows, and returns:
|
|
27
|
+
* - the substring captured by `User query: "(.+)"` if the message is the
|
|
28
|
+
* Spool buildPrompt blob, or
|
|
29
|
+
* - the message itself, trimmed and capped at 120 chars, otherwise.
|
|
30
|
+
* Returns null when no usable user message exists (extreme corruption case).
|
|
31
|
+
*/
|
|
32
|
+
export declare function extractQueryForSession(db: Database.Database, sessionId: number): string | null;
|
|
33
|
+
export declare function applyMigration(db: Database.Database, plan: MigrationPlan): MigrationResult;
|
|
34
|
+
/** Convenience entry point used by the v9 schema migration. */
|
|
35
|
+
export declare function runAgentSearchCleanup(db: Database.Database): MigrationResult;
|
|
36
|
+
//# sourceMappingURL=agent-search-cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-search-cleanup.d.ts","sourceRoot":"","sources":["../../src/migrations/agent-search-cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AA0ChD,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,+DAA+D;IAC/D,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAA;IACvB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,wBAAwB,EAAE,MAAM,CAAA;IAChC,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,aAAa,CA2DzE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0B9F;AAOD,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,eAAe,CA0D1F;AAED,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,eAAe,CAG5E"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { getOrCreateAskProject } from '../db/queries.js';
|
|
2
|
+
/**
|
|
3
|
+
* v9 data migration: rewrites historical agent-search sessions that were
|
|
4
|
+
* indexed before #150-#153 landed.
|
|
5
|
+
*
|
|
6
|
+
* Pre-#151 agent search relied on the next sync to pick up the JSONL the
|
|
7
|
+
* downstream agent (Claude / Codex) wrote on its own. The JSONL was full of
|
|
8
|
+
* noise (Claude Code's <local-command-caveat>, /model default slash command,
|
|
9
|
+
* Spool's own giant system prompt) and landed in whatever folder Electron's
|
|
10
|
+
* process.cwd() pointed at — usually "/" in prod, packages/app in dev.
|
|
11
|
+
* Result: every old agent-search session sits under a synthetic project
|
|
12
|
+
* named "(root)" or similar, with a derived title that's just
|
|
13
|
+
* "Caveat: The messages below..." or "You have access to a local
|
|
14
|
+
* knowledge base...".
|
|
15
|
+
*
|
|
16
|
+
* This migration finds those sessions by an explicit triple-gate, extracts
|
|
17
|
+
* the user's real query out of the long Spool-system-prompt blob, rewrites
|
|
18
|
+
* title + title_source='spool', and moves the session to the per-source
|
|
19
|
+
* "Asks" virtual project. Empty old projects are deleted.
|
|
20
|
+
*
|
|
21
|
+
* Runs once via the v8→v9 schema-migration step. Idempotent: a re-run sees
|
|
22
|
+
* 0 candidates because all migrated rows have title_source='spool'.
|
|
23
|
+
*/
|
|
24
|
+
const CAVEAT_TITLE_PREFIX = 'Caveat: The messages below were generated by the user while running local commands';
|
|
25
|
+
const SPOOL_PROMPT_TITLE_PREFIX = 'You have access to a local knowledge base called Spool';
|
|
26
|
+
const SPOOL_PROMPT_BODY_MARKER = 'You have access to a local knowledge base called Spool';
|
|
27
|
+
// Noise message patterns left over from old-parser sync. These were the
|
|
28
|
+
// inner text of <local-command-caveat>, <command-args>, <local-command-stdout>
|
|
29
|
+
// tags before #153 added the strip rules.
|
|
30
|
+
const NOISE_PATTERNS = [
|
|
31
|
+
/^Caveat: The messages below were generated by the user while running local commands/i,
|
|
32
|
+
/^default$/,
|
|
33
|
+
/^Set model to /i,
|
|
34
|
+
/^The user opened/i,
|
|
35
|
+
];
|
|
36
|
+
const USER_QUERY_RE = /User query:\s*"([\s\S]+?)"\s*$/;
|
|
37
|
+
export function computeMigrationPlan(db) {
|
|
38
|
+
// A row is a candidate only when ALL THREE hold:
|
|
39
|
+
// (a) title_source = 'derived' (not yet migrated by Spool itself)
|
|
40
|
+
// (b) the title is one of the noise prefixes pre-#153 Spool agent
|
|
41
|
+
// search produced (cheap title-based filter)
|
|
42
|
+
// (c) at least one of the session's user messages contains the Spool
|
|
43
|
+
// buildPrompt blob signature — text that no human ever types and
|
|
44
|
+
// no agent ever generates, so it uniquely identifies a session
|
|
45
|
+
// that came out of Spool's agent search pipeline.
|
|
46
|
+
//
|
|
47
|
+
// (c) is what guards real coding sessions whose first message happened
|
|
48
|
+
// to be Claude Code's injected <local-command-caveat>. An earlier draft
|
|
49
|
+
// also accepted "cwd is in a Spool-specific path" as an alternative to
|
|
50
|
+
// (c), but those paths were either too narrow (only my dev environment)
|
|
51
|
+
// or too broad (cwd='/' could be anyone running claude from the
|
|
52
|
+
// filesystem root). The blob check is the only signal that's both
|
|
53
|
+
// Spool-unique and cross-environment robust.
|
|
54
|
+
const rows = db.prepare(`
|
|
55
|
+
SELECT s.id, s.session_uuid, s.source_id, s.project_id, s.title,
|
|
56
|
+
src.name AS source_name
|
|
57
|
+
FROM sessions s
|
|
58
|
+
JOIN sources src ON src.id = s.source_id
|
|
59
|
+
WHERE s.title_source = 'derived'
|
|
60
|
+
AND (s.title LIKE ? OR s.title LIKE ?)
|
|
61
|
+
AND EXISTS (
|
|
62
|
+
SELECT 1 FROM messages m
|
|
63
|
+
WHERE m.session_id = s.id
|
|
64
|
+
AND m.role = 'user'
|
|
65
|
+
AND m.content_text LIKE ?
|
|
66
|
+
)
|
|
67
|
+
`).all(`${CAVEAT_TITLE_PREFIX}%`, `${SPOOL_PROMPT_TITLE_PREFIX}%`, `%${SPOOL_PROMPT_BODY_MARKER}%`);
|
|
68
|
+
const candidates = rows.map(r => ({
|
|
69
|
+
sessionId: r.id,
|
|
70
|
+
sessionUuid: r.session_uuid,
|
|
71
|
+
source: r.source_name,
|
|
72
|
+
sourceId: r.source_id,
|
|
73
|
+
currentProjectId: r.project_id,
|
|
74
|
+
currentTitle: r.title,
|
|
75
|
+
extractedQuery: extractQueryForSession(db, r.id),
|
|
76
|
+
}));
|
|
77
|
+
const affectedProjects = new Map();
|
|
78
|
+
for (const c of candidates) {
|
|
79
|
+
affectedProjects.set(c.currentProjectId, (affectedProjects.get(c.currentProjectId) ?? 0) + 1);
|
|
80
|
+
}
|
|
81
|
+
return { candidates, affectedProjects };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Find the user's real query inside a candidate session's stored messages.
|
|
85
|
+
* Walks user messages in seq order, skips known-noise rows, and returns:
|
|
86
|
+
* - the substring captured by `User query: "(.+)"` if the message is the
|
|
87
|
+
* Spool buildPrompt blob, or
|
|
88
|
+
* - the message itself, trimmed and capped at 120 chars, otherwise.
|
|
89
|
+
* Returns null when no usable user message exists (extreme corruption case).
|
|
90
|
+
*/
|
|
91
|
+
export function extractQueryForSession(db, sessionId) {
|
|
92
|
+
const messages = db.prepare(`
|
|
93
|
+
SELECT content_text FROM messages
|
|
94
|
+
WHERE session_id = ? AND role = 'user'
|
|
95
|
+
ORDER BY seq
|
|
96
|
+
`).all(sessionId);
|
|
97
|
+
for (const m of messages) {
|
|
98
|
+
const text = m.content_text.trim();
|
|
99
|
+
if (!text)
|
|
100
|
+
continue;
|
|
101
|
+
if (NOISE_PATTERNS.some(re => re.test(text)))
|
|
102
|
+
continue;
|
|
103
|
+
if (text.includes(SPOOL_PROMPT_BODY_MARKER)) {
|
|
104
|
+
const match = USER_QUERY_RE.exec(text);
|
|
105
|
+
if (match?.[1]) {
|
|
106
|
+
const q = match[1].trim();
|
|
107
|
+
return q.length > 0 ? truncateForTitle(q) : null;
|
|
108
|
+
}
|
|
109
|
+
// Spool prompt blob present but query couldn't be extracted; fall
|
|
110
|
+
// through to next message (defensive — shouldn't normally happen).
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
return truncateForTitle(text);
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
function truncateForTitle(s) {
|
|
118
|
+
const cleaned = s.replace(/\s+/g, ' ').trim();
|
|
119
|
+
return cleaned.length > 120 ? cleaned.slice(0, 117) + '...' : cleaned;
|
|
120
|
+
}
|
|
121
|
+
export function applyMigration(db, plan) {
|
|
122
|
+
let sessionsTouched = 0;
|
|
123
|
+
let sessionsTitleUpdated = 0;
|
|
124
|
+
let sessionsExtractionFailed = 0;
|
|
125
|
+
// Pre-create per-source Asks projects so the loop is simple.
|
|
126
|
+
const askProjectId = new Map();
|
|
127
|
+
for (const c of plan.candidates) {
|
|
128
|
+
if (!askProjectId.has(c.source)) {
|
|
129
|
+
askProjectId.set(c.source, getOrCreateAskProject(db, c.source));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const updateWithTitle = db.prepare(`
|
|
133
|
+
UPDATE sessions
|
|
134
|
+
SET title = ?, title_source = 'spool', project_id = ?
|
|
135
|
+
WHERE id = ?
|
|
136
|
+
`);
|
|
137
|
+
const updateProjectOnly = db.prepare(`
|
|
138
|
+
UPDATE sessions
|
|
139
|
+
SET project_id = ?, title_source = 'spool'
|
|
140
|
+
WHERE id = ?
|
|
141
|
+
`);
|
|
142
|
+
for (const c of plan.candidates) {
|
|
143
|
+
const targetProjectId = askProjectId.get(c.source);
|
|
144
|
+
if (targetProjectId === undefined)
|
|
145
|
+
continue;
|
|
146
|
+
sessionsTouched += 1;
|
|
147
|
+
if (c.extractedQuery) {
|
|
148
|
+
updateWithTitle.run(c.extractedQuery, targetProjectId, c.sessionId);
|
|
149
|
+
sessionsTitleUpdated += 1;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// Couldn't extract query — keep the (noisy) title rather than blank
|
|
153
|
+
// it out, but still move the row out of the wrong project and lock
|
|
154
|
+
// title_source so future sync doesn't keep re-applying the noise.
|
|
155
|
+
updateProjectOnly.run(targetProjectId, c.sessionId);
|
|
156
|
+
sessionsExtractionFailed += 1;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Delete old projects that became empty as a result.
|
|
160
|
+
const projectsDeleted = [];
|
|
161
|
+
const countSessions = db.prepare(`SELECT COUNT(*) AS c FROM sessions WHERE project_id = ?`);
|
|
162
|
+
const deleteProject = db.prepare(`DELETE FROM projects WHERE id = ?`);
|
|
163
|
+
for (const projectId of plan.affectedProjects.keys()) {
|
|
164
|
+
const remaining = countSessions.get(projectId).c;
|
|
165
|
+
if (remaining === 0) {
|
|
166
|
+
deleteProject.run(projectId);
|
|
167
|
+
projectsDeleted.push(projectId);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
sessionsTouched,
|
|
172
|
+
sessionsTitleUpdated,
|
|
173
|
+
sessionsExtractionFailed,
|
|
174
|
+
projectsDeleted,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/** Convenience entry point used by the v9 schema migration. */
|
|
178
|
+
export function runAgentSearchCleanup(db) {
|
|
179
|
+
const plan = computeMigrationPlan(db);
|
|
180
|
+
return applyMigration(db, plan);
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=agent-search-cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-search-cleanup.js","sourceRoot":"","sources":["../../src/migrations/agent-search-cleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
import { type IdentityFs } from '../projects/identity.js';
|
|
3
|
+
/**
|
|
4
|
+
* v10 data migration: re-classify historical `path`-kind project rows whose
|
|
5
|
+
* `identity_key` is a worktree path that has since been deleted.
|
|
6
|
+
*
|
|
7
|
+
* Before the worktree resolvers landed, a session synced AFTER its worktree
|
|
8
|
+
* was torn down had no way to recover its upstream remote — `computeIdentity`
|
|
9
|
+
* would walk up looking for `.git`, find nothing (the worktree was gone),
|
|
10
|
+
* and fall through to `path` kind. That created an orphan project per
|
|
11
|
+
* deleted worktree, even when the user had a perfectly good `spool` project
|
|
12
|
+
* already grouped under `git_remote: github.com/spool-lab/spool`.
|
|
13
|
+
*
|
|
14
|
+
* This migration re-runs `computeIdentity` against the stored `identity_key`.
|
|
15
|
+
* The resolver chain (default: superset) now reads the worktree tool's
|
|
16
|
+
* persistent registry to find the upstream main-repo path, runs git on it,
|
|
17
|
+
* and returns a real `git_remote` / `git_common_dir` identity. Same identity
|
|
18
|
+
* tuple as the parent project → `project_groups_v` collapses them into one
|
|
19
|
+
* row in the sidebar without any explicit row merging.
|
|
20
|
+
*
|
|
21
|
+
* Idempotent: re-running sees no `path`-kind candidates that resolve to a
|
|
22
|
+
* different identity, so it's a no-op on the second pass. Rows that still
|
|
23
|
+
* fail to resolve (e.g. genuine ad-hoc paths, or worktree tools we don't
|
|
24
|
+
* have a resolver for yet) stay untouched.
|
|
25
|
+
*/
|
|
26
|
+
export interface WorktreeUpgradeResult {
|
|
27
|
+
examined: number;
|
|
28
|
+
upgraded: number;
|
|
29
|
+
}
|
|
30
|
+
export declare function upgradeWorktreeIdentities(db: Database.Database, fs: IdentityFs): WorktreeUpgradeResult;
|
|
31
|
+
//# sourceMappingURL=worktree-identity-upgrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-identity-upgrade.d.ts","sourceRoot":"","sources":["../../src/migrations/worktree-identity-upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE1E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,EAAE,EAAE,UAAU,GACb,qBAAqB,CAyBvB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { computeIdentity } from '../projects/identity.js';
|
|
2
|
+
export function upgradeWorktreeIdentities(db, fs) {
|
|
3
|
+
const rows = db.prepare(`SELECT id, identity_key FROM projects WHERE identity_kind = 'path'`).all();
|
|
4
|
+
if (rows.length === 0)
|
|
5
|
+
return { examined: 0, upgraded: 0 };
|
|
6
|
+
const update = db.prepare(`UPDATE projects
|
|
7
|
+
SET identity_kind = ?, identity_key = ?, display_name = ?
|
|
8
|
+
WHERE id = ?`);
|
|
9
|
+
let upgraded = 0;
|
|
10
|
+
for (const row of rows) {
|
|
11
|
+
const id = computeIdentity(row.identity_key, fs);
|
|
12
|
+
// Only upgrade when the resolver produced something stronger than path.
|
|
13
|
+
// (`loose` shouldn't happen here since we feed it a real cwd, but skip
|
|
14
|
+
// defensively to avoid demoting rows.)
|
|
15
|
+
if (id.kind === 'path' || id.kind === 'loose')
|
|
16
|
+
continue;
|
|
17
|
+
update.run(id.kind, id.key, id.displayName, row.id);
|
|
18
|
+
upgraded += 1;
|
|
19
|
+
}
|
|
20
|
+
return { examined: rows.length, upgraded };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=worktree-identity-upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-identity-upgrade.js","sourceRoot":"","sources":["../../src/migrations/worktree-identity-upgrade.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAmB,MAAM,yBAAyB,CAAA;AA+B1E,MAAM,UAAU,yBAAyB,CACvC,EAAqB,EACrB,EAAc;IAEd,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,oEAAoE,CACrE,CAAC,GAAG,EAAiD,CAAA;IAEtD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;IAE1D,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB;;kBAEc,CACf,CAAA;IAED,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;QAChD,wEAAwE;QACxE,uEAAuE;QACvE,uCAAuC;QACvC,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO;YAAE,SAAQ;QACvD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QACnD,QAAQ,IAAI,CAAC,CAAA;IACf,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAA;AAC5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/parsers/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAA;AASnF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAkHtE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAOzE;
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/parsers/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAA;AASnF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAkHtE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAOzE;AAwCD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtD"}
|
package/dist/parsers/claude.js
CHANGED
|
@@ -116,22 +116,35 @@ export function parseClaudeSession(filePath) {
|
|
|
116
116
|
return null;
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
|
+
// Slash-command records in Claude Code JSONL come as a triplet:
|
|
120
|
+
// <command-name>/X</command-name>
|
|
121
|
+
// <command-message>X</command-message>
|
|
122
|
+
// <command-args>Y</command-args>
|
|
123
|
+
// Strip the whole record as one unit so bare <command-args> appearing in
|
|
124
|
+
// legitimate user content (e.g. a user pasting log output that contains
|
|
125
|
+
// these tags) is preserved.
|
|
126
|
+
const SLASH_COMMAND_RECORD = /<command-name>[\s\S]*?<\/command-name>(?:\s*<command-message>[\s\S]*?<\/command-message>)?(?:\s*<command-args>[\s\S]*?<\/command-args>)?/g;
|
|
119
127
|
function extractText(content) {
|
|
128
|
+
let raw;
|
|
120
129
|
if (typeof content === 'string') {
|
|
121
|
-
|
|
122
|
-
.replace(/<command-message>[\s\S]*?<\/command-message>/g, '')
|
|
123
|
-
.replace(/<command-name>[\s\S]*?<\/command-name>/g, '')
|
|
124
|
-
.replace(/<local-command-stdout>[\s\S]*?<\/local-command-stdout>/g, '')
|
|
125
|
-
.replace(/<system-reminder>[\s\S]*?<\/system-reminder>/g, '')
|
|
126
|
-
.replace(/<[^>]+>/g, '')
|
|
127
|
-
.trim();
|
|
130
|
+
raw = content;
|
|
128
131
|
}
|
|
129
|
-
if (
|
|
132
|
+
else if (Array.isArray(content)) {
|
|
133
|
+
raw = content
|
|
134
|
+
.filter(item => item.type === 'text')
|
|
135
|
+
.map(item => item.text ?? '')
|
|
136
|
+
.join('\n');
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
130
139
|
return '';
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
.
|
|
134
|
-
.
|
|
140
|
+
}
|
|
141
|
+
return raw
|
|
142
|
+
.replace(/<spool-system-prelude>[\s\S]*?<\/spool-system-prelude>/g, '')
|
|
143
|
+
.replace(SLASH_COMMAND_RECORD, '')
|
|
144
|
+
.replace(/<local-command-stdout>[\s\S]*?<\/local-command-stdout>/g, '')
|
|
145
|
+
.replace(/<local-command-caveat>[\s\S]*?<\/local-command-caveat>/g, '')
|
|
146
|
+
.replace(/<system-reminder>[\s\S]*?<\/system-reminder>/g, '')
|
|
147
|
+
.replace(/<[^>]+>/g, '')
|
|
135
148
|
.trim();
|
|
136
149
|
}
|
|
137
150
|
function extractToolNames(content) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/parsers/claude.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/parsers/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/parsers/codex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/parsers/codex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAA;AASnF,eAAO,MAAM,mBAAmB,wEAAwE,CAAA;AAiBxG,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAuJrE;AA6BD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAOxE"}
|