crewly 1.4.41 → 1.4.42

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 (63) hide show
  1. package/config/roles/orchestrator/fragments/communication.md +117 -0
  2. package/config/roles/orchestrator/fragments/lifecycle.md +112 -0
  3. package/config/roles/orchestrator/fragments/recovery.md +47 -0
  4. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  5. package/dist/backend/backend/src/services/agent/agent-registration.service.js +6 -0
  6. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  7. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  8. package/dist/backend/backend/src/services/ai/prompt-builder.service.js +5 -0
  9. package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  10. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
  11. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +6 -0
  12. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  13. package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.d.ts +16 -0
  14. package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.d.ts.map +1 -1
  15. package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.js +30 -0
  16. package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.js.map +1 -1
  17. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -1
  18. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
  19. package/dist/backend/backend/src/services/ai/prompt-modules/index.js +1 -1
  20. package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
  21. package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -1
  22. package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.js +8 -0
  23. package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -1
  24. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +29 -12
  25. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  26. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +159 -66
  27. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  28. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +35 -0
  29. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  30. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js +23 -0
  31. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  32. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  33. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +8 -0
  34. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  35. package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts +10 -0
  36. package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -1
  37. package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js +55 -1
  38. package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -1
  39. package/dist/backend/backend/src/services/ai/self-improvement/attention.service.d.ts +74 -0
  40. package/dist/backend/backend/src/services/ai/self-improvement/attention.service.d.ts.map +1 -0
  41. package/dist/backend/backend/src/services/ai/self-improvement/attention.service.js +132 -0
  42. package/dist/backend/backend/src/services/ai/self-improvement/attention.service.js.map +1 -0
  43. package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
  44. package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
  45. package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
  46. package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
  47. package/dist/backend/backend/src/services/ai/self-improvement/index.d.ts +13 -0
  48. package/dist/backend/backend/src/services/ai/self-improvement/index.d.ts.map +1 -0
  49. package/dist/backend/backend/src/services/ai/self-improvement/index.js +13 -0
  50. package/dist/backend/backend/src/services/ai/self-improvement/index.js.map +1 -0
  51. package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts +107 -0
  52. package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts.map +1 -0
  53. package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.js +183 -0
  54. package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.js.map +1 -0
  55. package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts +97 -0
  56. package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts.map +1 -0
  57. package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.js +128 -0
  58. package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.js.map +1 -0
  59. package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.d.ts +95 -0
  60. package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.d.ts.map +1 -0
  61. package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.js +116 -0
  62. package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.js.map +1 -0
  63. package/package.json +1 -1
@@ -1,33 +1,45 @@
1
1
  import { LoggerService } from '../../core/logger.service.js';
2
2
  import { estimateTokens, } from './prompt-module.interface.js';
3
3
  import { IdentityModule } from './identity.module.js';
4
+ import { SoulModule } from './soul.module.js';
4
5
  import { SkillsReferenceModule } from './skills-reference.module.js';
5
6
  import { MemoryReferenceModule } from './memory-reference.module.js';
6
7
  import { TeamReferenceModule } from './team-reference.module.js';
7
8
  import { ProjectReferenceModule } from './project-reference.module.js';
9
+ import { UserProfileReferenceModule } from './user-profile-reference.module.js';
10
+ import { LearningReferenceModule } from './learning-reference.module.js';
11
+ import { CommunicationModule } from './communication.module.js';
12
+ import { RecoveryModule } from './recovery.module.js';
13
+ import { LifecycleModule } from './lifecycle.module.js';
8
14
  /**
9
15
  * Default total token budget for all prompt modules combined.
10
- * Modules exceeding this budget are skipped (compactable ones only).
16
+ * Modules exceeding this budget are truncated or skipped (compactable ones only).
11
17
  */
12
18
  const DEFAULT_TOKEN_BUDGET = 25000;
13
19
  /**
14
20
  * Separator between prompt modules in assembled output.
15
21
  */
16
22
  const MODULE_SEPARATOR = '\n\n---\n\n';
