crewly 1.11.3 → 1.11.4
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/config/skills/agent/core/accept-task/SKILL.md +35 -7
- package/config/skills/agent/core/poll-tasks/execute.sh +44 -9
- package/config/skills/agent/core/poll-tasks/execute.test.sh +98 -0
- package/config/skills/agent/core/record-learning/execute.sh +92 -3
- package/config/skills/agent/core/register-self/SKILL.md +51 -8
- package/config/skills/agent/transcribe-audio/SKILL.md +110 -0
- package/config/skills/agent/transcribe-audio/execute.sh +223 -0
- package/config/skills/agent/transcribe-audio/instructions.md +92 -0
- package/config/skills/agent/transcribe-audio/skill.json +22 -0
- package/config/skills/orchestrator/assign-task/SKILL.md +40 -6
- package/config/skills/orchestrator/broadcast/SKILL.md +45 -8
- package/dist/backend/backend/src/constants.d.ts +0 -16
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +0 -16
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/memory/memory.controller.js +3 -10
- package/dist/backend/backend/src/controllers/memory/memory.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.js +24 -5
- package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +2 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +124 -1
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +0 -3
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +56 -20
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +2 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
- package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts +88 -0
- package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/boot/boot-announce.service.js +119 -0
- package/dist/backend/backend/src/services/boot/boot-announce.service.js.map +1 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +14 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -1
- package/dist/backend/backend/src/services/mcp-server.js +0 -6
- package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
- package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts +97 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.js +209 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.js.map +1 -0
- package/dist/backend/backend/src/services/memory/memory.service.d.ts +78 -41
- package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.js +209 -127
- package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/project-memory.service.js +37 -9
- package/dist/backend/backend/src/services/memory/project-memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js +29 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +9 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/backend/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
- package/dist/backend/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/runtime-pid-registry.service.js +214 -0
- package/dist/backend/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
- package/dist/backend/backend/src/services/sop/sop.service.d.ts +70 -2
- package/dist/backend/backend/src/services/sop/sop.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/sop/sop.service.js +93 -3
- package/dist/backend/backend/src/services/sop/sop.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/claim.service.d.ts +41 -0
- package/dist/backend/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/claim.service.js +72 -0
- package/dist/backend/backend/src/services/task-pool/claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +16 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +20 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js +11 -0
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram.service.js +24 -2
- package/dist/backend/backend/src/services/telegram/telegram.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js +18 -18
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +10 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +20 -12
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +12 -3
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +15 -5
- package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-query.service.js +31 -50
- package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +16 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js +20 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts +8 -0
- package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/settings.types.js +2 -0
- package/dist/backend/backend/src/types/settings.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +23 -0
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +29 -0
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +0 -16
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +0 -16
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.js +0 -6
- package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.d.ts +78 -41
- package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.js +209 -127
- package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/project-memory.service.js +37 -9
- package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/claim.service.d.ts +41 -0
- package/dist/cli/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/claim.service.js +72 -0
- package/dist/cli/backend/src/services/task-pool/claim.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +16 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +20 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/schema-loader.service.d.ts +57 -0
- package/dist/cli/backend/src/services/wiki/schema-loader.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/schema-loader.service.js +183 -0
- package/dist/cli/backend/src/services/wiki/schema-loader.service.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +100 -0
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js +212 -0
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.d.ts +43 -0
- package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.js +67 -0
- package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts +166 -0
- package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-search.service.js +379 -0
- package/dist/cli/backend/src/services/wiki/wiki-search.service.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki.types.d.ts +84 -0
- package/dist/cli/backend/src/services/wiki/wiki.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki.types.js +10 -0
- package/dist/cli/backend/src/services/wiki/wiki.types.js.map +1 -0
- package/dist/cli/backend/src/types/settings.types.d.ts +8 -0
- package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/settings.types.js +2 -0
- package/dist/cli/backend/src/types/settings.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +23 -0
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +29 -0
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/frontend/dist/assets/{index-44266b5d.css → index-8205ea5e.css} +1 -1
- package/frontend/dist/assets/{index-4099a91c.js → index-890d3f9d.js} +289 -289
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki Search Service
|
|
3
|
+
*
|
|
4
|
+
* In-process full-text search across a wiki vault's `.md` files. Returns
|
|
5
|
+
* per-file matches with line numbers + short snippets so the UI can render
|
|
6
|
+
* a result list and let the user jump straight to a page.
|
|
7
|
+
*
|
|
8
|
+
* Ranking: Okapi **BM25** (term-frequency saturation via `k1`, length
|
|
9
|
+
* normalisation via `b`, inverse-document-frequency weighting) computed
|
|
10
|
+
* per request. No external index — the vaults here are O(100s) of pages so
|
|
11
|
+
* a per-request scan + score is fine; revisit with a persisted index when
|
|
12
|
+
* volumes justify it. Tokenisation is Unicode-aware: Latin word tokens plus
|
|
13
|
+
* individual CJK characters, so Chinese/Japanese content is searchable.
|
|
14
|
+
*
|
|
15
|
+
* Scope: walks the vault directory AND the per-team overlay sources
|
|
16
|
+
* (`sop/` → installed/custom SOPs, `team-norm/` → team norms) so SOP and
|
|
17
|
+
* norm content is searchable even though it lives outside the vault.
|
|
18
|
+
*
|
|
19
|
+
* @module services/wiki/wiki-search.service
|
|
20
|
+
*/
|
|
21
|
+
import * as fs from 'fs/promises';
|
|
22
|
+
import * as path from 'path';
|
|
23
|
+
import { existsSync } from 'fs';
|
|
24
|
+
import { overlayRootFor } from './wiki-overlay.resolver.js';
|
|
25
|
+
/** Cap on how many .md files are inspected per search. */
|
|
26
|
+
export const WIKI_SEARCH_MAX_FILES = 500;
|
|
27
|
+
/** Cap on how many results returned to the caller. */
|
|
28
|
+
export const WIKI_SEARCH_MAX_RESULTS = 50;
|
|
29
|
+
/** Cap on how many snippets surfaced per matching file. */
|
|
30
|
+
export const WIKI_SEARCH_MAX_SNIPPETS_PER_FILE = 3;
|
|
31
|
+
/** Maximum query length — guards against pathological input. */
|
|
32
|
+
export const WIKI_SEARCH_MAX_QUERY_LENGTH = 200;
|
|
33
|
+
/** Cap on per-file size we will read; larger files are skipped. */
|
|
34
|
+
export const WIKI_SEARCH_MAX_FILE_BYTES = 256 * 1024;
|
|
35
|
+
/** BM25 term-frequency saturation parameter (standard default). */
|
|
36
|
+
const BM25_K1 = 1.2;
|
|
37
|
+
/** BM25 length-normalisation parameter (standard default). */
|
|
38
|
+
const BM25_B = 0.75;
|
|
39
|
+
/** Weight applied to filename/title tokens when folded into a doc's terms. */
|
|
40
|
+
const FILENAME_TOKEN_WEIGHT = 3;
|
|
41
|
+
/**
|
|
42
|
+
* Tokenise text into searchable terms: lowercase Latin word runs
|
|
43
|
+
* (`[a-z0-9]+`) plus individual CJK characters (Han, Hiragana, Katakana),
|
|
44
|
+
* so both English and Chinese/Japanese content is matched.
|
|
45
|
+
*
|
|
46
|
+
* @param text - Raw text to tokenise.
|
|
47
|
+
* @returns Array of lowercase tokens (order preserved, duplicates kept).
|
|
48
|
+
*/
|
|
49
|
+
export function tokenize(text) {
|
|
50
|
+
const lower = text.toLowerCase();
|
|
51
|
+
const latin = lower.match(/[a-z0-9]+/g) ?? [];
|
|
52
|
+
const cjk = lower.match(/[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff]/g) ?? [];
|
|
53
|
+
return [...latin, ...cjk];
|
|
54
|
+
}
|
|
55
|
+
/** Whether a query term is a Latin word (eligible for prefix matching). */
|
|
56
|
+
function isLatin(term) {
|
|
57
|
+
return /^[a-z0-9]+$/.test(term);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Does a document token satisfy a query term? Exact match always; for Latin
|
|
61
|
+
* query terms of length ≥ 3 a prefix match also counts (so `deploy` finds
|
|
62
|
+
* `deployment`), preserving the leniency of the old substring search.
|
|
63
|
+
*/
|
|
64
|
+
function tokenMatches(docToken, queryTerm) {
|
|
65
|
+
if (docToken === queryTerm)
|
|
66
|
+
return true;
|
|
67
|
+
if (queryTerm.length >= 3 && isLatin(queryTerm) && docToken.startsWith(queryTerm)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Service exposing `search()`. Stateless singleton — matches the pattern of
|
|
74
|
+
* the other wiki services (`WikiBookkeepService.getInstance()`, etc.).
|
|
75
|
+
*/
|
|
76
|
+
export class WikiSearchService {
|
|
77
|
+
static instance = null;
|
|
78
|
+
/** Singleton accessor. */
|
|
79
|
+
static getInstance() {
|
|
80
|
+
if (!this.instance)
|
|
81
|
+
this.instance = new WikiSearchService();
|
|
82
|
+
return this.instance;
|
|
83
|
+
}
|
|
84
|
+
/** Reset for tests. */
|
|
85
|
+
static resetInstance() {
|
|
86
|
+
this.instance = null;
|
|
87
|
+
}
|
|
88
|
+
/** Validate + normalise a query, or return a structured failure. */
|
|
89
|
+
validateQuery(raw) {
|
|
90
|
+
const query = (raw ?? '').trim();
|
|
91
|
+
if (query.length === 0) {
|
|
92
|
+
return { ok: false, reason: 'invalid_query', message: 'query must be at least one non-whitespace character' };
|
|
93
|
+
}
|
|
94
|
+
if (query.length > WIKI_SEARCH_MAX_QUERY_LENGTH) {
|
|
95
|
+
return { ok: false, reason: 'invalid_query', message: `query exceeds ${WIKI_SEARCH_MAX_QUERY_LENGTH} characters` };
|
|
96
|
+
}
|
|
97
|
+
return { query };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Search a single vault and rank results with BM25. Returns either
|
|
101
|
+
* `{ok:true, hits}` or a structured failure. Filesystem read errors are
|
|
102
|
+
* silently skipped so one bad file doesn't blank the whole result.
|
|
103
|
+
*/
|
|
104
|
+
async search(input) {
|
|
105
|
+
const vaultPath = input.vaultPath;
|
|
106
|
+
if (!vaultPath || !path.isAbsolute(vaultPath)) {
|
|
107
|
+
return { ok: false, reason: 'invalid_input', message: 'vaultPath must be an absolute path' };
|
|
108
|
+
}
|
|
109
|
+
if (!existsSync(vaultPath)) {
|
|
110
|
+
return { ok: false, reason: 'vault_missing', message: `vault not found: ${vaultPath}` };
|
|
111
|
+
}
|
|
112
|
+
const v = this.validateQuery(input.query);
|
|
113
|
+
if ('ok' in v)
|
|
114
|
+
return v;
|
|
115
|
+
const refs = (await this.collectDocs(vaultPath)).map((r) => ({ vaultPath, ...r }));
|
|
116
|
+
const { hits, truncated } = await this._searchCorpus(refs, v.query);
|
|
117
|
+
return { ok: true, vaultPath, query: v.query, hits, truncated };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Search across MANY vaults and return one merged BM25-ranked list. IDF is
|
|
121
|
+
* computed over the combined corpus so scores are comparable across vaults.
|
|
122
|
+
* Each hit carries its owning `vaultPath` (+ `vaultLabel` when provided).
|
|
123
|
+
*/
|
|
124
|
+
async searchAllVaults(input) {
|
|
125
|
+
const v = this.validateQuery(input.query);
|
|
126
|
+
if ('ok' in v)
|
|
127
|
+
return v;
|
|
128
|
+
const labelByPath = new Map();
|
|
129
|
+
const refs = [];
|
|
130
|
+
for (const vault of input.vaults) {
|
|
131
|
+
if (!vault.vaultPath || !existsSync(vault.vaultPath))
|
|
132
|
+
continue;
|
|
133
|
+
if (vault.label)
|
|
134
|
+
labelByPath.set(vault.vaultPath, vault.label);
|
|
135
|
+
for (const r of await this.collectDocs(vault.vaultPath)) {
|
|
136
|
+
refs.push({ vaultPath: vault.vaultPath, ...r });
|
|
137
|
+
if (refs.length >= WIKI_SEARCH_MAX_FILES)
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
if (refs.length >= WIKI_SEARCH_MAX_FILES)
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
const { hits, truncated } = await this._searchCorpus(refs, v.query);
|
|
144
|
+
for (const h of hits) {
|
|
145
|
+
if (h.vaultPath)
|
|
146
|
+
h.vaultLabel = labelByPath.get(h.vaultPath);
|
|
147
|
+
}
|
|
148
|
+
return { ok: true, vaultPath: '', query: v.query, hits, truncated };
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* BM25-rank an explicit list of documents (rather than auto-collecting the
|
|
152
|
+
* whole vault). Lets callers that need their own eligibility rules — e.g. the
|
|
153
|
+
* `wiki-query` skill, which ranks only `llm-curated/` pages and skips
|
|
154
|
+
* `log.md` — reuse the exact same Okapi BM25 scoring with IDF computed over
|
|
155
|
+
* precisely the documents they supply.
|
|
156
|
+
*
|
|
157
|
+
* @param vaultPath - Owning vault (stamped on each hit's `vaultPath`).
|
|
158
|
+
* @param docs - Candidate documents as `{ relativePath, absPath }`.
|
|
159
|
+
* @param query - Raw query string (validated/normalised here).
|
|
160
|
+
* @returns BM25-ranked hits, or an empty array for an invalid/empty query.
|
|
161
|
+
*/
|
|
162
|
+
async searchCorpus(vaultPath, docs, query) {
|
|
163
|
+
const v = this.validateQuery(query);
|
|
164
|
+
if ('ok' in v)
|
|
165
|
+
return [];
|
|
166
|
+
const refs = docs.map((d) => ({ vaultPath, ...d }));
|
|
167
|
+
const { hits } = await this._searchCorpus(refs, v.query);
|
|
168
|
+
return hits;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Core BM25 search over an arbitrary corpus of doc refs (one or many vaults).
|
|
172
|
+
* Builds the combined corpus statistics, scores, ranks, and attaches snippets
|
|
173
|
+
* for the top results. Each hit carries its owning `vaultPath`.
|
|
174
|
+
*/
|
|
175
|
+
async _searchCorpus(docRefs, query) {
|
|
176
|
+
const queryTerms = Array.from(new Set(tokenize(query)));
|
|
177
|
+
const needleLower = query.toLowerCase();
|
|
178
|
+
const truncatedFiles = docRefs.length >= WIKI_SEARCH_MAX_FILES;
|
|
179
|
+
const slice = docRefs.slice(0, WIKI_SEARCH_MAX_FILES);
|
|
180
|
+
// Pass 1: read + tokenise each doc, accumulate query-term frequencies + length.
|
|
181
|
+
const docs = [];
|
|
182
|
+
for (const ref of slice) {
|
|
183
|
+
const doc = await this.statDoc(ref, queryTerms);
|
|
184
|
+
if (doc)
|
|
185
|
+
docs.push(doc);
|
|
186
|
+
}
|
|
187
|
+
if (queryTerms.length === 0)
|
|
188
|
+
return { hits: [], truncated: truncatedFiles };
|
|
189
|
+
const N = docs.length || 1;
|
|
190
|
+
const avgdl = docs.reduce((s, d) => s + d.length, 0) / N || 1;
|
|
191
|
+
// Document frequency per query term, then IDF (always positive).
|
|
192
|
+
const idf = new Map();
|
|
193
|
+
for (const term of queryTerms) {
|
|
194
|
+
let n = 0;
|
|
195
|
+
for (const d of docs)
|
|
196
|
+
if ((d.termFreq.get(term) ?? 0) > 0)
|
|
197
|
+
n++;
|
|
198
|
+
idf.set(term, Math.log(1 + (N - n + 0.5) / (n + 0.5)));
|
|
199
|
+
}
|
|
200
|
+
const scored = docs
|
|
201
|
+
.map((d) => ({ doc: d, score: this.bm25Score(d, queryTerms, idf, avgdl) }))
|
|
202
|
+
.filter((s) => s.score > 0);
|
|
203
|
+
// Rank: filename/title matches first, then BM25 score, then path for stability.
|
|
204
|
+
scored.sort((a, b) => {
|
|
205
|
+
if (a.doc.filenameMatch !== b.doc.filenameMatch)
|
|
206
|
+
return a.doc.filenameMatch ? -1 : 1;
|
|
207
|
+
if (b.score !== a.score)
|
|
208
|
+
return b.score - a.score;
|
|
209
|
+
return a.doc.relativePath.localeCompare(b.doc.relativePath);
|
|
210
|
+
});
|
|
211
|
+
const truncatedResults = scored.length > WIKI_SEARCH_MAX_RESULTS;
|
|
212
|
+
const top = scored.slice(0, WIKI_SEARCH_MAX_RESULTS);
|
|
213
|
+
// Pass 2: build snippets only for the top results (re-read those files).
|
|
214
|
+
const hits = [];
|
|
215
|
+
for (const { doc, score } of top) {
|
|
216
|
+
const { matchCount, snippets } = await this.buildSnippets(doc.absPath, queryTerms, needleLower);
|
|
217
|
+
hits.push({
|
|
218
|
+
relativePath: doc.relativePath,
|
|
219
|
+
filenameMatch: doc.filenameMatch,
|
|
220
|
+
matchCount,
|
|
221
|
+
score: Math.round(score * 1000) / 1000,
|
|
222
|
+
snippets,
|
|
223
|
+
vaultPath: doc.vaultPath,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
return { hits, truncated: truncatedFiles || truncatedResults };
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Collect candidate `.md` documents: the vault tree plus the per-team
|
|
230
|
+
* overlay sources (`sop/`, `team-norm/`). Overlay paths are prefixed with
|
|
231
|
+
* the folder name so they resolve back through the page endpoint.
|
|
232
|
+
*
|
|
233
|
+
* @param vaultPath - Absolute vault root.
|
|
234
|
+
* @returns Deduped list of `{ relativePath, absPath }`, capped at the limit.
|
|
235
|
+
*/
|
|
236
|
+
async collectDocs(vaultPath) {
|
|
237
|
+
const seen = new Set();
|
|
238
|
+
const out = [];
|
|
239
|
+
const add = (relativePath, absPath) => {
|
|
240
|
+
if (seen.has(relativePath))
|
|
241
|
+
return;
|
|
242
|
+
seen.add(relativePath);
|
|
243
|
+
out.push({ relativePath, absPath });
|
|
244
|
+
};
|
|
245
|
+
for (const rel of await this.walkMd(vaultPath)) {
|
|
246
|
+
if (out.length >= WIKI_SEARCH_MAX_FILES)
|
|
247
|
+
return out;
|
|
248
|
+
add(rel, path.join(vaultPath, rel));
|
|
249
|
+
}
|
|
250
|
+
for (const folder of ['sop', 'team-norm']) {
|
|
251
|
+
const root = overlayRootFor(vaultPath, folder);
|
|
252
|
+
if (!root || !existsSync(root))
|
|
253
|
+
continue;
|
|
254
|
+
for (const rel of await this.walkMd(root)) {
|
|
255
|
+
if (out.length >= WIKI_SEARCH_MAX_FILES)
|
|
256
|
+
return out;
|
|
257
|
+
add(`${folder}/${rel}`, path.join(root, rel));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return out;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Recursively collect `.md` files under `root`, returned as root-relative
|
|
264
|
+
* POSIX paths. Skips dotfile dirs (`.git`, `.queue`) and stops at the cap.
|
|
265
|
+
*/
|
|
266
|
+
async walkMd(root) {
|
|
267
|
+
const acc = [];
|
|
268
|
+
const walk = async (dir) => {
|
|
269
|
+
if (acc.length >= WIKI_SEARCH_MAX_FILES)
|
|
270
|
+
return;
|
|
271
|
+
let entries;
|
|
272
|
+
try {
|
|
273
|
+
entries = await fs.readdir(dir, { withFileTypes: true });
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
for (const entry of entries) {
|
|
279
|
+
if (acc.length >= WIKI_SEARCH_MAX_FILES)
|
|
280
|
+
return;
|
|
281
|
+
if (entry.name.startsWith('.'))
|
|
282
|
+
continue;
|
|
283
|
+
const abs = path.join(dir, entry.name);
|
|
284
|
+
if (entry.isDirectory()) {
|
|
285
|
+
await walk(abs);
|
|
286
|
+
}
|
|
287
|
+
else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
288
|
+
acc.push(path.relative(root, abs).replace(/\\/g, '/'));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
await walk(root);
|
|
293
|
+
return acc;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Read a doc and compute its length + per-query-term frequencies. Filename
|
|
297
|
+
* tokens are folded in (weighted) so title relevance contributes to BM25.
|
|
298
|
+
* Returns null only on unreadable/oversize files with no filename match.
|
|
299
|
+
*/
|
|
300
|
+
async statDoc(ref, queryTerms) {
|
|
301
|
+
const { vaultPath, relativePath, absPath } = ref;
|
|
302
|
+
const filenameMatch = queryTerms.some((t) => relativePath.toLowerCase().includes(t));
|
|
303
|
+
// Filename/title tokens, folded in with a weight.
|
|
304
|
+
const nameTokens = tokenize(path.basename(relativePath, '.md'));
|
|
305
|
+
const termFreq = new Map();
|
|
306
|
+
let length = 0;
|
|
307
|
+
const tally = (tokens, weight) => {
|
|
308
|
+
for (const tok of tokens) {
|
|
309
|
+
length += weight;
|
|
310
|
+
for (const term of queryTerms) {
|
|
311
|
+
if (tokenMatches(tok, term)) {
|
|
312
|
+
termFreq.set(term, (termFreq.get(term) ?? 0) + weight);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
tally(nameTokens, FILENAME_TOKEN_WEIGHT);
|
|
318
|
+
let content = '';
|
|
319
|
+
try {
|
|
320
|
+
const stat = await fs.stat(absPath);
|
|
321
|
+
if (stat.size <= WIKI_SEARCH_MAX_FILE_BYTES) {
|
|
322
|
+
content = await fs.readFile(absPath, 'utf8');
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
catch {
|
|
326
|
+
// unreadable — fall through with filename tokens only
|
|
327
|
+
}
|
|
328
|
+
if (content)
|
|
329
|
+
tally(tokenize(content), 1);
|
|
330
|
+
// Keep filename-only matches discoverable even with no body match.
|
|
331
|
+
if (length === 0) {
|
|
332
|
+
return filenameMatch ? { vaultPath, relativePath, absPath, filenameMatch, length: 1, termFreq } : null;
|
|
333
|
+
}
|
|
334
|
+
return { vaultPath, relativePath, absPath, filenameMatch, length, termFreq };
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Standard Okapi BM25 score for a doc against the query terms.
|
|
338
|
+
*/
|
|
339
|
+
bm25Score(doc, queryTerms, idf, avgdl) {
|
|
340
|
+
let score = 0;
|
|
341
|
+
for (const term of queryTerms) {
|
|
342
|
+
const f = doc.termFreq.get(term) ?? 0;
|
|
343
|
+
if (f === 0)
|
|
344
|
+
continue;
|
|
345
|
+
const denom = f + BM25_K1 * (1 - BM25_B + (BM25_B * doc.length) / avgdl);
|
|
346
|
+
score += (idf.get(term) ?? 0) * ((f * (BM25_K1 + 1)) / denom);
|
|
347
|
+
}
|
|
348
|
+
return score;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Re-read a top-ranked file and extract matching-line snippets (a line
|
|
352
|
+
* matches when it contains any query term as a substring). Returns the
|
|
353
|
+
* total content match count + up to the snippet cap.
|
|
354
|
+
*/
|
|
355
|
+
async buildSnippets(absPath, queryTerms, needleLower) {
|
|
356
|
+
let content;
|
|
357
|
+
try {
|
|
358
|
+
content = await fs.readFile(absPath, 'utf8');
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
return { matchCount: 0, snippets: [] };
|
|
362
|
+
}
|
|
363
|
+
const lines = content.split(/\r?\n/);
|
|
364
|
+
const snippets = [];
|
|
365
|
+
let matchCount = 0;
|
|
366
|
+
for (let i = 0; i < lines.length; i++) {
|
|
367
|
+
const lineLower = lines[i].toLowerCase();
|
|
368
|
+
const matched = lineLower.includes(needleLower) || queryTerms.some((t) => lineLower.includes(t));
|
|
369
|
+
if (matched) {
|
|
370
|
+
matchCount++;
|
|
371
|
+
if (snippets.length < WIKI_SEARCH_MAX_SNIPPETS_PER_FILE) {
|
|
372
|
+
snippets.push({ lineNumber: i + 1, text: lines[i].trim().slice(0, 300) });
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
return { matchCount, snippets };
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=wiki-search.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-search.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-search.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM-Wiki shared types.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the SCHEMA.md YAML shape defined in
|
|
5
|
+
* .crewly/specs/2026-05-22-atlas-crewly-llm-wiki-v2-three-scope.md §2.
|
|
6
|
+
*
|
|
7
|
+
* @module services/wiki/wiki.types
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The three vault scopes per v2.1 §1.
|
|
11
|
+
*
|
|
12
|
+
* - `team`: ~/.crewly/teams/<team-id>/wiki/ (cross-project team norms)
|
|
13
|
+
* - `project`: <project-root>/.crewly/wiki/ (project-scoped knowledge)
|
|
14
|
+
* - `global`: ~/.crewly/global-wiki/ (ORC cross-project synthesis)
|
|
15
|
+
*/
|
|
16
|
+
export type VaultScope = 'team' | 'project' | 'global';
|
|
17
|
+
/**
|
|
18
|
+
* A symbolic `referenced_by:` entry in SCHEMA.md.
|
|
19
|
+
*
|
|
20
|
+
* Format: `<kind>:<name>` (e.g. `skill:get-sops`, `service:sop.service`).
|
|
21
|
+
* Resolves to an absolute filesystem path via
|
|
22
|
+
* {@link ReferencedByResolver.resolve} so SCHEMA.md stays portable across
|
|
23
|
+
* machines, users, and runtime targets.
|
|
24
|
+
*/
|
|
25
|
+
export type ReferencedBySymbol = `skill:${string}` | `service:${string}`;
|
|
26
|
+
/**
|
|
27
|
+
* A folder entry inside a vault's `hardcoded:` block.
|
|
28
|
+
*
|
|
29
|
+
* Hardcoded folders are referenced by string literal from OSS code. They
|
|
30
|
+
* MUST NOT be moved, renamed, or restructured by `wiki-lint`.
|
|
31
|
+
*/
|
|
32
|
+
export interface HardcodedFolder {
|
|
33
|
+
/** Folder name relative to vault root, e.g. `sop/`, `memory/`. */
|
|
34
|
+
path: string;
|
|
35
|
+
/** Always true for entries in `hardcoded:`. */
|
|
36
|
+
frozen: true;
|
|
37
|
+
/** Human description; appears in lint reports. */
|
|
38
|
+
description: string;
|
|
39
|
+
/** Symbolic refs to code that hard-codes this path. Use `skill:` / `service:`. */
|
|
40
|
+
referenced_by: ReferencedBySymbol[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The single `llm-curated:` folder entry — LLM owns sub-structure entirely.
|
|
44
|
+
*/
|
|
45
|
+
export interface LlmCuratedFolder {
|
|
46
|
+
/** Always `llm-curated/`. */
|
|
47
|
+
path: string;
|
|
48
|
+
/** Always false; lint MAY restructure. */
|
|
49
|
+
frozen: false;
|
|
50
|
+
/** Initial subdirs to seed; LLM may add more if `llm_can_create_subdirs`. */
|
|
51
|
+
seed_subdirs: string[];
|
|
52
|
+
llm_can_create_subdirs: boolean;
|
|
53
|
+
lint_may_restructure: boolean;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* `write_policy:` block — who may write canonical pages vs. propose-only.
|
|
57
|
+
*/
|
|
58
|
+
export interface WritePolicy {
|
|
59
|
+
/** Roles allowed to write canonical pages via `wiki-ingest`. */
|
|
60
|
+
canonical: string[];
|
|
61
|
+
/** Roles whose ingest writes are PR-style; TL/ORC must accept. */
|
|
62
|
+
proposed_only: string[];
|
|
63
|
+
/** Roles allowed to modify SCHEMA.md itself. */
|
|
64
|
+
schema_writer: string[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Parsed SCHEMA.md content for one vault.
|
|
68
|
+
*/
|
|
69
|
+
export interface VaultSchema {
|
|
70
|
+
vault_scope: VaultScope;
|
|
71
|
+
vault_id: string;
|
|
72
|
+
hardcoded: HardcodedFolder[];
|
|
73
|
+
llm_curated: LlmCuratedFolder[];
|
|
74
|
+
write_policy: WritePolicy;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Result of resolving a symbolic `referenced_by:` entry.
|
|
78
|
+
*/
|
|
79
|
+
export interface ResolvedReference {
|
|
80
|
+
symbol: ReferencedBySymbol;
|
|
81
|
+
absolutePath: string;
|
|
82
|
+
exists: boolean;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=wiki.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki.types.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,MAAM,EAAE,GAAG,WAAW,MAAM,EAAE,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,MAAM,EAAE,IAAI,CAAC;IACb,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,aAAa,EAAE,kBAAkB,EAAE,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,MAAM,EAAE,KAAK,CAAC;IACd,6EAA6E;IAC7E,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,sBAAsB,EAAE,OAAO,CAAC;IAChC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,kEAAkE;IAClE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gDAAgD;IAChD,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,YAAY,EAAE,WAAW,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki.types.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -22,6 +22,12 @@ export interface GeneralSettings {
|
|
|
22
22
|
defaultRuntime: AIRuntime;
|
|
23
23
|
/** Whether to auto-start the orchestrator on application launch */
|
|
24
24
|
autoStartOrchestrator: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Whether the hung-session watchdog auto-restarts the orchestrator when its
|
|
27
|
+
* session is hung (alive but claiming work without ever heartbeating). When
|
|
28
|
+
* false, the hang is still detected + surfaced on `/health` but not recovered.
|
|
29
|
+
*/
|
|
30
|
+
autoRecoverHungOrchestrator: boolean;
|
|
25
31
|
/** Agent check-in interval in minutes */
|
|
26
32
|
checkInIntervalMinutes: number;
|
|
27
33
|
/** Maximum concurrent agents allowed */
|
|
@@ -30,6 +36,8 @@ export interface GeneralSettings {
|
|
|
30
36
|
verboseLogging: boolean;
|
|
31
37
|
/** Whether to auto-resume agent sessions on restart */
|
|
32
38
|
autoResumeOnRestart: boolean;
|
|
39
|
+
/** Whether to post a "back online" message to the owner's channel after a restart */
|
|
40
|
+
announceOnBoot: boolean;
|
|
33
41
|
/** Per-runtime CLI init commands. Key = runtime type, value = CLI command string */
|
|
34
42
|
runtimeCommands: Record<AIRuntime, string>;
|
|
35
43
|
/** Minutes of inactivity before an agent is automatically suspended (0 = disabled) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/settings.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"settings.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/settings.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,10 +81,12 @@ export function getDefaultSettings() {
|
|
|
81
81
|
general: {
|
|
82
82
|
defaultRuntime: 'claude-code',
|
|
83
83
|
autoStartOrchestrator: true,
|
|
84
|
+
autoRecoverHungOrchestrator: true,
|
|
84
85
|
checkInIntervalMinutes: 5,
|
|
85
86
|
maxConcurrentAgents: 10,
|
|
86
87
|
verboseLogging: false,
|
|
87
88
|
autoResumeOnRestart: true,
|
|
89
|
+
announceOnBoot: true,
|
|
88
90
|
runtimeCommands: {
|
|
89
91
|
'claude-code': 'claude --dangerously-skip-permissions',
|
|
90
92
|
'gemini-cli': 'gemini --yolo',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.types.js","sourceRoot":"","sources":["../../../../../backend/src/types/settings.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAO/D;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C,aAAa;IACb,YAAY;IACZ,WAAW;IACX,cAAc;CACN,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.types.js","sourceRoot":"","sources":["../../../../../backend/src/types/settings.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,6 +65,29 @@ export type WorkItemStatus = 'queued' | 'scheduled' | 'proposed' | 'accepted' |
|
|
|
65
65
|
export declare const WORK_ITEM_STATUSES: readonly WorkItemStatus[];
|
|
66
66
|
/** Terminal statuses — no further transitions allowed. */
|
|
67
67
|
export declare const TERMINAL_WORK_ITEM_STATUSES: ReadonlySet<WorkItemStatus>;
|
|
68
|
+
/**
|
|
69
|
+
* Broader "exited the active queue" status set used by SLA-style consumers
|
|
70
|
+
* (e.g. `RequestSlaSubscriber`, `MissionReminderService`) that need to
|
|
71
|
+
* treat `failed` and `rejected` as terminal for *their* purposes — even
|
|
72
|
+
* though those statuses are NOT terminal in the strict state-machine sense
|
|
73
|
+
* (they can transition back to `queued` via the retry path).
|
|
74
|
+
*
|
|
75
|
+
* Hoisted to close the canonical-set duplication anti-pattern called out
|
|
76
|
+
* by Arch on PR #357 (INBOUND-1) N2. Previously each SLA caller redeclared
|
|
77
|
+
* a 5-element local set; this single source of truth keeps them aligned
|
|
78
|
+
* if a new "exit-the-queue" status is added in the future.
|
|
79
|
+
*
|
|
80
|
+
* Members:
|
|
81
|
+
* - `done` / `verified` / `cancelled` — strictly terminal (cannot transition).
|
|
82
|
+
* - `failed` / `rejected` — semantically "exited active queue" for SLA timer
|
|
83
|
+
* no-op + reentrancy-lock release purposes, even though the state machine
|
|
84
|
+
* permits `rejected → queued` (retry) and `failed` is not formally terminal.
|
|
85
|
+
*
|
|
86
|
+
* Use this set when answering "should the SLA timer / reentrancy lock
|
|
87
|
+
* release based on the current WI state?", and use {@link TERMINAL_WORK_ITEM_STATUSES}
|
|
88
|
+
* when answering "is the state machine done with this WI?".
|
|
89
|
+
*/
|
|
90
|
+
export declare const SLA_TERMINAL_WORK_ITEM_STATUSES: ReadonlySet<WorkItemStatus>;
|
|
68
91
|
/**
|
|
69
92
|
* A single unit of system execution.
|
|
70
93
|
*
|