crewly 1.8.8 → 1.8.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backend/backend/src/constants.d.ts +12 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +12 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.js +17 -0
- package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +8 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +15 -7
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js +15 -29
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +97 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js +174 -15
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.d.ts +12 -4
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.js +17 -5
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +75 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-client.service.js +164 -12
- package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +12 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +12 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/cli/src/index.js +0 -0
- package/package.json +1 -1
- package/config/constants.d.ts.map +0 -1
- package/config/index.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +0 -169
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +0 -1779
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +0 -513
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +0 -1568
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts +0 -86
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js +0 -147
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +0 -68
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +0 -131
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +0 -130
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +0 -263
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +0 -74
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +0 -140
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +0 -29
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +0 -279
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +0 -340
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +0 -1176
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +0 -79
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +0 -145
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +0 -79
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +0 -218
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +0 -16
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js +0 -16
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +0 -135
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +0 -185
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +0 -141
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +0 -310
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +0 -91
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +0 -143
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +0 -103
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +0 -256
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +0 -143
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +0 -264
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +0 -13
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +0 -91
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +0 -135
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +0 -1937
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +0 -1
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +0 -429
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +0 -852
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +0 -1
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +0 -171
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/project/task-tracking.service.js +0 -725
- package/dist/backend/backend/src/services/project/task-tracking.service.js.map +0 -1
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts +0 -118
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js +0 -326
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js.map +0 -1
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +0 -74
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +0 -154
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +0 -1
- package/dist/backend/backend/src/types/auto-assign.types.d.ts +0 -271
- package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +0 -1
- package/dist/backend/backend/src/types/auto-assign.types.js +0 -136
- package/dist/backend/backend/src/types/auto-assign.types.js.map +0 -1
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts +0 -111
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +0 -1
- package/dist/backend/backend/src/utils/esm-require.utils.js +0 -124
- package/dist/backend/backend/src/utils/esm-require.utils.js.map +0 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +0 -220
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +0 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js +0 -37
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts +0 -56
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js +0 -91
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts +0 -159
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js +0 -304
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts +0 -78
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
- package/dist/cli/backend/src/services/memory/embedding-provider.js +0 -179
- package/dist/cli/backend/src/services/memory/embedding-provider.js.map +0 -1
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts +0 -331
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/memory/vector-store.service.js +0 -814
- package/dist/cli/backend/src/services/memory/vector-store.service.js.map +0 -1
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts +0 -171
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/project/task-tracking.service.js +0 -725
- package/dist/cli/backend/src/services/project/task-tracking.service.js.map +0 -1
- package/dist/cli/backend/src/types/auto-assign.types.d.ts +0 -271
- package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +0 -1
- package/dist/cli/backend/src/types/auto-assign.types.js +0 -136
- package/dist/cli/backend/src/types/auto-assign.types.js.map +0 -1
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ESM/CJS-dual-mode helpers for the lazy `nodeRequire` pattern.
|
|
3
|
-
*
|
|
4
|
-
* Background
|
|
5
|
-
* ----------
|
|
6
|
-
* Several services in this codebase use the canonical `nodeRequire` pattern
|
|
7
|
-
* (commit `070cd3e5` — `fix(esm): anchor createRequire to process.argv[1]`)
|
|
8
|
-
* to lazily load modules without forcing every test that transitively imports
|
|
9
|
-
* them to mock the dependency. The pattern looks like:
|
|
10
|
-
*
|
|
11
|
-
* const nodeRequire: NodeRequire =
|
|
12
|
-
* typeof require === 'function'
|
|
13
|
-
* ? require
|
|
14
|
-
* : createRequire(pathToFileURL(process.argv[1] || process.cwd()).href);
|
|
15
|
-
*
|
|
16
|
-
* That pattern works **only** for npm-package targets (e.g.
|
|
17
|
-
* `nodeRequire('better-sqlite3')`) — Node's resolver walks UP from the anchor
|
|
18
|
-
* (`process.argv[1]`) to find `node_modules`, so the anchor's exact location
|
|
19
|
-
* does not matter for package resolution.
|
|
20
|
-
*
|
|
21
|
-
* It silently breaks for **relative project paths** like
|
|
22
|
-
* `nodeRequire('../v3/request.service.js')`. In production ESM, the relative
|
|
23
|
-
* spec is resolved against `process.argv[1]` (the entry script) — NOT against
|
|
24
|
-
* the calling module — so the require fails with `Cannot find module …`. In
|
|
25
|
-
* tests (ts-jest CJS transpile) the per-module `require` parameter is used
|
|
26
|
-
* instead, so the relative spec resolves correctly against the calling file
|
|
27
|
-
* and the bug stays hidden.
|
|
28
|
-
*
|
|
29
|
-
* Symptom that motivated this helper: `core/get-my-active-work` returned 500
|
|
30
|
-
* with "Cannot find module '../v3/request.service.js'" because
|
|
31
|
-
* `ActiveWorkBriefingService.getInstance()` called
|
|
32
|
-
* `nodeRequire('../v3/request.service.js')` from
|
|
33
|
-
* `services/agent/active-work-briefing.service.js` while `nodeRequire` was
|
|
34
|
-
* anchored to `dist/backend/backend/src/index.js`.
|
|
35
|
-
*
|
|
36
|
-
* What this helper does
|
|
37
|
-
* ---------------------
|
|
38
|
-
* `resolveProjectModulePath(testRelativePath, prodPathFromEntryDir)` returns:
|
|
39
|
-
*
|
|
40
|
-
* 1. In test mode (`typeof require === 'function'` — ts-jest CJS) — the
|
|
41
|
-
* `testRelativePath` unchanged, so the per-module CJS require resolves it
|
|
42
|
-
* relative to the calling file (its existing, working behavior).
|
|
43
|
-
* 2. In production ESM — an absolute path computed by joining
|
|
44
|
-
* `path.dirname(process.argv[1])` with `prodPathFromEntryDir`.
|
|
45
|
-
* Absolute paths are accepted by `nodeRequire` regardless of anchor.
|
|
46
|
-
*
|
|
47
|
-
* Why this is two-arg rather than one
|
|
48
|
-
* -----------------------------------
|
|
49
|
-
* We considered single-arg variants:
|
|
50
|
-
* • `import.meta.url` — triggers TS1343 under ts-jest's CJS target. Even with
|
|
51
|
-
* `// @ts-expect-error`, ts-jest's transpile may still fail at parse.
|
|
52
|
-
* • `new Function('return import.meta.url')()` — was tried (PR #323) and is
|
|
53
|
-
* forbidden — `new Function` evaluates in non-module scope where
|
|
54
|
-
* `import.meta` is a SyntaxError. Crashed production at startup.
|
|
55
|
-
* • `eval('import.meta.url')` — works at runtime via direct-eval scope
|
|
56
|
-
* inheritance, but trips ESLint `no-eval` and is fragile across engines.
|
|
57
|
-
* • Stack-trace introspection — gross and slow.
|
|
58
|
-
*
|
|
59
|
-
* Asking the caller to spell out **two** equivalent paths (one usable from the
|
|
60
|
-
* caller's perspective, one usable from the entry script's perspective) is
|
|
61
|
-
* verbose but unambiguous, parse-clean under both TS targets, and free of any
|
|
62
|
-
* runtime tricks.
|
|
63
|
-
*
|
|
64
|
-
* Usage
|
|
65
|
-
* -----
|
|
66
|
-
* // Caller is at `backend/src/services/agent/active-work-briefing.service.ts`
|
|
67
|
-
* // Target is at `backend/src/services/v3/request.service.ts`
|
|
68
|
-
* // Entry script (process.argv[1]) is `dist/backend/backend/src/index.js`
|
|
69
|
-
* // → from the caller's perspective: `../v3/request.service.js`
|
|
70
|
-
* // → from the entry-script-dir's perspective: `services/v3/request.service.js`
|
|
71
|
-
*
|
|
72
|
-
* const spec = resolveProjectModulePath(
|
|
73
|
-
* '../v3/request.service.js',
|
|
74
|
-
* 'services/v3/request.service.js',
|
|
75
|
-
* );
|
|
76
|
-
* const { RequestService } = nodeRequire(spec);
|
|
77
|
-
*
|
|
78
|
-
* Test guard
|
|
79
|
-
* ----------
|
|
80
|
-
* `esm-require.utils.test.ts` exercises both branches and locks the contract
|
|
81
|
-
* (test branch ↔ untouched relative path; prod branch ↔ absolute path joined
|
|
82
|
-
* to `process.argv[1]`'s dirname).
|
|
83
|
-
*
|
|
84
|
-
* @module utils/esm-require.utils
|
|
85
|
-
*/
|
|
86
|
-
/**
|
|
87
|
-
* Resolves a project-relative require spec to a string safe to pass to
|
|
88
|
-
* `nodeRequire` in both ts-jest CJS test mode and production ESM mode.
|
|
89
|
-
*
|
|
90
|
-
* @param testRelativePath - The require spec written from the calling file's
|
|
91
|
-
* perspective. Used verbatim in test mode (ts-jest CJS) where each module
|
|
92
|
-
* gets its own `require` and relative resolution Just Works. Example:
|
|
93
|
-
* `'../v3/request.service.js'`.
|
|
94
|
-
* @param prodPathFromEntryDir - The require spec rewritten as a path under
|
|
95
|
-
* `path.dirname(process.argv[1])`. Used in production ESM where
|
|
96
|
-
* `nodeRequire` is anchored to the entry script. Example:
|
|
97
|
-
* `'services/v3/request.service.js'` (under `dist/backend/backend/src/`).
|
|
98
|
-
* @returns A string suitable for `nodeRequire(...)`.
|
|
99
|
-
*
|
|
100
|
-
* @example
|
|
101
|
-
* ```typescript
|
|
102
|
-
* const { RequestService } = nodeRequire(
|
|
103
|
-
* resolveProjectModulePath(
|
|
104
|
-
* '../v3/request.service.js',
|
|
105
|
-
* 'services/v3/request.service.js',
|
|
106
|
-
* ),
|
|
107
|
-
* );
|
|
108
|
-
* ```
|
|
109
|
-
*/
|
|
110
|
-
export declare function resolveProjectModulePath(testRelativePath: string, prodPathFromEntryDir: string): string;
|
|
111
|
-
//# sourceMappingURL=esm-require.utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"esm-require.utils.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/esm-require.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AAIH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,MAAM,EACxB,oBAAoB,EAAE,MAAM,GAC3B,MAAM,CAYR"}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ESM/CJS-dual-mode helpers for the lazy `nodeRequire` pattern.
|
|
3
|
-
*
|
|
4
|
-
* Background
|
|
5
|
-
* ----------
|
|
6
|
-
* Several services in this codebase use the canonical `nodeRequire` pattern
|
|
7
|
-
* (commit `070cd3e5` — `fix(esm): anchor createRequire to process.argv[1]`)
|
|
8
|
-
* to lazily load modules without forcing every test that transitively imports
|
|
9
|
-
* them to mock the dependency. The pattern looks like:
|
|
10
|
-
*
|
|
11
|
-
* const nodeRequire: NodeRequire =
|
|
12
|
-
* typeof require === 'function'
|
|
13
|
-
* ? require
|
|
14
|
-
* : createRequire(pathToFileURL(process.argv[1] || process.cwd()).href);
|
|
15
|
-
*
|
|
16
|
-
* That pattern works **only** for npm-package targets (e.g.
|
|
17
|
-
* `nodeRequire('better-sqlite3')`) — Node's resolver walks UP from the anchor
|
|
18
|
-
* (`process.argv[1]`) to find `node_modules`, so the anchor's exact location
|
|
19
|
-
* does not matter for package resolution.
|
|
20
|
-
*
|
|
21
|
-
* It silently breaks for **relative project paths** like
|
|
22
|
-
* `nodeRequire('../v3/request.service.js')`. In production ESM, the relative
|
|
23
|
-
* spec is resolved against `process.argv[1]` (the entry script) — NOT against
|
|
24
|
-
* the calling module — so the require fails with `Cannot find module …`. In
|
|
25
|
-
* tests (ts-jest CJS transpile) the per-module `require` parameter is used
|
|
26
|
-
* instead, so the relative spec resolves correctly against the calling file
|
|
27
|
-
* and the bug stays hidden.
|
|
28
|
-
*
|
|
29
|
-
* Symptom that motivated this helper: `core/get-my-active-work` returned 500
|
|
30
|
-
* with "Cannot find module '../v3/request.service.js'" because
|
|
31
|
-
* `ActiveWorkBriefingService.getInstance()` called
|
|
32
|
-
* `nodeRequire('../v3/request.service.js')` from
|
|
33
|
-
* `services/agent/active-work-briefing.service.js` while `nodeRequire` was
|
|
34
|
-
* anchored to `dist/backend/backend/src/index.js`.
|
|
35
|
-
*
|
|
36
|
-
* What this helper does
|
|
37
|
-
* ---------------------
|
|
38
|
-
* `resolveProjectModulePath(testRelativePath, prodPathFromEntryDir)` returns:
|
|
39
|
-
*
|
|
40
|
-
* 1. In test mode (`typeof require === 'function'` — ts-jest CJS) — the
|
|
41
|
-
* `testRelativePath` unchanged, so the per-module CJS require resolves it
|
|
42
|
-
* relative to the calling file (its existing, working behavior).
|
|
43
|
-
* 2. In production ESM — an absolute path computed by joining
|
|
44
|
-
* `path.dirname(process.argv[1])` with `prodPathFromEntryDir`.
|
|
45
|
-
* Absolute paths are accepted by `nodeRequire` regardless of anchor.
|
|
46
|
-
*
|
|
47
|
-
* Why this is two-arg rather than one
|
|
48
|
-
* -----------------------------------
|
|
49
|
-
* We considered single-arg variants:
|
|
50
|
-
* • `import.meta.url` — triggers TS1343 under ts-jest's CJS target. Even with
|
|
51
|
-
* `// @ts-expect-error`, ts-jest's transpile may still fail at parse.
|
|
52
|
-
* • `new Function('return import.meta.url')()` — was tried (PR #323) and is
|
|
53
|
-
* forbidden — `new Function` evaluates in non-module scope where
|
|
54
|
-
* `import.meta` is a SyntaxError. Crashed production at startup.
|
|
55
|
-
* • `eval('import.meta.url')` — works at runtime via direct-eval scope
|
|
56
|
-
* inheritance, but trips ESLint `no-eval` and is fragile across engines.
|
|
57
|
-
* • Stack-trace introspection — gross and slow.
|
|
58
|
-
*
|
|
59
|
-
* Asking the caller to spell out **two** equivalent paths (one usable from the
|
|
60
|
-
* caller's perspective, one usable from the entry script's perspective) is
|
|
61
|
-
* verbose but unambiguous, parse-clean under both TS targets, and free of any
|
|
62
|
-
* runtime tricks.
|
|
63
|
-
*
|
|
64
|
-
* Usage
|
|
65
|
-
* -----
|
|
66
|
-
* // Caller is at `backend/src/services/agent/active-work-briefing.service.ts`
|
|
67
|
-
* // Target is at `backend/src/services/v3/request.service.ts`
|
|
68
|
-
* // Entry script (process.argv[1]) is `dist/backend/backend/src/index.js`
|
|
69
|
-
* // → from the caller's perspective: `../v3/request.service.js`
|
|
70
|
-
* // → from the entry-script-dir's perspective: `services/v3/request.service.js`
|
|
71
|
-
*
|
|
72
|
-
* const spec = resolveProjectModulePath(
|
|
73
|
-
* '../v3/request.service.js',
|
|
74
|
-
* 'services/v3/request.service.js',
|
|
75
|
-
* );
|
|
76
|
-
* const { RequestService } = nodeRequire(spec);
|
|
77
|
-
*
|
|
78
|
-
* Test guard
|
|
79
|
-
* ----------
|
|
80
|
-
* `esm-require.utils.test.ts` exercises both branches and locks the contract
|
|
81
|
-
* (test branch ↔ untouched relative path; prod branch ↔ absolute path joined
|
|
82
|
-
* to `process.argv[1]`'s dirname).
|
|
83
|
-
*
|
|
84
|
-
* @module utils/esm-require.utils
|
|
85
|
-
*/
|
|
86
|
-
import path from 'path';
|
|
87
|
-
/**
|
|
88
|
-
* Resolves a project-relative require spec to a string safe to pass to
|
|
89
|
-
* `nodeRequire` in both ts-jest CJS test mode and production ESM mode.
|
|
90
|
-
*
|
|
91
|
-
* @param testRelativePath - The require spec written from the calling file's
|
|
92
|
-
* perspective. Used verbatim in test mode (ts-jest CJS) where each module
|
|
93
|
-
* gets its own `require` and relative resolution Just Works. Example:
|
|
94
|
-
* `'../v3/request.service.js'`.
|
|
95
|
-
* @param prodPathFromEntryDir - The require spec rewritten as a path under
|
|
96
|
-
* `path.dirname(process.argv[1])`. Used in production ESM where
|
|
97
|
-
* `nodeRequire` is anchored to the entry script. Example:
|
|
98
|
-
* `'services/v3/request.service.js'` (under `dist/backend/backend/src/`).
|
|
99
|
-
* @returns A string suitable for `nodeRequire(...)`.
|
|
100
|
-
*
|
|
101
|
-
* @example
|
|
102
|
-
* ```typescript
|
|
103
|
-
* const { RequestService } = nodeRequire(
|
|
104
|
-
* resolveProjectModulePath(
|
|
105
|
-
* '../v3/request.service.js',
|
|
106
|
-
* 'services/v3/request.service.js',
|
|
107
|
-
* ),
|
|
108
|
-
* );
|
|
109
|
-
* ```
|
|
110
|
-
*/
|
|
111
|
-
export function resolveProjectModulePath(testRelativePath, prodPathFromEntryDir) {
|
|
112
|
-
// The same `typeof require` probe the canonical `nodeRequire` pattern uses.
|
|
113
|
-
// Under ts-jest's CJS transpile, the per-module `require` parameter is
|
|
114
|
-
// defined and is the correct anchor for relative resolution. Under
|
|
115
|
-
// production ESM, `require` is undefined globally and we must hand
|
|
116
|
-
// `nodeRequire` an absolute path.
|
|
117
|
-
if (typeof require === 'function') {
|
|
118
|
-
return testRelativePath;
|
|
119
|
-
}
|
|
120
|
-
const entryScript = process.argv[1] || process.cwd();
|
|
121
|
-
const entryDir = path.dirname(entryScript);
|
|
122
|
-
return path.join(entryDir, prodPathFromEntryDir);
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=esm-require.utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"esm-require.utils.js","sourceRoot":"","sources":["../../../../../backend/src/utils/esm-require.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,wBAAwB,CACtC,gBAAwB,EACxB,oBAA4B;IAE5B,4EAA4E;IAC5E,uEAAuE;IACvE,mEAAmE;IACnE,mEAAmE;IACnE,kCAAkC;IAClC,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Interface for modular prompt components.
|
|
3
|
-
*
|
|
4
|
-
* Each module is responsible for one concern (identity, skills, team, etc.)
|
|
5
|
-
* and produces a markdown string that gets assembled into the final agent prompt.
|
|
6
|
-
*
|
|
7
|
-
* Modules are assembled in priority order (1 = highest, assembled first).
|
|
8
|
-
* Non-compactable modules are never truncated when token budget is tight.
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Configuration passed to each prompt module during assembly.
|
|
12
|
-
* Contains all the context needed to build module-specific content.
|
|
13
|
-
*/
|
|
14
|
-
/**
|
|
15
|
-
* Organizational role derived from team hierarchy.
|
|
16
|
-
* Determines role boundary rules and event subscriptions.
|
|
17
|
-
*/
|
|
18
|
-
export type OrgRole = 'orchestrator' | 'team-lead' | 'executor';
|
|
19
|
-
/**
|
|
20
|
-
* Autonomy level controls the decision rights matrix.
|
|
21
|
-
* - directed: Execute assigned tasks only, escalate all ambiguity.
|
|
22
|
-
* - bounded: Make decisions within task/domain scope, log rationale.
|
|
23
|
-
* - domain_autonomous: Monitor domain continuously, make approved decisions without waiting.
|
|
24
|
-
*/
|
|
25
|
-
export type AutonomyLevel = 'directed' | 'bounded' | 'domain_autonomous';
|
|
26
|
-
export interface ModuleConfig {
|
|
27
|
-
/** Agent's session name (e.g. 'crewly-product-sam-217bfbbf') */
|
|
28
|
-
sessionName: string;
|
|
29
|
-
/** Agent's member ID (UUID) */
|
|
30
|
-
memberId: string;
|
|
31
|
-
/** Agent's role (e.g. 'developer', 'orchestrator') */
|
|
32
|
-
role: string;
|
|
33
|
-
/** Team ID this agent belongs to */
|
|
34
|
-
teamId?: string;
|
|
35
|
-
/** Absolute path to the project directory */
|
|
36
|
-
projectPath?: string;
|
|
37
|
-
/** Runtime type determines formatting and injection strategy */
|
|
38
|
-
runtimeType?: 'claude-code' | 'gemini-cli' | 'codex' | 'crewly-agent';
|
|
39
|
-
/** Whether this agent can delegate tasks to subordinates */
|
|
40
|
-
canDelegate?: boolean;
|
|
41
|
-
/** Resolved subordinate details for TL agents */
|
|
42
|
-
subordinates?: SubordinateInfoCompat[];
|
|
43
|
-
/** Absolute path to agent skill scripts */
|
|
44
|
-
agentSkillsPath: string;
|
|
45
|
-
/** Absolute path to team-leader skill scripts */
|
|
46
|
-
tlSkillsPath: string;
|
|
47
|
-
/** Absolute path to the project root (where config/ lives) */
|
|
48
|
-
projectRoot: string;
|
|
49
|
-
/** Organizational role derived from team hierarchy (orchestrator, team-lead, executor) */
|
|
50
|
-
orgRole?: OrgRole;
|
|
51
|
-
/** Autonomy level controlling the decision rights matrix */
|
|
52
|
-
autonomyLevel?: AutonomyLevel;
|
|
53
|
-
/** Capability flags (e.g., ['can-decide', 'can-verify']) */
|
|
54
|
-
capabilities?: string[];
|
|
55
|
-
/** Domain SOP name — loads config/domain-sops/{domainSOP}.sop.md */
|
|
56
|
-
domainSOP?: string;
|
|
57
|
-
/** Risk policy name — loads config/risk-policies/{riskPolicy}.policy.md */
|
|
58
|
-
riskPolicy?: string;
|
|
59
|
-
/** Job title for this position: "Frontend Tech Lead" */
|
|
60
|
-
jobTitle?: string;
|
|
61
|
-
/** What this member is responsible for */
|
|
62
|
-
jobDescription?: string;
|
|
63
|
-
/** Member-level ownership scope */
|
|
64
|
-
ownershipScope?: {
|
|
65
|
-
domains: string[];
|
|
66
|
-
deliverables: string[];
|
|
67
|
-
areas?: string[];
|
|
68
|
-
};
|
|
69
|
-
/** Team-level ownership scope */
|
|
70
|
-
teamOwnershipScope?: {
|
|
71
|
-
domains: string[];
|
|
72
|
-
deliverables: string[];
|
|
73
|
-
areas?: string[];
|
|
74
|
-
};
|
|
75
|
-
/** Team's service contract */
|
|
76
|
-
serviceContract?: {
|
|
77
|
-
accepts: string[];
|
|
78
|
-
avoids: string[];
|
|
79
|
-
expectedOutput: string[];
|
|
80
|
-
};
|
|
81
|
-
/** Expert profile ID — loads config/experts/{expertId}.md or Pro expert library */
|
|
82
|
-
expertId?: string;
|
|
83
|
-
/** Team description — injected into agent prompt to guide team-aligned behavior */
|
|
84
|
-
teamDescription?: string;
|
|
85
|
-
/** Team mission / OKR statement — injected into agent prompt for goal alignment */
|
|
86
|
-
teamMission?: string;
|
|
87
|
-
/** Team budget configuration — injected so agents can respect cost constraints */
|
|
88
|
-
teamBudget?: {
|
|
89
|
-
maxTokensPerDay?: number;
|
|
90
|
-
maxUsdPerMonth?: number;
|
|
91
|
-
alertThreshold?: number;
|
|
92
|
-
};
|
|
93
|
-
/** Team quality gate — injected so agents know review requirements */
|
|
94
|
-
teamQualityGate?: {
|
|
95
|
-
reviewerId?: string;
|
|
96
|
-
autoApprove?: boolean;
|
|
97
|
-
minQualityScore?: number;
|
|
98
|
-
};
|
|
99
|
-
/** Absolute path to team norms directory (from template application) */
|
|
100
|
-
teamNormsPath?: string;
|
|
101
|
-
/**
|
|
102
|
-
* Human-readable team slug used for resolving slug-named team files
|
|
103
|
-
* (e.g. `<teamSlug>-team-sub-okr.md` under `.crewly/goals/`).
|
|
104
|
-
* Populated by PromptBuilderService from team metadata when available.
|
|
105
|
-
* Optional — modules MUST tolerate undefined and skip slug-dependent
|
|
106
|
-
* sections silently.
|
|
107
|
-
*/
|
|
108
|
-
teamSlug?: string;
|
|
109
|
-
/**
|
|
110
|
-
* Team-graph ancestor IDs (parent, grandparent, ...) used by modules
|
|
111
|
-
* that need to surface inherited org context such as parent-team
|
|
112
|
-
* missions / OKRs. Caller resolves the chain; modules consume it
|
|
113
|
-
* read-only. Empty / undefined means "no ancestors" — modules MUST
|
|
114
|
-
* default to a single-team view rather than error.
|
|
115
|
-
*/
|
|
116
|
-
teamAncestorIds?: string[];
|
|
117
|
-
/**
|
|
118
|
-
* When true, the prompt assembler skips non-core modules to reduce token usage
|
|
119
|
-
* during eval runs. Core modules: identity, soul, role-boundary, recovery.
|
|
120
|
-
*/
|
|
121
|
-
evalMode?: boolean;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Subordinate info compatible with the existing SubordinateInfo type
|
|
125
|
-
*/
|
|
126
|
-
export interface SubordinateInfoCompat {
|
|
127
|
-
name: string;
|
|
128
|
-
sessionName: string;
|
|
129
|
-
role: string;
|
|
130
|
-
memberId: string;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Result of building a single prompt module.
|
|
134
|
-
* Includes the content and metadata for budget tracking.
|
|
135
|
-
*/
|
|
136
|
-
export interface ModuleBuildResult {
|
|
137
|
-
/** Module name */
|
|
138
|
-
name: string;
|
|
139
|
-
/** Generated markdown content */
|
|
140
|
-
content: string;
|
|
141
|
-
/** Estimated token count of the content */
|
|
142
|
-
estimatedTokens: number;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Interface that all prompt modules must implement.
|
|
146
|
-
*
|
|
147
|
-
* @example
|
|
148
|
-
* ```typescript
|
|
149
|
-
* class IdentityModule implements PromptModule {
|
|
150
|
-
* name = 'identity';
|
|
151
|
-
* priority = 1;
|
|
152
|
-
* maxTokens = 150;
|
|
153
|
-
* compactable = false;
|
|
154
|
-
*
|
|
155
|
-
* shouldInclude(_config: ModuleConfig): boolean { return true; }
|
|
156
|
-
*
|
|
157
|
-
* async build(config: ModuleConfig): Promise<string> {
|
|
158
|
-
* return `## Your Identity\n- **Session Name:** ${config.sessionName}`;
|
|
159
|
-
* }
|
|
160
|
-
* }
|
|
161
|
-
* ```
|
|
162
|
-
*/
|
|
163
|
-
export interface PromptModule {
|
|
164
|
-
/** Module name (used for logging and debugging) */
|
|
165
|
-
name: string;
|
|
166
|
-
/** Assembly priority (1 = highest, assembled first) */
|
|
167
|
-
priority: number;
|
|
168
|
-
/** Token soft cap for this module */
|
|
169
|
-
maxTokens: number;
|
|
170
|
-
/** Whether this module can be skipped when token budget is tight */
|
|
171
|
-
compactable: boolean;
|
|
172
|
-
/** Condition check — return false to skip this module */
|
|
173
|
-
shouldInclude(config: ModuleConfig): boolean;
|
|
174
|
-
/** Build module content as markdown string */
|
|
175
|
-
build(config: ModuleConfig): Promise<string>;
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Report returned by PromptAssemblyService.assemble() describing
|
|
179
|
-
* token usage and any truncation that occurred.
|
|
180
|
-
*/
|
|
181
|
-
export interface AssemblyReport {
|
|
182
|
-
/** Total estimated tokens in the final prompt */
|
|
183
|
-
totalTokens: number;
|
|
184
|
-
/** Per-module token breakdown */
|
|
185
|
-
moduleBreakdown: ModuleBuildResult[];
|
|
186
|
-
/** Modules that were truncated or removed to fit budget */
|
|
187
|
-
truncated: TruncatedModuleInfo[];
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Info about a module that was truncated or removed during assembly.
|
|
191
|
-
*/
|
|
192
|
-
export interface TruncatedModuleInfo {
|
|
193
|
-
/** Module name */
|
|
194
|
-
name: string;
|
|
195
|
-
/** Original estimated tokens before truncation */
|
|
196
|
-
originalTokens: number;
|
|
197
|
-
/** Tokens after truncation (0 if fully removed) */
|
|
198
|
-
finalTokens: number;
|
|
199
|
-
/** What happened: 'trimmed' (to 50%) or 'removed' (dropped entirely) */
|
|
200
|
-
action: 'trimmed' | 'removed';
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Load a role-specific fragment file from config/roles/{role}/fragments/{fragmentName}.md.
|
|
204
|
-
* Returns null if the file doesn't exist.
|
|
205
|
-
*
|
|
206
|
-
* @param projectRoot - Project root path (where config/ lives)
|
|
207
|
-
* @param role - Agent role (e.g. 'orchestrator')
|
|
208
|
-
* @param fragmentName - Fragment file name without .md extension
|
|
209
|
-
* @returns Fragment content string or null
|
|
210
|
-
*/
|
|
211
|
-
export declare function loadRoleFragment(projectRoot: string, role: string, fragmentName: string): string | null;
|
|
212
|
-
/**
|
|
213
|
-
* Estimate token count from a string.
|
|
214
|
-
* Uses the rough heuristic of ~4 characters per token (suitable for English/code mix).
|
|
215
|
-
*
|
|
216
|
-
* @param text - Text to estimate tokens for
|
|
217
|
-
* @returns Estimated token count
|
|
218
|
-
*/
|
|
219
|
-
export declare function estimateTokens(text: string): number;
|
|
220
|
-
//# sourceMappingURL=prompt-module.interface.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-module.interface.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-module.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
/**
|
|
4
|
-
* Load a role-specific fragment file from config/roles/{role}/fragments/{fragmentName}.md.
|
|
5
|
-
* Returns null if the file doesn't exist.
|
|
6
|
-
*
|
|
7
|
-
* @param projectRoot - Project root path (where config/ lives)
|
|
8
|
-
* @param role - Agent role (e.g. 'orchestrator')
|
|
9
|
-
* @param fragmentName - Fragment file name without .md extension
|
|
10
|
-
* @returns Fragment content string or null
|
|
11
|
-
*/
|
|
12
|
-
export function loadRoleFragment(projectRoot, role, fragmentName) {
|
|
13
|
-
try {
|
|
14
|
-
const fragmentPath = path.join(projectRoot, 'config', 'roles', role, 'fragments', `${fragmentName}.md`);
|
|
15
|
-
if (fs.existsSync(fragmentPath)) {
|
|
16
|
-
return fs.readFileSync(fragmentPath, 'utf-8');
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
// Fragment not found — fall back to inline content
|
|
21
|
-
}
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Estimate token count from a string.
|
|
26
|
-
* Uses the rough heuristic of ~4 characters per token (suitable for English/code mix).
|
|
27
|
-
*
|
|
28
|
-
* @param text - Text to estimate tokens for
|
|
29
|
-
* @returns Estimated token count
|
|
30
|
-
*/
|
|
31
|
-
export function estimateTokens(text) {
|
|
32
|
-
if (!text)
|
|
33
|
-
return 0;
|
|
34
|
-
// ~4 chars per token is a reasonable estimate for English + code
|
|
35
|
-
return Math.ceil(text.length / 4);
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=prompt-module.interface.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-module.interface.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-module.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAyM7B;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC/B,WAAmB,EACnB,IAAY,EACZ,YAAoB;IAEpB,IAAI,CAAC;QACJ,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC;QACxG,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,mDAAmD;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,iEAAiE;IACjE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FTS5 Search Strategy
|
|
3
|
-
*
|
|
4
|
-
* Implements the KnowledgeSearchStrategy interface using the SQLite FTS5
|
|
5
|
-
* full-text search index. Maps FTS5 BM25-ranked results to the existing
|
|
6
|
-
* ScoredDocument format used by KnowledgeSearchService.
|
|
7
|
-
*
|
|
8
|
-
* @module services/knowledge/fts5-search-strategy
|
|
9
|
-
*/
|
|
10
|
-
import type { KnowledgeSearchStrategy, ScoredDocument } from './knowledge-search.service.js';
|
|
11
|
-
import type { KnowledgeDocumentSummary } from '../../types/knowledge.types.js';
|
|
12
|
-
import { WikiCompilerService } from './wiki-compiler.service.js';
|
|
13
|
-
/**
|
|
14
|
-
* FTS5-based search strategy for the Wiki-First Knowledge System.
|
|
15
|
-
*
|
|
16
|
-
* This strategy provides pure full-text search via SQLite FTS5 with BM25 ranking.
|
|
17
|
-
*
|
|
18
|
-
* Note on semantic fallback (design doc Section 10): The 10% semantic fallback
|
|
19
|
-
* weight is achieved at the MemoryService level, which runs both FTS5 knowledge
|
|
20
|
-
* search AND vector-based semantic search in parallel. This strategy intentionally
|
|
21
|
-
* does not mix semantic results — that composition happens upstream in the recall
|
|
22
|
-
* pipeline (MemoryService.recall -> searchKnowledgeDocuments + semanticSearch).
|
|
23
|
-
*
|
|
24
|
-
* Uses SQLite FTS5 MATCH with BM25 ranking for fast, zero-cost retrieval.
|
|
25
|
-
* Results are mapped back to the KnowledgeDocumentSummary objects provided
|
|
26
|
-
* by the caller, falling back to minimal summaries when a document is found
|
|
27
|
-
* in the FTS5 index but not in the provided documents array.
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* ```typescript
|
|
31
|
-
* const strategy = new Fts5SearchStrategy(wikiCompiler);
|
|
32
|
-
* const results = await strategy.search('deployment guide', documents);
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
export declare class Fts5SearchStrategy implements KnowledgeSearchStrategy {
|
|
36
|
-
private readonly wikiCompiler;
|
|
37
|
-
private readonly logger;
|
|
38
|
-
/**
|
|
39
|
-
* Create an Fts5SearchStrategy.
|
|
40
|
-
*
|
|
41
|
-
* @param wikiCompiler - The WikiCompilerService instance providing FTS5 search
|
|
42
|
-
*/
|
|
43
|
-
constructor(wikiCompiler: WikiCompilerService);
|
|
44
|
-
/**
|
|
45
|
-
* Search for documents matching the query using FTS5 full-text search.
|
|
46
|
-
*
|
|
47
|
-
* FTS5 BM25 rank values are negative (more negative = more relevant),
|
|
48
|
-
* so scores are converted to positive values for the ScoredDocument interface.
|
|
49
|
-
*
|
|
50
|
-
* @param query - The search query text
|
|
51
|
-
* @param documents - Candidate document summaries to match against
|
|
52
|
-
* @returns Documents sorted by descending relevance score
|
|
53
|
-
*/
|
|
54
|
-
search(query: string, documents: KnowledgeDocumentSummary[]): Promise<ScoredDocument[]>;
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=fts5-search-strategy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fts5-search-strategy.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/knowledge/fts5-search-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,kBAAmB,YAAW,uBAAuB;IAChE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC;;;;OAIG;gBACS,YAAY,EAAE,mBAAmB;IAK7C;;;;;;;;;OASG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,wBAAwB,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAyC9F"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FTS5 Search Strategy
|
|
3
|
-
*
|
|
4
|
-
* Implements the KnowledgeSearchStrategy interface using the SQLite FTS5
|
|
5
|
-
* full-text search index. Maps FTS5 BM25-ranked results to the existing
|
|
6
|
-
* ScoredDocument format used by KnowledgeSearchService.
|
|
7
|
-
*
|
|
8
|
-
* @module services/knowledge/fts5-search-strategy
|
|
9
|
-
*/
|
|
10
|
-
import { LoggerService } from '../core/logger.service.js';
|
|
11
|
-
/**
|
|
12
|
-
* FTS5-based search strategy for the Wiki-First Knowledge System.
|
|
13
|
-
*
|
|
14
|
-
* This strategy provides pure full-text search via SQLite FTS5 with BM25 ranking.
|
|
15
|
-
*
|
|
16
|
-
* Note on semantic fallback (design doc Section 10): The 10% semantic fallback
|
|
17
|
-
* weight is achieved at the MemoryService level, which runs both FTS5 knowledge
|
|
18
|
-
* search AND vector-based semantic search in parallel. This strategy intentionally
|
|
19
|
-
* does not mix semantic results — that composition happens upstream in the recall
|
|
20
|
-
* pipeline (MemoryService.recall -> searchKnowledgeDocuments + semanticSearch).
|
|
21
|
-
*
|
|
22
|
-
* Uses SQLite FTS5 MATCH with BM25 ranking for fast, zero-cost retrieval.
|
|
23
|
-
* Results are mapped back to the KnowledgeDocumentSummary objects provided
|
|
24
|
-
* by the caller, falling back to minimal summaries when a document is found
|
|
25
|
-
* in the FTS5 index but not in the provided documents array.
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```typescript
|
|
29
|
-
* const strategy = new Fts5SearchStrategy(wikiCompiler);
|
|
30
|
-
* const results = await strategy.search('deployment guide', documents);
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
export class Fts5SearchStrategy {
|
|
34
|
-
wikiCompiler;
|
|
35
|
-
logger;
|
|
36
|
-
/**
|
|
37
|
-
* Create an Fts5SearchStrategy.
|
|
38
|
-
*
|
|
39
|
-
* @param wikiCompiler - The WikiCompilerService instance providing FTS5 search
|
|
40
|
-
*/
|
|
41
|
-
constructor(wikiCompiler) {
|
|
42
|
-
this.wikiCompiler = wikiCompiler;
|
|
43
|
-
this.logger = LoggerService.getInstance().createComponentLogger('Fts5SearchStrategy');
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Search for documents matching the query using FTS5 full-text search.
|
|
47
|
-
*
|
|
48
|
-
* FTS5 BM25 rank values are negative (more negative = more relevant),
|
|
49
|
-
* so scores are converted to positive values for the ScoredDocument interface.
|
|
50
|
-
*
|
|
51
|
-
* @param query - The search query text
|
|
52
|
-
* @param documents - Candidate document summaries to match against
|
|
53
|
-
* @returns Documents sorted by descending relevance score
|
|
54
|
-
*/
|
|
55
|
-
async search(query, documents) {
|
|
56
|
-
const ftsResults = this.wikiCompiler.search(query, { limit: 10 });
|
|
57
|
-
if (ftsResults.length === 0) {
|
|
58
|
-
this.logger.debug('FTS5 search returned no results', { query });
|
|
59
|
-
return [];
|
|
60
|
-
}
|
|
61
|
-
// Build a lookup map from the provided documents array
|
|
62
|
-
const docById = new Map(documents.map((d) => [d.id, d]));
|
|
63
|
-
const scored = [];
|
|
64
|
-
for (const ftsResult of ftsResults) {
|
|
65
|
-
// FTS5 rank is negative; convert to positive score (higher = more relevant)
|
|
66
|
-
const score = Math.abs(ftsResult.rank);
|
|
67
|
-
const existingDoc = docById.get(ftsResult.id);
|
|
68
|
-
if (existingDoc) {
|
|
69
|
-
scored.push({ document: existingDoc, score });
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
// Create a minimal summary for documents in FTS5 but not in the provided list
|
|
73
|
-
const minimalDoc = {
|
|
74
|
-
id: ftsResult.id,
|
|
75
|
-
title: ftsResult.title,
|
|
76
|
-
category: ftsResult.category,
|
|
77
|
-
tags: ftsResult.tags ? ftsResult.tags.split(/,\s*/) : [],
|
|
78
|
-
preview: ftsResult.content.slice(0, 200),
|
|
79
|
-
scope: 'global',
|
|
80
|
-
createdBy: 'system',
|
|
81
|
-
updatedBy: 'system',
|
|
82
|
-
createdAt: new Date().toISOString(),
|
|
83
|
-
updatedAt: new Date().toISOString(),
|
|
84
|
-
};
|
|
85
|
-
scored.push({ document: minimalDoc, score });
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return scored.sort((a, b) => b.score - a.score);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=fts5-search-strategy.js.map
|