23
+ /**
24
+ * When trimming a module to fit budget, reduce to this fraction of maxTokens first.
25
+ */
26
+ const TRIM_FRACTION = 0.5;
17
27
  /**
18
28
  * Service that orchestrates the assembly of prompt modules into a complete agent prompt.
19
29
  *
20
30
  * Responsibilities:
21
31
  * - Registers and manages prompt modules
22
32
  * - Assembles modules in priority order
23
- * - Enforces per-module and total token budgets
24
- * - Supports Trusted Zone (non-compactable) vs Flexible Zone (compactable) modules
25
- * - Works across all runtime types (claude-code, gemini-cli, crewly-agent)
33
+ * - Enforces per-module and total token budgets with 2-stage truncation:
34
+ * 1. First pass: build all Trusted Zone (non-compactable) + Flexible Zone modules
35
+ * 2. If over budget: trim lowest-priority compactable modules to 50% of maxTokens
36
+ * 3. If still over budget: remove lowest-priority compactable modules entirely
37
+ * - Returns AssemblyReport with token breakdown and truncation details
26
38
  *
27
39
  * @example
28
40
  * ```typescript
29
41
  * const assembler = new PromptAssemblyService();
30
- * const prompt = await assembler.assemble({
42
+ * const { prompt, report } = await assembler.assemble({
31
43
  * sessionName: 'crewly-dev-001',
32
44
  * memberId: 'uuid-123',
33
45
  * role: 'developer',
@@ -55,10 +67,16 @@ export class PromptAssemblyService {
55
67
  registerDefaultModules() {
56
68
  this.modules = [
57
69
  new IdentityModule(),
70
+ new SoulModule(),
58
71
  new MemoryReferenceModule(),
59
72
  new SkillsReferenceModule(),
60
73
  new TeamReferenceModule(),
61
74
  new ProjectReferenceModule(),
75
+ new CommunicationModule(),
76
+ new UserProfileReferenceModule(),
77
+ new LearningReferenceModule(),
78
+ new RecoveryModule(),
79
+ new LifecycleModule(),
62
80
  ];
63
81
  }
64
82
  /**
@@ -100,50 +118,38 @@ export class PromptAssemblyService {
100
118
  /**
101
119
  * Assemble all applicable prompt modules into a single prompt string.
102
120
  *
103
- * Modules are processed in priority order (lowest number first).
104
- * Non-compactable modules are always included (Trusted Zone).
105
- * Compactable modules are skipped if the token budget is exceeded (Flexible Zone).
121
+ * Uses 2-stage truncation for compactable modules when over budget:
122
+ * 1. Trim lowest-priority compactable modules to 50% of their content
123
+ * 2. Remove lowest-priority compactable modules entirely
124
+ *
125
+ * Trusted Zone (non-compactable) modules are never truncated or removed.
106
126
  *
107
127
  * @param config - Configuration with all context needed by modules
108
- * @returns Assembled prompt string with all module sections
128
+ * @returns Object with assembled prompt string and budget report
109
129
  */
