crewly 1.4.40 → 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.
- package/config/orchestrator_tasks/prompts/orchestrator-prompt.md +11 -11
- package/config/roles/architect/prompt.md +1 -5
- package/config/roles/backend-developer/prompt.md +1 -5
- package/config/roles/content-strategist/prompt.md +1 -5
- package/config/roles/designer/prompt.md +1 -5
- package/config/roles/developer/prompt.md +1 -7
- package/config/roles/developer/soul.md +18 -0
- package/config/roles/frontend-developer/prompt.md +1 -5
- package/config/roles/fullstack-dev/prompt.md +1 -5
- package/config/roles/generalist/prompt.md +1 -7
- package/config/roles/ops/prompt.md +1 -7
- 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/roles/orchestrator/prompt.md +44 -44
- package/config/roles/orchestrator/soul.md +18 -0
- package/config/roles/product-manager/prompt.md +1 -5
- package/config/roles/qa/prompt.md +1 -5
- package/config/roles/qa-engineer/prompt.md +1 -5
- package/config/roles/researcher/prompt.md +1 -5
- package/config/roles/researcher/soul.md +18 -0
- package/config/roles/sales/prompt.md +1 -5
- package/config/roles/support/prompt.md +1 -5
- package/config/roles/team-leader/prompt.md +2 -6
- package/config/roles/tpm/prompt.md +1 -5
- package/config/roles/ux-designer/prompt.md +1 -5
- package/config/souls/developer.md +30 -0
- package/config/souls/orchestrator.md +30 -0
- package/config/souls/researcher.md +30 -0
- package/config/templates/agent-claude-md.md +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 +18 -7
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +16 -4
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.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 +11 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.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 +46 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +151 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.d.ts +145 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.js +232 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/identity.module.d.ts +28 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/identity.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/identity.module.js +47 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/identity.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +22 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js +26 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts +28 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/learning-reference.module.js +55 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/learning-reference.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts +44 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.js +120 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +28 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.js +46 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/project-reference.module.d.ts +29 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/project-reference.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/project-reference.module.js +50 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +103 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +305 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +135 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js +46 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts +34 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +69 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/scheduled-messages.loader.d.ts +55 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/scheduled-messages.loader.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/scheduled-messages.loader.js +96 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/scheduled-messages.loader.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +28 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +65 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts +70 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js +166 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/team-reference.module.d.ts +54 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/team-reference.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/team-reference.module.js +149 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/team-reference.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +28 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +53 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -0
- 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/prompt/prompt-generator.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/prompt/prompt-generator.service.js +9 -11
- package/dist/backend/backend/src/services/prompt/prompt-generator.service.js.map +1 -1
- 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 +3 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for a context loader.
|
|
3
|
+
*/
|
|
4
|
+
export interface ContextLoaderConfig {
|
|
5
|
+
/** Agent ID (session name) */
|
|
6
|
+
agentId: string;
|
|
7
|
+
/** Agent's role */
|
|
8
|
+
role: string;
|
|
9
|
+
/** Project path */
|
|
10
|
+
projectPath?: string;
|
|
11
|
+
/** Team ID */
|
|
12
|
+
teamId?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Result of loading a context module.
|
|
16
|
+
*/
|
|
17
|
+
export interface ContextLoadResult {
|
|
18
|
+
/** Context module name */
|
|
19
|
+
name: string;
|
|
20
|
+
/** Loaded content */
|
|
21
|
+
content: string;
|
|
22
|
+
/** Estimated token count */
|
|
23
|
+
estimatedTokens: number;
|
|
24
|
+
/** When this context was loaded */
|
|
25
|
+
loadedAt: Date;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A context loader function that retrieves dynamic data for a context module.
|
|
29
|
+
*/
|
|
30
|
+
export type ContextLoader = (config: ContextLoaderConfig) => Promise<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Service that manages runtime context assembly for agents.
|
|
33
|
+
*
|
|
34
|
+
* Unlike prompt modules (static, assembled once at startup), context modules
|
|
35
|
+
* contain dynamic data that can be refreshed mid-session. Context is compactable
|
|
36
|
+
* by F13 ContextWindowMonitor.
|
|
37
|
+
*
|
|
38
|
+
* Responsibilities:
|
|
39
|
+
* - Registers context loaders for different data sources
|
|
40
|
+
* - Loads and assembles context on demand
|
|
41
|
+
* - Supports mid-session refresh without full rebuild
|
|
42
|
+
* - Enforces context token budgets
|
|
43
|
+
* - Tracks loaded context for cache/refresh management
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const contextService = new ContextAssemblyService();
|
|
48
|
+
*
|
|
49
|
+
* contextService.registerLoader('memory', async (config) => {
|
|
50
|
+
* const memoryService = MemoryService.getInstance();
|
|
51
|
+
* return memoryService.getFullContext(config.agentId, config.projectPath);
|
|
52
|
+
* });
|
|
53
|
+
*
|
|
54
|
+
* const context = await contextService.loadAll({
|
|
55
|
+
* agentId: 'crewly-dev-001',
|
|
56
|
+
* role: 'developer',
|
|
57
|
+
* projectPath: '/path/to/project',
|
|
58
|
+
* });
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare class ContextAssemblyService {
|
|
62
|
+
private logger;
|
|
63
|
+
private loaders;
|
|
64
|
+
private cache;
|
|
65
|
+
private totalTokenBudget;
|
|
66
|
+
constructor(tokenBudget?: number);
|
|
67
|
+
/**
|
|
68
|
+
* Register a context loader for a named context module.
|
|
69
|
+
*
|
|
70
|
+
* @param name - Context module name (e.g., 'memory', 'team_context')
|
|
71
|
+
* @param loader - Async function that loads context data
|
|
72
|
+
*/
|
|
73
|
+
registerLoader(name: string, loader: ContextLoader): void;
|
|
74
|
+
/**
|
|
75
|
+
* Remove a registered context loader.
|
|
76
|
+
*
|
|
77
|
+
* @param name - Context module name to remove
|
|
78
|
+
*/
|
|
79
|
+
removeLoader(name: string): void;
|
|
80
|
+
/**
|
|
81
|
+
* Get names of all registered loaders.
|
|
82
|
+
*
|
|
83
|
+
* @returns Array of registered loader names
|
|
84
|
+
*/
|
|
85
|
+
getLoaderNames(): string[];
|
|
86
|
+
/**
|
|
87
|
+
* Load a single context module by name.
|
|
88
|
+
*
|
|
89
|
+
* @param name - Context module name
|
|
90
|
+
* @param config - Loader configuration
|
|
91
|
+
* @param useCache - Whether to return cached result if available (default: false)
|
|
92
|
+
* @returns Context load result or null if loader not found
|
|
93
|
+
*/
|
|
94
|
+
load(name: string, config: ContextLoaderConfig, useCache?: boolean): Promise<ContextLoadResult | null>;
|
|
95
|
+
/**
|
|
96
|
+
* Load all registered context modules and assemble into a single string.
|
|
97
|
+
*
|
|
98
|
+
* @param config - Loader configuration
|
|
99
|
+
* @returns Assembled context string
|
|
100
|
+
*/
|
|
101
|
+
loadAll(config: ContextLoaderConfig): Promise<string>;
|
|
102
|
+
/**
|
|
103
|
+
* Refresh a specific context module (reload from source).
|
|
104
|
+
*
|
|
105
|
+
* @param name - Context module name to refresh
|
|
106
|
+
* @param config - Loader configuration
|
|
107
|
+
* @returns Refreshed context or null
|
|
108
|
+
*/
|
|
109
|
+
refresh(name: string, config: ContextLoaderConfig): Promise<ContextLoadResult | null>;
|
|
110
|
+
/**
|
|
111
|
+
* Clear all cached context data.
|
|
112
|
+
*/
|
|
113
|
+
clearCache(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Get cached context by name (without reloading).
|
|
116
|
+
*
|
|
117
|
+
* @param name - Context module name
|
|
118
|
+
* @returns Cached result or null
|
|
119
|
+
*/
|
|
120
|
+
getCached(name: string): ContextLoadResult | null;
|
|
121
|
+
/**
|
|
122
|
+
* Get or set the total token budget.
|
|
123
|
+
*
|
|
124
|
+
* @param budget - Optional new budget to set
|
|
125
|
+
* @returns Current token budget
|
|
126
|
+
*/
|
|
127
|
+
tokenBudget(budget?: number): number;
|
|
128
|
+
/**
|
|
129
|
+
* Refresh context with a reduced budget — triggered by ContextWindowMonitorService
|
|
130
|
+
* (Feature F13) when context window usage exceeds the compaction threshold (80%).
|
|
131
|
+
*
|
|
132
|
+
* Only reloads the highest-priority loaders that fit within the reduced budget.
|
|
133
|
+
* Loaders are loaded in registration order; once budget is exhausted, remaining
|
|
134
|
+
* loaders are skipped.
|
|
135
|
+
*
|
|
136
|
+
* Integration: ContextWindowMonitorService calls this via
|
|
137
|
+
* `contextAssembly.compactRefresh(config, reducedBudget)` when usage > 80%.
|
|
138
|
+
*
|
|
139
|
+
* @param config - Loader configuration
|
|
140
|
+
* @param reducedBudget - Reduced token budget for compacted context
|
|
141
|
+
* @returns Assembled context string within reduced budget
|
|
142
|
+
*/
|
|
143
|
+
compactRefresh(config: ContextLoaderConfig, reducedBudget: number): Promise<string>;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=context-assembly.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-assembly.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/context-assembly.service.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,QAAQ,EAAE,IAAI,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAO7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,sBAAsB;IAClC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,gBAAgB,CAAS;gBAErB,WAAW,GAAE,MAA+B;IAKxD;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAIzD;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC;;;;OAIG;IACH,cAAc,IAAI,MAAM,EAAE;IAI1B;;;;;;;OAOG;IACG,IAAI,CACT,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,GAAE,OAAe,GACvB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAoCpC;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAkD3D;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAK3F;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAIjD;;;;;OAKG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAOpC;;;;;;;;;;;;;;OAcG;IACG,cAAc,CACnB,MAAM,EAAE,mBAAmB,EAC3B,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC;CAoBlB"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { LoggerService } from '../../core/logger.service.js';
|
|
2
|
+
import { estimateTokens } from './prompt-module.interface.js';
|
|
3
|
+
/**
|
|
4
|
+
* Default total token budget for all context modules combined.
|
|
5
|
+
*/
|
|
6
|
+
const DEFAULT_CONTEXT_BUDGET = 15000;
|
|
7
|
+
/**
|
|
8
|
+
* Service that manages runtime context assembly for agents.
|
|
9
|
+
*
|
|
10
|
+
* Unlike prompt modules (static, assembled once at startup), context modules
|
|
11
|
+
* contain dynamic data that can be refreshed mid-session. Context is compactable
|
|
12
|
+
* by F13 ContextWindowMonitor.
|
|
13
|
+
*
|
|
14
|
+
* Responsibilities:
|
|
15
|
+
* - Registers context loaders for different data sources
|
|
16
|
+
* - Loads and assembles context on demand
|
|
17
|
+
* - Supports mid-session refresh without full rebuild
|
|
18
|
+
* - Enforces context token budgets
|
|
19
|
+
* - Tracks loaded context for cache/refresh management
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const contextService = new ContextAssemblyService();
|
|
24
|
+
*
|
|
25
|
+
* contextService.registerLoader('memory', async (config) => {
|
|
26
|
+
* const memoryService = MemoryService.getInstance();
|
|
27
|
+
* return memoryService.getFullContext(config.agentId, config.projectPath);
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* const context = await contextService.loadAll({
|
|
31
|
+
* agentId: 'crewly-dev-001',
|
|
32
|
+
* role: 'developer',
|
|
33
|
+
* projectPath: '/path/to/project',
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class ContextAssemblyService {
|
|
38
|
+
logger;
|
|
39
|
+
loaders = new Map();
|
|
40
|
+
cache = new Map();
|
|
41
|
+
totalTokenBudget;
|
|
42
|
+
constructor(tokenBudget = DEFAULT_CONTEXT_BUDGET) {
|
|
43
|
+
this.logger = LoggerService.getInstance().createComponentLogger('ContextAssemblyService');
|
|
44
|
+
this.totalTokenBudget = tokenBudget;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Register a context loader for a named context module.
|
|
48
|
+
*
|
|
49
|
+
* @param name - Context module name (e.g., 'memory', 'team_context')
|
|
50
|
+
* @param loader - Async function that loads context data
|
|
51
|
+
*/
|
|
52
|
+
registerLoader(name, loader) {
|
|
53
|
+
this.loaders.set(name, loader);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Remove a registered context loader.
|
|
57
|
+
*
|
|
58
|
+
* @param name - Context module name to remove
|
|
59
|
+
*/
|
|
60
|
+
removeLoader(name) {
|
|
61
|
+
this.loaders.delete(name);
|
|
62
|
+
this.cache.delete(name);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get names of all registered loaders.
|
|
66
|
+
*
|
|
67
|
+
* @returns Array of registered loader names
|
|
68
|
+
*/
|
|
69
|
+
getLoaderNames() {
|
|
70
|
+
return Array.from(this.loaders.keys());
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Load a single context module by name.
|
|
74
|
+
*
|
|
75
|
+
* @param name - Context module name
|
|
76
|
+
* @param config - Loader configuration
|
|
77
|
+
* @param useCache - Whether to return cached result if available (default: false)
|
|
78
|
+
* @returns Context load result or null if loader not found
|
|
79
|
+
*/
|
|
80
|
+
async load(name, config, useCache = false) {
|
|
81
|
+
if (useCache && this.cache.has(name)) {
|
|
82
|
+
return this.cache.get(name) || null;
|
|
83
|
+
}
|
|
84
|
+
const loader = this.loaders.get(name);
|
|
85
|
+
if (!loader) {
|
|
86
|
+
this.logger.warn(`No context loader registered for '${name}'`);
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const content = await loader(config);
|
|
91
|
+
const result = {
|
|
92
|
+
name,
|
|
93
|
+
content: content || '',
|
|
94
|
+
estimatedTokens: estimateTokens(content || ''),
|
|
95
|
+
loadedAt: new Date(),
|
|
96
|
+
};
|
|
97
|
+
this.cache.set(name, result);
|
|
98
|
+
this.logger.debug(`Context '${name}' loaded`, {
|
|
99
|
+
agentId: config.agentId,
|
|
100
|
+
tokens: result.estimatedTokens,
|
|
101
|
+
});
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
this.logger.error(`Context loader '${name}' failed`, {
|
|
106
|
+
agentId: config.agentId,
|
|
107
|
+
error: error instanceof Error ? error.message : String(error),
|
|
108
|
+
});
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Load all registered context modules and assemble into a single string.
|
|
114
|
+
*
|
|
115
|
+
* @param config - Loader configuration
|
|
116
|
+
* @returns Assembled context string
|
|
117
|
+
*/
|
|
118
|
+
async loadAll(config) {
|
|
119
|
+
const results = [];
|
|
120
|
+
let totalTokens = 0;
|
|
121
|
+
for (const [name, loader] of this.loaders.entries()) {
|
|
122
|
+
try {
|
|
123
|
+
const content = await loader(config);
|
|
124
|
+
if (content && content.trim()) {
|
|
125
|
+
const tokens = estimateTokens(content);
|
|
126
|
+
// Skip if adding this context would exceed budget
|
|
127
|
+
if (totalTokens + tokens > this.totalTokenBudget) {
|
|
128
|
+
this.logger.info(`Context '${name}' skipped (budget exceeded)`, {
|
|
129
|
+
agentId: config.agentId,
|
|
130
|
+
currentTokens: totalTokens,
|
|
131
|
+
contextTokens: tokens,
|
|
132
|
+
budget: this.totalTokenBudget,
|
|
133
|
+
});
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const result = {
|
|
137
|
+
name,
|
|
138
|
+
content: content.trim(),
|
|
139
|
+
estimatedTokens: tokens,
|
|
140
|
+
loadedAt: new Date(),
|
|
141
|
+
};
|
|
142
|
+
results.push(result);
|
|
143
|
+
this.cache.set(name, result);
|
|
144
|
+
totalTokens += tokens;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
this.logger.error(`Context loader '${name}' failed`, {
|
|
149
|
+
agentId: config.agentId,
|
|
150
|
+
error: error instanceof Error ? error.message : String(error),
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
this.logger.info('Context assembly complete', {
|
|
155
|
+
agentId: config.agentId,
|
|
156
|
+
loaderCount: results.length,
|
|
157
|
+
totalTokens,
|
|
158
|
+
budget: this.totalTokenBudget,
|
|
159
|
+
modules: results.map((r) => r.name),
|
|
160
|
+
});
|
|
161
|
+
return results.map((r) => r.content).join('\n\n---\n\n');
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Refresh a specific context module (reload from source).
|
|
165
|
+
*
|
|
166
|
+
* @param name - Context module name to refresh
|
|
167
|
+
* @param config - Loader configuration
|
|
168
|
+
* @returns Refreshed context or null
|
|
169
|
+
*/
|
|
170
|
+
async refresh(name, config) {
|
|
171
|
+
this.cache.delete(name);
|
|
172
|
+
return this.load(name, config, false);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Clear all cached context data.
|
|
176
|
+
*/
|
|
177
|
+
clearCache() {
|
|
178
|
+
this.cache.clear();
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get cached context by name (without reloading).
|
|
182
|
+
*
|
|
183
|
+
* @param name - Context module name
|
|
184
|
+
* @returns Cached result or null
|
|
185
|
+
*/
|
|
186
|
+
getCached(name) {
|
|
187
|
+
return this.cache.get(name) || null;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get or set the total token budget.
|
|
191
|
+
*
|
|
192
|
+
* @param budget - Optional new budget to set
|
|
193
|
+
* @returns Current token budget
|
|
194
|
+
*/
|
|
195
|
+
tokenBudget(budget) {
|
|
196
|
+
if (budget !== undefined) {
|
|
197
|
+
this.totalTokenBudget = budget;
|
|
198
|
+
}
|
|
199
|
+
return this.totalTokenBudget;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Refresh context with a reduced budget — triggered by ContextWindowMonitorService
|
|
203
|
+
* (Feature F13) when context window usage exceeds the compaction threshold (80%).
|
|
204
|
+
*
|
|
205
|
+
* Only reloads the highest-priority loaders that fit within the reduced budget.
|
|
206
|
+
* Loaders are loaded in registration order; once budget is exhausted, remaining
|
|
207
|
+
* loaders are skipped.
|
|
208
|
+
*
|
|
209
|
+
* Integration: ContextWindowMonitorService calls this via
|
|
210
|
+
* `contextAssembly.compactRefresh(config, reducedBudget)` when usage > 80%.
|
|
211
|
+
*
|
|
212
|
+
* @param config - Loader configuration
|
|
213
|
+
* @param reducedBudget - Reduced token budget for compacted context
|
|
214
|
+
* @returns Assembled context string within reduced budget
|
|
215
|
+
*/
|
|
216
|
+
async compactRefresh(config, reducedBudget) {
|
|
217
|
+
const originalBudget = this.totalTokenBudget;
|
|
218
|
+
this.totalTokenBudget = reducedBudget;
|
|
219
|
+
this.logger.info('Compact refresh triggered', {
|
|
220
|
+
agentId: config.agentId,
|
|
221
|
+
originalBudget,
|
|
222
|
+
reducedBudget,
|
|
223
|
+
});
|
|
224
|
+
// Clear cache to force fresh loads
|
|
225
|
+
this.clearCache();
|
|
226
|
+
const result = await this.loadAll(config);
|
|
227
|
+
// Restore original budget
|
|
228
|
+
this.totalTokenBudget = originalBudget;
|
|
229
|
+
return result;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=context-assembly.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-assembly.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/context-assembly.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PromptModule, ModuleConfig } from './prompt-module.interface.js';
|
|
2
|
+
/**
|
|
3
|
+
* Identity module — provides the agent's core identification.
|
|
4
|
+
*
|
|
5
|
+
* Assembles session name, member ID, role, team, and project path
|
|
6
|
+
* into a structured identity section. This is the highest-priority
|
|
7
|
+
* module and is never truncated.
|
|
8
|
+
*
|
|
9
|
+
* Sources: Path A Step 2+10, Path B Section 6, Path C header.
|
|
10
|
+
*/
|
|
11
|
+
export declare class IdentityModule implements PromptModule {
|
|
12
|
+
name: string;
|
|
13
|
+
priority: number;
|
|
14
|
+
maxTokens: number;
|
|
15
|
+
compactable: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Always included — every agent needs an identity.
|
|
18
|
+
*/
|
|
19
|
+
shouldInclude(_config: ModuleConfig): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Build the identity section with all available fields.
|
|
22
|
+
*
|
|
23
|
+
* @param config - Module configuration with agent details
|
|
24
|
+
* @returns Formatted markdown identity section
|
|
25
|
+
*/
|
|
26
|
+
build(config: ModuleConfig): Promise<string>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=identity.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/identity.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE1E;;;;;;;;GAQG;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;CAqBlD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identity module — provides the agent's core identification.
|
|
3
|
+
*
|
|
4
|
+
* Assembles session name, member ID, role, team, and project path
|
|
5
|
+
* into a structured identity section. This is the highest-priority
|
|
6
|
+
* module and is never truncated.
|
|
7
|
+
*
|
|
8
|
+
* Sources: Path A Step 2+10, Path B Section 6, Path C header.
|
|
9
|
+
*/
|
|
10
|
+
export class IdentityModule {
|
|
11
|
+
name = 'identity';
|
|
12
|
+
priority = 1;
|
|
13
|
+
maxTokens = 150;
|
|
14
|
+
compactable = false;
|
|
15
|
+
/**
|
|
16
|
+
* Always included — every agent needs an identity.
|
|
17
|
+
*/
|
|
18
|
+
shouldInclude(_config) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build the identity section with all available fields.
|
|
23
|
+
*
|
|
24
|
+
* @param config - Module configuration with agent details
|
|
25
|
+
* @returns Formatted markdown identity section
|
|
26
|
+
*/
|
|
27
|
+
async build(config) {
|
|
28
|
+
const lines = ['## Your Identity'];
|
|
29
|
+
if (config.sessionName) {
|
|
30
|
+
lines.push(`- **Session Name:** ${config.sessionName}`);
|
|
31
|
+
}
|
|
32
|
+
if (config.memberId) {
|
|
33
|
+
lines.push(`- **Member ID:** ${config.memberId}`);
|
|
34
|
+
}
|
|
35
|
+
if (config.role) {
|
|
36
|
+
lines.push(`- **Role:** ${config.role}`);
|
|
37
|
+
}
|
|
38
|
+
if (config.teamId) {
|
|
39
|
+
lines.push(`- **Team:** ${config.teamId}`);
|
|
40
|
+
}
|
|
41
|
+
if (config.projectPath) {
|
|
42
|
+
lines.push(`- **Project Path:** ${config.projectPath}`);
|
|
43
|
+
}
|
|
44
|
+
return lines.join('\n');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=identity.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/identity.module.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;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,KAAK,GAAa,CAAC,kBAAkB,CAAC,CAAC;QAE7C,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;CACD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Modules — Modular prompt assembly system.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all prompt module interfaces, implementations,
|
|
5
|
+
* and assembly services from a single entry point.
|
|
6
|
+
*/
|
|
7
|
+
export { PromptModule, ModuleConfig, SubordinateInfoCompat, ModuleBuildResult, AssemblyReport, TruncatedModuleInfo, estimateTokens, loadRoleFragment, } from './prompt-module.interface.js';
|
|
8
|
+
export { IdentityModule } from './identity.module.js';
|
|
9
|
+
export { SoulModule } from './soul.module.js';
|
|
10
|
+
export { SkillsReferenceModule } from './skills-reference.module.js';
|
|
11
|
+
export { MemoryReferenceModule } from './memory-reference.module.js';
|
|
12
|
+
export { TeamReferenceModule } from './team-reference.module.js';
|
|
13
|
+
export { ProjectReferenceModule } from './project-reference.module.js';
|
|
14
|
+
export { UserProfileReferenceModule } from './user-profile-reference.module.js';
|
|
15
|
+
export { LearningReferenceModule } from './learning-reference.module.js';
|
|
16
|
+
export { CommunicationModule } from './communication.module.js';
|
|
17
|
+
export { RecoveryModule } from './recovery.module.js';
|
|
18
|
+
export { LifecycleModule } from './lifecycle.module.js';
|
|
19
|
+
export { createScheduledMessagesLoader, ScheduledCheckInfo, ScheduledChecksProvider, } from './scheduled-messages.loader.js';
|
|
20
|
+
export { PromptAssemblyService } from './prompt-assembly.service.js';
|
|
21
|
+
export { ContextAssemblyService } from './context-assembly.service.js';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GAChB,MAAM,8BAA8B,CAAC;AAGtC,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;AAGxD,OAAO,EACN,6BAA6B,EAC7B,kBAAkB,EAClB,uBAAuB,GACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Modules — Modular prompt assembly system.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all prompt module interfaces, implementations,
|
|
5
|
+
* and assembly services from a single entry point.
|
|
6
|
+
*/
|
|
7
|
+
// Interface and utilities
|
|
8
|
+
export { estimateTokens, loadRoleFragment, } from './prompt-module.interface.js';
|
|
9
|
+
// Prompt modules
|
|
10
|
+
export { IdentityModule } from './identity.module.js';
|
|
11
|
+
export { SoulModule } from './soul.module.js';
|
|
12
|
+
export { SkillsReferenceModule } from './skills-reference.module.js';
|
|
13
|
+
export { MemoryReferenceModule } from './memory-reference.module.js';
|
|
14
|
+
export { TeamReferenceModule } from './team-reference.module.js';
|
|
15
|
+
export { ProjectReferenceModule } from './project-reference.module.js';
|
|
16
|
+
export { UserProfileReferenceModule } from './user-profile-reference.module.js';
|
|
17
|
+
export { LearningReferenceModule } from './learning-reference.module.js';
|
|
18
|
+
export { CommunicationModule } from './communication.module.js';
|
|
19
|
+
export { RecoveryModule } from './recovery.module.js';
|
|
20
|
+
export { LifecycleModule } from './lifecycle.module.js';
|
|
21
|
+
// Context loaders
|
|
22
|
+
export { createScheduledMessagesLoader, } from './scheduled-messages.loader.js';
|
|
23
|
+
// Assembly services
|
|
24
|
+
export { PromptAssemblyService } from './prompt-assembly.service.js';
|
|
25
|
+
export { ContextAssemblyService } from './context-assembly.service.js';
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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,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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PromptModule, ModuleConfig } from './prompt-module.interface.js';
|
|
2
|
+
/**
|
|
3
|
+
* Learning reference module — tells the agent how to access and leverage past learnings.
|
|
4
|
+
*
|
|
5
|
+
* Provides instructions for using record-learning, recalling past experiences,
|
|
6
|
+
* and applying lessons learned from previous sessions.
|
|
7
|
+
*
|
|
8
|
+
* Sources: LearningAccumulationService, record-learning skill.
|
|
9
|
+
*/
|
|
10
|
+
export declare class LearningReferenceModule implements PromptModule {
|
|
11
|
+
name: string;
|
|
12
|
+
priority: number;
|
|
13
|
+
maxTokens: number;
|
|
14
|
+
compactable: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Always included — agents should know how to learn from experience.
|
|
17
|
+
*/
|
|
18
|
+
shouldInclude(_config: ModuleConfig): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Build the learning reference section with instructions
|
|
21
|
+
* on how to record and recall past learnings.
|
|
22
|
+
*
|
|
23
|
+
* @param config - Module configuration with agent skill paths
|
|
24
|
+
* @returns Formatted markdown learning reference section
|
|
25
|
+
*/
|
|
26
|
+
build(config: ModuleConfig): Promise<string>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=learning-reference.module.d.ts.map
|
package/dist/backend/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-reference.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/learning-reference.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE1E;;;;;;;GAOG;AACH,qBAAa,uBAAwB,YAAW,YAAY;IAC3D,IAAI,SAAyB;IAC7B,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;CA2BlD"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Learning reference module — tells the agent how to access and leverage past learnings.
|
|
3
|
+
*
|
|
4
|
+
* Provides instructions for using record-learning, recalling past experiences,
|
|
5
|
+
* and applying lessons learned from previous sessions.
|
|
6
|
+
*
|
|
7
|
+
* Sources: LearningAccumulationService, record-learning skill.
|
|
8
|
+
*/
|
|
9
|
+
export class LearningReferenceModule {
|
|
10
|
+
name = 'learning_references';
|
|
11
|
+
priority = 10;
|
|
12
|
+
maxTokens = 250;
|
|
13
|
+
compactable = true;
|
|
14
|
+
/**
|
|
15
|
+
* Always included — agents should know how to learn from experience.
|
|
16
|
+
*/
|
|
17
|
+
shouldInclude(_config) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Build the learning reference section with instructions
|
|
22
|
+
* on how to record and recall past learnings.
|
|
23
|
+
*
|
|
24
|
+
* @param config - Module configuration with agent skill paths
|
|
25
|
+
* @returns Formatted markdown learning reference section
|
|
26
|
+
*/
|
|
27
|
+
async build(config) {
|
|
28
|
+
return `## Learning from Experience
|
|
29
|
+
|
|
30
|
+
### Recording Learnings
|
|
31
|
+
When you discover something worth remembering for future sessions, record it immediately:
|
|
32
|
+
\`\`\`bash
|
|
33
|
+
bash ${config.agentSkillsPath}/core/record-learning/execute.sh '{"agentId":"${config.sessionName}","agentRole":"${config.role}","projectPath":"${config.projectPath || ''}","learning":"<what you learned>"}'
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
**When to record:**
|
|
37
|
+
- After resolving a bug — capture the root cause and fix
|
|
38
|
+
- After discovering a code pattern or convention
|
|
39
|
+
- After a failed approach — capture what didn't work and why
|
|
40
|
+
- After completing a task — capture key findings and gotchas
|
|
41
|
+
- When you find something that contradicts your assumptions
|
|
42
|
+
|
|
43
|
+
### Recalling Learnings
|
|
44
|
+
Before starting a task, check what you or other agents have learned:
|
|
45
|
+
\`\`\`bash
|
|
46
|
+
bash ${config.agentSkillsPath}/core/recall/execute.sh '{"agentId":"${config.sessionName}","context":"learnings about <topic>","projectPath":"${config.projectPath || ''}"}'
|
|
47
|
+
\`\`\`
|
|
48
|
+
|
|
49
|
+
### Applying Learnings
|
|
50
|
+
- Check for relevant learnings before repeating an approach that may have failed before
|
|
51
|
+
- Cross-reference learnings from other agents working on the same project
|
|
52
|
+
- Update or correct stale learnings when you discover they no longer apply`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=learning-reference.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-reference.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/learning-reference.module.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,OAAO,uBAAuB;IACnC,IAAI,GAAG,qBAAqB,CAAC;IAC7B,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,OAAO;;;;;OAKF,MAAM,CAAC,eAAe,iDAAiD,MAAM,CAAC,WAAW,kBAAkB,MAAM,CAAC,IAAI,oBAAoB,MAAM,CAAC,WAAW,IAAI,EAAE;;;;;;;;;;;;;OAalK,MAAM,CAAC,eAAe,wCAAwC,MAAM,CAAC,WAAW,wDAAwD,MAAM,CAAC,WAAW,IAAI,EAAE;;;;;;2EAM5F,CAAC;IAC3E,CAAC;CACD"}
|