crewly 1.4.41 → 1.4.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/roles/orchestrator/fragments/communication.md +117 -0
- package/config/roles/orchestrator/fragments/lifecycle.md +112 -0
- package/config/roles/orchestrator/fragments/recovery.md +47 -0
- package/config/skills/agent/core/schedule-check/execute.sh +33 -0
- package/config/skills/agent/core/send-message/execute.sh +3 -2
- package/config/templates/agent-agents-md.md +8 -18
- package/config/templates/agent-claude-md.md +2 -2
- package/config/templates/agent-gemini-md.md +8 -17
- package/dist/backend/backend/src/constants.d.ts +4 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +4 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +2 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.routes.js +1 -0
- package/dist/backend/backend/src/controllers/team/team.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +32 -4
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +23 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +7 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +43 -3
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +5 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +6 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.d.ts +16 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.js +30 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/context-assembly.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.js +8 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +29 -12
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +159 -66
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +35 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js +23 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +8 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +18 -4
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +58 -24
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts +10 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js +55 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/self-improvement/attention.service.d.ts +74 -0
- package/dist/backend/backend/src/services/ai/self-improvement/attention.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/attention.service.js +132 -0
- package/dist/backend/backend/src/services/ai/self-improvement/attention.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
- package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
- package/dist/backend/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/index.d.ts +13 -0
- package/dist/backend/backend/src/services/ai/self-improvement/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/index.js +13 -0
- package/dist/backend/backend/src/services/ai/self-improvement/index.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts +107 -0
- package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.js +183 -0
- package/dist/backend/backend/src/services/ai/self-improvement/memory-consolidation.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts +97 -0
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.js +128 -0
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.d.ts +95 -0
- package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.js +116 -0
- package/dist/backend/backend/src/services/ai/self-improvement/self-model.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +4 -1
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js +17 -2
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +9 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +6 -0
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js +19 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +2 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +2 -0
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +4 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +4 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +4 -1
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js +17 -2
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +9 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +2 -0
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,8 +2,9 @@ import { PromptModule, ModuleConfig } from './prompt-module.interface.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Skills reference module — tells the agent how to discover and use skills.
|
|
4
4
|
*
|
|
5
|
-
* Consolidates skill
|
|
6
|
-
* and catalog location into a single module.
|
|
5
|
+
* Consolidates skill references, role-based capability descriptions,
|
|
6
|
+
* and catalog location into a single module. Capabilities are scoped
|
|
7
|
+
* per-role to avoid blanket authorization (#225).
|
|
7
8
|
*
|
|
8
9
|
* Sources: Path A Step 1+6, Path B Section 8, Path C skill instructions.
|
|
9
10
|
*/
|
|
@@ -18,11 +19,24 @@ export declare class SkillsReferenceModule implements PromptModule {
|
|
|
18
19
|
shouldInclude(_config: ModuleConfig): boolean;
|
|
19
20
|
/**
|
|
20
21
|
* Build the skills reference section with catalog location,
|
|
21
|
-
*
|
|
22
|
+
* role-scoped capabilities, and memory tool instructions.
|
|
22
23
|
*
|
|
23
|
-
* @param config - Module configuration with skill paths
|
|
24
|
+
* @param config - Module configuration with skill paths and role
|
|
24
25
|
* @returns Formatted markdown skills reference section
|
|
25
26
|
*/
|
|
26
27
|
build(config: ModuleConfig): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Build the core skills list — available to all roles.
|
|
30
|
+
*/
|
|
31
|
+
private buildCoreSkills;
|
|
32
|
+
/**
|
|
33
|
+
* Build role-scoped capabilities section (#225).
|
|
34
|
+
* Workers get narrow read+execute scope; orchestrators get broader coordination scope.
|
|
35
|
+
*/
|
|
36
|
+
private buildCapabilities;
|
|
37
|
+
/**
|
|
38
|
+
* Build communication and memory tool instructions.
|
|
39
|
+
*/
|
|
40
|
+
private buildCommunication;
|
|
27
41
|
}
|
|
28
42
|
//# sourceMappingURL=skills-reference.module.d.ts.map
|
package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map
CHANGED
|
@@ -1 +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
|
|
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;;;;;;;;GAQG;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;IAQlD;;OAEG;IACH,OAAO,CAAC,eAAe;IA4CvB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAiCzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAkB1B"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Skills reference module — tells the agent how to discover and use skills.
|
|
3
3
|
*
|
|
4
|
-
* Consolidates skill
|
|
5
|
-
* and catalog location into a single module.
|
|
4
|
+
* Consolidates skill references, role-based capability descriptions,
|
|
5
|
+
* and catalog location into a single module. Capabilities are scoped
|
|
6
|
+
* per-role to avoid blanket authorization (#225).
|
|
6
7
|
*
|
|
7
8
|
* Sources: Path A Step 1+6, Path B Section 8, Path C skill instructions.
|
|
8
9
|
*/
|
|
@@ -19,32 +20,65 @@ export class SkillsReferenceModule {
|
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
22
|
* Build the skills reference section with catalog location,
|
|
22
|
-
*
|
|
23
|
+
* role-scoped capabilities, and memory tool instructions.
|
|
23
24
|
*
|
|
24
|
-
* @param config - Module configuration with skill paths
|
|
25
|
+
* @param config - Module configuration with skill paths and role
|
|
25
26
|
* @returns Formatted markdown skills reference section
|
|
26
27
|
*/
|
|
27
28
|
async build(config) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
29
|
+
const coreSkills = this.buildCoreSkills(config);
|
|
30
|
+
const capabilities = this.buildCapabilities(config);
|
|
31
|
+
const communication = this.buildCommunication(config);
|
|
32
|
+
return `${coreSkills}\n\n${capabilities}\n\n${communication}`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Build the core skills list — available to all roles.
|
|
36
|
+
*/
|
|
37
|
+
buildCoreSkills(config) {
|
|
38
|
+
const lines = [
|
|
39
|
+
'## Available Skills',
|
|
40
|
+
'',
|
|
41
|
+
`Bash skills at \`${config.agentSkillsPath}/\`:`,
|
|
42
|
+
'- `core/recall` — retrieve relevant knowledge from memory',
|
|
43
|
+
'- `core/remember` — store knowledge for future reference',
|
|
44
|
+
'- `core/record-learning` — record learnings while working',
|
|
45
|
+
'- `core/report-status` — report status to team leader or orchestrator',
|
|
46
|
+
];
|
|
47
|
+
// Orchestrators and TLs get additional coordination skills
|
|
48
|
+
if (config.role === 'orchestrator') {
|
|
49
|
+
lines.push('- `core/send-message` — send messages to agents', '- `core/get-sops` — request relevant SOPs', '- Orchestrator skills at `config/skills/orchestrator/`:', ' - `schedule-check` — schedule future check-in reminders', ' - `subscribe-event` — subscribe to agent lifecycle events', ' - `reply-slack` / `reply-chat` — respond to user messages', ' - `delegate-task` — assign work to agents', ' - `get-team-status` / `get-agent-status` — monitor team state');
|
|
50
|
+
}
|
|
51
|
+
else if (config.canDelegate) {
|
|
52
|
+
lines.push('- `core/send-message` — communicate with subordinates and orchestrator', '- `core/get-sops` — request relevant SOPs', `- Team leader skills at \`${config.tlSkillsPath}/\`:`, ' - `delegate-task` — assign tasks to subordinates', ' - `verify-output` — check completed work quality', ' - `schedule-check` — schedule follow-up reminders');
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
lines.push('- `core/send-message` — communicate with team leader', '- `core/get-sops` — request relevant SOPs for current situation');
|
|
56
|
+
}
|
|
57
|
+
lines.push('', 'Skills catalog: `~/.crewly/skills/AGENT_SKILLS_CATALOG.md`');
|
|
58
|
+
return lines.join('\n');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build role-scoped capabilities section (#225).
|
|
62
|
+
* Workers get narrow read+execute scope; orchestrators get broader coordination scope.
|
|
63
|
+
*/
|
|
64
|
+
buildCapabilities(config) {
|
|
65
|
+
const lines = ['## Available Capabilities', ''];
|
|
66
|
+
if (config.role === 'orchestrator') {
|
|
67
|
+
lines.push('This session has access to:', '- **Read** project files for status awareness (not for implementation)', '- **Execute** orchestrator skill scripts for team coordination', '- **Execute** agent skill scripts (`core/` memory and status tools)', '- **Browser automation** via Playwright MCP server (when enabled)', '', 'Implementation work (editing code, creating files) should be delegated to agents.');
|
|
68
|
+
}
|
|
69
|
+
else if (config.canDelegate) {
|
|
70
|
+
lines.push('This session has access to:', `- **Read/Write** files within the project directory`, `- **Execute** bash scripts in \`${config.agentSkillsPath}/\` (agent core skills)`, `- **Execute** bash scripts in \`${config.tlSkillsPath}/\` (team leader skills)`, '- **Browser automation** via Playwright MCP server (when enabled)');
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
lines.push('This session has access to:', `- **Read/Write** files within the project directory`, `- **Execute** bash scripts in \`${config.agentSkillsPath}/\` (agent core skills)`, '- **Browser automation** via Playwright MCP server (when enabled)');
|
|
74
|
+
}
|
|
75
|
+
return lines.join('\n');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Build communication and memory tool instructions.
|
|
79
|
+
*/
|
|
80
|
+
buildCommunication(config) {
|
|
81
|
+
return `## Communication
|
|
48
82
|
|
|
49
83
|
Use bash skills at \`${config.agentSkillsPath}/\` for all team communication. Read \`~/.crewly/skills/AGENT_SKILLS_CATALOG.md\` for a full reference.
|
|
50
84
|
- \`send-message\` to communicate with other agents
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-reference.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/skills-reference.module.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"skills-reference.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/skills-reference.module.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,OAAO,qBAAqB;IACjC,IAAI,GAAG,mBAAmB,CAAC;IAC3B,QAAQ,GAAG,CAAC,CAAC;IACb,SAAS,GAAG,GAAG,CAAC;IAChB,WAAW,GAAG,IAAI,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,OAAqB;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,MAAoB;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEtD,OAAO,GAAG,UAAU,OAAO,YAAY,OAAO,aAAa,EAAE,CAAC;IAC/D,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,MAAoB;QAC3C,MAAM,KAAK,GAAG;YACb,qBAAqB;YACrB,EAAE;YACF,oBAAoB,MAAM,CAAC,eAAe,MAAM;YAChD,2DAA2D;YAC3D,0DAA0D;YAC1D,2DAA2D;YAC3D,uEAAuE;SACvE,CAAC;QAEF,2DAA2D;QAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CACT,iDAAiD,EACjD,2CAA2C,EAC3C,yDAAyD,EACzD,2DAA2D,EAC3D,6DAA6D,EAC7D,6DAA6D,EAC7D,6CAA6C,EAC7C,iEAAiE,CACjE,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CACT,wEAAwE,EACxE,2CAA2C,EAC3C,6BAA6B,MAAM,CAAC,YAAY,MAAM,EACtD,oDAAoD,EACpD,oDAAoD,EACpD,qDAAqD,CACrD,CAAC;QACH,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CACT,sDAAsD,EACtD,iEAAiE,CACjE,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,4DAA4D,CAAC,CAAC;QAE7E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED;;;OAGG;IACK,iBAAiB,CAAC,MAAoB;QAC7C,MAAM,KAAK,GAAG,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QAEhD,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CACT,6BAA6B,EAC7B,wEAAwE,EACxE,gEAAgE,EAChE,qEAAqE,EACrE,mEAAmE,EACnE,EAAE,EACF,mFAAmF,CACnF,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CACT,6BAA6B,EAC7B,qDAAqD,EACrD,mCAAmC,MAAM,CAAC,eAAe,yBAAyB,EAClF,mCAAmC,MAAM,CAAC,YAAY,0BAA0B,EAChF,mEAAmE,CACnE,CAAC;QACH,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CACT,6BAA6B,EAC7B,qDAAqD,EACrD,mCAAmC,MAAM,CAAC,eAAe,yBAAyB,EAClF,mEAAmE,CACnE,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,MAAoB;QAC9C,OAAO;;uBAEc,MAAM,CAAC,eAAe;;;;;;;;;;;;;kLAaqI,CAAC;IAClL,CAAC;CACD"}
|
|
@@ -21,6 +21,7 @@ export declare class SoulModule implements PromptModule {
|
|
|
21
21
|
shouldInclude(_config: ModuleConfig): boolean;
|
|
22
22
|
/**
|
|
23
23
|
* Build the soul section by resolving the soul file from the resolution chain.
|
|
24
|
+
* If self-improvement data exists, appends a Self-Awareness section.
|
|
24
25
|
*
|
|
25
26
|
* @param config - Module configuration with role and project details
|
|
26
27
|
* @returns Formatted markdown soul section
|
|
@@ -56,5 +57,14 @@ export declare class SoulModule implements PromptModule {
|
|
|
56
57
|
* @returns Formatted soul section
|
|
57
58
|
*/
|
|
58
59
|
private formatSoul;
|
|
60
|
+
/**
|
|
61
|
+
* Build the Self-Awareness section from self-improvement data.
|
|
62
|
+
* Reads growth areas, self-model (blind spots), and prediction calibration.
|
|
63
|
+
* Kept under ~200 tokens.
|
|
64
|
+
*
|
|
65
|
+
* @param sessionName - Agent session name
|
|
66
|
+
* @returns Self-awareness markdown section, or null if no data exists
|
|
67
|
+
*/
|
|
68
|
+
private buildSelfAwareness;
|
|
59
69
|
}
|
|
60
70
|
//# sourceMappingURL=soul.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soul.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/soul.module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAS1E;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,YAAW,YAAY;IAC9C,IAAI,SAAU;IACd,QAAQ,SAAK;IACb,SAAS,SAAO;IAChB,WAAW,UAAS;IAEpB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI7C
|
|
1
|
+
{"version":3,"file":"soul.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/soul.module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAS1E;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,YAAW,YAAY;IAC9C,IAAI,SAAU;IACd,QAAQ,SAAK;IACb,SAAS,SAAO;IAChB,WAAW,UAAS;IAEpB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI7C;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAMlD;;;;;OAKG;YACW,WAAW;IAgCzB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAKlB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;CA+C1B"}
|
|
@@ -30,13 +30,15 @@ export class SoulModule {
|
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* Build the soul section by resolving the soul file from the resolution chain.
|
|
33
|
+
* If self-improvement data exists, appends a Self-Awareness section.
|
|
33
34
|
*
|
|
34
35
|
* @param config - Module configuration with role and project details
|
|
35
36
|
* @returns Formatted markdown soul section
|
|
36
37
|
*/
|
|
37
38
|
async build(config) {
|
|
38
39
|
const soul = await this.resolveSoul(config);
|
|
39
|
-
|
|
40
|
+
const selfAwareness = this.buildSelfAwareness(config.sessionName);
|
|
41
|
+
return selfAwareness ? `${soul}\n\n${selfAwareness}` : soul;
|
|
40
42
|
}
|
|
41
43
|
/**
|
|
42
44
|
* Resolve the soul content by checking each level of the resolution chain.
|
|
@@ -108,5 +110,57 @@ export class SoulModule {
|
|
|
108
110
|
const sourceLabel = source === 'member' ? 'personal' : source === 'role' ? 'role default' : 'archetype';
|
|
109
111
|
return `## Your Soul\n_Source: ${sourceLabel}_\n\n${content}`;
|
|
110
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Build the Self-Awareness section from self-improvement data.
|
|
115
|
+
* Reads growth areas, self-model (blind spots), and prediction calibration.
|
|
116
|
+
* Kept under ~200 tokens.
|
|
117
|
+
*
|
|
118
|
+
* @param sessionName - Agent session name
|
|
119
|
+
* @returns Self-awareness markdown section, or null if no data exists
|
|
120
|
+
*/
|
|
121
|
+
buildSelfAwareness(sessionName) {
|
|
122
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '/tmp';
|
|
123
|
+
const agentDir = path.join(homeDir, '.crewly', 'agents', sessionName);
|
|
124
|
+
const lines = [];
|
|
125
|
+
// Growth areas — top 3
|
|
126
|
+
try {
|
|
127
|
+
const raw = fs.readFileSync(path.join(agentDir, 'growth-areas.json'), 'utf-8');
|
|
128
|
+
const data = JSON.parse(raw);
|
|
129
|
+
if (data.areas && data.areas.length > 0) {
|
|
130
|
+
const top3 = data.areas.slice(0, 3);
|
|
131
|
+
lines.push('**Growth Areas:**');
|
|
132
|
+
for (const area of top3) {
|
|
133
|
+
lines.push(`- ${area.area} (${area.progress})`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch { /* no growth areas data */ }
|
|
138
|
+
// Blind spots — top 2
|
|
139
|
+
try {
|
|
140
|
+
const raw = fs.readFileSync(path.join(agentDir, 'self-model.json'), 'utf-8');
|
|
141
|
+
const data = JSON.parse(raw);
|
|
142
|
+
if (data.blindSpots && data.blindSpots.length > 0) {
|
|
143
|
+
const top2 = data.blindSpots.slice(0, 2);
|
|
144
|
+
lines.push('**Blind Spots:**');
|
|
145
|
+
for (const spot of top2) {
|
|
146
|
+
lines.push(`- ${spot.description}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch { /* no self-model data */ }
|
|
151
|
+
// Prediction calibration score
|
|
152
|
+
try {
|
|
153
|
+
const raw = fs.readFileSync(path.join(agentDir, 'predictions.json'), 'utf-8');
|
|
154
|
+
const data = JSON.parse(raw);
|
|
155
|
+
if (data.calibrationScore > 0) {
|
|
156
|
+
lines.push(`**Prediction Calibration:** ${Math.round(data.calibrationScore * 100)}%`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch { /* no predictions data */ }
|
|
160
|
+
if (lines.length === 0) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
return `## Self-Awareness\n${lines.join('\n')}`;
|
|
164
|
+
}
|
|
111
165
|
}
|
|
112
166
|
//# sourceMappingURL=soul.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soul.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/soul.module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B;;GAEG;AACH,MAAM,YAAY,GAAG;;qHAEgG,CAAC;AAEtH;;;;;;;;;;GAUG;AACH,MAAM,OAAO,UAAU;IACtB,IAAI,GAAG,MAAM,CAAC;IACd,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
|
|
1
|
+
{"version":3,"file":"soul.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/soul.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persisted attention management data structure.
|
|
3
|
+
*/
|
|
4
|
+
export interface AttentionData {
|
|
5
|
+
/** Current focus items — topics the agent should prioritize */
|
|
6
|
+
focus: string[];
|
|
7
|
+
/** Suppressed items — topics the agent should deprioritize */
|
|
8
|
+
suppressed: string[];
|
|
9
|
+
/** Last time focus items were pruned (ISO date string) */
|
|
10
|
+
lastPruned: string;
|
|
11
|
+
/** Timestamps for each focus item (for pruning stale items) */
|
|
12
|
+
focusTimestamps?: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Service for managing agent attention — what to focus on and what to suppress.
|
|
16
|
+
*
|
|
17
|
+
* Focus items direct the agent's attention toward high-priority topics.
|
|
18
|
+
* Suppressed items filter out noise from irrelevant past context.
|
|
19
|
+
* Pruning removes stale focus items that haven't been updated in 2+ weeks.
|
|
20
|
+
*
|
|
21
|
+
* Storage: ~/.crewly/agents/{sessionName}/attention.json
|
|
22
|
+
*/
|
|
23
|
+
export declare class AttentionService {
|
|
24
|
+
/**
|
|
25
|
+
* Get the file path for an agent's attention data.
|
|
26
|
+
*
|
|
27
|
+
* @param sessionName - Agent session name
|
|
28
|
+
* @returns Absolute path to attention.json
|
|
29
|
+
*/
|
|
30
|
+
private getFilePath;
|
|
31
|
+
/**
|
|
32
|
+
* Read attention data from disk.
|
|
33
|
+
*
|
|
34
|
+
* @param sessionName - Agent session name
|
|
35
|
+
* @returns Attention data, or empty default if file doesn't exist
|
|
36
|
+
*/
|
|
37
|
+
getAttention(sessionName: string): Promise<AttentionData>;
|
|
38
|
+
/**
|
|
39
|
+
* Get the current focus items for an agent.
|
|
40
|
+
*
|
|
41
|
+
* @param sessionName - Agent session name
|
|
42
|
+
* @returns Array of focus item strings
|
|
43
|
+
*/
|
|
44
|
+
getFocus(sessionName: string): Promise<string[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Set the focus items for an agent (replaces existing focus).
|
|
47
|
+
*
|
|
48
|
+
* @param sessionName - Agent session name
|
|
49
|
+
* @param items - New focus items
|
|
50
|
+
*/
|
|
51
|
+
setFocus(sessionName: string, items: string[]): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Add a single item to the suppressed list.
|
|
54
|
+
*
|
|
55
|
+
* @param sessionName - Agent session name
|
|
56
|
+
* @param item - Item to suppress
|
|
57
|
+
*/
|
|
58
|
+
suppress(sessionName: string, item: string): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Prune stale focus items that haven't been updated in PRUNE_THRESHOLD_DAYS.
|
|
61
|
+
*
|
|
62
|
+
* @param sessionName - Agent session name
|
|
63
|
+
* @returns Number of items pruned
|
|
64
|
+
*/
|
|
65
|
+
prune(sessionName: string): Promise<number>;
|
|
66
|
+
/**
|
|
67
|
+
* Persist attention data to disk.
|
|
68
|
+
*
|
|
69
|
+
* @param sessionName - Agent session name
|
|
70
|
+
* @param data - Attention data to save
|
|
71
|
+
*/
|
|
72
|
+
private save;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=attention.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attention.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/self-improvement/attention.service.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,+DAA+D;IAC/D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAOD;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;IAC5B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAKnB;;;;;OAKG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAU/D;;;;;OAKG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKtD;;;;;OAKG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAanE;;;;;OAKG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBhE;;;;;OAKG;IACG,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgCjD;;;;;OAKG;YACW,IAAI;CAMlB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Number of days after which a focus item is considered stale.
|
|
5
|
+
*/
|
|
6
|
+
const PRUNE_THRESHOLD_DAYS = 14;
|
|
7
|
+
/**
|
|
8
|
+
* Service for managing agent attention — what to focus on and what to suppress.
|
|
9
|
+
*
|
|
10
|
+
* Focus items direct the agent's attention toward high-priority topics.
|
|
11
|
+
* Suppressed items filter out noise from irrelevant past context.
|
|
12
|
+
* Pruning removes stale focus items that haven't been updated in 2+ weeks.
|
|
13
|
+
*
|
|
14
|
+
* Storage: ~/.crewly/agents/{sessionName}/attention.json
|
|
15
|
+
*/
|
|
16
|
+
export class AttentionService {
|
|
17
|
+
/**
|
|
18
|
+
* Get the file path for an agent's attention data.
|
|
19
|
+
*
|
|
20
|
+
* @param sessionName - Agent session name
|
|
21
|
+
* @returns Absolute path to attention.json
|
|
22
|
+
*/
|
|
23
|
+
getFilePath(sessionName) {
|
|
24
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '/tmp';
|
|
25
|
+
return path.join(homeDir, '.crewly', 'agents', sessionName, 'attention.json');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Read attention data from disk.
|
|
29
|
+
*
|
|
30
|
+
* @param sessionName - Agent session name
|
|
31
|
+
* @returns Attention data, or empty default if file doesn't exist
|
|
32
|
+
*/
|
|
33
|
+
async getAttention(sessionName) {
|
|
34
|
+
try {
|
|
35
|
+
const filePath = this.getFilePath(sessionName);
|
|
36
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
37
|
+
return JSON.parse(raw);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return { focus: [], suppressed: [], lastPruned: '', focusTimestamps: {} };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get the current focus items for an agent.
|
|
45
|
+
*
|
|
46
|
+
* @param sessionName - Agent session name
|
|
47
|
+
* @returns Array of focus item strings
|
|
48
|
+
*/
|
|
49
|
+
async getFocus(sessionName) {
|
|
50
|
+
const data = await this.getAttention(sessionName);
|
|
51
|
+
return data.focus;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Set the focus items for an agent (replaces existing focus).
|
|
55
|
+
*
|
|
56
|
+
* @param sessionName - Agent session name
|
|
57
|
+
* @param items - New focus items
|
|
58
|
+
*/
|
|
59
|
+
async setFocus(sessionName, items) {
|
|
60
|
+
const data = await this.getAttention(sessionName);
|
|
61
|
+
const now = new Date().toISOString().split('T')[0];
|
|
62
|
+
data.focus = items;
|
|
63
|
+
data.focusTimestamps = {};
|
|
64
|
+
for (const item of items) {
|
|
65
|
+
data.focusTimestamps[item] = now;
|
|
66
|
+
}
|
|
67
|
+
await this.save(sessionName, data);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Add a single item to the suppressed list.
|
|
71
|
+
*
|
|
72
|
+
* @param sessionName - Agent session name
|
|
73
|
+
* @param item - Item to suppress
|
|
74
|
+
*/
|
|
75
|
+
async suppress(sessionName, item) {
|
|
76
|
+
const data = await this.getAttention(sessionName);
|
|
77
|
+
if (!data.suppressed.includes(item)) {
|
|
78
|
+
data.suppressed.push(item);
|
|
79
|
+
}
|
|
80
|
+
// Also remove from focus if present
|
|
81
|
+
data.focus = data.focus.filter((f) => f !== item);
|
|
82
|
+
if (data.focusTimestamps) {
|
|
83
|
+
delete data.focusTimestamps[item];
|
|
84
|
+
}
|
|
85
|
+
await this.save(sessionName, data);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Prune stale focus items that haven't been updated in PRUNE_THRESHOLD_DAYS.
|
|
89
|
+
*
|
|
90
|
+
* @param sessionName - Agent session name
|
|
91
|
+
* @returns Number of items pruned
|
|
92
|
+
*/
|
|
93
|
+
async prune(sessionName) {
|
|
94
|
+
const data = await this.getAttention(sessionName);
|
|
95
|
+
const now = new Date();
|
|
96
|
+
const timestamps = data.focusTimestamps || {};
|
|
97
|
+
let pruned = 0;
|
|
98
|
+
data.focus = data.focus.filter((item) => {
|
|
99
|
+
const ts = timestamps[item];
|
|
100
|
+
if (!ts) {
|
|
101
|
+
// No timestamp — prune it
|
|
102
|
+
pruned++;
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
const itemDate = new Date(ts);
|
|
106
|
+
const daysDiff = (now.getTime() - itemDate.getTime()) / (1000 * 60 * 60 * 24);
|
|
107
|
+
if (daysDiff > PRUNE_THRESHOLD_DAYS) {
|
|
108
|
+
pruned++;
|
|
109
|
+
delete timestamps[item];
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
return true;
|
|
113
|
+
});
|
|
114
|
+
data.focusTimestamps = timestamps;
|
|
115
|
+
data.lastPruned = now.toISOString().split('T')[0];
|
|
116
|
+
await this.save(sessionName, data);
|
|
117
|
+
return pruned;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Persist attention data to disk.
|
|
121
|
+
*
|
|
122
|
+
* @param sessionName - Agent session name
|
|
123
|
+
* @param data - Attention data to save
|
|
124
|
+
*/
|
|
125
|
+
async save(sessionName, data) {
|
|
126
|
+
const filePath = this.getFilePath(sessionName);
|
|
127
|
+
const dir = path.dirname(filePath);
|
|
128
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
129
|
+
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=attention.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attention.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/self-improvement/attention.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single growth area tracked for an agent.
|
|
3
|
+
*/
|
|
4
|
+
export interface GrowthArea {
|
|
5
|
+
/** Description of the growth area */
|
|
6
|
+
area: string;
|
|
7
|
+
/** Date the area was identified (ISO date string) */
|
|
8
|
+
identifiedAt: string;
|
|
9
|
+
/** Current progress status */
|
|
10
|
+
progress: 'identified' | 'improving' | 'proficient';
|
|
11
|
+
/** Evidence of progress or regression */
|
|
12
|
+
evidence: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Persisted growth areas data structure.
|
|
16
|
+
*/
|
|
17
|
+
export interface GrowthAreasData {
|
|
18
|
+
/** List of tracked growth areas */
|
|
19
|
+
areas: GrowthArea[];
|
|
20
|
+
/** Last time the areas were reviewed (ISO date string) */
|
|
21
|
+
lastReviewedAt: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Service for tracking agent growth areas over time.
|
|
25
|
+
*
|
|
26
|
+
* Each agent maintains a growth-areas.json file that records areas
|
|
27
|
+
* where the agent is actively improving. Growth areas can be manually
|
|
28
|
+
* added or auto-extracted from learnings and failures.
|
|
29
|
+
*
|
|
30
|
+
* Storage: ~/.crewly/agents/{sessionName}/growth-areas.json
|
|
31
|
+
*/
|
|
32
|
+
export declare class GrowthAreasService {
|
|
33
|
+
/**
|
|
34
|
+
* Get the file path for an agent's growth areas.
|
|
35
|
+
*
|
|
36
|
+
* @param sessionName - Agent session name
|
|
37
|
+
* @returns Absolute path to growth-areas.json
|
|
38
|
+
*/
|
|
39
|
+
private getFilePath;
|
|
40
|
+
/**
|
|
41
|
+
* Read growth areas data from disk.
|
|
42
|
+
*
|
|
43
|
+
* @param sessionName - Agent session name
|
|
44
|
+
* @returns Growth areas data, or empty default if file doesn't exist
|
|
45
|
+
*/
|
|
46
|
+
getGrowthAreas(sessionName: string): Promise<GrowthAreasData>;
|
|
47
|
+
/**
|
|
48
|
+
* Add a new growth area for an agent.
|
|
49
|
+
*
|
|
50
|
+
* @param sessionName - Agent session name
|
|
51
|
+
* @param area - Description of the growth area
|
|
52
|
+
* @returns The created growth area
|
|
53
|
+
*/
|
|
54
|
+
addGrowthArea(sessionName: string, area: string): Promise<GrowthArea>;
|
|
55
|
+
/**
|
|
56
|
+
* Update the progress of an existing growth area.
|
|
57
|
+
*
|
|
58
|
+
* @param sessionName - Agent session name
|
|
59
|
+
* @param area - Growth area description to update
|
|
60
|
+
* @param progress - New progress status
|
|
61
|
+
* @param evidence - Evidence supporting the progress update
|
|
62
|
+
* @returns Updated growth area or null if not found
|
|
63
|
+
*/
|
|
64
|
+
updateProgress(sessionName: string, area: string, progress: 'identified' | 'improving' | 'proficient', evidence: string): Promise<GrowthArea | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Auto-extract potential growth areas from a learning or failure text.
|
|
67
|
+
*
|
|
68
|
+
* @param sessionName - Agent session name
|
|
69
|
+
* @param text - Learning or failure text to analyze
|
|
70
|
+
* @returns Array of newly added growth areas (empty if no new areas found)
|
|
71
|
+
*/
|
|
72
|
+
extractFromText(sessionName: string, text: string): Promise<GrowthArea[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Persist growth areas data to disk.
|
|
75
|
+
*
|
|
76
|
+
* @param sessionName - Agent session name
|
|
77
|
+
* @param data - Growth areas data to save
|
|
78
|
+
*/
|
|
79
|
+
private save;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=growth-areas.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth-areas.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/self-improvement/growth-areas.service.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,QAAQ,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;IACpD,yCAAyC;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,mCAAmC;IACnC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;CACvB;AAkBD;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;IAC9B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAKnB;;;;;OAKG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAUnE;;;;;;OAMG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB3E;;;;;;;;OAQG;IACG,cAAc,CACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,EACnD,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAkB7B;;;;;;OAMG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAoB/E;;;;;OAKG;YACW,IAAI;CAMlB"}
|