@dikolab/kbdb 0.4.0 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +30 -22
  2. package/dist/{chunk-BJPSPNGX.mjs → chunk-BJXEVALU.mjs} +115 -1
  3. package/dist/chunk-BJXEVALU.mjs.map +7 -0
  4. package/dist/cli.cjs +462 -79
  5. package/dist/cli.cjs.map +4 -4
  6. package/dist/cli.mjs +356 -79
  7. package/dist/cli.mjs.map +4 -4
  8. package/dist/kbdb-worker.cjs +413 -53
  9. package/dist/kbdb-worker.cjs.map +4 -4
  10. package/dist/mod.cjs +230 -54
  11. package/dist/mod.cjs.map +4 -4
  12. package/dist/mod.mjs +229 -53
  13. package/dist/mod.mjs.map +4 -4
  14. package/dist/src/shared/cli/typings/cli-options.interface.d.ts +5 -0
  15. package/dist/src/shared/embedding/classes/tfidf-embedding-provider.class.d.ts +28 -0
  16. package/dist/src/shared/embedding/constants/tfidf-defaults.constant.d.ts +4 -0
  17. package/dist/src/shared/embedding/functions/create-embedding-provider.function.d.ts +5 -2
  18. package/dist/src/shared/embedding/index.d.ts +2 -0
  19. package/dist/src/shared/log/constants/log-colors.constant.d.ts +5 -0
  20. package/dist/src/shared/log/constants/log-defaults.constant.d.ts +3 -0
  21. package/dist/src/shared/log/constants/log-icons.constant.d.ts +3 -0
  22. package/dist/src/shared/log/functions/configure-log.function.d.ts +12 -0
  23. package/dist/src/shared/log/functions/log.function.d.ts +28 -0
  24. package/dist/src/shared/log/functions/parse-log-level.function.d.ts +10 -0
  25. package/dist/src/shared/log/functions/resolve-log-level.function.d.ts +12 -0
  26. package/dist/src/shared/log/functions/write-stderr.function.d.ts +10 -0
  27. package/dist/src/shared/log/index.d.ts +10 -0
  28. package/dist/src/shared/log/typings/log-config.interface.d.ts +7 -0
  29. package/dist/src/shared/log/typings/log-level.type.d.ts +7 -0
  30. package/dist/src/shared/log/typings/log-output.interface.d.ts +4 -0
  31. package/dist/src/shared/version/constants/version.constant.d.ts +1 -1
  32. package/dist/src/shared/worker-client/classes/worker-client.class.d.ts +7 -0
  33. package/dist/src/shared/worker-client/functions/retry-on-timeout.function.d.ts +1 -0
  34. package/dist/src/shared/worker-daemon/classes/worker-daemon.class.d.ts +1 -0
  35. package/dist/src/shared/worker-daemon/functions/run-worker.function.d.ts +6 -1
  36. package/dist/src/shared/worker-daemon/typings/wasm-modules.interface.d.ts +5 -0
  37. package/dist/wasm/default-embedding/kbdb_default_embedding.d.ts +55 -0
  38. package/dist/wasm/default-embedding/kbdb_default_embedding.js +156 -0
  39. package/dist/wasm/default-embedding/kbdb_default_embedding_bg.wasm +0 -0
  40. package/dist/wasm/default-embedding/kbdb_default_embedding_bg.wasm.d.ts +12 -0
  41. package/dist/wasm/default-embedding/package.json +13 -0
  42. package/dist/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
  43. package/dist/wasm/fs-migration/kbdb_fs_migration.d.ts +38 -0
  44. package/dist/wasm/fs-migration/kbdb_fs_migration.js +130 -0
  45. package/dist/wasm/fs-migration/kbdb_fs_migration_bg.wasm +0 -0
  46. package/dist/wasm/fs-migration/kbdb_fs_migration_bg.wasm.d.ts +9 -0
  47. package/dist/wasm/fs-migration/package.json +13 -0
  48. package/dist/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
  49. package/dist/wasm/query-parser/kbdb_query_parser_bg.wasm +0 -0
  50. package/dist/worker.mjs +306 -54
  51. package/dist/worker.mjs.map +4 -4
  52. package/docs/details/agent-tooling.md +10 -0
  53. package/docs/details/cli.md +29 -13
  54. package/docs/details/knowledge-base.md +15 -8
  55. package/docs/details/mcp-server.md +16 -1
  56. package/docs/details/search-and-ranking.md +6 -2
  57. package/docs/goals/cli.md +33 -4
  58. package/docs/goals/content-parser.md +1 -1
  59. package/docs/goals/hybrid-search.md +71 -42
  60. package/docs/goals/mcp.md +3 -1
  61. package/docs/goals/overview.md +1 -1
  62. package/docs/goals/query-parser.md +1 -1
  63. package/docs/goals/semantic-dedup.md +7 -3
  64. package/docs/goals/worker-daemon.md +31 -20
  65. package/docs/modules/overview.md +43 -22
  66. package/docs/modules/rust/embedding/module.md +91 -0
  67. package/docs/modules/rust/overview.md +56 -21
  68. package/docs/modules/rust/query-parser/functions/module.md +7 -5
  69. package/docs/modules/rust/query-parser/functions/pipeline.md +6 -138
  70. package/docs/modules/rust/query-parser/module.md +16 -22
  71. package/docs/modules/rust/query-parser/types/module.md +5 -4
  72. package/docs/modules/rust/query-parser/types/token.md +5 -1
  73. package/docs/modules/rust/shared/content-parser/functions.md +1 -1
  74. package/docs/modules/rust/shared/memory/module.md +1 -1
  75. package/docs/modules/rust/shared/module.md +33 -5
  76. package/docs/modules/rust/shared/pipeline/functions.md +141 -0
  77. package/docs/modules/rust/shared/pipeline/module.md +62 -0
  78. package/docs/modules/rust/shared/pipeline/types.md +43 -0
  79. package/docs/modules/rust/shared/section/module.md +1 -1
  80. package/docs/modules/rust/shared/section/types.md +1 -1
  81. package/docs/modules/typescript/cli.md +4 -2
  82. package/docs/modules/typescript/kbdb-worker.md +20 -5
  83. package/docs/modules/typescript/overview.md +28 -6
  84. package/docs/modules/typescript/shared/cli/functions.md +15 -4
  85. package/docs/modules/typescript/shared/cli/typings.md +21 -0
  86. package/docs/modules/typescript/shared/embedding/functions.md +30 -3
  87. package/docs/modules/typescript/shared/embedding/module.md +10 -4
  88. package/docs/modules/typescript/shared/embedding/typings.md +7 -5
  89. package/docs/modules/typescript/shared/log/constants.md +82 -0
  90. package/docs/modules/typescript/shared/log/functions.md +131 -0
  91. package/docs/modules/typescript/shared/log/module.md +153 -0
  92. package/docs/modules/typescript/shared/log/typings.md +82 -0
  93. package/docs/modules/typescript/shared/module.md +22 -6
  94. package/docs/modules/typescript/shared/worker-daemon/functions.md +19 -6
  95. package/docs/modules/typescript/shared/worker-daemon/module.md +5 -2
  96. package/docs/modules/typescript/shared/worker-daemon/typings.md +13 -7
  97. package/docs/release-notes/0.4.1.md +149 -0
  98. package/docs/release-notes/0.4.3.md +60 -0
  99. package/package.json +2 -2
  100. package/dist/chunk-BJPSPNGX.mjs.map +0 -7
