crewly 1.8.3 → 1.8.5

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 (95) hide show
  1. package/config/roles/_common/wiki-instructions.md +33 -0
  2. package/config/roles/orchestrator/prompt.md +121 -0
  3. package/config/roles/team-leader/prompt.md +38 -0
  4. package/config/skills/agent/core/wiki-query/SKILL.md +66 -0
  5. package/config/skills/agent/core/wiki-query/execute.sh +107 -0
  6. package/config/skills/orchestrator/wiki-bookkeep/SKILL.md +71 -0
  7. package/config/skills/orchestrator/wiki-bookkeep/execute.sh +72 -0
  8. package/config/skills/orchestrator/wiki-ingest/SKILL.md +63 -0
  9. package/config/skills/orchestrator/wiki-ingest/execute.sh +113 -0
  10. package/config/skills/orchestrator/wiki-process-queue/SKILL.md +71 -0
  11. package/config/skills/orchestrator/wiki-process-queue/execute.sh +93 -0
  12. package/config/skills/orchestrator/wiki-queue-add/SKILL.md +89 -0
  13. package/config/skills/orchestrator/wiki-queue-add/execute.sh +115 -0
  14. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +134 -0
  15. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -0
  16. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +718 -0
  17. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -0
  18. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts +23 -0
  19. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -0
  20. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +43 -0
  21. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -0
  22. package/dist/backend/backend/src/index.d.ts.map +1 -1
  23. package/dist/backend/backend/src/index.js +39 -0
  24. package/dist/backend/backend/src/index.js.map +1 -1
  25. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  26. package/dist/backend/backend/src/routes/api.routes.js +4 -0
  27. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  28. package/dist/backend/backend/src/services/core/system-health.util.d.ts +29 -4
  29. package/dist/backend/backend/src/services/core/system-health.util.d.ts.map +1 -1
  30. package/dist/backend/backend/src/services/core/system-health.util.js +105 -6
  31. package/dist/backend/backend/src/services/core/system-health.util.js.map +1 -1
  32. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +28 -0
  33. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  34. package/dist/backend/backend/src/services/session/pty/pty-session.js +162 -4
  35. package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
  36. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +20 -0
  37. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  38. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +61 -0
  39. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  40. package/dist/backend/backend/src/services/v3/escalation-router.service.d.ts +38 -1
  41. package/dist/backend/backend/src/services/v3/escalation-router.service.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/v3/escalation-router.service.js +124 -0
  43. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  44. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +19 -2
  45. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  46. package/dist/backend/backend/src/services/v3/v3-data.service.js +64 -7
  47. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  48. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.d.ts +69 -0
  49. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.d.ts.map +1 -0
  50. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.js +174 -0
  51. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.js.map +1 -0
  52. package/dist/backend/backend/src/services/wiki/schema-loader.service.d.ts +57 -0
  53. package/dist/backend/backend/src/services/wiki/schema-loader.service.d.ts.map +1 -0
  54. package/dist/backend/backend/src/services/wiki/schema-loader.service.js +183 -0
  55. package/dist/backend/backend/src/services/wiki/schema-loader.service.js.map +1 -0
  56. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +86 -0
  57. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -0
  58. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +187 -0
  59. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -0
  60. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts +116 -0
  61. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts.map +1 -0
  62. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js +299 -0
  63. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js.map +1 -0
  64. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +74 -0
  65. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +1 -0
  66. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +154 -0
  67. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +1 -0
  68. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +100 -0
  69. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -0
  70. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js +212 -0
  71. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -0
  72. package/dist/backend/backend/src/services/wiki/wiki-process.service.d.ts +84 -0
  73. package/dist/backend/backend/src/services/wiki/wiki-process.service.d.ts.map +1 -0
  74. package/dist/backend/backend/src/services/wiki/wiki-process.service.js +138 -0
  75. package/dist/backend/backend/src/services/wiki/wiki-process.service.js.map +1 -0
  76. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +115 -0
  77. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -0
  78. package/dist/backend/backend/src/services/wiki/wiki-query.service.js +291 -0
  79. package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -0
  80. package/dist/backend/backend/src/services/wiki/wiki-queue.service.d.ts +115 -0
  81. package/dist/backend/backend/src/services/wiki/wiki-queue.service.d.ts.map +1 -0
  82. package/dist/backend/backend/src/services/wiki/wiki-queue.service.js +261 -0
  83. package/dist/backend/backend/src/services/wiki/wiki-queue.service.js.map +1 -0
  84. package/dist/backend/backend/src/services/wiki/wiki.types.d.ts +84 -0
  85. package/dist/backend/backend/src/services/wiki/wiki.types.d.ts.map +1 -0
  86. package/dist/backend/backend/src/services/wiki/wiki.types.js +10 -0
  87. package/dist/backend/backend/src/services/wiki/wiki.types.js.map +1 -0
  88. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +20 -0
  89. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  90. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +61 -0
  91. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  92. package/frontend/dist/assets/{index-b279da34.js → index-cc115bb4.js} +246 -246
  93. package/frontend/dist/assets/{index-c07e04c0.css → index-db3f5041.css} +1 -1
  94. package/frontend/dist/index.html +2 -2
  95. package/package.json +1 -1