110
130
  async assemble(config) {
111
- const results = [];
112
- let totalTokens = 0;
131
+ const built = [];
132
+ const truncated = [];
113
133
  // Sort modules by priority (ascending — lower number = higher priority)
114
134
  const sorted = [...this.modules].sort((a, b) => a.priority - b.priority);
135
+ // Phase 1: Build all applicable modules
115
136
  for (const module of sorted) {
116
- // Check if module should be included
117
137
  if (!module.shouldInclude(config)) {
118
138
  this.logger.debug(`Module '${module.name}' skipped (shouldInclude=false)`, {
119
139
  sessionName: config.sessionName,
120
140
  });
121
141
  continue;
122
142
  }
123
- // Check token budget for compactable modules
124
- if (module.compactable && totalTokens + module.maxTokens > this.totalTokenBudget) {
125
- this.logger.info(`Module '${module.name}' skipped (token budget exceeded)`, {
126
- sessionName: config.sessionName,
127
- currentTokens: totalTokens,
128
- moduleMaxTokens: module.maxTokens,
129
- budget: this.totalTokenBudget,
130
- });
131
- continue;
132
- }
133
143
  try {
134
144
  const content = await module.build(config);
135
145
  if (content && content.trim()) {
136
146
  const tokens = estimateTokens(content);
137
- results.push({
147
+ built.push({
138
148
  name: module.name,
139
149
  content: content.trim(),
140
150
  estimatedTokens: tokens,
141
- });
142
- totalTokens += tokens;
143
- this.logger.debug(`Module '${module.name}' built`, {
144
- sessionName: config.sessionName,
145
- tokens,
146
- totalTokens,
151
+ compactable: module.compactable,
152
+ priority: module.priority,
147
153
  });
148
154
  }
149
155
  }
@@ -152,61 +158,148 @@ export class PromptAssemblyService {
152
158
  sessionName: config.sessionName,
153
159
  error: error instanceof Error ? error.message : String(error),
154
160
  });
155
- // Non-compactable modules failing is critical
156
161
  if (!module.compactable) {
157
162
  throw error;
158
163
  }
159
- // Compactable modules failing is logged but not fatal
160
164
  }
161
165
  }
166
+ // Phase 2: Enforce token budget via 2-stage truncation
167
+ let totalTokens = built.reduce((sum, r) => sum + r.estimatedTokens, 0);
168
+ if (totalTokens > this.totalTokenBudget) {
169
+ // Get compactable modules sorted by priority descending (lowest priority first to trim)
170
+ const compactableIndices = built
171
+ .map((r, i) => ({ ...r, index: i }))
172
+ .filter((r) => r.compactable)
173
+ .sort((a, b) => b.priority - a.priority);
174
+ // Stage 1: Trim to 50% of content (lowest priority first)
175
+ for (const item of compactableIndices) {
176
+ if (totalTokens <= this.totalTokenBudget)
177
+ break;
178
+ const original = built[item.index];
179
+ const trimmedContent = this.trimContent(original.content, TRIM_FRACTION);
180
+ const trimmedTokens = estimateTokens(trimmedContent);
181
+ const savings = original.estimatedTokens - trimmedTokens;
182
+ if (savings > 0) {
183
+ totalTokens -= savings;
184
+ built[item.index] = {
185
+ ...original,
186
+ content: trimmedContent,
187
+ estimatedTokens: trimmedTokens,
188
+ };
189
+ truncated.push({
190
+ name: original.name,
191
+ originalTokens: original.estimatedTokens,
192
+ finalTokens: trimmedTokens,
193
+ action: 'trimmed',
194
+ });
195
+ this.logger.info(`Module '${original.name}' trimmed to 50%`, {
196
+ sessionName: config.sessionName,
197
+ originalTokens: original.estimatedTokens,
198
+ trimmedTokens,
199
+ totalTokens,
200
+ });
201
+ }
202
+ }
203
+ // Stage 2: Remove entirely (lowest priority first)
204
+ if (totalTokens > this.totalTokenBudget) {
205
+ // Re-get compactable indices (some may have been trimmed)
206
+ const removable = built
207
+ .map((r, i) => ({ ...r, index: i }))
208
+ .filter((r) => r.compactable)
209
+ .sort((a, b) => b.priority - a.priority);
210
+ for (const item of removable) {
211
+ if (totalTokens <= this.totalTokenBudget)
212
+ break;
213
+ const original = built[item.index];
214
+ totalTokens -= original.estimatedTokens;
215
+ // Check if already in truncated list (was trimmed in stage 1)
216
+ const existingTruncIdx = truncated.findIndex((t) => t.name === original.name);
217
+ if (existingTruncIdx >= 0) {
218
+ truncated[existingTruncIdx].finalTokens = 0;
219
+ truncated[existingTruncIdx].action = 'removed';
220
+ }
221
+ else {
222
+ truncated.push({
223
+ name: original.name,
224
+ originalTokens: original.estimatedTokens,
225
+ finalTokens: 0,
226
+ action: 'removed',
227
+ });
228
+ }
229
+ // Mark for removal by zeroing content
230
+ built[item.index] = { ...original, content: '', estimatedTokens: 0 };
231
+ this.logger.info(`Module '${original.name}' removed (budget)`, {
232
+ sessionName: config.sessionName,
233
+ freedTokens: original.estimatedTokens,
234
+ totalTokens,
235
+ });
236
+ }
237
+ }
238
+ }
239
+ // Filter out removed modules and build final output
240
+ const finalResults = built.filter((r) => r.content.length > 0);
241
+ const finalTotalTokens = finalResults.reduce((sum, r) => sum + r.estimatedTokens, 0);
242
+ const report = {
243
+ totalTokens: finalTotalTokens,
244
+ moduleBreakdown: finalResults.map((r) => ({
245
+ name: r.name,
246
+ content: r.content,
247
+ estimatedTokens: r.estimatedTokens,
248
+ })),
249
+ truncated,
250
+ };
162
251
  this.logger.info('Prompt assembly complete', {
163
252
  sessionName: config.sessionName,
164
- moduleCount: results.length,
165
- totalTokens,
253
+ moduleCount: finalResults.length,
254
+ totalTokens: finalTotalTokens,
166
255
  budget: this.totalTokenBudget,
167
- modules: results.map((r) => r.name),
256
+ truncatedCount: truncated.length,
257
+ modules: finalResults.map((r) => r.name),
168
258
  });
169
- return results.map((r) => r.content).join(MODULE_SEPARATOR);
259
+ return {
260
+ prompt: finalResults.map((r) => r.content).join(MODULE_SEPARATOR),
261
+ report,
262
+ };
170
263
  }
