nlm-memory 0.4.2 → 0.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.
- package/README.md +72 -34
- package/dist/cli/nlm.js +223 -33
- package/dist/cli/nlm.js.map +1 -1
- package/dist/core/adapters/cursor.d.ts +45 -0
- package/dist/core/adapters/cursor.js +397 -0
- package/dist/core/adapters/cursor.js.map +1 -0
- package/dist/core/adapters/from-source.js +10 -0
- package/dist/core/adapters/from-source.js.map +1 -1
- package/dist/core/adapters/windsurf.d.ts +44 -0
- package/dist/core/adapters/windsurf.js +299 -0
- package/dist/core/adapters/windsurf.js.map +1 -0
- package/dist/core/hook/claude-settings.d.ts +12 -5
- package/dist/core/hook/claude-settings.js +21 -6
- package/dist/core/hook/claude-settings.js.map +1 -1
- package/dist/core/sources/source-registry.d.ts +1 -1
- package/dist/core/sources/source-registry.js +18 -0
- package/dist/core/sources/source-registry.js.map +1 -1
- package/dist/core/storage/sqlite-session-store.d.ts +2 -0
- package/dist/core/storage/sqlite-session-store.js +38 -2
- package/dist/core/storage/sqlite-session-store.js.map +1 -1
- package/dist/hook/hook-auth.d.ts +13 -0
- package/dist/hook/hook-auth.js +19 -0
- package/dist/hook/hook-auth.js.map +1 -0
- package/dist/hook/prompt-recall-hook.js +7 -1
- package/dist/hook/prompt-recall-hook.js.map +1 -1
- package/dist/hook/session-start-hook.js +4 -1
- package/dist/hook/session-start-hook.js.map +1 -1
- package/dist/hook/stop-hook.js +4 -1
- package/dist/hook/stop-hook.js.map +1 -1
- package/dist/http/app.d.ts +2 -0
- package/dist/http/app.js +76 -1
- package/dist/http/app.js.map +1 -1
- package/dist/install/claude-code.js +1 -1
- package/dist/install/claude-code.js.map +1 -1
- package/dist/install/cursor.d.ts +25 -0
- package/dist/install/cursor.js +43 -0
- package/dist/install/cursor.js.map +1 -0
- package/dist/install/nlm-dir-perms.d.ts +19 -0
- package/dist/install/nlm-dir-perms.js +43 -0
- package/dist/install/nlm-dir-perms.js.map +1 -0
- package/dist/install/ollama.d.ts +18 -1
- package/dist/install/ollama.js +62 -7
- package/dist/install/ollama.js.map +1 -1
- package/dist/install/setup.d.ts +4 -0
- package/dist/install/setup.js +141 -18
- package/dist/install/setup.js.map +1 -1
- package/dist/install/windsurf.d.ts +25 -0
- package/dist/install/windsurf.js +43 -0
- package/dist/install/windsurf.js.map +1 -0
- package/dist/mcp/server.js +20 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/shared/types.d.ts +4 -0
- package/dist/ui/assets/{index-BA6IpU8g.css → index-Beo8psd-.css} +1 -1
- package/dist/ui/assets/index-CSPTTeeM.js +69 -0
- package/dist/ui/index.html +2 -2
- package/package.json +26 -1
- package/plugin/scripts/prompt-recall-hook.mjs +55 -4
- package/plugin/scripts/stop-hook.mjs +57 -6
- package/.agents/plugins/marketplace.json +0 -20
- package/.github/workflows/ci.yml +0 -30
- package/dist/ui/assets/index-B_qIVV0k.js +0 -69
- package/docs/methodology/re-derivation-rate.md +0 -112
- package/docs/methodology/useful-hit-rate.md +0 -79
- package/docs/plans/2026-05-20-fts5-lexical-recall.md +0 -1088
- package/docs/plans/2026-05-20-recall-daemon-wedge-fix.md +0 -662
- package/docs/plans/2026-05-20-recall-hook-design.md +0 -131
- package/docs/plans/2026-05-20-recall-hook-implementation.md +0 -1222
- package/docs/plans/desktop-product.md +0 -69
- package/docs/plans/factstore-design.md +0 -236
- package/logs/CHANGELOG/CHANGELOG-2026.md +0 -1389
- package/logs/CHANGELOG/CHANGELOG.md +0 -337
- package/migrations/000_initial_schema.sql +0 -174
- package/migrations/001_entity_type_rename.sql +0 -17
- package/migrations/002_adapter_state_extend.sql +0 -12
- package/migrations/003_session_embeddings.sql +0 -11
- package/migrations/004_facts.sql +0 -46
- package/migrations/005_sources.sql +0 -31
- package/migrations/006_providers.sql +0 -33
- package/migrations/007_source_tokens.sql +0 -17
- package/migrations/008_fts_rebuild.sql +0 -9
- package/migrations/009_session_embedding_chunks.sql +0 -46
- package/migrations/010_sources_opencode.sql +0 -30
- package/migrations/011_sources_hermes_agent.sql +0 -30
- package/migrations/012_sources_aider.sql +0 -30
- package/migrations/013_adapter_state_failure_count.sql +0 -12
- package/plugin-hermes-agent/README.md +0 -49
- package/plugin-hermes-agent/__init__.py +0 -75
- package/plugin-hermes-agent/plugin.yaml +0 -15
- package/scripts/backfill-citations.mjs +0 -0
- package/scripts/build-codex-plugin.mjs +0 -61
- package/scripts/deepseek-probe.mjs +0 -67
- package/scripts/extract-triples.mjs +0 -207
- package/scripts/longmemeval/embedding-cache.ts +0 -77
- package/scripts/longmemeval/fetch-dataset.sh +0 -25
- package/scripts/longmemeval/run-harness.ts +0 -315
- package/scripts/longmemeval/scorer.ts +0 -99
- package/scripts/longmemeval/tsconfig.json +0 -9
- package/scripts/longmemeval/types.ts +0 -35
- package/scripts/nlm-daily-digest.py +0 -239
- package/scripts/nlm-daily-digest.sh +0 -28
- package/src/cli/classify-parity.ts +0 -257
- package/src/cli/launchctl-helpers.ts +0 -49
- package/src/cli/nlm.ts +0 -885
- package/src/core/actions/actions-log.ts +0 -118
- package/src/core/actions/overlay.ts +0 -117
- package/src/core/adapters/aider.ts +0 -205
- package/src/core/adapters/claude-code.ts +0 -293
- package/src/core/adapters/common.ts +0 -54
- package/src/core/adapters/from-source.ts +0 -57
- package/src/core/adapters/hermes-agent.ts +0 -240
- package/src/core/adapters/hermes.ts +0 -277
- package/src/core/adapters/jsonl-generic.ts +0 -208
- package/src/core/adapters/opencode.ts +0 -281
- package/src/core/adapters/pi.ts +0 -264
- package/src/core/classifier/prompt.ts +0 -200
- package/src/core/dataset/build-dataset.ts +0 -463
- package/src/core/embedding/chunk-body.ts +0 -76
- package/src/core/embedding/embed-backfill.ts +0 -210
- package/src/core/embedding/embed-normalize.ts +0 -135
- package/src/core/facts/backfill-facts.ts +0 -254
- package/src/core/facts/extract-facts.ts +0 -50
- package/src/core/hook/citation-detect.ts +0 -124
- package/src/core/hook/cite-memo.ts +0 -68
- package/src/core/hook/claude-settings.ts +0 -166
- package/src/core/hook/gate.ts +0 -25
- package/src/core/hook/hook-log.ts +0 -41
- package/src/core/hook/memo-sweep.ts +0 -164
- package/src/core/hook/memo.ts +0 -67
- package/src/core/hook/pointer-block.ts +0 -26
- package/src/core/hook/select.ts +0 -32
- package/src/core/hook/transcript.ts +0 -121
- package/src/core/ingest/ingest-session.ts +0 -111
- package/src/core/providers/provider-models.ts +0 -100
- package/src/core/providers/provider-registry.ts +0 -196
- package/src/core/recall/citation-log.ts +0 -108
- package/src/core/recall/filter.ts +0 -27
- package/src/core/recall/index.ts +0 -6
- package/src/core/recall/match-fields.ts +0 -40
- package/src/core/recall/query-log.ts +0 -149
- package/src/core/recall/query-shape.ts +0 -66
- package/src/core/recall/recall-service.ts +0 -320
- package/src/core/recall/recent-log.ts +0 -59
- package/src/core/recall/tokenize.ts +0 -18
- package/src/core/recall/useful-scan.ts +0 -336
- package/src/core/recall-facts/fact-query-log.ts +0 -150
- package/src/core/recall-facts/fact-recall-service.ts +0 -327
- package/src/core/scheduler/scan-once.ts +0 -142
- package/src/core/scheduler/scheduler.ts +0 -225
- package/src/core/sources/source-registry.ts +0 -260
- package/src/core/storage/db-restore.ts +0 -133
- package/src/core/storage/live-status.ts +0 -45
- package/src/core/storage/migrate.ts +0 -72
- package/src/core/storage/sqlite-fact-store.ts +0 -304
- package/src/core/storage/sqlite-session-store.ts +0 -765
- package/src/hook/prompt-recall-hook.ts +0 -174
- package/src/hook/session-end-hook.ts +0 -81
- package/src/hook/session-start-hook.ts +0 -165
- package/src/hook/stop-hook.ts +0 -236
- package/src/http/app.ts +0 -1137
- package/src/install/claude-code.ts +0 -128
- package/src/install/codex.ts +0 -367
- package/src/install/hermes-agent.ts +0 -76
- package/src/install/hermes.ts +0 -78
- package/src/install/ollama.ts +0 -211
- package/src/install/setup.ts +0 -368
- package/src/llm/classifier-box.ts +0 -64
- package/src/llm/deepseek-client.ts +0 -150
- package/src/llm/env-autoload.ts +0 -55
- package/src/llm/ollama-client.ts +0 -189
- package/src/mcp/server.ts +0 -534
- package/src/ports/fact-store.ts +0 -102
- package/src/ports/llm-client.ts +0 -52
- package/src/ports/logger.ts +0 -16
- package/src/ports/session-store.ts +0 -45
- package/src/ports/transcript-adapter.ts +0 -55
- package/src/shared/types.ts +0 -145
- package/src/ui/App.tsx +0 -58
- package/src/ui/components/PromoteOpenButton.tsx +0 -65
- package/src/ui/components/SessionDrawer.tsx +0 -136
- package/src/ui/components/SideNav.tsx +0 -162
- package/src/ui/components/Skeleton.tsx +0 -107
- package/src/ui/index.html +0 -13
- package/src/ui/lib/actions.ts +0 -30
- package/src/ui/lib/api.ts +0 -92
- package/src/ui/lib/dataset.ts +0 -141
- package/src/ui/lib/registries.ts +0 -155
- package/src/ui/lib/view-settings.ts +0 -41
- package/src/ui/main.tsx +0 -15
- package/src/ui/pages/Live.tsx +0 -229
- package/src/ui/pages/Pulse.tsx +0 -415
- package/src/ui/pages/Recall.tsx +0 -190
- package/src/ui/pages/River.tsx +0 -308
- package/src/ui/pages/Search.tsx +0 -93
- package/src/ui/pages/Stub.tsx +0 -9
- package/src/ui/pages/Thread.tsx +0 -262
- package/src/ui/pages/settings/Classifier.tsx +0 -227
- package/src/ui/pages/settings/Data.tsx +0 -190
- package/src/ui/pages/settings/Index.tsx +0 -65
- package/src/ui/pages/settings/Labels.tsx +0 -224
- package/src/ui/pages/settings/Providers.tsx +0 -305
- package/src/ui/pages/settings/SettingsSubnav.tsx +0 -28
- package/src/ui/pages/settings/Sources.tsx +0 -326
- package/src/ui/pages/settings/Views.tsx +0 -96
- package/src/ui/styles.css +0 -1766
- package/src/ui/tsconfig.json +0 -21
- package/src/ui/vite.config.ts +0 -19
- package/tests/fixtures/claude_code/short_session.jsonl +0 -2
- package/tests/fixtures/claude_code/standard_iso.jsonl +0 -4
- package/tests/fixtures/claude_code/tool_heavy.jsonl +0 -8
- package/tests/fixtures/claude_code/with_subagent.jsonl +0 -7
- package/tests/fixtures/facts.ts +0 -17
- package/tests/fixtures/golden-corpus.ts +0 -85
- package/tests/fixtures/hermes/paired_request_dump.json +0 -24
- package/tests/fixtures/hermes/paired_session.json +0 -23
- package/tests/fixtures/hermes/request_dump.json +0 -28
- package/tests/fixtures/hermes/session_iso.json +0 -38
- package/tests/fixtures/hermes/session_unix.json +0 -38
- package/tests/fixtures/hermes/system_only.json +0 -18
- package/tests/fixtures/pi/error-connection-abort.jsonl +0 -8
- package/tests/fixtures/pi/short-successful.jsonl +0 -5
- package/tests/fixtures/pi/with-custom-message.jsonl +0 -6
- package/tests/fixtures/sessions.ts +0 -22
- package/tests/integration/backfill-facts.test.ts +0 -362
- package/tests/integration/citation-explicit.test.ts +0 -111
- package/tests/integration/cite-event.test.ts +0 -169
- package/tests/integration/cite-memo.test.ts +0 -87
- package/tests/integration/db-restore.test.ts +0 -153
- package/tests/integration/embed-backfill.test.ts +0 -176
- package/tests/integration/fact-supersedence.test.ts +0 -313
- package/tests/integration/fts-index.test.ts +0 -60
- package/tests/integration/getbyids-sqlite.test.ts +0 -60
- package/tests/integration/hermes-agent-hooks.test.ts +0 -248
- package/tests/integration/hook-claude-settings.test.ts +0 -205
- package/tests/integration/hook-log.test.ts +0 -54
- package/tests/integration/hook-memo.test.ts +0 -68
- package/tests/integration/hook-pre-compact.test.ts +0 -105
- package/tests/integration/hook-subagent-start.test.ts +0 -102
- package/tests/integration/http.test.ts +0 -401
- package/tests/integration/keyword-search-fts.test.ts +0 -66
- package/tests/integration/mcp-recall-logging.test.ts +0 -88
- package/tests/integration/mcp.test.ts +0 -248
- package/tests/integration/memo-sweep.test.ts +0 -91
- package/tests/integration/prompt-recall-hook.test.ts +0 -88
- package/tests/integration/provider-registry.test.ts +0 -107
- package/tests/integration/recall-golden.test.ts +0 -59
- package/tests/integration/recall-sqlite.test.ts +0 -169
- package/tests/integration/scheduler.test.ts +0 -391
- package/tests/integration/session-end-hook.test.ts +0 -48
- package/tests/integration/session-start-hook.test.ts +0 -126
- package/tests/integration/source-registry.test.ts +0 -120
- package/tests/integration/sqlite-fact-store.test.ts +0 -346
- package/tests/integration/stop-hook.test.ts +0 -560
- package/tests/integration/wal-checkpoint.test.ts +0 -49
- package/tests/unit/cli/launchctl-helpers.test.ts +0 -60
- package/tests/unit/core/adapters/aider.test.ts +0 -230
- package/tests/unit/core/adapters/claude-code.test.ts +0 -118
- package/tests/unit/core/adapters/hermes-agent.test.ts +0 -329
- package/tests/unit/core/adapters/hermes.test.ts +0 -81
- package/tests/unit/core/adapters/jsonl-generic.test.ts +0 -142
- package/tests/unit/core/adapters/opencode.test.ts +0 -354
- package/tests/unit/core/adapters/pi.test.ts +0 -110
- package/tests/unit/core/classifier/prompt.test.ts +0 -126
- package/tests/unit/core/embedding/chunk-body.test.ts +0 -100
- package/tests/unit/core/facts/extract-facts.test.ts +0 -117
- package/tests/unit/core/filter.test.ts +0 -40
- package/tests/unit/core/hook/citation-detect-cite-session.test.ts +0 -96
- package/tests/unit/core/hook/citation-detect.test.ts +0 -124
- package/tests/unit/core/hook/gate.test.ts +0 -29
- package/tests/unit/core/hook/pointer-block.test.ts +0 -22
- package/tests/unit/core/hook/select.test.ts +0 -66
- package/tests/unit/core/match-fields.test.ts +0 -39
- package/tests/unit/core/mcp-cite-session.test.ts +0 -51
- package/tests/unit/core/providers/provider-models.test.ts +0 -101
- package/tests/unit/core/query-shape.test.ts +0 -92
- package/tests/unit/core/recall-facts/fact-recall-service.test.ts +0 -258
- package/tests/unit/core/recall-service.test.ts +0 -200
- package/tests/unit/core/storage/live-status.test.ts +0 -54
- package/tests/unit/core/tokenize.test.ts +0 -32
- package/tests/unit/core/useful-scan.test.ts +0 -537
- package/tests/unit/llm/embed.test.ts +0 -93
- package/tests/unit/llm/ollama-client.test.ts +0 -124
- package/tests/unit/scripts/longmemeval-scorer.test.ts +0 -114
- package/tsconfig.json +0 -31
- package/tsconfig.test.json +0 -11
- package/vitest.config.ts +0 -22
|
@@ -8,11 +8,13 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { AiderAdapter } from "./aider.js";
|
|
10
10
|
import { ClaudeCodeAdapter } from "./claude-code.js";
|
|
11
|
+
import { CursorAdapter } from "./cursor.js";
|
|
11
12
|
import { HermesAdapter } from "./hermes.js";
|
|
12
13
|
import { HermesAgentAdapter } from "./hermes-agent.js";
|
|
13
14
|
import { JsonlGenericAdapter } from "./jsonl-generic.js";
|
|
14
15
|
import { OpenCodeAdapter } from "./opencode.js";
|
|
15
16
|
import { PiAdapter } from "./pi.js";
|
|
17
|
+
import { WindsurfAdapter } from "./windsurf.js";
|
|
16
18
|
export function adapterFromSource(source) {
|
|
17
19
|
switch (source.kind) {
|
|
18
20
|
case "aider":
|
|
@@ -23,6 +25,10 @@ export function adapterFromSource(source) {
|
|
|
23
25
|
return source.pathOrUrl
|
|
24
26
|
? new ClaudeCodeAdapter({ projectsPath: source.pathOrUrl })
|
|
25
27
|
: new ClaudeCodeAdapter();
|
|
28
|
+
case "cursor":
|
|
29
|
+
return source.pathOrUrl
|
|
30
|
+
? new CursorAdapter({ dbPath: source.pathOrUrl })
|
|
31
|
+
: new CursorAdapter();
|
|
26
32
|
case "hermes":
|
|
27
33
|
return source.pathOrUrl
|
|
28
34
|
? new HermesAdapter({ sessionsPath: source.pathOrUrl })
|
|
@@ -39,6 +45,10 @@ export function adapterFromSource(source) {
|
|
|
39
45
|
return source.pathOrUrl
|
|
40
46
|
? new PiAdapter({ sessionsPath: source.pathOrUrl })
|
|
41
47
|
: new PiAdapter();
|
|
48
|
+
case "windsurf":
|
|
49
|
+
return source.pathOrUrl
|
|
50
|
+
? new WindsurfAdapter({ userDir: source.pathOrUrl })
|
|
51
|
+
: new WindsurfAdapter();
|
|
42
52
|
case "jsonl-generic":
|
|
43
53
|
if (!source.pathOrUrl)
|
|
44
54
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-source.js","sourceRoot":"","sources":["../../../src/core/adapters/from-source.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAA2B,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"from-source.js","sourceRoot":"","sources":["../../../src/core/adapters/from-source.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAA2B,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,SAAS;gBACrB,CAAC,CAAC,IAAI,YAAY,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrD,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC;QACzB,KAAK,aAAa;YAChB,OAAO,MAAM,CAAC,SAAS;gBACrB,CAAC,CAAC,IAAI,iBAAiB,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC3D,CAAC,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAC9B,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,SAAS;gBACrB,CAAC,CAAC,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;gBACjD,CAAC,CAAC,IAAI,aAAa,EAAE,CAAC;QAC1B,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,SAAS;gBACrB,CAAC,CAAC,IAAI,aAAa,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;gBACvD,CAAC,CAAC,IAAI,aAAa,EAAE,CAAC;QAC1B,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC,SAAS;gBACrB,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;gBACtD,CAAC,CAAC,IAAI,kBAAkB,EAAE,CAAC;QAC/B,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,SAAS;gBACrB,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnD,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC;QAC5B,KAAK,IAAI;YACP,OAAO,MAAM,CAAC,SAAS;gBACrB,CAAC,CAAC,IAAI,SAAS,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnD,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;QACtB,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,SAAS;gBACrB,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;gBACpD,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC;QAC5B,KAAK,eAAe;YAClB,IAAI,CAAC,MAAM,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAC;YACnC,OAAO,IAAI,mBAAmB,CAAC;gBAC7B,IAAI,EAAE,SAAS,MAAM,CAAC,IAAI,EAAE;gBAC5B,IAAI,EAAE,MAAM,CAAC,SAAS;gBACtB,OAAO,EAAE,MAAM,CAAC,YAAY;gBAC5B,MAAM,EAAE,MAAM,CAAC,WAAiC;aACjD,CAAC,CAAC;QACL,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WindsurfAdapter — reads Windsurf (Codeium Cascade) sessions.
|
|
3
|
+
*
|
|
4
|
+
* ## Storage locations (macOS; Linux uses ~/.config/)
|
|
5
|
+
*
|
|
6
|
+
* Workspace DBs ~/Library/Application Support/Windsurf/User/workspaceStorage/<hash>/state.vscdb
|
|
7
|
+
* Table: ItemTable
|
|
8
|
+
* Key: workbench.panel.aichat.view.aichat.chatdata — chat tabs
|
|
9
|
+
* Bubble role: type 'user' → user, type 'ai' → assistant
|
|
10
|
+
*
|
|
11
|
+
* Global DB ~/Library/Application Support/Windsurf/User/globalStorage/state.vscdb
|
|
12
|
+
* Table: cursorDiskKV (if present) — composerData:*, agentData:*, flowData:*
|
|
13
|
+
* Table: ItemTable (fallback) — keys matching %agent%, %flow%, %cascade%
|
|
14
|
+
* Conversation format: type 1/2 (user/assistant) or role: user/assistant
|
|
15
|
+
*
|
|
16
|
+
* ## Session ID prefixes
|
|
17
|
+
*
|
|
18
|
+
* ws_ — workspace chat tab (ItemTable chatdata)
|
|
19
|
+
* wsg_ — global DB agent/flow session (cursorDiskKV or ItemTable)
|
|
20
|
+
*
|
|
21
|
+
* ## pathOrUrl in source registry
|
|
22
|
+
* Path to the Windsurf User directory. The adapter discovers:
|
|
23
|
+
* <userDir>/workspaceStorage/<hash>/state.vscdb (workspace)
|
|
24
|
+
* <userDir>/globalStorage/state.vscdb (global)
|
|
25
|
+
*
|
|
26
|
+
* Env override: NLM_WINDSURF_USER_DIR
|
|
27
|
+
*/
|
|
28
|
+
import type { DetectionResult, DiscoverOptions, SessionChunk, TranscriptAdapter } from "../../ports/transcript-adapter.js";
|
|
29
|
+
export interface WindsurfAdapterOptions {
|
|
30
|
+
readonly userDir?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function defaultUserDir(): string;
|
|
33
|
+
export declare class WindsurfAdapter implements TranscriptAdapter {
|
|
34
|
+
readonly name = "windsurf";
|
|
35
|
+
readonly runtimeVersion = "windsurf/1.0";
|
|
36
|
+
readonly transcriptKind = "windsurf-sqlite";
|
|
37
|
+
private readonly userDir;
|
|
38
|
+
constructor(opts?: WindsurfAdapterOptions);
|
|
39
|
+
detect(): DetectionResult;
|
|
40
|
+
discover(options?: DiscoverOptions): Promise<ReadonlyArray<string>>;
|
|
41
|
+
parseSession(id: string): Promise<SessionChunk | null>;
|
|
42
|
+
private _parseWorkspaceChatTab;
|
|
43
|
+
private _parseGlobalSession;
|
|
44
|
+
}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WindsurfAdapter — reads Windsurf (Codeium Cascade) sessions.
|
|
3
|
+
*
|
|
4
|
+
* ## Storage locations (macOS; Linux uses ~/.config/)
|
|
5
|
+
*
|
|
6
|
+
* Workspace DBs ~/Library/Application Support/Windsurf/User/workspaceStorage/<hash>/state.vscdb
|
|
7
|
+
* Table: ItemTable
|
|
8
|
+
* Key: workbench.panel.aichat.view.aichat.chatdata — chat tabs
|
|
9
|
+
* Bubble role: type 'user' → user, type 'ai' → assistant
|
|
10
|
+
*
|
|
11
|
+
* Global DB ~/Library/Application Support/Windsurf/User/globalStorage/state.vscdb
|
|
12
|
+
* Table: cursorDiskKV (if present) — composerData:*, agentData:*, flowData:*
|
|
13
|
+
* Table: ItemTable (fallback) — keys matching %agent%, %flow%, %cascade%
|
|
14
|
+
* Conversation format: type 1/2 (user/assistant) or role: user/assistant
|
|
15
|
+
*
|
|
16
|
+
* ## Session ID prefixes
|
|
17
|
+
*
|
|
18
|
+
* ws_ — workspace chat tab (ItemTable chatdata)
|
|
19
|
+
* wsg_ — global DB agent/flow session (cursorDiskKV or ItemTable)
|
|
20
|
+
*
|
|
21
|
+
* ## pathOrUrl in source registry
|
|
22
|
+
* Path to the Windsurf User directory. The adapter discovers:
|
|
23
|
+
* <userDir>/workspaceStorage/<hash>/state.vscdb (workspace)
|
|
24
|
+
* <userDir>/globalStorage/state.vscdb (global)
|
|
25
|
+
*
|
|
26
|
+
* Env override: NLM_WINDSURF_USER_DIR
|
|
27
|
+
*/
|
|
28
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
29
|
+
import { homedir } from "node:os";
|
|
30
|
+
import { join } from "node:path";
|
|
31
|
+
import Database from "better-sqlite3";
|
|
32
|
+
import { durationMinutes, normalizeTimestamp, safeSessionId } from "./common.js";
|
|
33
|
+
const CHAT_KEY = "workbench.panel.aichat.view.aichat.chatdata";
|
|
34
|
+
// ── Path helpers ──────────────────────────────────────────────────────────────
|
|
35
|
+
export function defaultUserDir() {
|
|
36
|
+
if (process.env["NLM_WINDSURF_USER_DIR"])
|
|
37
|
+
return process.env["NLM_WINDSURF_USER_DIR"];
|
|
38
|
+
const home = homedir();
|
|
39
|
+
if (process.platform === "darwin") {
|
|
40
|
+
return join(home, "Library/Application Support/Windsurf/User");
|
|
41
|
+
}
|
|
42
|
+
return join(home, ".config/Windsurf/User");
|
|
43
|
+
}
|
|
44
|
+
function workspaceStorageDir(userDir) {
|
|
45
|
+
return join(userDir, "workspaceStorage");
|
|
46
|
+
}
|
|
47
|
+
function globalDbPath(userDir) {
|
|
48
|
+
return join(userDir, "globalStorage", "state.vscdb");
|
|
49
|
+
}
|
|
50
|
+
function listWorkspaceDbs(userDir) {
|
|
51
|
+
const wsDir = workspaceStorageDir(userDir);
|
|
52
|
+
if (!existsSync(wsDir))
|
|
53
|
+
return [];
|
|
54
|
+
try {
|
|
55
|
+
return readdirSync(wsDir, { withFileTypes: true })
|
|
56
|
+
.filter((e) => e.isDirectory())
|
|
57
|
+
.map((e) => join(wsDir, e.name, "state.vscdb"))
|
|
58
|
+
.filter((p) => existsSync(p));
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// ── Turn extraction ───────────────────────────────────────────────────────────
|
|
65
|
+
function extractChatTurns(bubbles) {
|
|
66
|
+
const turns = [];
|
|
67
|
+
for (const b of bubbles) {
|
|
68
|
+
const text = (b.rawText ?? b.text ?? "").trim();
|
|
69
|
+
if (!text)
|
|
70
|
+
continue;
|
|
71
|
+
turns.push({ role: b.type === "user" ? "user" : "assistant", text });
|
|
72
|
+
}
|
|
73
|
+
return turns;
|
|
74
|
+
}
|
|
75
|
+
function extractAgentTurns(bubbles) {
|
|
76
|
+
const turns = [];
|
|
77
|
+
for (const b of bubbles) {
|
|
78
|
+
const text = (b.text ?? "").trim();
|
|
79
|
+
if (!text)
|
|
80
|
+
continue;
|
|
81
|
+
// Accept numeric type (1/2) or string role
|
|
82
|
+
const isUser = b.type === 1 || b.role === "user";
|
|
83
|
+
const isAssistant = b.type === 2 || b.role === "assistant";
|
|
84
|
+
if (!isUser && !isAssistant)
|
|
85
|
+
continue;
|
|
86
|
+
turns.push({ role: isUser ? "user" : "assistant", text });
|
|
87
|
+
}
|
|
88
|
+
return turns;
|
|
89
|
+
}
|
|
90
|
+
function provisionalLabel(turns) {
|
|
91
|
+
for (const t of turns) {
|
|
92
|
+
if (t.role !== "user")
|
|
93
|
+
continue;
|
|
94
|
+
const first = t.text.split("\n", 1)[0]?.trim();
|
|
95
|
+
if (first)
|
|
96
|
+
return first.slice(0, 80);
|
|
97
|
+
}
|
|
98
|
+
return "Untitled session";
|
|
99
|
+
}
|
|
100
|
+
function buildChunk(id, runtimeSessionId, sourcePath, turns, startedAt, endedAt, label) {
|
|
101
|
+
const text = turns.map((t) => `${t.role}: ${t.text}`).join("\n\n");
|
|
102
|
+
return {
|
|
103
|
+
id,
|
|
104
|
+
runtime: "windsurf/1.0",
|
|
105
|
+
runtimeSessionId,
|
|
106
|
+
sourcePath,
|
|
107
|
+
startedAt,
|
|
108
|
+
endedAt,
|
|
109
|
+
durationMin: durationMinutes(startedAt, endedAt),
|
|
110
|
+
turnCount: turns.length,
|
|
111
|
+
byteRange: [0, Buffer.byteLength(text, "utf8")],
|
|
112
|
+
projectDir: "",
|
|
113
|
+
gitBranch: "",
|
|
114
|
+
text,
|
|
115
|
+
label,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
// ── Workspace chat helpers ────────────────────────────────────────────────────
|
|
119
|
+
function parseTabsFromDb(dbPath) {
|
|
120
|
+
let db;
|
|
121
|
+
try {
|
|
122
|
+
db = new Database(dbPath, { readonly: true });
|
|
123
|
+
const row = db
|
|
124
|
+
.prepare(`SELECT key, value FROM ItemTable WHERE key = ?`)
|
|
125
|
+
.get(CHAT_KEY);
|
|
126
|
+
if (!row?.value)
|
|
127
|
+
return [];
|
|
128
|
+
const data = JSON.parse(row.value);
|
|
129
|
+
return Array.isArray(data.tabs) ? data.tabs : [];
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
db?.close();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function parseGlobalSessions(globalPath) {
|
|
139
|
+
if (!existsSync(globalPath))
|
|
140
|
+
return [];
|
|
141
|
+
let db;
|
|
142
|
+
const results = [];
|
|
143
|
+
try {
|
|
144
|
+
db = new Database(globalPath, { readonly: true });
|
|
145
|
+
const tables = db
|
|
146
|
+
.prepare(`SELECT name FROM sqlite_master WHERE type='table'`)
|
|
147
|
+
.all()
|
|
148
|
+
.map((r) => r.name);
|
|
149
|
+
if (tables.includes("cursorDiskKV")) {
|
|
150
|
+
const rows = db
|
|
151
|
+
.prepare(`SELECT key, value FROM cursorDiskKV
|
|
152
|
+
WHERE key LIKE 'composerData:%' OR key LIKE 'agentData:%' OR key LIKE 'flowData:%'
|
|
153
|
+
ORDER BY rowid ASC`)
|
|
154
|
+
.all();
|
|
155
|
+
for (const row of rows) {
|
|
156
|
+
if (!row.value)
|
|
157
|
+
continue;
|
|
158
|
+
try {
|
|
159
|
+
const meta = JSON.parse(row.value);
|
|
160
|
+
const rawId = meta.composerId ?? row.key.split(":").slice(1).join(":");
|
|
161
|
+
if (rawId)
|
|
162
|
+
results.push({ id: rawId, meta, dbPath: globalPath });
|
|
163
|
+
}
|
|
164
|
+
catch { /* skip */ }
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else if (tables.includes("ItemTable")) {
|
|
168
|
+
// Fallback: probe for agent/flow/cascade keys
|
|
169
|
+
const rows = db
|
|
170
|
+
.prepare(`SELECT key, value FROM ItemTable
|
|
171
|
+
WHERE key LIKE '%agent%' OR key LIKE '%flow%' OR key LIKE '%cascade%'`)
|
|
172
|
+
.all();
|
|
173
|
+
for (const row of rows) {
|
|
174
|
+
if (!row.value)
|
|
175
|
+
continue;
|
|
176
|
+
try {
|
|
177
|
+
const data = JSON.parse(row.value);
|
|
178
|
+
if (typeof data !== "object" || !data)
|
|
179
|
+
continue;
|
|
180
|
+
// Accept any object with a conversation array
|
|
181
|
+
const conv = data.conversation;
|
|
182
|
+
if (!Array.isArray(conv) || conv.length === 0)
|
|
183
|
+
continue;
|
|
184
|
+
const id = data.composerId ?? row.key;
|
|
185
|
+
results.push({ id, meta: data, dbPath: globalPath });
|
|
186
|
+
}
|
|
187
|
+
catch { /* skip */ }
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch { /* inaccessible */ }
|
|
192
|
+
finally {
|
|
193
|
+
db?.close();
|
|
194
|
+
}
|
|
195
|
+
return results;
|
|
196
|
+
}
|
|
197
|
+
// ── Adapter ───────────────────────────────────────────────────────────────────
|
|
198
|
+
export class WindsurfAdapter {
|
|
199
|
+
name = "windsurf";
|
|
200
|
+
runtimeVersion = "windsurf/1.0";
|
|
201
|
+
transcriptKind = "windsurf-sqlite";
|
|
202
|
+
userDir;
|
|
203
|
+
constructor(opts = {}) {
|
|
204
|
+
this.userDir = opts.userDir ?? defaultUserDir();
|
|
205
|
+
}
|
|
206
|
+
detect() {
|
|
207
|
+
if (existsSync(this.userDir)) {
|
|
208
|
+
return { adapterName: this.name, enabled: true, path: this.userDir, hint: null };
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
adapterName: this.name,
|
|
212
|
+
enabled: false,
|
|
213
|
+
path: null,
|
|
214
|
+
hint: "Windsurf User directory not found — install Windsurf or set NLM_WINDSURF_USER_DIR.",
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
async discover(options) {
|
|
218
|
+
const seen = new Set();
|
|
219
|
+
const ids = [];
|
|
220
|
+
const add = (id) => { if (!seen.has(id)) {
|
|
221
|
+
seen.add(id);
|
|
222
|
+
ids.push(id);
|
|
223
|
+
} };
|
|
224
|
+
const cutoff = options?.since?.getTime();
|
|
225
|
+
// ── Workspace chat tabs ───────────────────────────────────────────────
|
|
226
|
+
for (const dbPath of listWorkspaceDbs(this.userDir)) {
|
|
227
|
+
for (const tab of parseTabsFromDb(dbPath)) {
|
|
228
|
+
if (!tab.tabId)
|
|
229
|
+
continue;
|
|
230
|
+
if (!(tab.bubbles && tab.bubbles.length > 0))
|
|
231
|
+
continue;
|
|
232
|
+
if (cutoff !== undefined) {
|
|
233
|
+
const ts = tab.lastSendTime;
|
|
234
|
+
// Only skip when we have a real non-zero timestamp older than the cutoff.
|
|
235
|
+
// Missing (undefined) or zero timestamps are treated as "unknown age" — include.
|
|
236
|
+
if (ts !== undefined && ts > 0 && ts < cutoff)
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
add(`ws_${tab.tabId}`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// ── Global agent/flow sessions ────────────────────────────────────────
|
|
243
|
+
for (const gs of parseGlobalSessions(globalDbPath(this.userDir))) {
|
|
244
|
+
if (cutoff !== undefined) {
|
|
245
|
+
const ts = gs.meta.lastUpdatedAt ?? gs.meta.createdAt;
|
|
246
|
+
if (ts !== undefined && ts !== null) {
|
|
247
|
+
const normalized = normalizeTimestamp(ts);
|
|
248
|
+
if (normalized && Date.parse(normalized) < cutoff)
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
add(`wsg_${gs.id}`);
|
|
253
|
+
}
|
|
254
|
+
return ids;
|
|
255
|
+
}
|
|
256
|
+
async parseSession(id) {
|
|
257
|
+
if (id.startsWith("wsg_")) {
|
|
258
|
+
return this._parseGlobalSession(id.slice("wsg_".length));
|
|
259
|
+
}
|
|
260
|
+
// ws_ prefix or legacy plain tabId
|
|
261
|
+
const tabId = id.startsWith("ws_") ? id.slice("ws_".length) : id;
|
|
262
|
+
return this._parseWorkspaceChatTab(tabId);
|
|
263
|
+
}
|
|
264
|
+
_parseWorkspaceChatTab(tabId) {
|
|
265
|
+
for (const dbPath of listWorkspaceDbs(this.userDir)) {
|
|
266
|
+
const tabs = parseTabsFromDb(dbPath);
|
|
267
|
+
const tab = tabs.find((t) => t.tabId === tabId);
|
|
268
|
+
if (!tab)
|
|
269
|
+
continue;
|
|
270
|
+
const turns = extractChatTurns(tab.bubbles ?? []);
|
|
271
|
+
if (turns.length === 0)
|
|
272
|
+
return null;
|
|
273
|
+
const endedAtMs = tab.lastSendTime ?? 0;
|
|
274
|
+
const endedAt = endedAtMs > 0 ? new Date(endedAtMs).toISOString() : "";
|
|
275
|
+
const label = tab.chatTitle?.trim()
|
|
276
|
+
? tab.chatTitle.trim().slice(0, 80)
|
|
277
|
+
: provisionalLabel(turns);
|
|
278
|
+
return buildChunk(safeSessionId("ws", tabId), tabId, `${dbPath}::${tabId}`, turns, endedAt, endedAt, label);
|
|
279
|
+
}
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
_parseGlobalSession(rawId) {
|
|
283
|
+
for (const gs of parseGlobalSessions(globalDbPath(this.userDir))) {
|
|
284
|
+
if (gs.id !== rawId)
|
|
285
|
+
continue;
|
|
286
|
+
const turns = extractAgentTurns(gs.meta.conversation ?? []);
|
|
287
|
+
if (turns.length === 0)
|
|
288
|
+
return null;
|
|
289
|
+
const startedAt = normalizeTimestamp(gs.meta.createdAt ?? gs.meta.lastUpdatedAt ?? "");
|
|
290
|
+
const endedAt = normalizeTimestamp(gs.meta.lastUpdatedAt ?? gs.meta.createdAt ?? "");
|
|
291
|
+
const label = gs.meta.name?.trim()
|
|
292
|
+
? gs.meta.name.trim().slice(0, 80)
|
|
293
|
+
: provisionalLabel(turns);
|
|
294
|
+
return buildChunk(safeSessionId("wsg", rawId), rawId, `${gs.dbPath}::${rawId}`, turns, startedAt, endedAt, label);
|
|
295
|
+
}
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=windsurf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../../src/core/adapters/windsurf.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,17 +12,24 @@
|
|
|
12
12
|
* and node receives the wrong argv — silent hook bricking.
|
|
13
13
|
*/
|
|
14
14
|
export declare function shellQuote(arg: string): string;
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Double-quote a cmd.exe argument. Embedded double quotes are doubled per
|
|
17
|
+
* cmd.exe parsing rules. Used for hook commands on Windows where Claude
|
|
18
|
+
* Code dispatches via cmd.exe /c rather than sh -c.
|
|
19
|
+
*/
|
|
20
|
+
export declare function cmdQuote(arg: string): string;
|
|
21
|
+
export declare function buildHookCommand(execPath: string, hookJs: string, mode: "shadow" | "live", targetPlatform?: NodeJS.Platform): string;
|
|
16
22
|
export interface SmokeTestResult {
|
|
17
23
|
readonly ok: boolean;
|
|
18
24
|
readonly reason?: string;
|
|
19
25
|
readonly stderr?: string;
|
|
20
26
|
}
|
|
21
27
|
/**
|
|
22
|
-
* Invoke the wired command exactly the way Claude Code does (sh -c
|
|
23
|
-
* JSON on stdin
|
|
24
|
-
* class of failures where settings.json
|
|
25
|
-
* at startup (path tokenization, missing
|
|
28
|
+
* Invoke the wired command exactly the way Claude Code does (sh -c on
|
|
29
|
+
* POSIX, cmd.exe /c on Windows) with JSON on stdin and confirm the hook
|
|
30
|
+
* log gained an entry. Catches the class of failures where settings.json
|
|
31
|
+
* looks valid but the hook fails at startup (path tokenization, missing
|
|
32
|
+
* modules, missing shell, etc.).
|
|
26
33
|
*/
|
|
27
34
|
export declare function smokeTestHookCommand(command: string, hookLogPath: string, timeoutMs?: number): SmokeTestResult;
|
|
28
35
|
export type ClaudeHookEvent = "UserPromptSubmit" | "SessionStart" | "SessionEnd" | "Stop" | "PreCompact" | "SubagentStart" | "PostToolUse" | "PreToolUse";
|
|
@@ -28,18 +28,33 @@ const HOOK_SCRIPT_MARKERS = [
|
|
|
28
28
|
export function shellQuote(arg) {
|
|
29
29
|
return `'${arg.replace(/'/g, "'\\''")}'`;
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Double-quote a cmd.exe argument. Embedded double quotes are doubled per
|
|
33
|
+
* cmd.exe parsing rules. Used for hook commands on Windows where Claude
|
|
34
|
+
* Code dispatches via cmd.exe /c rather than sh -c.
|
|
35
|
+
*/
|
|
36
|
+
export function cmdQuote(arg) {
|
|
37
|
+
return `"${arg.replace(/"/g, '""')}"`;
|
|
38
|
+
}
|
|
39
|
+
export function buildHookCommand(execPath, hookJs, mode, targetPlatform = process.platform) {
|
|
40
|
+
if (targetPlatform === "win32") {
|
|
41
|
+
// cmd.exe: `set VAR=val && "exec" "script"`. The set is scoped to the
|
|
42
|
+
// cmd /c invocation so the env var is visible to the chained child.
|
|
43
|
+
return `set NLM_HOOK_MODE=${mode} && ${cmdQuote(execPath)} ${cmdQuote(hookJs)}`;
|
|
44
|
+
}
|
|
32
45
|
return `NLM_HOOK_MODE=${mode} ${shellQuote(execPath)} ${shellQuote(hookJs)}`;
|
|
33
46
|
}
|
|
34
47
|
/**
|
|
35
|
-
* Invoke the wired command exactly the way Claude Code does (sh -c
|
|
36
|
-
* JSON on stdin
|
|
37
|
-
* class of failures where settings.json
|
|
38
|
-
* at startup (path tokenization, missing
|
|
48
|
+
* Invoke the wired command exactly the way Claude Code does (sh -c on
|
|
49
|
+
* POSIX, cmd.exe /c on Windows) with JSON on stdin and confirm the hook
|
|
50
|
+
* log gained an entry. Catches the class of failures where settings.json
|
|
51
|
+
* looks valid but the hook fails at startup (path tokenization, missing
|
|
52
|
+
* modules, missing shell, etc.).
|
|
39
53
|
*/
|
|
40
54
|
export function smokeTestHookCommand(command, hookLogPath, timeoutMs = 5000) {
|
|
41
55
|
const sizeBefore = existsSync(hookLogPath) ? statSync(hookLogPath).size : 0;
|
|
42
|
-
const
|
|
56
|
+
const isWin = process.platform === "win32";
|
|
57
|
+
const result = spawnSync(isWin ? "cmd.exe" : "sh", [isWin ? "/c" : "-c", command], {
|
|
43
58
|
input: JSON.stringify({ prompt: "smoke test", session_id: "install-smoke" }),
|
|
44
59
|
timeout: timeoutMs,
|
|
45
60
|
encoding: "utf8",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../../src/core/hook/claude-settings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,qEAAqE;AACrE,uEAAuE;AACvE,gCAAgC;AAChC,MAAM,mBAAmB,GAAG;IAC1B,uBAAuB;IACvB,qBAAqB;IACrB,cAAc;IACd,uBAAuB;IACvB,qBAAqB;IACrB,wBAAwB;CAChB,CAAC;AAEX;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,MAAc,EACd,IAAuB;
|
|
1
|
+
{"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../../src/core/hook/claude-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* See docs/plans/desktop-product.md (Phase 0).
|
|
14
14
|
*/
|
|
15
15
|
import type Database from "better-sqlite3";
|
|
16
|
-
export type SourceKind = "claude-code" | "hermes" | "hermes-agent" | "aider" | "opencode" | "pi" | "jsonl-generic" | "webhook";
|
|
16
|
+
export type SourceKind = "claude-code" | "hermes" | "hermes-agent" | "aider" | "cursor" | "windsurf" | "opencode" | "pi" | "jsonl-generic" | "webhook";
|
|
17
17
|
export interface SourceRow {
|
|
18
18
|
readonly id: number;
|
|
19
19
|
readonly kind: SourceKind;
|
|
@@ -17,8 +17,10 @@ import { existsSync } from "node:fs";
|
|
|
17
17
|
import { homedir } from "node:os";
|
|
18
18
|
import { join } from "node:path";
|
|
19
19
|
import { defaultHistoryFile as defaultAiderHistoryFile } from "../adapters/aider.js";
|
|
20
|
+
import { defaultDbPath as defaultCursorDbPath } from "../adapters/cursor.js";
|
|
20
21
|
import { defaultDbPath as defaultHermesAgentDbPath } from "../adapters/hermes-agent.js";
|
|
21
22
|
import { defaultDbPath as defaultOpenCodeDbPath } from "../adapters/opencode.js";
|
|
23
|
+
import { defaultUserDir as defaultWindsurfUserDir } from "../adapters/windsurf.js";
|
|
22
24
|
function rowFromDb(r, revealedToken = null) {
|
|
23
25
|
let parsed = {};
|
|
24
26
|
try {
|
|
@@ -157,6 +159,8 @@ export class SourceRegistry {
|
|
|
157
159
|
const openCodeDbPath = defaultOpenCodeDbPath();
|
|
158
160
|
const hermesAgentDbPath = defaultHermesAgentDbPath();
|
|
159
161
|
const aiderHistoryFile = defaultAiderHistoryFile();
|
|
162
|
+
const cursorDbPath = defaultCursorDbPath();
|
|
163
|
+
const windsurfUserDir = defaultWindsurfUserDir();
|
|
160
164
|
const presets = [
|
|
161
165
|
{
|
|
162
166
|
kind: "claude-code",
|
|
@@ -186,6 +190,20 @@ export class SourceRegistry {
|
|
|
186
190
|
runtimeLabel: "aider/1.0",
|
|
187
191
|
enabled: existsSync(aiderHistoryFile),
|
|
188
192
|
},
|
|
193
|
+
{
|
|
194
|
+
kind: "cursor",
|
|
195
|
+
name: "Cursor",
|
|
196
|
+
pathOrUrl: cursorDbPath,
|
|
197
|
+
runtimeLabel: "cursor/1.0",
|
|
198
|
+
enabled: existsSync(cursorDbPath),
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
kind: "windsurf",
|
|
202
|
+
name: "Windsurf",
|
|
203
|
+
pathOrUrl: windsurfUserDir,
|
|
204
|
+
runtimeLabel: "windsurf/1.0",
|
|
205
|
+
enabled: existsSync(windsurfUserDir),
|
|
206
|
+
},
|
|
189
207
|
{
|
|
190
208
|
kind: "opencode",
|
|
191
209
|
name: "OpenCode",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-registry.js","sourceRoot":"","sources":["../../../src/core/sources/source-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,aAAa,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAE,aAAa,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"source-registry.js","sourceRoot":"","sources":["../../../src/core/sources/source-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -144,9 +144,11 @@ export declare class SqliteSessionStore implements SessionStore {
|
|
|
144
144
|
keywordSearch(query: string, limit: number): Promise<ReadonlyArray<KeywordNeighbor>>;
|
|
145
145
|
updateStatus(sessionId: string, status: SessionStatus): Promise<void>;
|
|
146
146
|
insertSessionForTest(session: Session): void;
|
|
147
|
+
insertEdgeForTest(fromSession: string, toSession: string, kind?: "supersedes" | "continues"): void;
|
|
147
148
|
insertEmbeddingForTest(sessionId: string, vector: Float32Array): void;
|
|
148
149
|
insertChunkEmbeddingForTest(sessionId: string, chunkIdx: number, vector: Float32Array): void;
|
|
149
150
|
private loadEntities;
|
|
151
|
+
private loadSessionEdges;
|
|
150
152
|
private loadMarkers;
|
|
151
153
|
private rowToSession;
|
|
152
154
|
}
|