@@ -0,0 +1,261 @@
1
+ /**
2
+ * WikiQueueService — file-backed queue of "wiki-worthy" content
3
+ * that agents enqueue from inside their conversations.
4
+ *
5
+ * Design (Steve, 2026-05-22 redesign — replacing the keyword heuristic):
6
+ *
7
+ * 1. The orchestrator-system-prompt rule teaches agents to call the
8
+ * `wiki-queue-add` skill when a turn produces content with lasting
9
+ * value (decision, person fact, customer info, pattern, learning).
10
+ * Agents — not regex — decide.
11
+ *
12
+ * 2. Items sit in the queue with `status: pending` until an agent
13
+ * claims one via `wiki-process-queue` and chooses (a) where in the
14
+ * vault to put it OR (b) skip it because it's not actually worth
15
+ * saving. The agent's LLM is the classifier; we never pre-pick a
16
+ * taxonomy beyond the frozen folders.
17
+ *
18
+ * 3. Bookkeeping cron / threshold reads the same queue + vault stats
19
+ * so it can decide when to ask an agent for a consolidation pass.
20
+ *
21
+ * Storage: `~/.crewly/wiki-queue/<id>.json`. Single flat directory;
22
+ * cross-vault filtering happens at list time via the `vaultPath` field
23
+ * inside each record.
24
+ *
25
+ * @module services/wiki/wiki-queue.service
26
+ */
27
+ import * as path from 'path';
28
+ import * as os from 'os';
29
+ import * as fs from 'fs/promises';
30
+ import { existsSync } from 'fs';
31
+ import { randomUUID } from 'crypto';
32
+ import { LoggerService } from '../core/logger.service.js';
33
+ const MAX_CONTENT_BYTES = 64 * 1024;
34
+ const MAX_REASON_BYTES = 2 * 1024;
35
+ /**
36
+ * File-backed queue. Stateless other than the on-disk JSONs and an
37
+ * in-memory cache of the root directory. Singleton because all writes
38
+ * go to the same on-disk pool.
39
+ */
40
+ export class WikiQueueService {
41
+ static instance = null;
42
+ logger;
43
+ rootDir;
44
+ initPromise = null;
45
+ constructor(rootDir) {
46
+ this.logger = LoggerService.getInstance().createComponentLogger('WikiQueue');
47
+ this.rootDir = rootDir ?? path.join(os.homedir(), '.crewly', 'wiki-queue');
48
+ }
49
+ static getInstance() {
50
+ if (!this.instance)
51
+ this.instance = new WikiQueueService();
52
+ return this.instance;
53
+ }
54
+ /** Test-only reset. */
55
+ static _resetForTesting() {
56
+ this.instance = null;
57
+ }
58
+ /** Expose for tests. */
59
+ getRootDir() {
60
+ return this.rootDir;
61
+ }
62
+ // ---------------------------------------------------------------------------
63
+ // CRUD
64
+ // ---------------------------------------------------------------------------
65
+ /** Enqueue a new candidate. Returns the persisted item. */
66
+ async add(input) {
67
+ this.validateAddInput(input);
68
+ await this.ensureRoot();
69
+ const item = {
70
+ id: randomUUID(),
71
+ vaultPath: input.vaultPath,
72
+ queuedAt: new Date().toISOString(),
73
+ queuedBy: input.queuedBy,
74
+ sourceType: input.sourceType,
75
+ sourceRef: input.sourceRef,
76
+ content: input.content,
77
+ reason: input.reason,
78
+ status: 'pending',
79
+ };
80
+ await this.writeItem(item);
81
+ this.logger.info('WikiQueue add', {
82
+ id: item.id,
83
+ vaultPath: item.vaultPath,
84
+ sourceType: item.sourceType,
85
+ queuedBy: item.queuedBy,
86
+ bytes: Buffer.byteLength(item.content, 'utf8'),
87
+ });
88
+ return item;
89
+ }
90
+ /** List items, newest-first, optionally filtered. */
91
+ async list(filter = {}) {
92
+ await this.ensureRoot();
93
+ const limit = filter.limit ?? 50;
94
+ const entries = await fs.readdir(this.rootDir, { withFileTypes: true });
95
+ const items = [];
96
+ for (const entry of entries) {
97
+ if (!entry.isFile() || !entry.name.endsWith('.json'))
98
+ continue;
99
+ const item = await this.readItemFile(path.join(this.rootDir, entry.name));
100
+ if (!item)
101
+ continue;
102
+ if (filter.vaultPath && item.vaultPath !== filter.vaultPath)
103
+ continue;
104
+ if (filter.status && item.status !== filter.status)
105
+ continue;
106
+ if (filter.queuedBy && item.queuedBy !== filter.queuedBy)
107
+ continue;
108
+ items.push(item);
109
+ }
110
+ items.sort((a, b) => (a.queuedAt < b.queuedAt ? 1 : -1));
111
+ return items.slice(0, limit);
112
+ }
113
+ /** Fetch one by id. Returns null when missing. */
114
+ async get(id) {
115
+ await this.ensureRoot();
116
+ const file = path.join(this.rootDir, `${id}.json`);
117
+ return this.readItemFile(file);
118
+ }
119
+ /**
120
+ * Claim an item — only allowed when `status: pending`. Stamps the
121
+ * claimant + timestamp atomically.
122
+ */
123
+ async claim(id, claimedBy) {
124
+ const item = await this.requireItem(id);
125
+ if (item.status !== 'pending') {
126
+ throw new Error(`WikiQueue.claim(${id}): item is ${item.status}; only pending items can be claimed`);
127
+ }
128
+ const updated = {
129
+ ...item,
130
+ status: 'claimed',
131
+ claimedBy,
132
+ claimedAt: new Date().toISOString(),
133
+ };
134
+ await this.writeItem(updated);
135
+ this.logger.info('WikiQueue claim', { id, claimedBy });
136
+ return updated;
137
+ }
138
+ /**
139
+ * Mark processed. Requires the item to be `claimed` AND requires a
140
+ * `result` with at least one of `pagesWritten` / `targetPath` / `summary`.
141
+ */
142
+ async markProcessed(id, result) {
143
+ const item = await this.requireItem(id);
144
+ if (item.status !== 'claimed') {
145
+ throw new Error(`WikiQueue.markProcessed(${id}): item is ${item.status}; must be claimed first`);
146
+ }
147
+ const updated = {
148
+ ...item,
149
+ status: 'processed',
150
+ processedAt: new Date().toISOString(),
151
+ result,
152
+ };
153
+ await this.writeItem(updated);
154
+ this.logger.info('WikiQueue processed', {
155
+ id,
156
+ pages: result.pagesWritten?.length ?? 0,
157
+ target: result.targetPath,
158
+ });
159
+ return updated;
160
+ }
161
+ /** Mark skipped — agent decided this isn't wiki-worthy after all. */
162
+ async markSkipped(id, skipReason) {
163
+ if (!skipReason || skipReason.trim().length === 0) {
164
+ throw new Error('WikiQueue.markSkipped requires a non-empty skipReason');
165
+ }
166
+ const item = await this.requireItem(id);
167
+ if (item.status !== 'claimed') {
168
+ throw new Error(`WikiQueue.markSkipped(${id}): item is ${item.status}; must be claimed first`);
169
+ }
170
+ const updated = {
171
+ ...item,
172
+ status: 'skipped',
173
+ processedAt: new Date().toISOString(),
174
+ result: { ingested: false, skipReason },
175
+ };
176
+ await this.writeItem(updated);
177
+ this.logger.info('WikiQueue skipped', { id, reason: skipReason });
178
+ return updated;
179
+ }
180
+ /** Status counts, optionally scoped to a vault. */
181
+ async getStats(vaultPath) {
182
+ const items = await this.list({ vaultPath, limit: Number.MAX_SAFE_INTEGER });
183
+ const counts = {
184
+ pending: 0,
185
+ claimed: 0,
186
+ processed: 0,
187
+ skipped: 0,
188
+ total: items.length,
189
+ };
190
+ for (const it of items) {
191
+ counts[it.status]++;
192
+ }
193
+ return counts;
194
+ }
195
+ // ---------------------------------------------------------------------------
196
+ // Internals
197
+ // ---------------------------------------------------------------------------
198
+ validateAddInput(input) {
199
+ if (!input.vaultPath || !path.isAbsolute(input.vaultPath)) {
200
+ throw new Error('WikiQueue.add: vaultPath must be absolute');
201
+ }
202
+ if (!input.queuedBy)
203
+ throw new Error('WikiQueue.add: queuedBy is required');
204
+ if (!input.sourceType)
205
+ throw new Error('WikiQueue.add: sourceType is required');
206
+ if (!input.sourceRef)
207
+ throw new Error('WikiQueue.add: sourceRef is required');
208
+ const content = input.content ?? '';
209
+ if (content.trim().length === 0) {
210
+ throw new Error('WikiQueue.add: content is empty');
211
+ }
212
+ if (Buffer.byteLength(content, 'utf8') > MAX_CONTENT_BYTES) {
213
+ throw new Error(`WikiQueue.add: content exceeds ${MAX_CONTENT_BYTES} bytes`);
214
+ }
215
+ const reason = input.reason ?? '';
216
+ if (reason.trim().length === 0) {
217
+ throw new Error('WikiQueue.add: reason is required — agents MUST justify why this is wiki-worthy');
218
+ }
219
+ if (Buffer.byteLength(reason, 'utf8') > MAX_REASON_BYTES) {
220
+ throw new Error(`WikiQueue.add: reason exceeds ${MAX_REASON_BYTES} bytes`);
221
+ }
222
+ }
223
+ async ensureRoot() {
224
+ if (this.initPromise) {
225
+ await this.initPromise;
226
+ return;
227
+ }
228
+ this.initPromise = (async () => {
229
+ if (!existsSync(this.rootDir)) {
230
+ await fs.mkdir(this.rootDir, { recursive: true });
231
+ }
232
+ })();
233
+ await this.initPromise;
234
+ }
235
+ async writeItem(item) {
236
+ const file = path.join(this.rootDir, `${item.id}.json`);
237
+ const tmp = `${file}.tmp`;
238
+ await fs.writeFile(tmp, JSON.stringify(item, null, 2), 'utf8');
239
+ await fs.rename(tmp, file); // atomic on the same filesystem
240
+ }
241
+ async readItemFile(file) {
242
+ try {
243
+ const raw = await fs.readFile(file, 'utf8');
244
+ const parsed = JSON.parse(raw);
245
+ // Soft validation — discard rows that don't match the shape we own.
246
+ if (!parsed.id || !parsed.status || !parsed.queuedAt)
247
+ return null;
248
+ return parsed;
249
+ }
250
+ catch {
251
+ return null;
252
+ }
253
+ }
254
+ async requireItem(id) {
255
+ const item = await this.get(id);
256
+ if (!item)
257
+ throw new Error(`WikiQueue: item not found: ${id}`);
258
+ return item;
259
+ }
260
+ }
261
+ //# sourceMappingURL=wiki-queue.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-queue.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-queue.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,10 @@
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
+ export {};
10
+ //# sourceMappingURL=wiki.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki.types.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -483,6 +483,26 @@ export declare class TaskPoolService {
483
483
  * @throws Error if work item not found or not in 'running' status