171
264
  /**
172
265
  * Assemble modules and return detailed results with per-module metadata.
173
- * Useful for debugging and token budget analysis.
266
+ * Convenience wrapper that returns just the report (same as assemble().report).
174
267
  *
175
268
  * @param config - Configuration with all context needed by modules
176
- * @returns Array of module build results with token estimates
269
+ * @returns Assembly details with prompt, modules, and total tokens
177
270
  */
178
271
  async assembleWithDetails(config) {
179
- const results = [];
180
- let totalTokens = 0;
181
- const sorted = [...this.modules].sort((a, b) => a.priority - b.priority);
182
- for (const module of sorted) {
183
- if (!module.shouldInclude(config))
184
- continue;
185
- if (module.compactable && totalTokens + module.maxTokens > this.totalTokenBudget) {
186
- continue;
187
- }
188
- try {
189
- const content = await module.build(config);
190
- if (content && content.trim()) {
191
- const tokens = estimateTokens(content);
192
- results.push({
193
- name: module.name,
194
- content: content.trim(),
195
- estimatedTokens: tokens,
196
- });
197
- totalTokens += tokens;
198
- }
199
- }
200
- catch (error) {
201
- if (!module.compactable)
202
- throw error;
203
- }
204
- }
272
+ const { prompt, report } = await this.assemble(config);
205
273
  return {
206
- prompt: results.map((r) => r.content).join(MODULE_SEPARATOR),
207
- modules: results,
208
- totalTokens,
274
+ prompt,
275
+ modules: report.moduleBreakdown,
276
+ totalTokens: report.totalTokens,
277
+ truncated: report.truncated,
209
278
  };
210
279
  }
280
+ /**
281
+ * Trim content to a target fraction of its original length.
282
+ * Trims at line boundaries to avoid cutting mid-sentence.
283
+ *
284
+ * @param content - Original content string
285
+ * @param fraction - Target fraction (e.g., 0.5 for 50%)
286
+ * @returns Trimmed content
287
+ */
288
+ trimContent(content, fraction) {
289
+ const targetLength = Math.floor(content.length * fraction);
290
+ if (targetLength >= content.length)
291
+ return content;
292
+ const lines = content.split('\n');
293
+ let accumulated = 0;
294
+ const kept = [];
295
+ for (const line of lines) {
296
+ if (accumulated + line.length + 1 > targetLength && kept.length > 0) {
297
+ break;
298
+ }
299
+ kept.push(line);
300
+ accumulated += line.length + 1; // +1 for newline
301
+ }
302
+ return kept.join('\n');
303
+ }
211
304
  }
