crewly 1.4.41 → 1.4.43
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/roles/orchestrator/fragments/communication.md +117 -0
- package/config/roles/orchestrator/fragments/lifecycle.md +112 -0
- package/config/roles/orchestrator/fragments/recovery.md +47 -0
- package/config/skills/agent/core/schedule-check/execute.sh +33 -0
- package/config/skills/agent/core/send-message/execute.sh +3 -2
- package/config/templates/agent-agents-md.md +8 -18
- package/config/templates/agent-claude-md.md +2 -2
- package/config/templates/agent-gemini-md.md +8 -17
- package/dist/backend/backend/src/constants.d.ts +4 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +4 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +2 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.routes.js +1 -0
- package/dist/backend/backend/src/controllers/team/team.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 +32 -4
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +23 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +7 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +43 -3
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +5 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +6 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.d.ts +16 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.js +30 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -1
- 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 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.js +8 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +29 -12
- 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 +159 -66
- 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/prompt-module.interface.d.ts +35 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js +23 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +8 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +18 -4
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +58 -24
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts +10 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js +55 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/self-improvement/attention.service.d.ts +74 -0
- package/dist/backend/backend/src/services/ai/self-improvement/attention.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/attention.service.js +132 -0
- package/dist/backend/backend/src/services/ai/self-improvement/attention.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
- package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
- package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/index.d.ts +13 -0
- package/dist/backend/backend/src/services/ai/self-improvement/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/index.js +13 -0
- package/dist/backend/backend/src/services/ai/self-improvement/index.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts +107 -0
- package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.js +183 -0
- package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts +97 -0
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.js +128 -0
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.d.ts +95 -0
- package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.js +116 -0
- package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +4 -1
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js +17 -2
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +9 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +6 -0
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js +19 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +2 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +2 -0
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +4 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +4 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +4 -1
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js +17 -2
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +9 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +2 -0
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,0BAA0B;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,0BAA0B;AAC1B,OAAO,EAON,cAAc,EACd,gBAAgB,GAChB,MAAM,8BAA8B,CAAC;AAEtC,iBAAiB;AACjB,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,kBAAkB;AAClB,OAAO,EACN,6BAA6B,GAG7B,MAAM,gCAAgC,CAAC;AAExC,oBAAoB;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/lifecycle.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"lifecycle.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/lifecycle.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAoB,MAAM,8BAA8B,CAAC;AAE5F;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAgB,YAAW,YAAY;IACnD,IAAI,SAAe;IACnB,QAAQ,SAAM;IACd,SAAS,SAAO;IAChB,WAAW,UAAQ;IAEnB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI7C;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBlD;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAyC1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAwB5B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { loadRoleFragment } from './prompt-module.interface.js';
|
|
1
2
|
/**
|
|
2
3
|
* Lifecycle module — agent lifecycle behaviors and cognitive loop.
|
|
3
4
|
*
|
|
@@ -34,6 +35,13 @@ export class LifecycleModule {
|
|
|
34
35
|
async build(config) {
|
|
35
36
|
const isOrchestrator = config.role === 'orchestrator';
|
|
36
37
|
const isTL = config.canDelegate === true;
|
|
38
|
+
// Try loading role-specific fragment
|
|
39
|
+
if (isOrchestrator) {
|
|
40
|
+
const fragment = loadRoleFragment(config.projectRoot, config.role, 'lifecycle');
|
|
41
|
+
if (fragment) {
|
|
42
|
+
return fragment;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
37
45
|
if (isOrchestrator || isTL) {
|
|
38
46
|
return this.buildFullLifecycle(config);
|
|
39
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/lifecycle.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lifecycle.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/lifecycle.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE5F;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,eAAe;IAC3B,IAAI,GAAG,WAAW,CAAC;IACnB,QAAQ,GAAG,EAAE,CAAC;IACd,SAAS,GAAG,GAAG,CAAC;IAChB,WAAW,GAAG,IAAI,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,OAAqB;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,MAAoB;QAC/B,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC;QAEzC,qCAAqC;QACrC,IAAI,cAAc,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAChF,IAAI,QAAQ,EAAE,CAAC;gBACd,OAAO,QAAQ,CAAC;YACjB,CAAC;QACF,CAAC;QACD,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACK,kBAAkB,CAAC,MAAoB;QAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC;QAE7D,OAAO;;;;;;;;;;;;;;;;;;;OAmBF,UAAU,mDAAmD,WAAW,0EAA0E,WAAW;;;;;;;;;;;;;;0DAc1G,CAAC;IAC1D,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,MAAoB;QAChD,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC;QAE7D,OAAO;;;;;;;;;;;;OAYF,UAAU,iDAAiD,WAAW,kBAAkB,MAAM,CAAC,IAAI,oBAAoB,WAAW;;;;;kEAKvE,CAAC;IAClE,CAAC;CACD"}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import { PromptModule, ModuleConfig, ModuleBuildResult } from './prompt-module.interface.js';
|
|
1
|
+
import { PromptModule, ModuleConfig, ModuleBuildResult, AssemblyReport, TruncatedModuleInfo } from './prompt-module.interface.js';
|
|
2
2
|
/**
|
|
3
3
|
* Service that orchestrates the assembly of prompt modules into a complete agent prompt.
|
|
4
4
|
*
|
|
5
5
|
* Responsibilities:
|
|
6
6
|
* - Registers and manages prompt modules
|
|
7
7
|
* - Assembles modules in priority order
|
|
8
|
-
* - Enforces per-module and total token budgets
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* - Enforces per-module and total token budgets with 2-stage truncation:
|
|
9
|
+
* 1. First pass: build all Trusted Zone (non-compactable) + Flexible Zone modules
|
|
10
|
+
* 2. If over budget: trim lowest-priority compactable modules to 50% of maxTokens
|
|
11
|
+
* 3. If still over budget: remove lowest-priority compactable modules entirely
|
|
12
|
+
* - Returns AssemblyReport with token breakdown and truncation details
|
|
11
13
|
*
|
|
12
14
|
* @example
|
|
13
15
|
* ```typescript
|
|
14
16
|
* const assembler = new PromptAssemblyService();
|
|
15
|
-
* const prompt = await assembler.assemble({
|
|
17
|
+
* const { prompt, report } = await assembler.assemble({
|
|
16
18
|
* sessionName: 'crewly-dev-001',
|
|
17
19
|
* memberId: 'uuid-123',
|
|
18
20
|
* role: 'developer',
|
|
@@ -62,25 +64,40 @@ export declare class PromptAssemblyService {
|
|
|
62
64
|
/**
|
|
63
65
|
* Assemble all applicable prompt modules into a single prompt string.
|
|
64
66
|
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
67
|
+
* Uses 2-stage truncation for compactable modules when over budget:
|
|
68
|
+
* 1. Trim lowest-priority compactable modules to 50% of their content
|
|
69
|
+
* 2. Remove lowest-priority compactable modules entirely
|
|
70
|
+
*
|
|
71
|
+
* Trusted Zone (non-compactable) modules are never truncated or removed.
|
|
68
72
|
*
|
|
69
73
|
* @param config - Configuration with all context needed by modules
|
|
70
|
-
* @returns
|
|
74
|
+
* @returns Object with assembled prompt string and budget report
|
|
71
75
|
*/
|
|
72
|
-
assemble(config: ModuleConfig): Promise<
|
|
76
|
+
assemble(config: ModuleConfig): Promise<{
|
|
77
|
+
prompt: string;
|
|
78
|
+
report: AssemblyReport;
|
|
79
|
+
}>;
|
|
73
80
|
/**
|
|
74
81
|
* Assemble modules and return detailed results with per-module metadata.
|
|
75
|
-
*
|
|
82
|
+
* Convenience wrapper that returns just the report (same as assemble().report).
|
|
76
83
|
*
|
|
77
84
|
* @param config - Configuration with all context needed by modules
|
|
78
|
-
* @returns
|
|
85
|
+
* @returns Assembly details with prompt, modules, and total tokens
|
|
79
86
|
*/
|
|
80
87
|
assembleWithDetails(config: ModuleConfig): Promise<{
|
|
81
88
|
prompt: string;
|
|
82
89
|
modules: ModuleBuildResult[];
|
|
83
90
|
totalTokens: number;
|
|
91
|
+
truncated: TruncatedModuleInfo[];
|
|
84
92
|
}>;
|
|
93
|
+
/**
|
|
94
|
+
* Trim content to a target fraction of its original length.
|
|
95
|
+
* Trims at line boundaries to avoid cutting mid-sentence.
|
|
96
|
+
*
|
|
97
|
+
* @param content - Original content string
|
|
98
|
+
* @param fraction - Target fraction (e.g., 0.5 for 50%)
|
|
99
|
+
* @returns Trimmed content
|
|
100
|
+
*/
|
|
101
|
+
private trimContent;
|
|
85
102
|
}
|
|
86
103
|
//# sourceMappingURL=prompt-assembly.service.d.ts.map
|
package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-assembly.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-assembly.service.ts"],"names":[],"mappings":"AACA,OAAO,EACN,YAAY,EACZ,YAAY,EACZ,iBAAiB,
|
|
1
|
+
{"version":3,"file":"prompt-assembly.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-assembly.service.ts"],"names":[],"mappings":"AACA,OAAO,EACN,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EAEnB,MAAM,8BAA8B,CAAC;AAqCtC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,qBAAqB;IACjC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,gBAAgB,CAAS;gBAErB,WAAW,GAAE,MAA6B;IAMtD;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAgB9B;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIrC;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC;;;;OAIG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;;;;OAKG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAOpC;;;;;;;;;;;OAWG;IACG,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC;IAsJzF;;;;;;OAMG;IACG,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;QACxD,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,mBAAmB,EAAE,CAAC;KACjC,CAAC;IAUF;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;CAkBnB"}
|
|
@@ -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
|
-
*
|
|
25
|
-
*
|
|
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
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
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
|
|
128
|
+
* @returns Object with assembled prompt string and budget report
|
|
109
129
|
*/
|
|
110
130
|
async assemble(config) {
|
|
111
|
-
const
|
|
112
|
-
|
|
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
|
-
|
|
147
|
+
built.push({
|
|
138
148
|
name: module.name,
|
|
139
149
|
content: content.trim(),
|
|
140
150
|
estimatedTokens: tokens,
|
|
141
|
-
|
|
142
|
-
|
|
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:
|
|
165
|
-
totalTokens,
|
|
253
|
+
moduleCount: finalResults.length,
|
|
254
|
+
totalTokens: finalTotalTokens,
|
|
166
255
|
budget: this.totalTokenBudget,
|
|
167
|
-
|
|
256
|
+
truncatedCount: truncated.length,
|
|
257
|
+
modules: finalResults.map((r) => r.name),
|
|
168
258
|
});
|
|
169
|
-
return
|
|
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
|
-
*
|
|
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
|
|
269
|
+
* @returns Assembly details with prompt, modules, and total tokens
|
|
177
270
|
*/
|
|
178
271
|
async assembleWithDetails(config) {
|
|
179
|
-
const
|
|
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
|
|
207
|
-
modules:
|
|
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":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,8BAA8B,CAAC;AAC9E,OAAO,
|
|
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).
|
package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map
CHANGED
|
@@ -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;
|
|
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,
|
|
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":"
|
|
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"}
|