@@ -0,0 +1,149 @@
1
+ # 0.4.1
2
+
3
+ *Patch release -- 2026-06-26*
4
+
5
+ Built-in TF-IDF embedding provider so hybrid search
6
+ works out of the box with zero configuration.
7
+ Structured logging across the entire TypeScript
8
+ layer with configurable verbosity. Daemon lifecycle
9
+ fixes for reliable shutdown on bare Linux TTY.
10
+ Non-interactive mode for scripts, CI, and automated
11
+ testing.
12
+
13
+ ---
14
+
15
+ ## Engine
16
+
17
+ - **New WASM crate: `kbdb-default-embedding`** --
18
+ computes 256-dimensional feature-hashed sublinear
19
+ TF vectors using FNV-1a with the sign trick
20
+ (Weinberger et al., 2009). Pure computation, no
21
+ host imports.
22
+ - **Pipeline moved to `kbdb-shared`** -- the 9-stage
23
+ tokenization pipeline (NFC normalization, Unicode
24
+ segmentation, camelCase splitting, stop-word
25
+ removal, synonym expansion, Snowball stemming)
26
+ moved from `kbdb-query-parser` to `kbdb-shared`.
27
+ Both `kbdb-query-parser` and
28
+ `kbdb-default-embedding` now share a single source
29
+ of truth, keeping TF-IDF vectors token-consistent
30
+ with the lexical index.
31
+
32
+ ## Daemon
33
+
34
+ - **Loads `default-embedding.wasm` at startup** --
35
+ the worker daemon loads the new standalone WASM
36
+ module alongside the existing `kb-worker.wasm`.
37
+ If the module is missing, the daemon gracefully
38
+ falls back to `NullEmbeddingProvider`.
39
+ - **Daemon lifecycle fixes** -- socket-level
40
+ connection tracking replaces the broken
41
+ server-level `close` handler, so the idle timer
42
+ fires correctly. `stop()` force-closes lingering
43
+ sockets. `worker stop` polls until the daemon
44
+ actually exits (5 s cap) instead of fire-and-forget
45
+ SIGTERM. `retryOnTimeout` kills a stuck daemon
46
+ before spawning a fresh one.
47
+ - **Accepts `--log-level`** -- the daemon parses an
48
+ optional `--log-level <level>` argument forwarded
49
+ by the spawner from the `KBDB_LOG_LEVEL` env var.
50
+
51
+ ## CLI
52
+
53
+ - **`--non-interactive` flag** -- suppresses
54
+ interactive prompts and uses default values.
55
+ When set, data commands that find no `.kbdb`
56
+ directory return an error instead of prompting
57
+ to create one.
58
+ - **`KBDB_NON_INTERACTIVE` env var** -- same effect
59
+ as `--non-interactive`. Accepts `1` or `true`.
60
+ CLI flag takes priority.
61
+ - **Deprecation warnings fixed** -- `--init` and
62
+ `--migrate` deprecation messages now emit at all
63
+ log levels. Previously they fired before log
64
+ configuration and were suppressed.
65
+
66
+ ## Embedding
67
+
68
+ - **`TfidfEmbeddingProvider`** -- new provider backed
69
+ by the `kbdb-default-embedding` WASM module.
70
+ Returns 256-dimensional L2-normalized vectors.
71
+ Model name: `tfidf-v1`.
72
+ - **New factory default** -- when no `[embedding]`
73
+ section is present in `worker.toml`, the factory
74
+ returns `TfidfEmbeddingProvider` instead of
75
+ `NullEmbeddingProvider`. Hybrid and vector search
76
+ work without configuration.
77
+ - **Explicit disable** -- setting `provider = "none"`
78
+ in `worker.toml` still returns
79
+ `NullEmbeddingProvider`, which rejects hybrid and
80
+ vector search with a structured error.
81
+
82
+ ## Logging
83
+
84
+ - **New `log` module** (`src/shared/log/`) --
85
+ structured logging with four levels (`DEBUG`,
86
+ `INFO`, `WARNING`, `ERROR`), per-level Unicode
87
+ icons (▸ℹ⚠✖), per-level ANSI colors, and
88
+ configurable output targets. Default level is
89
+ `ERROR` (errors only).
90
+ - **CLI verbose flags** -- `-v` (warnings), `-vv`
91
+ (info), `-vvv` (debug). `-v` is reassigned from
92
+ `--version` to `--verbose`; `--version` has no
93
+ short alias.
94
+ - **`KBDB_LOG_LEVEL` env var** -- accepts `debug`,
95
+ `info`, `warning`, `error` (case-insensitive).
96
+ CLI flags take priority over the env var.
97
+ - **Comprehensive lifecycle logging** -- milestone
98
+ logging at key process points across CLI command
99
+ runners, MCP server lifecycle, worker daemon IPC
100
+ dispatch, embedding providers, worker client
101
+ discovery, and auto-capture. Full IPC lifecycle
102
+ coverage: daemon startup/shutdown, socket
103
+ connections, request dispatch, retry logic,
104
+ daemon discovery, write lock events, and idle
105
+ timer. Pre-throw error logging at all throw
106
+ sites. All `console.error` calls replaced with
107
+ `log()`.
108
+
109
+ ## Documentation
110
+
111
+ - **Hybrid search docs aligned** -- updated
112
+ architecture, CLI/MCP surface, and design
113
+ constraint sections to reflect the new WASM crate
114
+ and `--algo` flag.
115
+ - **Worker daemon docs updated** -- WASM module
116
+ count, loading diagram, and distribution section
117
+ now describe four modules.
118
+ - **Factory docs corrected** -- `type:` references
119
+ fixed to `provider:`, factory mapping table
120
+ updated for the new default.
121
+ - **Log module docs added** -- module overview,
122
+ functions reference, typings reference, and
123
+ constants reference under
124
+ `docs/modules/typescript/shared/log/`.
125
+ - **CLI and worker daemon docs updated** -- verbose
126
+ flags (`-v`/`-vv`/`-vvv`), `--log-level` arg,
127
+ `KBDB_LOG_LEVEL` env var documented across CLI,
128
+ worker daemon, and shared module pages.
129
+ - **E2E test harness hardened** -- `run_kbdb`
130
+ wrapper wraps all `kbdb` calls in `timeout -k 5`
131
+ with SIGKILL fallback. Timeouts report as test
132
+ failures. GNU `coreutils` added to Docker image.
133
+ Non-interactive mode enabled for all E2E tests.
134
+ - **Completed todos and issues archived** -- three
135
+ todo docs (pipeline move, TF-IDF provider, default
136
+ wiring) and two issue docs (daemon lifecycle hang,
137
+ hybrid search errors) moved to `archived/`.
138
+
139
+ ---
140
+
141
+ ## Upgrade
142
+
143
+ ```sh
144
+ # Node.js
145
+ npm install -g @dikolab/kbdb@0.4.1
146
+
147
+ # Deno
148
+ deno install -Agf jsr:@dikolab/kbdb/cli
149
+ ```
@@ -0,0 +1,60 @@
1
+ # 0.4.3
2
+
3
+ *Patch release -- 2026-06-27*
4
+
5
+ Harden build pipeline and fix documentation links.
6
+ Dynamic WASM build script, fresh-build E2E pre-test,
7
+ and absolute URLs so npm README links work.
8
+
9
+ ---
10
+
11
+ ## Build Pipeline
12
+
13
+ - **Dynamic `build-wasm.sh`** -- the script now
14
+ auto-discovers cdylib crates from
15
+ `engine/Cargo.toml` instead of hardcoding a list.
16
+ Adding a new WASM crate requires zero script edits.
17
+ - **E2E pre-test `00-build-assets.sh`** -- builds
18
+ WASM, installs deps, and rebuilds dist/ fresh
19
+ before every E2E run. Prevents stale artifacts
20
+ from producing false test passes.
21
+ - **Dockerfile simplified** -- removed the
22
+ `wasm-builder` stage and baked WASM cache. The
23
+ image now contains only toolchains; all build
24
+ logic lives in mounted host scripts. No image
25
+ rebuild needed when adding WASM crates.
26
+ - **Deleted `sync-wasm.sh`** -- replaced by direct
27
+ `build-wasm.sh` invocation. Eliminates the stale
28
+ Docker cache path that caused missing
29
+ `default-embedding` in prior builds.
30
+
31
+ ## Documentation
32
+
33
+ - **npm README links fixed** -- all relative links
34
+ (`docs/`, `LICENSE`, `Makefile`) converted to
35
+ absolute GitLab URLs so they resolve on npmjs.com.
36
+ - **WASM paths corrected** -- fixed
37
+ `src/shared/worker-daemon/wasm/` to `src/wasm/`
38
+ across all skills, agents, CLAUDE.md, and module
39
+ docs.
40
+ - **Crate counts updated** -- "five crates" to "six
41
+ crates" and "three cdylib" to "five cdylib" in all
42
+ documentation.
43
+ - **Publish skill hardened** -- Steps 8 and 10 now
44
+ verify correct WASM filenames (with `kbdb_` prefix)
45
+ and include `default-embedding`.
46
+ - **Verification Standards added to CLAUDE.md** --
47
+ Never Fabricate Results, Silent Failures, and When
48
+ Stuck sections.
49
+
50
+ ---
51
+
52
+ ## Upgrade
53
+
54
+ ```sh
55
+ # Node.js
56
+ npm install -g @dikolab/kbdb@0.4.3
57
+
58
+ # Deno
59
+ deno install -Agf jsr:@dikolab/kbdb/cli
60
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dikolab/kbdb",
3
- "version": "0.4.0",
3
+ "version": "0.4.3",
4
4
  "description": "CLI tool and MCP server for a file-based knowledge base database -- index documents, search with ranked results, and recall context for AI agents",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -70,7 +70,7 @@
70
70
  "lint:fix": "eslint --fix",
71
71
  "test": "vitest --run",
72
72
  "build": "node esbuild.config.js",
73
- "build:wasm": "cd engine && wasm-pack build crates/query-parser --target no-modules --out-dir ../../../src/wasm/query-parser && wasm-pack build crates/fs-database --target no-modules --out-dir ../../../src/wasm/fs-database && wasm-pack build crates/kb-worker --target no-modules --out-dir ../../../src/wasm/kb-worker",
73
+ "build:wasm": "cd engine && wasm-pack build crates/query-parser --target no-modules --out-dir ../../../src/wasm/query-parser && wasm-pack build crates/fs-database --target no-modules --out-dir ../../../src/wasm/fs-database && wasm-pack build crates/default-embedding --target no-modules --out-dir ../../../src/wasm/default-embedding && wasm-pack build crates/kb-worker --target no-modules --out-dir ../../../src/wasm/kb-worker",
74
74
  "build:all": "npm run build:wasm && npm run build"
75
75
  },
76
76
  "devDependencies": {
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/shared/runtime/functions/detect-runtime.ts", "../src/shared/runtime/functions/get-args.ts", "../src/shared/dir-resolver/functions/resolve-base-dir.function.ts", "../src/shared/dir-resolver/functions/join-path.function.ts", "../src/shared/dir-resolver/functions/resolve-worker-script.function.ts", "../src/shared/dir-resolver/functions/resolve-wasm-dir.function.ts", "../src/shared/worker-daemon/constants/daemon-defaults.constant.ts", "../src/shared/worker-daemon/functions/parse-embedding-section.function.ts", "../src/shared/auto-capture/constants/auto-capture-defaults.constant.ts", "../src/shared/worker-daemon/functions/parse-auto-capture-section.function.ts", "../src/shared/worker-daemon/functions/parse-worker-toml.function.ts", "../src/shared/hash/functions/compute-sha256.ts", "../src/shared/platform/functions/get-ipc-path.function.ts", "../src/shared/platform/functions/get-tmpdir.function.ts"],
4
- "sourcesContent": ["import type { Runtime } from '../typings/runtime.ts';\n\n/**\n * Detects the current JavaScript runtime environment.\n *\n * Returns `'deno'` when the global `Deno` object is present,\n * otherwise returns `'node'`.\n */\nexport function detectRuntime(): Runtime {\n if (typeof globalThis !== 'undefined' && 'Deno' in globalThis) {\n return 'deno';\n }\n return 'node';\n}\n", "import { detectRuntime } from './detect-runtime.ts';\n\n/**\n * Returns the command-line arguments for the current runtime.\n *\n * In Deno, reads `Deno.args`; in Node.js, slices `process.argv`\n * past the interpreter and script entries.\n */\nexport function getArgs(): string[] {\n if (detectRuntime() === 'deno') {\n const g = globalThis as Record<string, unknown>;\n const deno = g['Deno'] as { args: string[] } | undefined;\n return deno?.args ?? [];\n }\n return process.argv.slice(2);\n}\n", "import { dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport type { BaseDir } from '../typings/base-dir.interface.ts';\n\nexport function resolveScriptDir(\n entryUrl: string,\n entryDirname?: string,\n): string {\n if (entryDirname) return entryDirname;\n if (entryUrl.startsWith('file:'))\n return dirname(fileURLToPath(entryUrl));\n return dirname(entryUrl);\n}\n\nexport function resolveBaseDir(\n entryUrl: string,\n entryDirname?: string,\n): BaseDir {\n const scriptDir =\n typeof __dirname !== 'undefined'\n ? __dirname\n : resolveScriptDir(entryUrl, entryDirname);\n return { scriptDir, cwd: process.cwd() };\n}\n", "import { join } from 'node:path';\n\nexport function isRemoteUrl(path: string): boolean {\n return path.startsWith('http://') || path.startsWith('https://');\n}\n\nexport function joinPath(base: string, ...segments: string[]): string {\n if (isRemoteUrl(base)) {\n const trailing = base.endsWith('/') ? '' : '/';\n return base + trailing + segments.join('/');\n }\n return join(base, ...segments);\n}\n", "import { joinPath } from './join-path.function.ts';\n\nimport type { Runtime } from '../../runtime/typings/runtime.ts';\n\nexport function resolveWorkerScript(\n scriptDir: string,\n runtime: Runtime,\n): string {\n if (runtime === 'deno') {\n return joinPath(scriptDir, 'worker.ts');\n }\n return joinPath(scriptDir, 'kbdb-worker.cjs');\n}\n", "import { joinPath } from './join-path.function.ts';\n\nexport function resolveWasmDir(scriptDir: string): string {\n return joinPath(scriptDir, 'wasm');\n}\n", "/** Default maximum number of items held in daemon memory. */\nexport const DEFAULT_ITEM_LIMIT = 1000;\n\n/** Default maximum number of index entries held in daemon memory. */\nexport const DEFAULT_INDEX_LIMIT = 100;\n\n/**\n * Default idle timeout in milliseconds before the daemon shuts\n * down automatically (5 minutes).\n */\nexport const DEFAULT_TIMEOUT_MS = 300_000;\n\n/**\n * Default time-to-live in milliseconds for each cached item\n * (1 minute).\n */\nexport const DEFAULT_ITEM_TTL_MS = 60_000;\n\n/** Filename of the daemon configuration file inside `.kbdb/`. */\nexport const WORKER_TOML_FILENAME = 'worker.toml';\n\n/**\n * Database format version the daemon supports.\n *\n * Read from `catalog.toml` at startup. If the catalog version\n * differs, the daemon prints a structured error to stderr and\n * exits with code 1 before loading any WASM modules.\n */\nexport const DB_FORMAT_VERSION = 1;\n", "import type { EmbeddingConfig } from '../../embedding/typings/embedding-config.interface.ts';\n\n/**\n * Parses key-value pairs from a `[embedding]` TOML section into an\n * `EmbeddingConfig`.\n *\n * Recognises: `provider`, `model`, `endpoint`, `dimensions`.\n * Unknown keys are silently ignored. Returns `undefined` when the\n * `provider` key is absent from the supplied entries.\n *\n * @param entries - key-value pairs from inside the `[embedding]`\n * section\n */\nexport function parseEmbeddingSection(\n entries: ReadonlyMap<string, string>,\n): EmbeddingConfig | undefined {\n const provider = entries.get('provider') as\n | EmbeddingConfig['provider']\n | undefined;\n\n if (!provider) {\n return undefined;\n }\n\n const model = entries.get('model');\n const endpoint = entries.get('endpoint');\n const dimensionsRaw = entries.get('dimensions');\n const dimensions = dimensionsRaw\n ? parseInt(dimensionsRaw, 10) || undefined\n : undefined;\n\n return {\n provider,\n ...(model !== undefined ? { model } : {}),\n ...(endpoint !== undefined ? { endpoint } : {}),\n ...(dimensions !== undefined ? { dimensions } : {}),\n };\n}\n", "import type { AutoCaptureConfig } from '../typings/auto-capture-config.interface.ts';\n\n/**\n * Default configuration for the auto-capture feature.\n *\n * Auto-capture is disabled by default. Enable it in\n * `worker.toml` under `[auto_capture]`.\n */\nexport const AUTO_CAPTURE_DEFAULTS: AutoCaptureConfig = {\n enabled: false,\n triggerAfterToolCalls: 5,\n minIntervalMs: 60_000,\n maxCapturesPerSession: 10,\n dryRun: false,\n};\n", "import type { AutoCaptureConfig } from '../../auto-capture/typings/auto-capture-config.interface.ts';\nimport { AUTO_CAPTURE_DEFAULTS } from '../../auto-capture/constants/auto-capture-defaults.constant.ts';\n\n/**\n * Parses key-value pairs from an `[auto_capture]` TOML section\n * into an `AutoCaptureConfig`.\n *\n * Recognised keys: `enabled`, `trigger_after_tool_calls`,\n * `min_interval_ms`, `max_captures_per_session`, `dry_run`.\n * Unknown keys are silently ignored. Falls back to\n * `AUTO_CAPTURE_DEFAULTS` for any absent key.\n *\n * @param entries - key-value pairs from inside the\n * `[auto_capture]` section\n */\nexport function parseAutoCaptureSection(\n entries: ReadonlyMap<string, string>,\n): AutoCaptureConfig {\n const enabled = entries.has('enabled')\n ? entries.get('enabled') === 'true'\n : AUTO_CAPTURE_DEFAULTS.enabled;\n\n const dryRun = entries.has('dry_run')\n ? entries.get('dry_run') === 'true'\n : AUTO_CAPTURE_DEFAULTS.dryRun;\n\n const triggerRaw = entries.get('trigger_after_tool_calls');\n const triggerAfterToolCalls = triggerRaw\n ? parseInt(triggerRaw, 10) ||\n AUTO_CAPTURE_DEFAULTS.triggerAfterToolCalls\n : AUTO_CAPTURE_DEFAULTS.triggerAfterToolCalls;\n\n const intervalRaw = entries.get('min_interval_ms');\n const minIntervalMs = intervalRaw\n ? parseInt(intervalRaw, 10) || AUTO_CAPTURE_DEFAULTS.minIntervalMs\n : AUTO_CAPTURE_DEFAULTS.minIntervalMs;\n\n const capRaw = entries.get('max_captures_per_session');\n const maxCapturesPerSession = capRaw\n ? parseInt(capRaw, 10) ||\n AUTO_CAPTURE_DEFAULTS.maxCapturesPerSession\n : AUTO_CAPTURE_DEFAULTS.maxCapturesPerSession;\n\n return {\n enabled,\n triggerAfterToolCalls,\n minIntervalMs,\n maxCapturesPerSession,\n dryRun,\n };\n}\n", "import type { DaemonConfig } from '../typings/daemon-config.interface.ts';\nimport {\n DEFAULT_ITEM_LIMIT,\n DEFAULT_INDEX_LIMIT,\n DEFAULT_TIMEOUT_MS,\n DEFAULT_ITEM_TTL_MS,\n} from '../constants/daemon-defaults.constant.ts';\nimport { parseEmbeddingSection } from './parse-embedding-section.function.ts';\nimport { parseAutoCaptureSection } from './parse-auto-capture-section.function.ts';\n\ninterface RootAccum {\n itemLimit: number;\n indexLimit: number;\n timeoutMs: number;\n itemTtlMs: number;\n}\n\nfunction applyRootKey(\n acc: RootAccum,\n key: string,\n value: string,\n): void {\n switch (key) {\n case 'item_limit':\n acc.itemLimit = parseInt(value, 10) || DEFAULT_ITEM_LIMIT;\n break;\n case 'index_limit':\n acc.indexLimit = parseInt(value, 10) || DEFAULT_INDEX_LIMIT;\n break;\n case 'timeout_ms':\n acc.timeoutMs = parseInt(value, 10) || DEFAULT_TIMEOUT_MS;\n break;\n case 'item_ttl_ms':\n acc.itemTtlMs = parseInt(value, 10) || DEFAULT_ITEM_TTL_MS;\n break;\n default:\n break;\n }\n}\n\n/**\n * Parses a `worker.toml` file body into a partial `DaemonConfig`.\n *\n * Handles `[embedding]` sub-sections and root key-value pairs.\n * Unknown keys are silently ignored.\n *\n * @param text - raw content of `worker.toml`\n * @param contextPath - daemon context directory path\n */\nexport function parseWorkerToml(\n text: string,\n contextPath: string,\n): DaemonConfig {\n let section = '';\n const embeddingEntries = new Map<string, string>();\n const autoCaptureEntries = new Map<string, string>();\n const acc: RootAccum = {\n itemLimit: DEFAULT_ITEM_LIMIT,\n indexLimit: DEFAULT_INDEX_LIMIT,\n timeoutMs: DEFAULT_TIMEOUT_MS,\n itemTtlMs: DEFAULT_ITEM_TTL_MS,\n };\n\n for (const line of text.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed === '[embedding]') {\n section = 'embedding';\n continue;\n }\n if (trimmed === '[auto_capture]') {\n section = 'auto_capture';\n continue;\n }\n if (trimmed.startsWith('[')) {\n section = '';\n continue;\n }\n if (trimmed.startsWith('#') || !trimmed.includes('=')) continue;\n const eqIdx = trimmed.indexOf('=');\n const key = trimmed.slice(0, eqIdx).trim();\n const value = trimmed.slice(eqIdx + 1).trim();\n if (section === 'embedding') {\n embeddingEntries.set(key, value);\n continue;\n }\n if (section === 'auto_capture') {\n autoCaptureEntries.set(key, value);\n continue;\n }\n applyRootKey(acc, key, value);\n }\n\n const embedding = parseEmbeddingSection(embeddingEntries);\n const autoCapture =\n autoCaptureEntries.size > 0\n ? parseAutoCaptureSection(autoCaptureEntries)\n : undefined;\n return {\n contextPath,\n ...acc,\n ...(embedding !== undefined ? { embedding } : {}),\n ...(autoCapture !== undefined ? { autoCapture } : {}),\n };\n}\n", "/**\n * Computes the SHA-256 hash of a UTF-8 string.\n *\n * Uses the Web Crypto API (`crypto.subtle`), which is available\n * in both Deno and Node.js >= 20 without additional imports.\n *\n * @param input - the string to hash\n * @returns lowercase hex-encoded SHA-256 digest (64 characters)\n */\nexport async function computeSha256(input: string): Promise<string> {\n const data = new TextEncoder().encode(input);\n const hash = await crypto.subtle.digest('SHA-256', data);\n const bytes = new Uint8Array(hash);\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n", "import { join } from 'node:path';\nimport { getTmpdir } from './get-tmpdir.function.ts';\n\n/**\n * Returns the platform-appropriate IPC socket path for a given\n * context identifier.\n *\n * On Windows, returns a named pipe path (`\\\\.\\pipe\\kbdb-<ctx>`).\n * On POSIX systems, returns a Unix domain socket path under the\n * system temp directory (`<tmpdir>/kbdb-<ctx>.sock`).\n *\n * @param ctx - unique context identifier embedded in the path\n */\nexport function getIpcPath(ctx: string): string {\n if (process.platform === 'win32') {\n return `\\\\\\\\.\\\\pipe\\\\kbdb-${ctx}`;\n }\n return join(getTmpdir(), `kbdb-${ctx}.sock`);\n}\n", "import { tmpdir } from 'node:os';\n\n/**\n * Returns the operating system's default temporary directory path.\n */\nexport function getTmpdir(): string {\n return tmpdir();\n}\n"],
5
- "mappings": "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",
6
- "names": ["join", "join"]
7
- }