212
305
  //# sourceMappingURL=prompt-assembly.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-assembly.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-assembly.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-assembly.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-assembly.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAMN,cAAc,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;GAGG;AACH,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAEnC;;GAEG;AACH,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,aAAa,GAAG,GAAG,CAAC;AAU1B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,OAAO,qBAAqB;IACzB,MAAM,CAAkB;IACxB,OAAO,GAAmB,EAAE,CAAC;IAC7B,gBAAgB,CAAS;IAEjC,YAAY,cAAsB,oBAAoB;QACrD,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;QACzF,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC;QACpC,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACK,sBAAsB;QAC7B,IAAI,CAAC,OAAO,GAAG;YACd,IAAI,cAAc,EAAE;YACpB,IAAI,UAAU,EAAE;YAChB,IAAI,qBAAqB,EAAE;YAC3B,IAAI,qBAAqB,EAAE;YAC3B,IAAI,mBAAmB,EAAE;YACzB,IAAI,sBAAsB,EAAE;YAC5B,IAAI,mBAAmB,EAAE;YACzB,IAAI,0BAA0B,EAAE;YAChC,IAAI,uBAAuB,EAAE;YAC7B,IAAI,cAAc,EAAE;YACpB,IAAI,eAAe,EAAE;SACrB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,MAAoB;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,IAAY;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,UAAU;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,MAAe;QAC1B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC9B,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAoB;QAClC,MAAM,KAAK,GAA0B,EAAE,CAAC;QACxC,MAAM,SAAS,GAA0B,EAAE,CAAC;QAE5C,wEAAwE;QACxE,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEzE,wCAAwC;QACxC,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,iCAAiC,EAAE;oBAC1E,WAAW,EAAE,MAAM,CAAC,WAAW;iBAC/B,CAAC,CAAC;gBACH,SAAS;YACV,CAAC;YAED,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3C,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;oBACvC,KAAK,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;wBACvB,eAAe,EAAE,MAAM;wBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;qBACzB,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,mBAAmB,EAAE;oBAC5D,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC7D,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;oBACzB,MAAM,KAAK,CAAC;gBACb,CAAC;YACF,CAAC;QACF,CAAC;QAED,uDAAuD;QACvD,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QAEvE,IAAI,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,wFAAwF;YACxF,MAAM,kBAAkB,GAAG,KAAK;iBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;iBACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;iBAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YAE1C,0DAA0D;YAC1D,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;gBACvC,IAAI,WAAW,IAAI,IAAI,CAAC,gBAAgB;oBAAE,MAAM;gBAEhD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBACzE,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,GAAG,aAAa,CAAC;gBAEzD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBACjB,WAAW,IAAI,OAAO,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;wBACnB,GAAG,QAAQ;wBACX,OAAO,EAAE,cAAc;wBACvB,eAAe,EAAE,aAAa;qBAC9B,CAAC;oBACF,SAAS,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,cAAc,EAAE,QAAQ,CAAC,eAAe;wBACxC,WAAW,EAAE,aAAa;wBAC1B,MAAM,EAAE,SAAS;qBACjB,CAAC,CAAC;oBAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,IAAI,kBAAkB,EAAE;wBAC5D,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,cAAc,EAAE,QAAQ,CAAC,eAAe;wBACxC,aAAa;wBACb,WAAW;qBACX,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAED,mDAAmD;YACnD,IAAI,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzC,0DAA0D;gBAC1D,MAAM,SAAS,GAAG,KAAK;qBACrB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;qBACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;qBAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAE1C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;oBAC9B,IAAI,WAAW,IAAI,IAAI,CAAC,gBAAgB;wBAAE,MAAM;oBAEhD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC;oBAExC,8DAA8D;oBAC9D,MAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC9E,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;wBAC3B,SAAS,CAAC,gBAAgB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;wBAC5C,SAAS,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACP,SAAS,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,QAAQ,CAAC,IAAI;4BACnB,cAAc,EAAE,QAAQ,CAAC,eAAe;4BACxC,WAAW,EAAE,CAAC;4BACd,MAAM,EAAE,SAAS;yBACjB,CAAC,CAAC;oBACJ,CAAC;oBAED,sCAAsC;oBACtC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;oBAErE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,IAAI,oBAAoB,EAAE;wBAC9D,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,WAAW,EAAE,QAAQ,CAAC,eAAe;wBACrC,WAAW;qBACX,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;QAED,oDAAoD;QACpD,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/D,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QAErF,MAAM,MAAM,GAAmB;YAC9B,WAAW,EAAE,gBAAgB;YAC7B,eAAe,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,eAAe,EAAE,CAAC,CAAC,eAAe;aAClC,CAAC,CAAC;YACH,SAAS;SACT,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;YAC5C,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,WAAW,EAAE,YAAY,CAAC,MAAM;YAChC,WAAW,EAAE,gBAAgB;YAC7B,MAAM,EAAE,IAAI,CAAC,gBAAgB;YAC7B,cAAc,EAAE,SAAS,CAAC,MAAM;YAChC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACxC,CAAC,CAAC;QAEH,OAAO;YACN,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACjE,MAAM;SACN,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB,CAAC,MAAoB;QAM7C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO;YACN,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,eAAe;YAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC3B,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,WAAW,CAAC,OAAe,EAAE,QAAgB;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QAC3D,IAAI,YAAY,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC;QAEnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrE,MAAM;YACP,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,WAAW,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,iBAAiB;QAClD,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;CACD"}
