@spool-lab/core 0.6.0 → 0.6.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/README.md +22 -14
- package/dist/db/db.d.ts +1 -1
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +24 -13
- package/dist/db/db.js.map +1 -1
- package/dist/db/native-binding.d.ts +21 -0
- package/dist/db/native-binding.d.ts.map +1 -0
- package/dist/db/native-binding.js +32 -0
- package/dist/db/native-binding.js.map +1 -0
- package/dist/db/published-shares-cache.d.ts.map +1 -1
- package/dist/db/published-shares-cache.js.map +1 -1
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +96 -74
- package/dist/db/queries.js.map +1 -1
- package/dist/db/search-query.d.ts.map +1 -1
- package/dist/db/search-query.js +8 -8
- package/dist/db/search-query.js.map +1 -1
- package/dist/db/share-drafts.d.ts.map +1 -1
- package/dist/db/share-drafts.js +1 -3
- package/dist/db/share-drafts.js.map +1 -1
- package/dist/doctor/checks/config.d.ts.map +1 -1
- package/dist/doctor/checks/config.js +3 -3
- package/dist/doctor/checks/config.js.map +1 -1
- package/dist/doctor/checks/db.d.ts.map +1 -1
- package/dist/doctor/checks/db.js +36 -18
- package/dist/doctor/checks/db.js.map +1 -1
- package/dist/doctor/checks/env.d.ts.map +1 -1
- package/dist/doctor/checks/env.js +5 -1
- package/dist/doctor/checks/env.js.map +1 -1
- package/dist/doctor/checks/index.js +2 -2
- package/dist/doctor/checks/index.js.map +1 -1
- package/dist/doctor/checks/native.d.ts.map +1 -1
- package/dist/doctor/checks/native.js.map +1 -1
- package/dist/doctor/checks/versions.d.ts.map +1 -1
- package/dist/doctor/checks/versions.js +2 -2
- package/dist/doctor/checks/versions.js.map +1 -1
- package/dist/doctor/preflight.js +2 -2
- package/dist/doctor/preflight.js.map +1 -1
- package/dist/doctor/runner.d.ts.map +1 -1
- package/dist/doctor/runner.js +1 -1
- package/dist/doctor/runner.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/migrations/agent-search-cleanup.d.ts.map +1 -1
- package/dist/migrations/agent-search-cleanup.js +10 -6
- package/dist/migrations/agent-search-cleanup.js.map +1 -1
- package/dist/migrations/worktree-identity-upgrade.d.ts.map +1 -1
- package/dist/migrations/worktree-identity-upgrade.js +3 -1
- package/dist/migrations/worktree-identity-upgrade.js.map +1 -1
- package/dist/observability/exporter-file.d.ts.map +1 -1
- package/dist/observability/exporter-file.js +14 -6
- package/dist/observability/exporter-file.js.map +1 -1
- package/dist/observability/exporter-pretty.d.ts.map +1 -1
- package/dist/observability/exporter-pretty.js +13 -7
- package/dist/observability/exporter-pretty.js.map +1 -1
- package/dist/observability/layer.d.ts.map +1 -1
- package/dist/observability/layer.js +1 -1
- package/dist/observability/layer.js.map +1 -1
- package/dist/parsers/claude.d.ts.map +1 -1
- package/dist/parsers/claude.js.map +1 -1
- package/dist/parsers/codex.d.ts.map +1 -1
- package/dist/parsers/codex.js +2 -6
- package/dist/parsers/codex.js.map +1 -1
- package/dist/parsers/gemini.d.ts.map +1 -1
- package/dist/parsers/gemini.js +11 -11
- package/dist/parsers/gemini.js.map +1 -1
- package/dist/parsers/opencode.d.ts.map +1 -1
- package/dist/parsers/opencode.js +67 -33
- package/dist/parsers/opencode.js.map +1 -1
- package/dist/parsers/pi.d.ts.map +1 -1
- package/dist/parsers/pi.js +7 -6
- package/dist/parsers/pi.js.map +1 -1
- package/dist/projects/display-name.d.ts.map +1 -1
- package/dist/projects/display-name.js +4 -1
- package/dist/projects/display-name.js.map +1 -1
- package/dist/projects/fs.d.ts.map +1 -1
- package/dist/projects/fs.js +1 -1
- package/dist/projects/fs.js.map +1 -1
- package/dist/projects/groups.d.ts.map +1 -1
- package/dist/projects/groups.js +8 -4
- package/dist/projects/groups.js.map +1 -1
- package/dist/projects/identity-synthesizers.d.ts.map +1 -1
- package/dist/projects/identity-synthesizers.js.map +1 -1
- package/dist/projects/identity.d.ts +1 -1
- package/dist/projects/identity.d.ts.map +1 -1
- package/dist/projects/identity.js +12 -12
- package/dist/projects/identity.js.map +1 -1
- package/dist/projects/local-identity.d.ts +5 -0
- package/dist/projects/local-identity.d.ts.map +1 -0
- package/dist/projects/local-identity.js +68 -0
- package/dist/projects/local-identity.js.map +1 -0
- package/dist/projects/sessions.d.ts.map +1 -1
- package/dist/projects/sessions.js +11 -10
- package/dist/projects/sessions.js.map +1 -1
- package/dist/projects/worktree-resolvers.d.ts.map +1 -1
- package/dist/projects/worktree-resolvers.js +16 -8
- package/dist/projects/worktree-resolvers.js.map +1 -1
- package/dist/security/index.d.ts +2 -2
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1 -1
- package/dist/security/index.js.map +1 -1
- package/dist/security/maintenance.d.ts.map +1 -1
- package/dist/security/maintenance.js +1 -1
- package/dist/security/maintenance.js.map +1 -1
- package/dist/security/profile.d.ts.map +1 -1
- package/dist/security/profile.js +4 -1
- package/dist/security/profile.js.map +1 -1
- package/dist/security/purge.d.ts +2 -2
- package/dist/security/purge.d.ts.map +1 -1
- package/dist/security/purge.js +20 -16
- package/dist/security/purge.js.map +1 -1
- package/dist/security/repo.d.ts +1 -1
- package/dist/security/repo.d.ts.map +1 -1
- package/dist/security/repo.js +64 -37
- package/dist/security/repo.js.map +1 -1
- package/dist/security/scan.d.ts +2 -2
- package/dist/security/scan.d.ts.map +1 -1
- package/dist/security/scan.js +6 -4
- package/dist/security/scan.js.map +1 -1
- package/dist/security/worker.d.ts +2 -2
- package/dist/security/worker.d.ts.map +1 -1
- package/dist/security/worker.js +4 -10
- package/dist/security/worker.js.map +1 -1
- package/dist/sync/source-paths.d.ts.map +1 -1
- package/dist/sync/source-paths.js +10 -16
- package/dist/sync/source-paths.js.map +1 -1
- package/dist/sync/syncer.d.ts.map +1 -1
- package/dist/sync/syncer.js +69 -45
- package/dist/sync/syncer.js.map +1 -1
- package/dist/sync/watcher.d.ts +1 -1
- package/dist/sync/watcher.d.ts.map +1 -1
- package/dist/sync/watcher.js +15 -4
- package/dist/sync/watcher.js.map +1 -1
- package/dist/util/resolve-bin.d.ts.map +1 -1
- package/dist/util/resolve-bin.js +40 -25
- package/dist/util/resolve-bin.js.map +1 -1
- package/package.json +34 -19
package/dist/security/scan.js
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
// If the worker dies mid-detection, scan_profile was never updated
|
|
11
11
|
// → restart re-enqueues from scratch. If it dies inside the
|
|
12
12
|
// transaction, SQLite atomicity guarantees no half-applied state.
|
|
13
|
-
import { Data, Effect } from 'effect';
|
|
14
13
|
import { hashValueForRedactExclude } from '@spool-lab/redact';
|
|
14
|
+
import { Data, Effect } from 'effect';
|
|
15
15
|
import { deleteRefreshableFindings, insertFindings, setSessionScanProfile, updateSessionCounts, getAllowlists, isAllowlisted, } from './repo.js';
|
|
16
16
|
export class ScanError extends Data.TaggedError('ScanError') {
|
|
17
17
|
}
|
|
@@ -22,10 +22,12 @@ export function scanSession(sessionId, deps) {
|
|
|
22
22
|
return Effect.gen(function* () {
|
|
23
23
|
// 1. Load messages outside the transaction.
|
|
24
24
|
const messages = yield* Effect.try({
|
|
25
|
-
try: () => deps.db
|
|
25
|
+
try: () => deps.db
|
|
26
|
+
.prepare(`SELECT id, content_text
|
|
26
27
|
FROM messages
|
|
27
28
|
WHERE session_id = ?
|
|
28
|
-
ORDER BY seq ASC`)
|
|
29
|
+
ORDER BY seq ASC`)
|
|
30
|
+
.all(sessionId),
|
|
29
31
|
catch: (cause) => new ScanError({ sessionId, cause, reason: 'db-failed' }),
|
|
30
32
|
});
|
|
31
33
|
yield* Effect.annotateCurrentSpan('messageCount', messages.length);
|
|
@@ -71,7 +73,7 @@ export function scanSession(sessionId, deps) {
|
|
|
71
73
|
provider: m.provider,
|
|
72
74
|
startOffset: m.start,
|
|
73
75
|
endOffset: m.end,
|
|
74
|
-
state:
|
|
76
|
+
state: deps.kindAllowlist?.has(m.kind) || isAllowlisted(allow, m.kind, m.valueHash)
|
|
75
77
|
? 'dismissed'
|
|
76
78
|
: 'active',
|
|
77
79
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/security/scan.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,EAAE;AACF,mEAAmE;AACnE,2DAA2D;AAC3D,iEAAiE;AACjE,4DAA4D;AAC5D,EAAE;AACF,kEAAkE;AAClE,kEAAkE;AAClE,mEAAmE;AACnE,4DAA4D;AAC5D,kEAAkE;
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/security/scan.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,EAAE;AACF,mEAAmE;AACnE,2DAA2D;AAC3D,iEAAiE;AACjE,4DAA4D;AAC5D,EAAE;AACF,kEAAkE;AAClE,kEAAkE;AAClE,mEAAmE;AACnE,4DAA4D;AAC5D,kEAAkE;AAGlE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAE7D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAErC,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,aAAa,GAEd,MAAM,WAAW,CAAA;AAGlB,MAAM,OAAO,SAAU,SAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,CAIzD;CAAG;AAwCL;;2CAE2C;AAC3C,MAAM,UAAU,WAAW,CACzB,SAAiB,EACjB,IAAqB;IAErB,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACjC,GAAG,EAAE,GAAG,EAAE,CACR,IAAI,CAAC,EAAE;iBACJ,OAAO,CACN;;;6BAGiB,CAClB;iBACA,GAAG,CAAC,SAAS,CAAiB;YACnC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;SAC3E,CAAC,CAAA;QAEF,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;QAElE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,8DAA8D;YAC9D,2DAA2D;YAC3D,yCAAyC;YACzC,KAAK,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAClC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,CAAA;YAC7D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAA;QACjE,CAAC;QAED,6DAA6D;QAC7D,gEAAgE;QAChE,8BAA8B;QAC9B,MAAM,UAAU,GAAkD,EAAE,CAAA;QACpE,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;oBAAE,SAAQ;gBACnC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAA8B;oBACpE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;oBAC7C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;iBACjF,CAAC,CAAA;gBACF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAED,iEAAiE;QACjE,6CAA6C;QAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;QAEvC,4CAA4C;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC9B,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC;YAC5C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;SAC3E,CAAC,CAAA;QAEF,MAAM,MAAM,GAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,SAAS;YACT,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,WAAW,EAAE,CAAC,CAAC,KAAK;YACpB,SAAS,EAAE,CAAC,CAAC,GAAG;YAChB,KAAK,EACH,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC;gBAC1E,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,QAAQ;SACf,CAAC,CAAC,CAAA;QAEH,uBAAuB;QACvB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAChB,GAAG,EAAE,GAAG,EAAE;gBACR,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;oBACvB,yBAAyB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;oBACjE,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;oBAC/B,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;oBACxF,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;gBACzC,CAAC,CAAC,EAAE,CAAA;YACN,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;SAC3E,CAAC,CAAA;QAEF,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,CAAA;QAC7D,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QAE5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAA;IAC7E,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;AAClF,CAAC;AAED,SAAS,UAAU,CAAC,SAAiB,EAAE,IAAqB;IAC1D,OAAO,MAAM,CAAC,GAAG,CAAC;QAChB,GAAG,EAAE,GAAG,EAAE;YACR,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;gBACvB,yBAAyB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;gBACjE,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;gBACxF,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;YACzC,CAAC,CAAC,EAAE,CAAA;QACN,CAAC;QACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;KAC3E,CAAC,CAAA;AACJ,CAAC;AAID;;qEAEqE;AACrE,SAAS,YAAY,CACnB,OAA8D;IAE9D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC5C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAA;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Effect, Fiber, Stream, Scope } from 'effect';
|
|
2
|
-
import type Database from 'better-sqlite3';
|
|
3
1
|
import type { RedactProvider } from '@spool-lab/redact';
|
|
2
|
+
import type Database from 'better-sqlite3';
|
|
3
|
+
import { Effect, Fiber, Stream, Scope } from 'effect';
|
|
4
4
|
import type { FindingsChange, ScanStatus } from './types.js';
|
|
5
5
|
export interface WorkerConfig {
|
|
6
6
|
db: Database.Database;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/security/worker.ts"],"names":[],"mappings":"AAaA,OAAO,
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/security/worker.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAsB,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAIzE,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAA;IACrB,SAAS,EAAE,SAAS,cAAc,EAAE,CAAA;IACpC;;;;;;;;;iEAS6D;IAC7D,cAAc,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;IACvC,iDAAiD;IACjD,aAAa,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC;;yEAEqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAA;CAC7C;AAQD,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACnD;oDACgD;IAChD,SAAS,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACtC;;;;;;;;;;;;;;;6BAeyB;IACzB,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACvE;4CACwC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IACtC;;6BAEyB;IACzB,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACxC;4CACwC;IACxC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;CACrC;AAED;uEACuE;AACvE,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,GACnB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAiQ/C;AAED;2DAC2D;AAC3D,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAQnE;AAGD,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
package/dist/security/worker.js
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
// for the DB lock and gain nothing. Backfill UX surfaces "session N
|
|
12
12
|
// of M" progress for the user.
|
|
13
13
|
import { Effect, Fiber, PubSub, Queue, Ref, Stream } from 'effect';
|
|
14
|
-
import { scanSession } from './scan.js';
|
|
15
14
|
import { listSessionsNeedingScan } from './repo.js';
|
|
15
|
+
import { scanSession } from './scan.js';
|
|
16
16
|
function resolveProfile(config) {
|
|
17
17
|
return typeof config.currentProfile === 'function'
|
|
18
18
|
? config.currentProfile()
|
|
@@ -61,12 +61,8 @@ export function makeScanWorker(config) {
|
|
|
61
61
|
// strictly monotonic (only decrements at scanOne end), so
|
|
62
62
|
// anchoring the total to it makes the progress bar strictly
|
|
63
63
|
// forward.
|
|
64
|
-
const fullyIdle = after.backfillRemaining === 0 &&
|
|
65
|
-
|
|
66
|
-
after.scanning === null;
|
|
67
|
-
const backfillTotal = fullyIdle
|
|
68
|
-
? 0
|
|
69
|
-
: Math.max(prev.backfillTotal, after.backfillRemaining);
|
|
64
|
+
const fullyIdle = after.backfillRemaining === 0 && after.queued === 0 && after.scanning === null;
|
|
65
|
+
const backfillTotal = fullyIdle ? 0 : Math.max(prev.backfillTotal, after.backfillRemaining);
|
|
70
66
|
// `manualBurstInFlight` rides along with the burst. The
|
|
71
67
|
// worker.rescanAll() mutation flips it on; this wrapper
|
|
72
68
|
// flips it off the instant the worker drains, so the
|
|
@@ -113,9 +109,7 @@ export function makeScanWorker(config) {
|
|
|
113
109
|
yield* Queue.takeAll(queue);
|
|
114
110
|
yield* Ref.update(statusRef, (prev) => {
|
|
115
111
|
const after = f(prev);
|
|
116
|
-
const fullyIdle = after.backfillRemaining === 0 &&
|
|
117
|
-
after.queued === 0 &&
|
|
118
|
-
after.scanning === null;
|
|
112
|
+
const fullyIdle = after.backfillRemaining === 0 && after.queued === 0 && after.scanning === null;
|
|
119
113
|
const backfillTotal = fullyIdle ? 0 : after.backfillRemaining;
|
|
120
114
|
const manualBurstInFlight = fullyIdle ? false : after.manualBurstInFlight;
|
|
121
115
|
return { ...after, backfillTotal, manualBurstInFlight };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/security/worker.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,mEAAmE;AACnE,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,8DAA8D;AAC9D,+DAA+D;AAC/D,EAAE;AACF,iEAAiE;AACjE,qEAAqE;AACrE,oEAAoE;AACpE,+BAA+B;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/security/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-paths.d.ts","sourceRoot":"","sources":["../../src/sync/source-paths.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"source-paths.d.ts","sourceRoot":"","sources":["../../src/sync/source-paths.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAyBhD,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAsC/D;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAM1C,GACA,aAAa,GAAG,SAAS,CAO3B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,EACrB,KAAK,WAA0B,GAC9B,MAAM,EAAE,CASV;AA4ED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CA2BT"}
|
|
@@ -24,20 +24,16 @@ const SOURCE_PROFILE_BASES = {
|
|
|
24
24
|
export function getSessionRoots(source) {
|
|
25
25
|
const configured = process.env[SOURCE_ENV_VARS[source]];
|
|
26
26
|
if (configured) {
|
|
27
|
-
return dedupePaths(splitConfiguredPaths(configured).map(path => normalizeSourceRoot(source, path)));
|
|
27
|
+
return dedupePaths(splitConfiguredPaths(configured).map((path) => normalizeSourceRoot(source, path)));
|
|
28
28
|
}
|
|
29
29
|
if (source === 'gemini') {
|
|
30
|
-
return dedupePaths([
|
|
31
|
-
normalizeSourceRoot('gemini', join(getGeminiBaseDir(), 'tmp')),
|
|
32
|
-
]);
|
|
30
|
+
return dedupePaths([normalizeSourceRoot('gemini', join(getGeminiBaseDir(), 'tmp'))]);
|
|
33
31
|
}
|
|
34
32
|
if (source === 'opencode') {
|
|
35
33
|
return dedupePaths([normalizeSourceRoot('opencode', getOpenCodeBaseDir())]);
|
|
36
34
|
}
|
|
37
35
|
if (source === 'pi') {
|
|
38
|
-
return dedupePaths([
|
|
39
|
-
normalizeSourceRoot('pi', join(homedir(), '.pi', 'agent', 'sessions')),
|
|
40
|
-
]);
|
|
36
|
+
return dedupePaths([normalizeSourceRoot('pi', join(homedir(), '.pi', 'agent', 'sessions'))]);
|
|
41
37
|
}
|
|
42
38
|
const home = homedir();
|
|
43
39
|
const childDir = SOURCE_DIR_NAMES[source];
|
|
@@ -65,7 +61,7 @@ export function detectSessionSource(filePath, sourceRoots = {
|
|
|
65
61
|
pi: getSessionRoots('pi'),
|
|
66
62
|
}) {
|
|
67
63
|
for (const source of ['claude', 'codex', 'gemini', 'opencode', 'pi']) {
|
|
68
|
-
if (sourceRoots[source]?.some(root => isSessionFileForSource(source, filePath, root))) {
|
|
64
|
+
if (sourceRoots[source]?.some((root) => isSessionFileForSource(source, filePath, root))) {
|
|
69
65
|
return source;
|
|
70
66
|
}
|
|
71
67
|
}
|
|
@@ -73,21 +69,19 @@ export function detectSessionSource(filePath, sourceRoots = {
|
|
|
73
69
|
}
|
|
74
70
|
export function getSessionWatchPatterns(source, roots = getSessionRoots(source)) {
|
|
75
71
|
if (source === 'gemini') {
|
|
76
|
-
return roots.flatMap(root => [
|
|
72
|
+
return roots.flatMap((root) => [
|
|
77
73
|
join(root, '**', 'session-*.json'),
|
|
78
74
|
join(root, '**', 'session-*.jsonl'),
|
|
79
75
|
]);
|
|
80
76
|
}
|
|
81
|
-
const pattern = source === 'opencode'
|
|
82
|
-
|
|
83
|
-
: '*.jsonl';
|
|
84
|
-
return roots.map(root => join(root, '**', pattern));
|
|
77
|
+
const pattern = source === 'opencode' ? OPENCODE_DB_NAME : '*.jsonl';
|
|
78
|
+
return roots.map((root) => join(root, '**', pattern));
|
|
85
79
|
}
|
|
86
80
|
function splitConfiguredPaths(value) {
|
|
87
81
|
return value
|
|
88
82
|
.split(/\r?\n/)
|
|
89
|
-
.flatMap(part => part.split(delimiter))
|
|
90
|
-
.map(part => part.trim())
|
|
83
|
+
.flatMap((part) => part.split(delimiter))
|
|
84
|
+
.map((part) => part.trim())
|
|
91
85
|
.filter(Boolean);
|
|
92
86
|
}
|
|
93
87
|
function normalizeSourceRoot(source, filePath) {
|
|
@@ -137,7 +131,7 @@ function expandHome(filePath) {
|
|
|
137
131
|
return filePath;
|
|
138
132
|
}
|
|
139
133
|
function dedupePaths(paths) {
|
|
140
|
-
return Array.from(new Set(paths.map(path => resolve(expandHome(path)))));
|
|
134
|
+
return Array.from(new Set(paths.map((path) => resolve(expandHome(path)))));
|
|
141
135
|
}
|
|
142
136
|
function getGeminiBaseDir() {
|
|
143
137
|
const geminiCliHome = process.env['GEMINI_CLI_HOME']?.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-paths.js","sourceRoot":"","sources":["../../src/sync/source-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAElG,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"source-paths.js","sourceRoot":"","sources":["../../src/sync/source-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/sync/syncer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/sync/syncer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AA6B1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,aAAa,CAAA;AAG5D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAA;IACnD,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;AAElE;;;;sDAIsD;AACtD,MAAM,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;AAEhE;;;;;4CAK4C;AAC5C,MAAM,WAAW,eAAe;IAC9B;;mBAEe;IACf,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,gBAAgB,CAAoC;IAC5D,OAAO,CAAC,eAAe,CAAiC;IAExD,YACE,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,UAAU,CAAC,EAAE,iBAAiB,EAC9B,gBAAgB,CAAC,EAAE,sBAAsB,EAK1C;IAED,OAAO,IAAI,UAAU,CA8FpB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iEAqC6D;IAC7D,OAAO,CAAC,YAAY;IA0BpB;;;;;iBAKa;IACb,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,gBAAgB;IAaxB,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,gBAAgB,CAAC,EAAE,MAAM,EACzB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CA+M3C;IAED,OAAO,CAAC,oBAAoB;CAgD7B"}
|
package/dist/sync/syncer.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { existsSync, statSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
|
-
import { basename, dirname, join } from 'node:path';
|
|
3
2
|
import { homedir } from 'node:os';
|
|
3
|
+
import { basename, dirname, join } from 'node:path';
|
|
4
|
+
import { deleteSessionByFilePath, getSourceId, getOrCreateProject, getSessionMtime, getAllSessionMtimes, upsertSession, refreshSessionSearchFromMessages, insertMessages, getMessageSnapshot, recomputeMessageCount, } from '../db/queries.js';
|
|
4
5
|
import { loadClaudeSession, decodeProjectSlug } from '../parsers/claude.js';
|
|
5
6
|
import { loadCodexSession, CODEX_INDEX_VERSION } from '../parsers/codex.js';
|
|
6
7
|
import { loadGeminiSession } from '../parsers/gemini.js';
|
|
7
|
-
import { decodePiSessionDirSlug, loadPiSession, PI_INDEX_VERSION } from '../parsers/pi.js';
|
|
8
8
|
import { getOpenCodeSessionIndexedMtime, isOpenCodeDatabaseFile, listOpenCodeSessionFilePaths, loadOpenCodeSession, OPENCODE_INDEX_VERSION, parseOpenCodeSessionFilePath, } from '../parsers/opencode.js';
|
|
9
|
-
import {
|
|
10
|
-
import { deleteSessionByFilePath, getSourceId, getOrCreateProject, getSessionMtime, getAllSessionMtimes, upsertSession, refreshSessionSearchFromMessages, insertMessages, getMessageSnapshot, recomputeMessageCount, } from '../db/queries.js';
|
|
11
|
-
import { computeIdentity } from '../projects/identity.js';
|
|
9
|
+
import { decodePiSessionDirSlug, loadPiSession, PI_INDEX_VERSION } from '../parsers/pi.js';
|
|
12
10
|
import { realFs } from '../projects/fs.js';
|
|
11
|
+
import { computeIdentity } from '../projects/identity.js';
|
|
12
|
+
import { getSessionRoots, isSessionFileForSource } from './source-paths.js';
|
|
13
13
|
export class Syncer {
|
|
14
14
|
db;
|
|
15
15
|
onProgress;
|
|
@@ -28,13 +28,15 @@ export class Syncer {
|
|
|
28
28
|
try {
|
|
29
29
|
addUniqueFiles(files, seenPaths, collectSessionFiles(dir, source));
|
|
30
30
|
}
|
|
31
|
-
catch {
|
|
31
|
+
catch {
|
|
32
|
+
/* dir may not exist */
|
|
33
|
+
}
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
36
|
cleanupStaleOpenCodeSessions(this.db, files);
|
|
35
37
|
const knownMtimes = getAllSessionMtimes(this.db);
|
|
36
38
|
this.codexTitleIndex = loadCodexSessionIndex();
|
|
37
|
-
const pendingFiles = files.flatMap(f => {
|
|
39
|
+
const pendingFiles = files.flatMap((f) => {
|
|
38
40
|
const existing = knownMtimes.get(f.path);
|
|
39
41
|
try {
|
|
40
42
|
const indexedMtime = getIndexedMtime(f.path, f.source);
|
|
@@ -75,7 +77,11 @@ export class Syncer {
|
|
|
75
77
|
else if (result === 'error')
|
|
76
78
|
errors++;
|
|
77
79
|
}
|
|
78
|
-
this.onProgress?.({
|
|
80
|
+
this.onProgress?.({
|
|
81
|
+
phase: 'syncing',
|
|
82
|
+
count: Math.min(i + BATCH, pendingFiles.length),
|
|
83
|
+
total: pendingFiles.length,
|
|
84
|
+
});
|
|
79
85
|
}
|
|
80
86
|
this.applyCodexTitles();
|
|
81
87
|
}
|
|
@@ -175,9 +181,7 @@ export class Syncer {
|
|
|
175
181
|
* custom-title record landing while everything else stays the
|
|
176
182
|
* same). */
|
|
177
183
|
titleDiffersFromStored(sessionId, nextTitle) {
|
|
178
|
-
const row = this.db
|
|
179
|
-
.prepare('SELECT title FROM sessions WHERE id = ?')
|
|
180
|
-
.get(sessionId);
|
|
184
|
+
const row = this.db.prepare('SELECT title FROM sessions WHERE id = ?').get(sessionId);
|
|
181
185
|
return (row?.title ?? '') !== nextTitle;
|
|
182
186
|
}
|
|
183
187
|
applyCodexTitles() {
|
|
@@ -214,9 +218,9 @@ export class Syncer {
|
|
|
214
218
|
// exists to re-derive content, but append-mode INSERT … DO NOTHING never
|
|
215
219
|
// updates uuid-matched rows — a version-only mismatch must rewrite, or
|
|
216
220
|
// the bump re-visits every file and changes nothing.
|
|
217
|
-
const versionChanged = existingMtime !== null
|
|
218
|
-
|
|
219
|
-
|
|
221
|
+
const versionChanged = existingMtime !== null &&
|
|
222
|
+
existingMtime.includes('::') &&
|
|
223
|
+
!existingMtime.endsWith(`::${getIndexVersion(source)}`);
|
|
220
224
|
const parseResult = source === 'claude'
|
|
221
225
|
? loadClaudeSession(filePath)
|
|
222
226
|
: source === 'codex'
|
|
@@ -236,10 +240,12 @@ export class Syncer {
|
|
|
236
240
|
// certainly something the user wants to know about rather
|
|
237
241
|
// than have happen silently.
|
|
238
242
|
if (parseResult.kind === 'filtered' && existingMtime !== null && !force) {
|
|
239
|
-
this.db
|
|
243
|
+
this.db
|
|
244
|
+
.prepare(`
|
|
240
245
|
INSERT INTO sync_log (source_id, file_path, status, message)
|
|
241
246
|
VALUES (?, ?, 'ok', ?)
|
|
242
|
-
`)
|
|
247
|
+
`)
|
|
248
|
+
.run(getSourceId(this.db, source), filePath, 'filtered from index');
|
|
243
249
|
deleteSessionByFilePath(this.db, filePath);
|
|
244
250
|
return 'updated';
|
|
245
251
|
}
|
|
@@ -252,7 +258,7 @@ export class Syncer {
|
|
|
252
258
|
parsed.title = codexTitle;
|
|
253
259
|
}
|
|
254
260
|
const sourceId = getSourceId(this.db, source);
|
|
255
|
-
const { slug: rawSlug, displayPath, displayName } = resolveProject(filePath, source, parsed.cwd);
|
|
261
|
+
const { slug: rawSlug, displayPath, displayName, } = resolveProject(filePath, source, parsed.cwd);
|
|
256
262
|
const identity = computeIdentity(parsed.cwd || null, realFs, undefined, undefined, parsed.gitRemote ?? null);
|
|
257
263
|
// Synthetic identities deduplicate by identity key, not by per-cwd slug,
|
|
258
264
|
// so every matching session converges to a single project row instead
|
|
@@ -260,7 +266,7 @@ export class Syncer {
|
|
|
260
266
|
const slug = identity.kind === 'synthetic' ? identity.key : rawSlug;
|
|
261
267
|
const projectId = getOrCreateProject(this.db, sourceId, slug, identity.displayPath ?? displayPath, identity.displayName || displayName, { identityKind: identity.kind, identityKey: identity.key });
|
|
262
268
|
const isNew = existingMtime === null;
|
|
263
|
-
const hasToolUse = parsed.messages.some(m => m.toolNames.length > 0);
|
|
269
|
+
const hasToolUse = parsed.messages.some((m) => m.toolNames.length > 0);
|
|
264
270
|
// Classify the sync before we touch anything. The result decides
|
|
265
271
|
// whether existing message rows survive (`append`) or get
|
|
266
272
|
// DELETE-cascaded by upsertSession (`rewrite`). The
|
|
@@ -269,8 +275,10 @@ export class Syncer {
|
|
|
269
275
|
// Explicit force overrides classification — the user has
|
|
270
276
|
// accepted that any per-message user-side state (Security Scan
|
|
271
277
|
// purge, dismiss) on this session will be rebuilt from source.
|
|
272
|
-
const mode = force
|
|
273
|
-
|
|
278
|
+
const mode = force ??
|
|
279
|
+
(versionChanged
|
|
280
|
+
? 'rewrite'
|
|
281
|
+
: this.classifySync(parsed.sessionUuid, parsed.messages, source));
|
|
274
282
|
let committedSessionId = null;
|
|
275
283
|
let insertedCount = 0;
|
|
276
284
|
this.db.transaction(() => {
|
|
@@ -282,7 +290,7 @@ export class Syncer {
|
|
|
282
290
|
title: parsed.title,
|
|
283
291
|
startedAt: parsed.startedAt,
|
|
284
292
|
endedAt: parsed.endedAt,
|
|
285
|
-
messageCount: parsed.messages.filter(m => !m.isSidechain).length,
|
|
293
|
+
messageCount: parsed.messages.filter((m) => !m.isSidechain).length,
|
|
286
294
|
hasToolUse,
|
|
287
295
|
cwd: parsed.cwd,
|
|
288
296
|
model: parsed.model,
|
|
@@ -315,12 +323,16 @@ export class Syncer {
|
|
|
315
323
|
// load-bearing UX win that lets purge / dismiss / star
|
|
316
324
|
// survive across re-sync of an unchanged source file.
|
|
317
325
|
if (contentChanged) {
|
|
318
|
-
this.db
|
|
326
|
+
this.db
|
|
327
|
+
.prepare(`UPDATE sessions SET scan_profile = NULL, scan_completed_at = NULL WHERE id = ?`)
|
|
328
|
+
.run(sessionId);
|
|
319
329
|
}
|
|
320
|
-
this.db
|
|
330
|
+
this.db
|
|
331
|
+
.prepare(`
|
|
321
332
|
INSERT INTO sync_log (source_id, file_path, status)
|
|
322
333
|
VALUES (?, ?, 'ok')
|
|
323
|
-
`)
|
|
334
|
+
`)
|
|
335
|
+
.run(sourceId, filePath);
|
|
324
336
|
committedSessionId = sessionId;
|
|
325
337
|
})();
|
|
326
338
|
const contentChanged = mode === 'rewrite' || insertedCount > 0;
|
|
@@ -328,23 +340,27 @@ export class Syncer {
|
|
|
328
340
|
try {
|
|
329
341
|
this.onSessionChanged(committedSessionId);
|
|
330
342
|
}
|
|
331
|
-
catch {
|
|
343
|
+
catch {
|
|
344
|
+
/* swallow callback errors */
|
|
345
|
+
}
|
|
332
346
|
}
|
|
333
347
|
return isNew ? 'added' : 'updated';
|
|
334
348
|
}
|
|
335
349
|
catch (err) {
|
|
336
350
|
try {
|
|
337
|
-
const sourceRow = this.db
|
|
338
|
-
.prepare('SELECT id FROM sources WHERE name = ?')
|
|
339
|
-
.get(source);
|
|
351
|
+
const sourceRow = this.db.prepare('SELECT id FROM sources WHERE name = ?').get(source);
|
|
340
352
|
if (sourceRow) {
|
|
341
|
-
this.db
|
|
353
|
+
this.db
|
|
354
|
+
.prepare(`
|
|
342
355
|
INSERT INTO sync_log (source_id, file_path, status, message)
|
|
343
356
|
VALUES (?, ?, 'error', ?)
|
|
344
|
-
`)
|
|
357
|
+
`)
|
|
358
|
+
.run(sourceRow.id, filePath, String(err));
|
|
345
359
|
}
|
|
346
360
|
}
|
|
347
|
-
catch {
|
|
361
|
+
catch {
|
|
362
|
+
/* ignore log errors */
|
|
363
|
+
}
|
|
348
364
|
return 'error';
|
|
349
365
|
}
|
|
350
366
|
}
|
|
@@ -361,13 +377,17 @@ export class Syncer {
|
|
|
361
377
|
.prepare('SELECT id FROM sources WHERE name = ?')
|
|
362
378
|
.get('opencode');
|
|
363
379
|
if (sourceRow) {
|
|
364
|
-
this.db
|
|
380
|
+
this.db
|
|
381
|
+
.prepare(`
|
|
365
382
|
INSERT INTO sync_log (source_id, file_path, status, message)
|
|
366
383
|
VALUES (?, ?, 'error', ?)
|
|
367
|
-
`)
|
|
384
|
+
`)
|
|
385
|
+
.run(sourceRow.id, dbPath, String(err));
|
|
368
386
|
}
|
|
369
387
|
}
|
|
370
|
-
catch {
|
|
388
|
+
catch {
|
|
389
|
+
/* ignore log errors */
|
|
390
|
+
}
|
|
371
391
|
return 'error';
|
|
372
392
|
}
|
|
373
393
|
for (const sessionPath of sessionPaths) {
|
|
@@ -379,8 +399,8 @@ export class Syncer {
|
|
|
379
399
|
}
|
|
380
400
|
const activePaths = new Set(sessionPaths);
|
|
381
401
|
const stalePaths = listIndexedOpenCodeSessionPaths(this.db)
|
|
382
|
-
.filter(path => parseOpenCodeSessionFilePath(path)?.dbPath === dbPath)
|
|
383
|
-
.filter(path => !activePaths.has(path));
|
|
402
|
+
.filter((path) => parseOpenCodeSessionFilePath(path)?.dbPath === dbPath)
|
|
403
|
+
.filter((path) => !activePaths.has(path));
|
|
384
404
|
for (const stalePath of stalePaths) {
|
|
385
405
|
if (deleteSessionByFilePath(this.db, stalePath))
|
|
386
406
|
changed = true;
|
|
@@ -417,13 +437,15 @@ function cleanupStaleOpenCodeSessions(db, files) {
|
|
|
417
437
|
}
|
|
418
438
|
}
|
|
419
439
|
function listIndexedOpenCodeSessionPaths(db) {
|
|
420
|
-
const rows = db
|
|
440
|
+
const rows = db
|
|
441
|
+
.prepare(`
|
|
421
442
|
SELECT s.file_path AS filePath
|
|
422
443
|
FROM sessions s
|
|
423
444
|
JOIN sources src ON src.id = s.source_id
|
|
424
445
|
WHERE src.name = 'opencode'
|
|
425
|
-
`)
|
|
426
|
-
|
|
446
|
+
`)
|
|
447
|
+
.all();
|
|
448
|
+
return rows.map((row) => row.filePath);
|
|
427
449
|
}
|
|
428
450
|
function addUniqueFiles(files, seenPaths, candidates) {
|
|
429
451
|
for (const candidate of candidates) {
|
|
@@ -459,7 +481,7 @@ function collectSessionFiles(dir, source) {
|
|
|
459
481
|
const dbPath = join(dir, 'opencode.db');
|
|
460
482
|
if (!existsSync(dbPath))
|
|
461
483
|
return [];
|
|
462
|
-
return listOpenCodeSessionFilePaths(dbPath).map(path => ({ path, source }));
|
|
484
|
+
return listOpenCodeSessionFilePaths(dbPath).map((path) => ({ path, source }));
|
|
463
485
|
}
|
|
464
486
|
const results = [];
|
|
465
487
|
walkDir(dir, dir, results, source);
|
|
@@ -511,10 +533,14 @@ function loadCodexSessionIndex() {
|
|
|
511
533
|
if (rec.id && rec.thread_name)
|
|
512
534
|
titles.set(rec.id, rec.thread_name);
|
|
513
535
|
}
|
|
514
|
-
catch {
|
|
536
|
+
catch {
|
|
537
|
+
/* skip malformed lines */
|
|
538
|
+
}
|
|
515
539
|
}
|
|
516
540
|
}
|
|
517
|
-
catch {
|
|
541
|
+
catch {
|
|
542
|
+
/* file may not exist */
|
|
543
|
+
}
|
|
518
544
|
return titles;
|
|
519
545
|
}
|
|
520
546
|
function resolveProject(filePath, source, cwd) {
|
|
@@ -556,9 +582,7 @@ function resolveProject(filePath, source, cwd) {
|
|
|
556
582
|
const displayPath = cwd || projectIdentifier;
|
|
557
583
|
const parts = displayPath.split('/').filter(Boolean);
|
|
558
584
|
const displayName = parts[parts.length - 1] ?? projectIdentifier;
|
|
559
|
-
const slug = cwd
|
|
560
|
-
? displayPath.replace(/^\//, '').replace(/\//g, '-')
|
|
561
|
-
: projectIdentifier;
|
|
585
|
+
const slug = cwd ? displayPath.replace(/^\//, '').replace(/\//g, '-') : projectIdentifier;
|
|
562
586
|
return { slug: slug || projectIdentifier, displayPath, displayName };
|
|
563
587
|
}
|
|
564
588
|
//# sourceMappingURL=syncer.js.map
|