484
484
  */
485
485
  failItem(workItemId: string, error: string): Promise<void>;
486
+ /**
487
+ * Requeue a failed WorkItem back to `queued` for another attempt.
488
+ *
489
+ * Path: `failed → queued` (legal in WORK_ITEM_TRANSITIONS but previously
490
+ * unused — the system never auto-retried, every failure was terminal).
491
+ * Increments `retryCount`, clears `startedAt`, preserves `target` so
492
+ * the same agent gets a second shot, and records the previous error
493
+ * on the WI's metadata for postmortem visibility.
494
+ *
495
+ * Caller must have ALREADY confirmed `retryCount < maxRetries` — this
496
+ * method does NOT enforce the cap, on the assumption that the caller
497
+ * (v3-data.onTaskFailed) handles the exhausted-retries branch with
498
+ * escalation to ORC.
499
+ *
500
+ * @param workItemId - The failed WI to retry
501
+ * @param reason - Why the previous attempt failed (recorded on
502
+ * metadata.lastFailureReason; surfaces in the activity timeline)
503
+ * @throws if the WI doesn't exist or isn't in `failed` status
504
+ */
505
+ requeueAfterFailure(workItemId: string, reason: string): Promise<void>;
486
506
  /**
487
507
  * Processes a heartbeat from an agent for their active claim.
488
508
  *
@@ -1 +1 @@
1
- {"version":3,"file":"task-pool.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/task-pool.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-pool.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/task-pool.service.ts"],"names":[],"mappings":"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"}
@@ -1004,6 +1004,67 @@ export class TaskPoolService {
1004
1004
  await this.storage.flush();
1005
1005
  this.logger.info('WorkItem failed', { workItemId, error });
1006
1006
  }
1007
+ /**
1008
+ * Requeue a failed WorkItem back to `queued` for another attempt.
1009
+ *
1010
+ * Path: `failed → queued` (legal in WORK_ITEM_TRANSITIONS but previously
1011
+ * unused — the system never auto-retried, every failure was terminal).
1012
+ * Increments `retryCount`, clears `startedAt`, preserves `target` so
1013
+ * the same agent gets a second shot, and records the previous error
1014
+ * on the WI's metadata for postmortem visibility.
1015
+ *
1016
+ * Caller must have ALREADY confirmed `retryCount < maxRetries` — this
1017
+ * method does NOT enforce the cap, on the assumption that the caller
1018
+ * (v3-data.onTaskFailed) handles the exhausted-retries branch with
1019
+ * escalation to ORC.
1020
+ *
1021
+ * @param workItemId - The failed WI to retry
1022
+ * @param reason - Why the previous attempt failed (recorded on
1023
+ * metadata.lastFailureReason; surfaces in the activity timeline)
1024
+ * @throws if the WI doesn't exist or isn't in `failed` status
1025
+ */
1026
+ async requeueAfterFailure(workItemId, reason) {
1027
+ const workItem = await this.storage.findWorkItem(workItemId);
1028
+ if (!workItem) {
1029
+ throw new Error(`WorkItem not found: ${workItemId}`);
1030
+ }
1031
+ if (workItem.status !== 'failed') {
1032
+ throw new Error(`Cannot requeue WorkItem after failure: status must be 'failed', got '${workItem.status}'`);
1033
+ }
1034
+ await this.transitionStatus(workItemId, 'queued', 'system', (wi) => {
1035
+ wi.retryCount += 1;
1036
+ wi.startedAt = undefined;
1037
+ wi.completedAt = undefined;
1038
+ // Keep `target` — the original agent should get the retry.
1039
+ // APPEND to failureHistory so postmortems see all attempts, not
1040
+ // just the most recent. `lastFailureReason` / `lastFailureAt`
1041
+ // are retained for back-compat with dashboards that already
1042
+ // read those scalar fields. Cap history at 10 entries so a
1043
+ // pathological retry loop can't bloat the metadata indefinitely.
1044
+ const now = new Date().toISOString();
1045
+ const priorHistory = wi.metadata?.failureHistory ?? [];
1046
+ wi.metadata = {
1047
+ ...(wi.metadata ?? {}),
1048
+ failureHistory: [
1049
+ ...priorHistory,
1050
+ { at: now, reason, retryAttempt: wi.retryCount },
1051
+ ].slice(-10),
1052
+ lastFailureReason: reason,
1053
+ lastFailureAt: now,
1054
+ retryAttempt: wi.retryCount,
1055
+ };
1056
+ // Clear the error field so a successful retry doesn't surface a
1057
+ // stale error message; the metadata above keeps the history.
1058
+ wi.error = undefined;
1059
+ });
1060
+ await this.storage.flush();
1061
+ this.logger.info('WorkItem requeued after failure', {
1062
+ workItemId,
1063
+ retryCount: workItem.retryCount + 1,
1064
+ maxRetries: workItem.maxRetries,
1065
+ reason,
1066
+ });
1067
+ }
1007
1068
  // -----------------------------------------------------------------------
1008
1069
  // Claim Lifecycle (delegated to ClaimService)
1009
1070
  // -----------------------------------------------------------------------