@@ -89,6 +89,41 @@ export interface PromptModule {
89
89
  /** Build module content as markdown string */
90
90
  build(config: ModuleConfig): Promise<string>;
91
91
  }
92
+ /**
93
+ * Report returned by PromptAssemblyService.assemble() describing
94
+ * token usage and any truncation that occurred.
95
+ */
96
+ export interface AssemblyReport {
97
+ /** Total estimated tokens in the final prompt */
98
+ totalTokens: number;
99
+ /** Per-module token breakdown */
100
+ moduleBreakdown: ModuleBuildResult[];
101
+ /** Modules that were truncated or removed to fit budget */
102
+ truncated: TruncatedModuleInfo[];
103
+ }
104
+ /**
105
+ * Info about a module that was truncated or removed during assembly.
106
+ */
107
+ export interface TruncatedModuleInfo {
108
+ /** Module name */
109
+ name: string;
110
+ /** Original estimated tokens before truncation */
111
+ originalTokens: number;
112
+ /** Tokens after truncation (0 if fully removed) */
113
+ finalTokens: number;
114
+ /** What happened: 'trimmed' (to 50%) or 'removed' (dropped entirely) */
115
+ action: 'trimmed' | 'removed';
116
+ }
117
+ /**
118
+ * Load a role-specific fragment file from config/roles/{role}/fragments/{fragmentName}.md.
119
+ * Returns null if the file doesn't exist.
120
+ *
121
+ * @param projectRoot - Project root path (where config/ lives)
122
+ * @param role - Agent role (e.g. 'orchestrator')
123
+ * @param fragmentName - Fragment file name without .md extension
124
+ * @returns Fragment content string or null
125
+ */
126
+ export declare function loadRoleFragment(projectRoot: string, role: string, fragmentName: string): string | null;
92
127
  /**
93
128
  * Estimate token count from a string.
94
129
  * Uses the rough heuristic of ~4 characters per token (suitable for English/code mix).
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-module.interface.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-module.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC5B,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,WAAW,CAAC,EAAE,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,cAAc,CAAC;IACtE,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,YAAY,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACvC,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IACjC,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,YAAY;IAC5B,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,WAAW,EAAE,OAAO,CAAC;IACrB,yDAAyD;IACzD,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IAC7C,8CAA8C;IAC9C,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAInD"}
1
+ {"version":3,"file":"prompt-module.interface.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-module.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC5B,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,WAAW,CAAC,EAAE,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,cAAc,CAAC;IACtE,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,YAAY,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACvC,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IACjC,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,YAAY;IAC5B,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,WAAW,EAAE,OAAO,CAAC;IACrB,yDAAyD;IACzD,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IAC7C,8CAA8C;IAC9C,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7C;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,2DAA2D;IAC3D,SAAS,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC/B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAYf;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAInD"}
@@ -7,6 +7,29 @@
7
7
  * Modules are assembled in priority order (1 = highest, assembled first).
8
8
  * Non-compactable modules are never truncated when token budget is tight.
9
9
  */
10
+ /**
11
+ * Load a role-specific fragment file from config/roles/{role}/fragments/{fragmentName}.md.
12
+ * Returns null if the file doesn't exist.
13
+ *
14
+ * @param projectRoot - Project root path (where config/ lives)
15
+ * @param role - Agent role (e.g. 'orchestrator')
16
+ * @param fragmentName - Fragment file name without .md extension
17
+ * @returns Fragment content string or null
18
+ */
19
+ export function loadRoleFragment(projectRoot, role, fragmentName) {
20
+ try {
21
+ const fs = require('fs');
22
+ const path = require('path');
23
+ const fragmentPath = path.join(projectRoot, 'config', 'roles', role, 'fragments', `${fragmentName}.md`);
24
+ if (fs.existsSync(fragmentPath)) {
25
+ return fs.readFileSync(fragmentPath, 'utf-8');
26
+ }
27
+ }
28
+ catch {
29
+ // Fragment not found — fall back to inline content
30
+ }
31
+ return null;
32
+ }
10
33
  /**
11
34
  * Estimate token count from a string.
12
35
  * Uses the rough heuristic of ~4 characters per token (suitable for English/code mix).
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-module.interface.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-module.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwFH;;;;;;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
+ {"version":3,"file":"prompt-module.interface.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-module.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmHH;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC/B,WAAmB,EACnB,IAAY,EACZ,YAAoB;IAEpB,IAAI,CAAC;QACJ,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7B,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 +1 @@
1
- {"version":3,"file":"recovery.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/recovery.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,YAAY;IAClD,IAAI,SAAc;IAClB,QAAQ,SAAK;IACb,SAAS,SAAO;IAChB,WAAW,UAAS;IAEpB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI7C;;;;;OAKG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;CA4BlD"}
1
+ {"version":3,"file":"recovery.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/recovery.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAoB,MAAM,8BAA8B,CAAC;AAE5F;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,YAAY;IAClD,IAAI,SAAc;IAClB,QAAQ,SAAK;IACb,SAAS,SAAO;IAChB,WAAW,UAAS;IAEpB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI7C;;;;;OAKG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;CAoClD"}
@@ -1,3 +1,4 @@
1
+ import { loadRoleFragment } from './prompt-module.interface.js';
1
2
  /**
2
3
  * Recovery module — unified session recovery protocol.
3
4
  *
@@ -31,6 +32,13 @@ export class RecoveryModule {
31
32
  * @returns Formatted markdown recovery section
32
33
  */
