crewly 1.4.39 → 1.4.41
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/constants.ts +5 -11
- package/config/orchestrator_tasks/prompts/orchestrator-prompt.md +11 -12
- 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/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/skills/_common/lib.sh +2 -8
- package/config/skills/agent/chrome-attach/SKILL.md +84 -0
- package/config/skills/agent/core/complete-task/execute.sh +1 -1
- package/config/skills/agent/vnc-browser/SKILL.md +140 -0
- 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-agents-md.md +18 -7
- package/config/templates/agent-claude-md.md +1 -1
- package/config/templates/agent-gemini-md.md +18 -7
- package/config/templates/content-generation-team/team-config.json +1 -2
- package/dist/backend/backend/src/constants.d.ts +5 -5
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +3 -3
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts +0 -44
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.js +0 -74
- package/dist/backend/backend/src/controllers/approvals/approvals.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.routes.d.ts +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/approvals/approvals.routes.js +2 -4
- package/dist/backend/backend/src/controllers/approvals/approvals.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.js +3 -3
- package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +0 -12
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +0 -13
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +16 -16
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +3 -18
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +1 -20
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +8 -64
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.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-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 +145 -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 +129 -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 +202 -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 +112 -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 +86 -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 +212 -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 +100 -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 +23 -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 +61 -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 +60 -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 +112 -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/cloud/cloud-auth.middleware.d.ts +12 -0
- package/dist/backend/backend/src/services/cloud/cloud-auth.middleware.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-auth.middleware.js +41 -6
- package/dist/backend/backend/src/services/cloud/cloud-auth.middleware.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +7 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +9 -0
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +3 -24
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- 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/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +0 -12
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +0 -28
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +18 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +98 -10
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/config/constants.d.ts +5 -11
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +5 -11
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +5 -5
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +3 -3
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +7 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +9 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/cli/src/index.js +0 -8
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/config/constants.d.ts +5 -11
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +5 -11
- package/dist/cli/config/constants.js.map +1 -1
- package/frontend/dist/assets/{index-e8b8498d.js → index-7357dbef.js} +101 -101
- package/frontend/dist/assets/{index-8772d402.css → index-a393888e.css} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/config/templates/content-generation-team/norms/brand-guidelines.md +0 -75
- package/config/templates/content-generation-team/norms/content-review.md +0 -74
- package/config/templates/dev-fullstack/norms/code-commit-sop.md +0 -114
- package/config/templates/dev-fullstack/norms/quality-gates.md +0 -62
- package/config/templates/research-analysis/norms/research-methodology.md +0 -77
- package/config/templates/research-analysis/norms/source-citation.md +0 -85
- package/config/templates/social-media-ops/norms/engagement-rules.md +0 -35
- package/config/templates/social-media-ops/norms/posting-schedule.md +0 -43
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { LoggerService } from '../../core/logger.service.js';
|
|
2
|
+
import { estimateTokens, } from './prompt-module.interface.js';
|
|
3
|
+
import { IdentityModule } from './identity.module.js';
|
|
4
|
+
import { SkillsReferenceModule } from './skills-reference.module.js';
|
|
5
|
+
import { MemoryReferenceModule } from './memory-reference.module.js';
|
|
6
|
+
import { TeamReferenceModule } from './team-reference.module.js';
|
|
7
|
+
import { ProjectReferenceModule } from './project-reference.module.js';
|
|
8
|
+
/**
|
|
9
|
+
* Default total token budget for all prompt modules combined.
|
|
10
|
+
* Modules exceeding this budget are skipped (compactable ones only).
|
|
11
|
+
*/
|
|
12
|
+
const DEFAULT_TOKEN_BUDGET = 25000;
|
|
13
|
+
/**
|
|
14
|
+
* Separator between prompt modules in assembled output.
|
|
15
|
+
*/
|
|
16
|
+
const MODULE_SEPARATOR = '\n\n---\n\n';
|
|
17
|
+
/**
|
|
18
|
+
* Service that orchestrates the assembly of prompt modules into a complete agent prompt.
|
|
19
|
+
*
|
|
20
|
+
* Responsibilities:
|
|
21
|
+
* - Registers and manages prompt modules
|
|
22
|
+
* - Assembles modules in priority order
|
|
23
|
+
* - Enforces per-module and total token budgets
|
|
24
|
+
* - Supports Trusted Zone (non-compactable) vs Flexible Zone (compactable) modules
|
|
25
|
+
* - Works across all runtime types (claude-code, gemini-cli, crewly-agent)
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const assembler = new PromptAssemblyService();
|
|
30
|
+
* const prompt = await assembler.assemble({
|
|
31
|
+
* sessionName: 'crewly-dev-001',
|
|
32
|
+
* memberId: 'uuid-123',
|
|
33
|
+
* role: 'developer',
|
|
34
|
+
* projectPath: '/path/to/project',
|
|
35
|
+
* agentSkillsPath: '/path/to/skills/agent',
|
|
36
|
+
* tlSkillsPath: '/path/to/skills/team-leader',
|
|
37
|
+
* projectRoot: '/path/to/project',
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export class PromptAssemblyService {
|
|
42
|
+
logger;
|
|
43
|
+
modules = [];
|
|
44
|
+
totalTokenBudget;
|
|
45
|
+
constructor(tokenBudget = DEFAULT_TOKEN_BUDGET) {
|
|
46
|
+
this.logger = LoggerService.getInstance().createComponentLogger('PromptAssemblyService');
|
|
47
|
+
this.totalTokenBudget = tokenBudget;
|
|
48
|
+
this.registerDefaultModules();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Register the default set of prompt modules.
|
|
52
|
+
* Called automatically in constructor. Additional modules
|
|
53
|
+
* can be added via addModule().
|
|
54
|
+
*/
|
|
55
|
+
registerDefaultModules() {
|
|
56
|
+
this.modules = [
|
|
57
|
+
new IdentityModule(),
|
|
58
|
+
new MemoryReferenceModule(),
|
|
59
|
+
new SkillsReferenceModule(),
|
|
60
|
+
new TeamReferenceModule(),
|
|
61
|
+
new ProjectReferenceModule(),
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Add a custom prompt module to the assembly pipeline.
|
|
66
|
+
*
|
|
67
|
+
* @param module - Module to add
|
|
68
|
+
*/
|
|
69
|
+
addModule(module) {
|
|
70
|
+
this.modules.push(module);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Remove a module by name.
|
|
74
|
+
*
|
|
75
|
+
* @param name - Name of the module to remove
|
|
76
|
+
*/
|
|
77
|
+
removeModule(name) {
|
|
78
|
+
this.modules = this.modules.filter((m) => m.name !== name);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get all registered modules (for inspection/testing).
|
|
82
|
+
*
|
|
83
|
+
* @returns Array of registered prompt modules
|
|
84
|
+
*/
|
|
85
|
+
getModules() {
|
|
86
|
+
return [...this.modules];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get or set the total token budget.
|
|
90
|
+
*
|
|
91
|
+
* @param budget - Optional new budget to set
|
|
92
|
+
* @returns Current token budget
|
|
93
|
+
*/
|
|
94
|
+
tokenBudget(budget) {
|
|
95
|
+
if (budget !== undefined) {
|
|
96
|
+
this.totalTokenBudget = budget;
|
|
97
|
+
}
|
|
98
|
+
return this.totalTokenBudget;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Assemble all applicable prompt modules into a single prompt string.
|
|
102
|
+
*
|
|
103
|
+
* Modules are processed in priority order (lowest number first).
|
|
104
|
+
* Non-compactable modules are always included (Trusted Zone).
|
|
105
|
+
* Compactable modules are skipped if the token budget is exceeded (Flexible Zone).
|
|
106
|
+
*
|
|
107
|
+
* @param config - Configuration with all context needed by modules
|
|
108
|
+
* @returns Assembled prompt string with all module sections
|
|
109
|
+
*/
|
|
110
|
+
async assemble(config) {
|
|
111
|
+
const results = [];
|
|
112
|
+
let totalTokens = 0;
|
|
113
|
+
// Sort modules by priority (ascending — lower number = higher priority)
|
|
114
|
+
const sorted = [...this.modules].sort((a, b) => a.priority - b.priority);
|
|
115
|
+
for (const module of sorted) {
|
|
116
|
+
// Check if module should be included
|
|
117
|
+
if (!module.shouldInclude(config)) {
|
|
118
|
+
this.logger.debug(`Module '${module.name}' skipped (shouldInclude=false)`, {
|
|
119
|
+
sessionName: config.sessionName,
|
|
120
|
+
});
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
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
|
+
try {
|
|
134
|
+
const content = await module.build(config);
|
|
135
|
+
if (content && content.trim()) {
|
|
136
|
+
const tokens = estimateTokens(content);
|
|
137
|
+
results.push({
|
|
138
|
+
name: module.name,
|
|
139
|
+
content: content.trim(),
|
|
140
|
+
estimatedTokens: tokens,
|
|
141
|
+
});
|
|
142
|
+
totalTokens += tokens;
|
|
143
|
+
this.logger.debug(`Module '${module.name}' built`, {
|
|
144
|
+
sessionName: config.sessionName,
|
|
145
|
+
tokens,
|
|
146
|
+
totalTokens,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
this.logger.error(`Module '${module.name}' failed to build`, {
|
|
152
|
+
sessionName: config.sessionName,
|
|
153
|
+
error: error instanceof Error ? error.message : String(error),
|
|
154
|
+
});
|
|
155
|
+
// Non-compactable modules failing is critical
|
|
156
|
+
if (!module.compactable) {
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
// Compactable modules failing is logged but not fatal
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
this.logger.info('Prompt assembly complete', {
|
|
163
|
+
sessionName: config.sessionName,
|
|
164
|
+
moduleCount: results.length,
|
|
165
|
+
totalTokens,
|
|
166
|
+
budget: this.totalTokenBudget,
|
|
167
|
+
modules: results.map((r) => r.name),
|
|
168
|
+
});
|
|
169
|
+
return results.map((r) => r.content).join(MODULE_SEPARATOR);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Assemble modules and return detailed results with per-module metadata.
|
|
173
|
+
* Useful for debugging and token budget analysis.
|
|
174
|
+
*
|
|
175
|
+
* @param config - Configuration with all context needed by modules
|
|
176
|
+
* @returns Array of module build results with token estimates
|
|
177
|
+
*/
|
|
178
|
+
async assembleWithDetails(config) {
|
|
179
|
+
const results = [];
|
|
180
|
+
let totalTokens = 0;
|
|
181
|
+
const sorted = [...this.modules].sort((a, b) => a.priority - b.priority);
|
|
182
|
+
for (const module of sorted) {
|
|
183
|
+
if (!module.shouldInclude(config))
|
|
184
|
+
continue;
|
|
185
|
+
if (module.compactable && totalTokens + module.maxTokens > this.totalTokenBudget) {
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
try {
|
|
189
|
+
const content = await module.build(config);
|
|
190
|
+
if (content && content.trim()) {
|
|
191
|
+
const tokens = estimateTokens(content);
|
|
192
|
+
results.push({
|
|
193
|
+
name: module.name,
|
|
194
|
+
content: content.trim(),
|
|
195
|
+
estimatedTokens: tokens,
|
|
196
|
+
});
|
|
197
|
+
totalTokens += tokens;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
if (!module.compactable)
|
|
202
|
+
throw error;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
prompt: results.map((r) => r.content).join(MODULE_SEPARATOR),
|
|
207
|
+
modules: results,
|
|
208
|
+
totalTokens,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=prompt-assembly.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-assembly.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-assembly.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface for modular prompt components.
|
|
3
|
+
*
|
|
4
|
+
* Each module is responsible for one concern (identity, skills, team, etc.)
|
|
5
|
+
* and produces a markdown string that gets assembled into the final agent prompt.
|
|
6
|
+
*
|
|
7
|
+
* Modules are assembled in priority order (1 = highest, assembled first).
|
|
8
|
+
* Non-compactable modules are never truncated when token budget is tight.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Configuration passed to each prompt module during assembly.
|
|
12
|
+
* Contains all the context needed to build module-specific content.
|
|
13
|
+
*/
|
|
14
|
+
export interface ModuleConfig {
|
|
15
|
+
/** Agent's session name (e.g. 'crewly-product-sam-217bfbbf') */
|
|
16
|
+
sessionName: string;
|
|
17
|
+
/** Agent's member ID (UUID) */
|
|
18
|
+
memberId: string;
|
|
19
|
+
/** Agent's role (e.g. 'developer', 'orchestrator') */
|
|
20
|
+
role: string;
|
|
21
|
+
/** Team ID this agent belongs to */
|
|
22
|
+
teamId?: string;
|
|
23
|
+
/** Absolute path to the project directory */
|
|
24
|
+
projectPath?: string;
|
|
25
|
+
/** Runtime type determines formatting and injection strategy */
|
|
26
|
+
runtimeType?: 'claude-code' | 'gemini-cli' | 'codex' | 'crewly-agent';
|
|
27
|
+
/** Whether this agent can delegate tasks to subordinates */
|
|
28
|
+
canDelegate?: boolean;
|
|
29
|
+
/** Resolved subordinate details for TL agents */
|
|
30
|
+
subordinates?: SubordinateInfoCompat[];
|
|
31
|
+
/** Absolute path to agent skill scripts */
|
|
32
|
+
agentSkillsPath: string;
|
|
33
|
+
/** Absolute path to team-leader skill scripts */
|
|
34
|
+
tlSkillsPath: string;
|
|
35
|
+
/** Absolute path to the project root (where config/ lives) */
|
|
36
|
+
projectRoot: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Subordinate info compatible with the existing SubordinateInfo type
|
|
40
|
+
*/
|
|
41
|
+
export interface SubordinateInfoCompat {
|
|
42
|
+
name: string;
|
|
43
|
+
sessionName: string;
|
|
44
|
+
role: string;
|
|
45
|
+
memberId: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Result of building a single prompt module.
|
|
49
|
+
* Includes the content and metadata for budget tracking.
|
|
50
|
+
*/
|
|
51
|
+
export interface ModuleBuildResult {
|
|
52
|
+
/** Module name */
|
|
53
|
+
name: string;
|
|
54
|
+
/** Generated markdown content */
|
|
55
|
+
content: string;
|
|
56
|
+
/** Estimated token count of the content */
|
|
57
|
+
estimatedTokens: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Interface that all prompt modules must implement.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* class IdentityModule implements PromptModule {
|
|
65
|
+
* name = 'identity';
|
|
66
|
+
* priority = 1;
|
|
67
|
+
* maxTokens = 150;
|
|
68
|
+
* compactable = false;
|
|
69
|
+
*
|
|
70
|
+
* shouldInclude(_config: ModuleConfig): boolean { return true; }
|
|
71
|
+
*
|
|
72
|
+
* async build(config: ModuleConfig): Promise<string> {
|
|
73
|
+
* return `## Your Identity\n- **Session Name:** ${config.sessionName}`;
|
|
74
|
+
* }
|
|
75
|
+
* }
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export interface PromptModule {
|
|
79
|
+
/** Module name (used for logging and debugging) */
|
|
80
|
+
name: string;
|
|
81
|
+
/** Assembly priority (1 = highest, assembled first) */
|
|
82
|
+
priority: number;
|
|
83
|
+
/** Token soft cap for this module */
|
|
84
|
+
maxTokens: number;
|
|
85
|
+
/** Whether this module can be skipped when token budget is tight */
|
|
86
|
+
compactable: boolean;
|
|
87
|
+
/** Condition check — return false to skip this module */
|
|
88
|
+
shouldInclude(config: ModuleConfig): boolean;
|
|
89
|
+
/** Build module content as markdown string */
|
|
90
|
+
build(config: ModuleConfig): Promise<string>;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Estimate token count from a string.
|
|
94
|
+
* Uses the rough heuristic of ~4 characters per token (suitable for English/code mix).
|
|
95
|
+
*
|
|
96
|
+
* @param text - Text to estimate tokens for
|
|
97
|
+
* @returns Estimated token count
|
|
98
|
+
*/
|
|
99
|
+
export declare function estimateTokens(text: string): number;
|
|
100
|
+
//# sourceMappingURL=prompt-module.interface.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface for modular prompt components.
|
|
3
|
+
*
|
|
4
|
+
* Each module is responsible for one concern (identity, skills, team, etc.)
|
|
5
|
+
* and produces a markdown string that gets assembled into the final agent prompt.
|
|
6
|
+
*
|
|
7
|
+
* Modules are assembled in priority order (1 = highest, assembled first).
|
|
8
|
+
* Non-compactable modules are never truncated when token budget is tight.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Estimate token count from a string.
|
|
12
|
+
* Uses the rough heuristic of ~4 characters per token (suitable for English/code mix).
|
|
13
|
+
*
|
|
14
|
+
* @param text - Text to estimate tokens for
|
|
15
|
+
* @returns Estimated token count
|
|
16
|
+
*/
|
|
17
|
+
export function estimateTokens(text) {
|
|
18
|
+
if (!text)
|
|
19
|
+
return 0;
|
|
20
|
+
// ~4 chars per token is a reasonable estimate for English + code
|
|
21
|
+
return Math.ceil(text.length / 4);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=prompt-module.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-module.interface.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-module.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwFH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,iEAAiE;IACjE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { PromptModule, ModuleConfig } from './prompt-module.interface.js';
|
|
2
|
+
/**
|
|
3
|
+
* Recovery module — unified session recovery protocol.
|
|
4
|
+
*
|
|
5
|
+
* Consolidates the restart/recovery flow that was previously scattered
|
|
6
|
+
* across prompt-builder.service.ts buildSessionRecoverySection(),
|
|
7
|
+
* agent-registration.service.ts hardcoded commands, role prompts
|
|
8
|
+
* (Session Recovery Protocol), and session-handoff.service.ts.
|
|
9
|
+
*
|
|
10
|
+
* Produces the mandatory startup sequence: recall → get-my-context → assess.
|
|
11
|
+
* This module is non-compactable because skipping recovery causes
|
|
12
|
+
* duplicate work and lost context.
|
|
13
|
+
*
|
|
14
|
+
* Sources: Path A Step 9, prompt-builder buildSessionRecoverySection(),
|
|
15
|
+
* developer/prompt.md §Session Recovery Protocol.
|
|
16
|
+
*/
|
|
17
|
+
export declare class RecoveryModule implements PromptModule {
|
|
18
|
+
name: string;
|
|
19
|
+
priority: number;
|
|
20
|
+
maxTokens: number;
|
|
21
|
+
compactable: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Always included — every agent needs session recovery.
|
|
24
|
+
*/
|
|
25
|
+
shouldInclude(_config: ModuleConfig): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Build the session recovery protocol with executable bash commands.
|
|
28
|
+
*
|
|
29
|
+
* @param config - Module configuration with agent identity
|
|
30
|
+
* @returns Formatted markdown recovery section
|
|
31
|
+
*/
|
|
32
|
+
build(config: ModuleConfig): Promise<string>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=recovery.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/recovery.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,YAAY;IAClD,IAAI,SAAc;IAClB,QAAQ,SAAK;IACb,SAAS,SAAO;IAChB,WAAW,UAAS;IAEpB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI7C;;;;;OAKG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;CA4BlD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recovery module — unified session recovery protocol.
|
|
3
|
+
*
|
|
4
|
+
* Consolidates the restart/recovery flow that was previously scattered
|
|
5
|
+
* across prompt-builder.service.ts buildSessionRecoverySection(),
|
|
6
|
+
* agent-registration.service.ts hardcoded commands, role prompts
|
|
7
|
+
* (Session Recovery Protocol), and session-handoff.service.ts.
|
|
8
|
+
*
|
|
9
|
+
* Produces the mandatory startup sequence: recall → get-my-context → assess.
|
|
10
|
+
* This module is non-compactable because skipping recovery causes
|
|
11
|
+
* duplicate work and lost context.
|
|
12
|
+
*
|
|
13
|
+
* Sources: Path A Step 9, prompt-builder buildSessionRecoverySection(),
|
|
14
|
+
* developer/prompt.md §Session Recovery Protocol.
|
|
15
|
+
*/
|
|
16
|
+
export class RecoveryModule {
|
|
17
|
+
name = 'recovery';
|
|
18
|
+
priority = 2;
|
|
19
|
+
maxTokens = 600;
|
|
20
|
+
compactable = false;
|
|
21
|
+
/**
|
|
22
|
+
* Always included — every agent needs session recovery.
|
|
23
|
+
*/
|
|
24
|
+
shouldInclude(_config) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Build the session recovery protocol with executable bash commands.
|
|
29
|
+
*
|
|
30
|
+
* @param config - Module configuration with agent identity
|
|
31
|
+
* @returns Formatted markdown recovery section
|
|
32
|
+
*/
|
|
33
|
+
async build(config) {
|
|
34
|
+
const agentId = config.sessionName;
|
|
35
|
+
const role = config.role;
|
|
36
|
+
const projectPath = config.projectPath || config.projectRoot;
|
|
37
|
+
const skillsPath = config.agentSkillsPath;
|
|
38
|
+
return `## Session Recovery Protocol (MANDATORY)
|
|
39
|
+
|
|
40
|
+
**IMMEDIATELY after registering**, you MUST execute the following context recovery steps before saying "Ready" or accepting any tasks. This ensures you recover context from previous sessions and avoid repeating work or missing ongoing tasks.
|
|
41
|
+
|
|
42
|
+
### Step 1: Recall previous knowledge
|
|
43
|
+
\`\`\`bash
|
|
44
|
+
bash ${skillsPath}/core/recall/execute.sh '{"agentId":"${agentId}","context":"${role} session startup, recent tasks, unfinished work, blockers, key decisions","projectPath":"${projectPath}"}'
|
|
45
|
+
\`\`\`
|
|
46
|
+
|
|
47
|
+
### Step 2: Load your full context
|
|
48
|
+
\`\`\`bash
|
|
49
|
+
bash ${skillsPath}/core/get-my-context/execute.sh '{"agentId":"${agentId}","agentRole":"${role}","projectPath":"${projectPath}"}'
|
|
50
|
+
\`\`\`
|
|
51
|
+
|
|
52
|
+
### Step 3: Assess and report
|
|
53
|
+
After reviewing the results from Steps 1 and 2:
|
|
54
|
+
1. **Check for unfinished work** — If you find tasks that were in progress but not completed, note them
|
|
55
|
+
2. **Check for pending blockers** — If previous sessions recorded blockers, note them
|
|
56
|
+
3. **Report status** — Include a brief summary of recovered context in your first status message
|
|
57
|
+
|
|
58
|
+
**Do NOT skip these steps.** Context recovery prevents duplicate work and ensures continuity across sessions.`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=recovery.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/recovery.module.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,cAAc;IAC1B,IAAI,GAAG,UAAU,CAAC;IAClB,QAAQ,GAAG,CAAC,CAAC;IACb,SAAS,GAAG,GAAG,CAAC;IAChB,WAAW,GAAG,KAAK,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,OAAqB;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,MAAoB;QAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC;QAC7D,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;QAE1C,OAAO;;;;;;OAMF,UAAU,wCAAwC,OAAO,gBAAgB,IAAI,4FAA4F,WAAW;;;;;OAKpL,UAAU,gDAAgD,OAAO,kBAAkB,IAAI,oBAAoB,WAAW;;;;;;;;;8GASf,CAAC;IAC9G,CAAC;CACD"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ContextLoaderConfig } from './context-assembly.service.js';
|
|
2
|
+
/**
|
|
3
|
+
* Scheduled messages context loader — loads agent's scheduled checks/messages state.
|
|
4
|
+
*
|
|
5
|
+
* This is a context module (dynamic data), registered with ContextAssemblyService
|
|
6
|
+
* rather than PromptAssemblyService. It loads the current scheduled checks and
|
|
7
|
+
* messages for the agent so they have awareness of pending/recurring tasks.
|
|
8
|
+
*
|
|
9
|
+
* Token budget: 0-500
|
|
10
|
+
*
|
|
11
|
+
* Sources: SchedulerService recurring/one-time checks.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Scheduled check data shape for the loader (minimal subset of ScheduledCheck).
|
|
15
|
+
*/
|
|
16
|
+
export interface ScheduledCheckInfo {
|
|
17
|
+
/** Unique check ID */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Target session name */
|
|
20
|
+
targetSession: string;
|
|
21
|
+
/** Message content */
|
|
22
|
+
message: string;
|
|
23
|
+
/** Next scheduled execution time (ISO string) */
|
|
24
|
+
scheduledFor: string;
|
|
25
|
+
/** Interval in minutes for recurring checks */
|
|
26
|
+
intervalMinutes?: number;
|
|
27
|
+
/** Whether this check repeats */
|
|
28
|
+
isRecurring: boolean;
|
|
29
|
+
/** Human-readable label */
|
|
30
|
+
label?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Provider function type that retrieves scheduled checks for an agent.
|
|
34
|
+
* This allows the loader to be decoupled from the SchedulerService directly.
|
|
35
|
+
*/
|
|
36
|
+
export type ScheduledChecksProvider = (agentId: string) => ScheduledCheckInfo[];
|
|
37
|
+
/**
|
|
38
|
+
* Create a scheduled messages context loader function.
|
|
39
|
+
*
|
|
40
|
+
* The loader is created with a provider function that retrieves the current
|
|
41
|
+
* scheduled checks. This allows dependency injection and easy testing.
|
|
42
|
+
*
|
|
43
|
+
* @param getChecks - Provider function that returns scheduled checks for an agent
|
|
44
|
+
* @returns Context loader function compatible with ContextAssemblyService
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const loader = createScheduledMessagesLoader((agentId) => {
|
|
49
|
+
* return schedulerService.getChecksForAgent(agentId);
|
|
50
|
+
* });
|
|
51
|
+
* contextAssembly.registerLoader('scheduled_messages', loader);
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function createScheduledMessagesLoader(getChecks: ScheduledChecksProvider): (config: ContextLoaderConfig) => Promise<string>;
|
|
55
|
+
//# sourceMappingURL=scheduled-messages.loader.d.ts.map
|
package/dist/backend/backend/src/services/ai/prompt-modules/scheduled-messages.loader.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduled-messages.loader.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/scheduled-messages.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,kBAAkB,EAAE,CAAC;AAEhF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC5C,SAAS,EAAE,uBAAuB,GAChC,CAAC,MAAM,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,CA6ClD"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a scheduled messages context loader function.
|
|
3
|
+
*
|
|
4
|
+
* The loader is created with a provider function that retrieves the current
|
|
5
|
+
* scheduled checks. This allows dependency injection and easy testing.
|
|
6
|
+
*
|
|
7
|
+
* @param getChecks - Provider function that returns scheduled checks for an agent
|
|
8
|
+
* @returns Context loader function compatible with ContextAssemblyService
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const loader = createScheduledMessagesLoader((agentId) => {
|
|
13
|
+
* return schedulerService.getChecksForAgent(agentId);
|
|
14
|
+
* });
|
|
15
|
+
* contextAssembly.registerLoader('scheduled_messages', loader);
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function createScheduledMessagesLoader(getChecks) {
|
|
19
|
+
return async (config) => {
|
|
20
|
+
const checks = getChecks(config.agentId);
|
|
21
|
+
if (!checks || checks.length === 0) {
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
const recurring = checks.filter((c) => c.isRecurring);
|
|
25
|
+
const oneTime = checks.filter((c) => !c.isRecurring);
|
|
26
|
+
const lines = ['## Scheduled Messages'];
|
|
27
|
+
if (recurring.length > 0) {
|
|
28
|
+
lines.push('');
|
|
29
|
+
lines.push('### Recurring Checks');
|
|
30
|
+
lines.push('| Label | Interval | Next Run | Message |');
|
|
31
|
+
lines.push('|-------|----------|----------|---------|');
|
|
32
|
+
for (const check of recurring) {
|
|
33
|
+
const label = check.label || check.id;
|
|
34
|
+
const interval = check.intervalMinutes ? `${check.intervalMinutes}m` : 'N/A';
|
|
35
|
+
const nextRun = formatTime(check.scheduledFor);
|
|
36
|
+
const message = truncateMessage(check.message);
|
|
37
|
+
lines.push(`| ${label} | ${interval} | ${nextRun} | ${message} |`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (oneTime.length > 0) {
|
|
41
|
+
lines.push('');
|
|
42
|
+
lines.push('### One-Time Checks');
|
|
43
|
+
lines.push('| Label | Scheduled For | Message |');
|
|
44
|
+
lines.push('|-------|---------------|---------|');
|
|
45
|
+
for (const check of oneTime) {
|
|
46
|
+
const label = check.label || check.id;
|
|
47
|
+
const scheduledFor = formatTime(check.scheduledFor);
|
|
48
|
+
const message = truncateMessage(check.message);
|
|
49
|
+
lines.push(`| ${label} | ${scheduledFor} | ${message} |`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
lines.push('');
|
|
53
|
+
lines.push(`_Total: ${checks.length} scheduled (${recurring.length} recurring, ${oneTime.length} one-time)_`);
|
|
54
|
+
return lines.join('\n');
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Format an ISO timestamp to a short human-readable time.
|
|
59
|
+
*
|
|
60
|
+
* @param isoString - ISO 8601 timestamp
|
|
61
|
+
* @returns Formatted time string (e.g., "14:30" or "Mar 19 14:30")
|
|
62
|
+
*/
|
|
63
|
+
function formatTime(isoString) {
|
|
64
|
+
try {
|
|
65
|
+
const date = new Date(isoString);
|
|
66
|
+
const now = new Date();
|
|
67
|
+
const isToday = date.getFullYear() === now.getFullYear() &&
|
|
68
|
+
date.getMonth() === now.getMonth() &&
|
|
69
|
+
date.getDate() === now.getDate();
|
|
70
|
+
if (isToday) {
|
|
71
|
+
return date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false });
|
|
72
|
+
}
|
|
73
|
+
return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }) +
|
|
74
|
+
' ' +
|
|
75
|
+
date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false });
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return isoString;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Truncate a message for table display.
|
|
83
|
+
*
|
|
84
|
+
* @param message - Full message string
|
|
85
|
+
* @param maxLength - Maximum length before truncation
|
|
86
|
+
* @returns Truncated message
|
|
87
|
+
*/
|
|
88
|
+
function truncateMessage(message, maxLength = 60) {
|
|
89
|
+
if (!message)
|
|
90
|
+
return '';
|
|
91
|
+
const singleLine = message.replace(/\n/g, ' ').trim();
|
|
92
|
+
if (singleLine.length <= maxLength)
|
|
93
|
+
return singleLine;
|
|
94
|
+
return singleLine.substring(0, maxLength - 3) + '...';
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=scheduled-messages.loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduled-messages.loader.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/scheduled-messages.loader.ts"],"names":[],"mappings":"AAwCA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,6BAA6B,CAC5C,SAAkC;IAElC,OAAO,KAAK,EAAE,MAA2B,EAAmB,EAAE;QAC7D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAErD,MAAM,KAAK,GAAa,CAAC,uBAAuB,CAAC,CAAC;QAElD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YACxD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC7E,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,QAAQ,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,CAAC;YACpE,CAAC;QACF,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YAClD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACpD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,YAAY,MAAM,OAAO,IAAI,CAAC,CAAC;YAC3D,CAAC;QACF,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,eAAe,SAAS,CAAC,MAAM,eAAe,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;QAE9G,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,SAAiB;IACpC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GACZ,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE;YACxC,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;QAElC,IAAI,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;YAC1E,GAAG;YACH,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1F,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,OAAe,EAAE,YAAoB,EAAE;IAC/D,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,IAAI,UAAU,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,UAAU,CAAC;IACtD,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PromptModule, ModuleConfig } from './prompt-module.interface.js';
|
|
2
|
+
/**
|
|
3
|
+
* Skills reference module — tells the agent how to discover and use skills.
|
|
4
|
+
*
|
|
5
|
+
* Consolidates skill authorization, communication skill references,
|
|
6
|
+
* and catalog location into a single module.
|
|
7
|
+
*
|
|
8
|
+
* Sources: Path A Step 1+6, Path B Section 8, Path C skill instructions.
|
|
9
|
+
*/
|
|
10
|
+
export declare class SkillsReferenceModule implements PromptModule {
|
|
11
|
+
name: string;
|
|
12
|
+
priority: number;
|
|
13
|
+
maxTokens: number;
|
|
14
|
+
compactable: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Always included — agents need to know how to use skills.
|
|
17
|
+
*/
|
|
18
|
+
shouldInclude(_config: ModuleConfig): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Build the skills reference section with catalog location,
|
|
21
|
+
* commonly-used skills, and memory tool instructions.
|
|
22
|
+
*
|
|
23
|
+
* @param config - Module configuration with skill paths
|
|
24
|
+
* @returns Formatted markdown skills reference section
|
|
25
|
+
*/
|
|
26
|
+
build(config: ModuleConfig): Promise<string>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=skills-reference.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-reference.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/skills-reference.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE1E;;;;;;;GAOG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IACzD,IAAI,SAAuB;IAC3B,QAAQ,SAAK;IACb,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;CAqClD"}
|