33
34
  async build(config) {
35
+ // Try loading role-specific fragment (orchestrator has a different startup flow)
36
+ if (config.role === 'orchestrator') {
37
+ const fragment = loadRoleFragment(config.projectRoot, config.role, 'recovery');
38
+ if (fragment) {
39
+ return fragment;
40
+ }
41
+ }
34
42
  const agentId = config.sessionName;
35
43
  const role = config.role;
36
44
  const projectPath = config.projectPath || config.projectRoot;
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/recovery.module.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,cAAc;IAC1B,IAAI,GAAG,UAAU,CAAC;IAClB,QAAQ,GAAG,CAAC,CAAC;IACb,SAAS,GAAG,GAAG,CAAC;IAChB,WAAW,GAAG,KAAK,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,OAAqB;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,MAAoB;QAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC;QAC7D,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;QAE1C,OAAO;;;;;;OAMF,UAAU,wCAAwC,OAAO,gBAAgB,IAAI,4FAA4F,WAAW;;;;;OAKpL,UAAU,gDAAgD,OAAO,kBAAkB,IAAI,oBAAoB,WAAW;;;;;;;;;8GASf,CAAC;IAC9G,CAAC;CACD"}
1
+ {"version":3,"file":"recovery.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/recovery.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE5F;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,cAAc;IAC1B,IAAI,GAAG,UAAU,CAAC;IAClB,QAAQ,GAAG,CAAC,CAAC;IACb,SAAS,GAAG,GAAG,CAAC;IAChB,WAAW,GAAG,KAAK,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,OAAqB;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,MAAoB;QAC/B,iFAAiF;QACjF,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC/E,IAAI,QAAQ,EAAE,CAAC;gBACd,OAAO,QAAQ,CAAC;YACjB,CAAC;QACF,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC;QAC7D,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;QAE1C,OAAO;;;;;;OAMF,UAAU,wCAAwC,OAAO,gBAAgB,IAAI,4FAA4F,WAAW;;;;;OAKpL,UAAU,gDAAgD,OAAO,kBAAkB,IAAI,oBAAoB,WAAW;;;;;;;;;8GASf,CAAC;IAC9G,CAAC;CACD"}
@@ -21,6 +21,7 @@ export declare class SoulModule implements PromptModule {
21
21
  shouldInclude(_config: ModuleConfig): boolean;
22
22
  /**
23
23
  * Build the soul section by resolving the soul file from the resolution chain.
24
+ * If self-improvement data exists, appends a Self-Awareness section.
24
25
  *
25
26
  * @param config - Module configuration with role and project details
26
27
  * @returns Formatted markdown soul section
@@ -56,5 +57,14 @@ export declare class SoulModule implements PromptModule {
56
57
  * @returns Formatted soul section
57
58
  */
58
59
  private formatSoul;
60
+ /**
61
+ * Build the Self-Awareness section from self-improvement data.
62
+ * Reads growth areas, self-model (blind spots), and prediction calibration.
63
+ * Kept under ~200 tokens.
64
+ *
65
+ * @param sessionName - Agent session name
66
+ * @returns Self-awareness markdown section, or null if no data exists
67
+ */
68
+ private buildSelfAwareness;
59
69
  }
60
70
  //# sourceMappingURL=soul.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"soul.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/soul.module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAS1E;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,YAAW,YAAY;IAC9C,IAAI,SAAU;IACd,QAAQ,SAAK;IACb,SAAS,SAAO;IAChB,WAAW,UAAS;IAEpB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI7C;;;;;OAKG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlD;;;;;OAKG;YACW,WAAW;IAgCzB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;CAIlB"}
1
+ {"version":3,"file":"soul.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/soul.module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAS1E;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,YAAW,YAAY;IAC9C,IAAI,SAAU;IACd,QAAQ,SAAK;IACb,SAAS,SAAO;IAChB,WAAW,UAAS;IAEpB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI7C;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAMlD;;;;;OAKG;YACW,WAAW;IAgCzB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAKlB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;CA+C1B"}
@@ -30,13 +30,15 @@ export class SoulModule {
30
30
  }
31
31
  /**
32
32
  * Build the soul section by resolving the soul file from the resolution chain.
33
+ * If self-improvement data exists, appends a Self-Awareness section.
33
34
  *
34
35
  * @param config - Module configuration with role and project details
35
36
  * @returns Formatted markdown soul section
36
37
  */
37
38
  async build(config) {
38
39
  const soul = await this.resolveSoul(config);
39
- return soul;
40
+ const selfAwareness = this.buildSelfAwareness(config.sessionName);
41
+ return selfAwareness ? `${soul}\n\n${selfAwareness}` : soul;
40
42
  }
41
43
  /**
42
44
  * Resolve the soul content by checking each level of the resolution chain.
@@ -108,5 +110,57 @@ export class SoulModule {
108
110
  const sourceLabel = source === 'member' ? 'personal' : source === 'role' ? 'role default' : 'archetype';
109
111
  return `## Your Soul\n_Source: ${sourceLabel}_\n\n${content}`;
110
112
  }
113
+ /**
114
+ * Build the Self-Awareness section from self-improvement data.
115
+ * Reads growth areas, self-model (blind spots), and prediction calibration.
116
+ * Kept under ~200 tokens.
117
+ *
118
+ * @param sessionName - Agent session name
119
+ * @returns Self-awareness markdown section, or null if no data exists
120
+ */
121
+ buildSelfAwareness(sessionName) {
122
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '/tmp';
123
+ const agentDir = path.join(homeDir, '.crewly', 'agents', sessionName);
124
+ const lines = [];
125
+ // Growth areas — top 3
126
+ try {
127
+ const raw = fs.readFileSync(path.join(agentDir, 'growth-areas.json'), 'utf-8');
128
+ const data = JSON.parse(raw);
129
+ if (data.areas && data.areas.length > 0) {
130
+ const top3 = data.areas.slice(0, 3);
131
+ lines.push('**Growth Areas:**');
132
+ for (const area of top3) {
133
+ lines.push(`- ${area.area} (${area.progress})`);
134
+ }
135
+ }
136
+ }
137
+ catch { /* no growth areas data */ }
138
+ // Blind spots — top 2
139
+ try {
140
+ const raw = fs.readFileSync(path.join(agentDir, 'self-model.json'), 'utf-8');
141
+ const data = JSON.parse(raw);
142
+ if (data.blindSpots && data.blindSpots.length > 0) {
143
+ const top2 = data.blindSpots.slice(0, 2);
144
+ lines.push('**Blind Spots:**');
145
+ for (const spot of top2) {
146
+ lines.push(`- ${spot.description}`);
147
+ }
148
+ }
149
+ }
150
+ catch { /* no self-model data */ }
151
+ // Prediction calibration score
152
+ try {
153
+ const raw = fs.readFileSync(path.join(agentDir, 'predictions.json'), 'utf-8');
154
+ const data = JSON.parse(raw);
155
+ if (data.calibrationScore > 0) {
156
+ lines.push(`**Prediction Calibration:** ${Math.round(data.calibrationScore * 100)}%`);
157
+ }
158
+ }
159
+ catch { /* no predictions data */ }
160
+ if (lines.length === 0) {
161
+ return null;
162
+ }
163
+ return `## Self-Awareness\n${lines.join('\n')}`;
164
+ }
111
165
  }
112
166
  //# sourceMappingURL=soul.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"soul.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/soul.module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"soul.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/soul.module.ts"],"names":[],"mappings":"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"}