0xkobold 0.0.6 → 0.2.0
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/HEARTBEAT.md +66 -32
- package/README.md +220 -1
- package/dist/package.json +3 -2
- package/dist/src/agent/bootstrap-loader.js +138 -0
- package/dist/src/agent/bootstrap-loader.js.map +1 -0
- package/dist/src/agent/context-pruning.js +279 -0
- package/dist/src/agent/context-pruning.js.map +1 -0
- package/dist/src/agent/dynamic-personality.js +211 -0
- package/dist/src/agent/dynamic-personality.js.map +1 -0
- package/dist/src/agent/embedded-runner.js +79 -0
- package/dist/src/agent/embedded-runner.js.map +1 -0
- package/dist/src/agent/index.js +16 -0
- package/dist/src/agent/index.js.map +1 -0
- package/dist/src/agent/system-prompt.js +84 -0
- package/dist/src/agent/system-prompt.js.map +1 -0
- package/dist/src/agent/task-router.js +194 -0
- package/dist/src/agent/task-router.js.map +1 -0
- package/dist/src/agent/tools/index.js +2 -0
- package/dist/src/agent/tools/index.js.map +1 -0
- package/dist/src/agent/tools/spawn-agent.js +200 -0
- package/dist/src/agent/tools/spawn-agent.js.map +1 -0
- package/dist/src/agent/types/definitions.js +317 -0
- package/dist/src/agent/types/definitions.js.map +1 -0
- package/dist/src/agent/types/index.js +2 -0
- package/dist/src/agent/types/index.js.map +1 -0
- package/dist/src/agent/user-profile.js +300 -0
- package/dist/src/agent/user-profile.js.map +1 -0
- package/dist/src/agents/task-router.js +194 -0
- package/dist/src/agents/task-router.js.map +1 -0
- package/dist/src/agents/tools/index.js +2 -0
- package/dist/src/agents/tools/index.js.map +1 -0
- package/dist/src/agents/tools/spawn-agent.js +200 -0
- package/dist/src/agents/tools/spawn-agent.js.map +1 -0
- package/dist/src/agents/types/definitions.js +317 -0
- package/dist/src/agents/types/definitions.js.map +1 -0
- package/dist/src/agents/types/index.js +2 -0
- package/dist/src/agents/types/index.js.map +1 -0
- package/dist/src/cli/commands/embedded.js +36 -0
- package/dist/src/cli/commands/embedded.js.map +1 -0
- package/dist/src/cli/commands/gateway.js +127 -166
- package/dist/src/cli/commands/gateway.js.map +1 -1
- package/dist/src/cli/program-fixed.js +1 -0
- package/dist/src/cli/program-fixed.js.map +1 -0
- package/dist/src/cli/program.js +10 -29
- package/dist/src/cli/program.js.map +1 -1
- package/dist/src/extensions/core/agent-lifecycle-extension.js +323 -0
- package/dist/src/extensions/core/agent-lifecycle-extension.js.map +1 -0
- package/dist/src/extensions/core/agent-orchestrator-extension.js +642 -0
- package/dist/src/extensions/core/agent-orchestrator-extension.js.map +1 -0
- package/dist/src/extensions/core/agent-workspace-extension.js +174 -0
- package/dist/src/extensions/core/agent-workspace-extension.js.map +1 -0
- package/dist/src/extensions/core/autonomous-executor-extension.js +145 -0
- package/dist/src/extensions/core/autonomous-executor-extension.js.map +1 -0
- package/dist/src/extensions/core/autonomous-subagent-extension.js +333 -0
- package/dist/src/extensions/core/autonomous-subagent-extension.js.map +1 -0
- package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js +323 -0
- package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js.map +1 -0
- package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js +333 -0
- package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js.map +1 -0
- package/dist/src/extensions/core/deprecated/subagent-extension.js +647 -0
- package/dist/src/extensions/core/deprecated/subagent-extension.js.map +1 -0
- package/dist/src/extensions/core/mode-manager-extension.js +11 -0
- package/dist/src/extensions/core/mode-manager-extension.js.map +1 -1
- package/dist/src/extensions/core/perennial-memory-extension.js +10 -2
- package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -1
- package/dist/src/extensions/core/persona-loader-extension.js +61 -129
- package/dist/src/extensions/core/persona-loader-extension.js.map +1 -1
- package/dist/src/extensions/core/websearch-enhanced-extension.js +705 -0
- package/dist/src/extensions/core/websearch-enhanced-extension.js.map +1 -0
- package/dist/src/extensions/core/websearch-v2-extension.js +303 -0
- package/dist/src/extensions/core/websearch-v2-extension.js.map +1 -0
- package/dist/src/gateway/discord-bot.js +185 -0
- package/dist/src/gateway/discord-bot.js.map +1 -0
- package/dist/src/gateway/index.js +10 -350
- package/dist/src/gateway/index.js.map +1 -1
- package/dist/src/gateway/server.js +325 -0
- package/dist/src/gateway/server.js.map +1 -0
- package/dist/src/gateway/websocket-server.js +142 -0
- package/dist/src/gateway/websocket-server.js.map +1 -0
- package/dist/src/heartbeat/checkin.js +185 -0
- package/dist/src/heartbeat/checkin.js.map +1 -0
- package/dist/src/heartbeat/index.js +5 -0
- package/dist/src/heartbeat/index.js.map +1 -0
- package/dist/src/heartbeat/notifications.js +216 -0
- package/dist/src/heartbeat/notifications.js.map +1 -0
- package/dist/src/heartbeat/scheduler.js +284 -0
- package/dist/src/heartbeat/scheduler.js.map +1 -0
- package/dist/src/index.js +21 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/mode/auto-detector.js +211 -0
- package/dist/src/mode/auto-detector.js.map +1 -0
- package/dist/src/mode/index.js +3 -0
- package/dist/src/mode/index.js.map +1 -0
- package/dist/src/mode/natural-switcher.js +123 -0
- package/dist/src/mode/natural-switcher.js.map +1 -0
- package/dist/src/skills/builtin/api-worker.js +88 -0
- package/dist/src/skills/builtin/api-worker.js.map +1 -0
- package/dist/src/skills/builtin/nextjs-worker.js +55 -0
- package/dist/src/skills/builtin/nextjs-worker.js.map +1 -0
- package/dist/src/skills/builtin/real-workers.js +166 -0
- package/dist/src/skills/builtin/real-workers.js.map +1 -0
- package/dist/src/skills/builtin/sql-worker.js +61 -0
- package/dist/src/skills/builtin/sql-worker.js.map +1 -0
- package/dist/src/skills/builtin/test-worker.js +79 -0
- package/dist/src/skills/builtin/test-worker.js.map +1 -0
- package/dist/src/skills/builtin/web-research.js +77 -0
- package/dist/src/skills/builtin/web-research.js.map +1 -0
- package/dist/src/skills/framework.js +250 -0
- package/dist/src/skills/framework.js.map +1 -0
- package/dist/src/skills/index.js +10 -10
- package/dist/src/skills/index.js.map +1 -1
- package/dist/src/streaming/block-streamer.js +172 -0
- package/dist/src/streaming/block-streamer.js.map +1 -0
- package/dist/src/streaming/index.js +2 -0
- package/dist/src/streaming/index.js.map +1 -0
- package/dist/src/workspace/index.js +2 -0
- package/dist/src/workspace/index.js.map +1 -0
- package/dist/src/workspace/manager.js +181 -0
- package/dist/src/workspace/manager.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Type Definitions - v0.2.0
|
|
3
|
+
*
|
|
4
|
+
* Defines the five agent types for the sub-agent system:
|
|
5
|
+
* - Coordinator: Plans and delegates
|
|
6
|
+
* - Specialist: Deep domain expertise
|
|
7
|
+
* - Researcher: Information gathering
|
|
8
|
+
* - Worker: Implementation
|
|
9
|
+
* - Reviewer: Code review and validation
|
|
10
|
+
*/
|
|
11
|
+
export const AGENT_TYPES = {
|
|
12
|
+
coordinator: {
|
|
13
|
+
id: "coordinator",
|
|
14
|
+
name: "Coordinator",
|
|
15
|
+
emoji: "🎯",
|
|
16
|
+
description: "Plans and delegates complex tasks to other agents",
|
|
17
|
+
purpose: `You are a Coordinator agent. Your job is to break down complex tasks
|
|
18
|
+
into manageable pieces and delegate them to appropriate specialist agents.
|
|
19
|
+
|
|
20
|
+
You should:
|
|
21
|
+
1. Analyze the task and identify what needs to be done
|
|
22
|
+
2. Break it down into subtasks with clear dependencies
|
|
23
|
+
3. Delegate each subtask to the right agent type
|
|
24
|
+
4. Monitor progress and integrate results
|
|
25
|
+
5. Handle failures by replanning
|
|
26
|
+
|
|
27
|
+
You rarely write code yourself - you coordinate others who do.`,
|
|
28
|
+
systemPrompt: `You are a Coordinator agent (🎯).
|
|
29
|
+
|
|
30
|
+
Your role is to plan and delegate. When given a task:
|
|
31
|
+
1. Analyze requirements thoroughly
|
|
32
|
+
2. Identify subtasks and dependencies
|
|
33
|
+
3. Delegate to appropriate agents:
|
|
34
|
+
- Researcher for information gathering
|
|
35
|
+
- Specialist for domain-specific work
|
|
36
|
+
- Worker for implementation
|
|
37
|
+
- Reviewer for validation
|
|
38
|
+
4. Track progress and integrate results
|
|
39
|
+
5. Report back with final outcome
|
|
40
|
+
|
|
41
|
+
Guidelines:
|
|
42
|
+
- Think before acting: create a plan first
|
|
43
|
+
- Delegate work, don't do it yourself
|
|
44
|
+
- Monitor and coordinate multiple agents
|
|
45
|
+
- Handle failures gracefully
|
|
46
|
+
- Keep the user informed of progress`,
|
|
47
|
+
capabilities: [
|
|
48
|
+
"task-decomposition",
|
|
49
|
+
"agent-delegation",
|
|
50
|
+
"progress-tracking",
|
|
51
|
+
"result-integration",
|
|
52
|
+
"failure-recovery"
|
|
53
|
+
],
|
|
54
|
+
tools: [
|
|
55
|
+
"agent_orchestrate",
|
|
56
|
+
"task_breakdown",
|
|
57
|
+
"perennial_search",
|
|
58
|
+
"read",
|
|
59
|
+
"bash"
|
|
60
|
+
],
|
|
61
|
+
maxIterations: 20,
|
|
62
|
+
thinkLevel: "deep",
|
|
63
|
+
modelPreference: "smart"
|
|
64
|
+
},
|
|
65
|
+
specialist: {
|
|
66
|
+
id: "specialist",
|
|
67
|
+
name: "Specialist",
|
|
68
|
+
emoji: "🧠",
|
|
69
|
+
description: "Deep domain expertise on specific technologies",
|
|
70
|
+
purpose: `You are a Specialist agent with deep expertise in specific domains.
|
|
71
|
+
You know one or more technologies extremely well and provide expert-level work.
|
|
72
|
+
|
|
73
|
+
Domains you might specialize in:
|
|
74
|
+
- Database optimization (SQL, PostgreSQL, MongoDB)
|
|
75
|
+
- Frontend frameworks (React, Vue, Svelte)
|
|
76
|
+
- API design (REST, GraphQL, gRPC)
|
|
77
|
+
- DevOps (Docker, Kubernetes, CI/CD)
|
|
78
|
+
- Security (auth, crypto, best practices)
|
|
79
|
+
- Performance optimization
|
|
80
|
+
|
|
81
|
+
You should:
|
|
82
|
+
- Apply deep domain knowledge
|
|
83
|
+
- Follow best practices in your specialty
|
|
84
|
+
- Provide expert recommendations
|
|
85
|
+
- Solve complex domain-specific problems`,
|
|
86
|
+
systemPrompt: `You are a Specialist agent (🧠) with deep domain expertise.
|
|
87
|
+
|
|
88
|
+
You are an expert in a specific domain. When assigned a task:
|
|
89
|
+
1. Apply your deep knowledge immediately
|
|
90
|
+
2. Follow domain best practices
|
|
91
|
+
3. Consider edge cases and gotchas
|
|
92
|
+
4. Provide expert-level recommendations
|
|
93
|
+
5. Deliver production-quality work
|
|
94
|
+
|
|
95
|
+
Your expertise makes you the go-to agent for difficult problems
|
|
96
|
+
in your domain. You're thorough, precise, and deliver excellent results.
|
|
97
|
+
|
|
98
|
+
You work independently but ask for clarification if requirements
|
|
99
|
+
are ambiguous or incomplete.`,
|
|
100
|
+
capabilities: [
|
|
101
|
+
"deep-domain-knowledge",
|
|
102
|
+
"best-practices",
|
|
103
|
+
"complex-problem-solving",
|
|
104
|
+
"optimization",
|
|
105
|
+
"expert-recommendations"
|
|
106
|
+
],
|
|
107
|
+
tools: [
|
|
108
|
+
"read",
|
|
109
|
+
"edit",
|
|
110
|
+
"write",
|
|
111
|
+
"bash",
|
|
112
|
+
"web_search",
|
|
113
|
+
"perennial_search"
|
|
114
|
+
],
|
|
115
|
+
maxIterations: 15,
|
|
116
|
+
thinkLevel: "deep",
|
|
117
|
+
modelPreference: "smart"
|
|
118
|
+
},
|
|
119
|
+
researcher: {
|
|
120
|
+
id: "researcher",
|
|
121
|
+
name: "Researcher",
|
|
122
|
+
emoji: "🔍",
|
|
123
|
+
description: "Gathers information and synthesizes findings",
|
|
124
|
+
purpose: `You are a Researcher agent. Your job is to gather information,
|
|
125
|
+
analyze data, and provide comprehensive findings.
|
|
126
|
+
|
|
127
|
+
You should:
|
|
128
|
+
- Search for relevant information thoroughly
|
|
129
|
+
- Read documentation and source materials
|
|
130
|
+
- Synthesize findings into clear summaries
|
|
131
|
+
- Provide citations and sources
|
|
132
|
+
- Identify gaps in available information
|
|
133
|
+
|
|
134
|
+
You are curious, thorough, and excellent at finding answers.`,
|
|
135
|
+
systemPrompt: `You are a Researcher agent (🔍).
|
|
136
|
+
|
|
137
|
+
Your mission: Find information and synthesize findings.
|
|
138
|
+
|
|
139
|
+
When given a research task:
|
|
140
|
+
1. Identify what information is needed
|
|
141
|
+
2. Search web, documentation, codebase
|
|
142
|
+
3. Read and analyze source materials
|
|
143
|
+
4. Synthesize findings into clear summaries
|
|
144
|
+
5. Provide sources and citations
|
|
145
|
+
6. Note any information gaps
|
|
146
|
+
|
|
147
|
+
Guidelines:
|
|
148
|
+
- Be thorough - check multiple sources
|
|
149
|
+
- Synthesize, don't just copy
|
|
150
|
+
- Provide specific details with citations
|
|
151
|
+
- Structure findings clearly
|
|
152
|
+
- Note confidence levels when uncertain
|
|
153
|
+
- Flag when information is incomplete`,
|
|
154
|
+
capabilities: [
|
|
155
|
+
"information-gathering",
|
|
156
|
+
"web-research",
|
|
157
|
+
"documentation-analysis",
|
|
158
|
+
"synthesis",
|
|
159
|
+
"citation-tracking"
|
|
160
|
+
],
|
|
161
|
+
tools: [
|
|
162
|
+
"web_search",
|
|
163
|
+
"web_fetch",
|
|
164
|
+
"web_research",
|
|
165
|
+
"read",
|
|
166
|
+
"perennial_search",
|
|
167
|
+
"bash"
|
|
168
|
+
],
|
|
169
|
+
maxIterations: 12,
|
|
170
|
+
thinkLevel: "normal",
|
|
171
|
+
modelPreference: "fast"
|
|
172
|
+
},
|
|
173
|
+
worker: {
|
|
174
|
+
id: "worker",
|
|
175
|
+
name: "Worker",
|
|
176
|
+
emoji: "⚒️",
|
|
177
|
+
description: "Implements code and executes tasks efficiently",
|
|
178
|
+
purpose: `You are a Worker agent. Your job is to implement code,
|
|
179
|
+
write tests, and execute tasks efficiently.
|
|
180
|
+
|
|
181
|
+
You should:
|
|
182
|
+
- Write clean, working code
|
|
183
|
+
- Follow existing patterns in the codebase
|
|
184
|
+
- Test your changes
|
|
185
|
+
- Handle errors gracefully
|
|
186
|
+
- Deliver complete, working solutions
|
|
187
|
+
|
|
188
|
+
You are efficient, practical, and focused on delivering results.`,
|
|
189
|
+
systemPrompt: `You are a Worker agent (⚒️).
|
|
190
|
+
|
|
191
|
+
Your mission: Implement, execute, deliver.
|
|
192
|
+
|
|
193
|
+
When assigned a task:
|
|
194
|
+
1. Understand the requirements clearly
|
|
195
|
+
2. Check existing patterns in the codebase
|
|
196
|
+
3. Implement the solution efficiently
|
|
197
|
+
4. Test your changes
|
|
198
|
+
5. Handle errors gracefully
|
|
199
|
+
6. Deliver working code
|
|
200
|
+
|
|
201
|
+
Guidelines:
|
|
202
|
+
- Follow existing code patterns
|
|
203
|
+
- Write clean, readable code
|
|
204
|
+
- Test before claiming done
|
|
205
|
+
- Handle edge cases
|
|
206
|
+
- Comment complex logic
|
|
207
|
+
- Don't over-engineer
|
|
208
|
+
- Deliver complete solutions, not partial work`,
|
|
209
|
+
capabilities: [
|
|
210
|
+
"implementation",
|
|
211
|
+
"code-generation",
|
|
212
|
+
"testing",
|
|
213
|
+
"debugging",
|
|
214
|
+
"pattern-matching"
|
|
215
|
+
],
|
|
216
|
+
tools: [
|
|
217
|
+
"read",
|
|
218
|
+
"edit",
|
|
219
|
+
"write",
|
|
220
|
+
"bash",
|
|
221
|
+
"perennial_save",
|
|
222
|
+
"memory_save"
|
|
223
|
+
],
|
|
224
|
+
maxIterations: 15,
|
|
225
|
+
thinkLevel: "normal",
|
|
226
|
+
modelPreference: "fast"
|
|
227
|
+
},
|
|
228
|
+
reviewer: {
|
|
229
|
+
id: "reviewer",
|
|
230
|
+
name: "Reviewer",
|
|
231
|
+
emoji: "👁️",
|
|
232
|
+
description: "Reviews code, validates solutions, checks quality",
|
|
233
|
+
purpose: `You are a Reviewer agent. Your job is to validate work,
|
|
234
|
+
review code, and ensure quality standards are met.
|
|
235
|
+
|
|
236
|
+
You should:
|
|
237
|
+
- Review code for correctness and style
|
|
238
|
+
- Check for bugs and edge cases
|
|
239
|
+
- Validate against requirements
|
|
240
|
+
- Provide constructive feedback
|
|
241
|
+
- Suggest improvements
|
|
242
|
+
|
|
243
|
+
You are thorough, critical, and fair. You catch issues others miss.`,
|
|
244
|
+
systemPrompt: `You are a Reviewer agent (👁️).
|
|
245
|
+
|
|
246
|
+
Your mission: Validate, review, ensure quality.
|
|
247
|
+
|
|
248
|
+
When reviewing work:
|
|
249
|
+
1. Check against requirements
|
|
250
|
+
2. Review code for correctness
|
|
251
|
+
3. Identify bugs and edge cases
|
|
252
|
+
4. Check for security issues
|
|
253
|
+
5. Validate test coverage
|
|
254
|
+
6. Assess code quality
|
|
255
|
+
7. Provide constructive feedback
|
|
256
|
+
|
|
257
|
+
Guidelines:
|
|
258
|
+
- Be thorough, not superficial
|
|
259
|
+
- Explain why something is wrong
|
|
260
|
+
- Suggest specific improvements
|
|
261
|
+
- Check edge cases
|
|
262
|
+
- Validate test coverage
|
|
263
|
+
- Consider security implications
|
|
264
|
+
- Be constructive, not harsh
|
|
265
|
+
- Focus on important issues`,
|
|
266
|
+
capabilities: [
|
|
267
|
+
"code-review",
|
|
268
|
+
"validation",
|
|
269
|
+
"quality-assurance",
|
|
270
|
+
"security-review",
|
|
271
|
+
"test-coverage-analysis"
|
|
272
|
+
],
|
|
273
|
+
tools: [
|
|
274
|
+
"read",
|
|
275
|
+
"bash",
|
|
276
|
+
"perennial_search",
|
|
277
|
+
"web_search"
|
|
278
|
+
],
|
|
279
|
+
maxIterations: 10,
|
|
280
|
+
thinkLevel: "deep",
|
|
281
|
+
modelPreference: "smart"
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
/**
|
|
285
|
+
* Get agent type by ID
|
|
286
|
+
*/
|
|
287
|
+
export function getAgentType(id) {
|
|
288
|
+
return AGENT_TYPES[id.toLowerCase()];
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Get all agent types
|
|
292
|
+
*/
|
|
293
|
+
export function getAllAgentTypes() {
|
|
294
|
+
return Object.values(AGENT_TYPES);
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Get agent types that can handle a task
|
|
298
|
+
*/
|
|
299
|
+
export function getAgentTypesForTask(taskType) {
|
|
300
|
+
const taskLower = taskType.toLowerCase();
|
|
301
|
+
if (taskLower.includes("research") || taskLower.includes("find") || taskLower.includes("search")) {
|
|
302
|
+
return [AGENT_TYPES.researcher];
|
|
303
|
+
}
|
|
304
|
+
if (taskLower.includes("review") || taskLower.includes("check") || taskLower.includes("validate")) {
|
|
305
|
+
return [AGENT_TYPES.reviewer];
|
|
306
|
+
}
|
|
307
|
+
if (taskLower.includes("implement") || taskLower.includes("code") || taskLower.includes("write")) {
|
|
308
|
+
return [AGENT_TYPES.worker, AGENT_TYPES.specialist];
|
|
309
|
+
}
|
|
310
|
+
if (taskLower.includes("plan") || taskLower.includes("coordinate") || taskLower.includes("organize")) {
|
|
311
|
+
return [AGENT_TYPES.coordinator];
|
|
312
|
+
}
|
|
313
|
+
// Default: Worker can handle most tasks
|
|
314
|
+
return [AGENT_TYPES.worker];
|
|
315
|
+
}
|
|
316
|
+
export default AGENT_TYPES;
|
|
317
|
+
//# sourceMappingURL=definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../../src/agent/types/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,WAAW,EAAE;QACX,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE;;;;;;;;;;+DAUkD;QAC3D,YAAY,EAAE;;;;;;;;;;;;;;;;;;qCAkBmB;QACjC,YAAY,EAAE;YACZ,oBAAoB;YACpB,kBAAkB;YAClB,mBAAmB;YACnB,oBAAoB;YACpB,kBAAkB;SACnB;QACD,KAAK,EAAE;YACL,mBAAmB;YACnB,gBAAgB;YAChB,kBAAkB;YAClB,MAAM;YACN,MAAM;SACP;QACD,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,MAAM;QAClB,eAAe,EAAE,OAAO;KACzB;IAED,UAAU,EAAE;QACV,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,gDAAgD;QAC7D,OAAO,EAAE;;;;;;;;;;;;;;;yCAe4B;QACrC,YAAY,EAAE;;;;;;;;;;;;;6BAaW;QACzB,YAAY,EAAE;YACZ,uBAAuB;YACvB,gBAAgB;YAChB,yBAAyB;YACzB,cAAc;YACd,wBAAwB;SACzB;QACD,KAAK,EAAE;YACL,MAAM;YACN,MAAM;YACN,OAAO;YACP,MAAM;YACN,YAAY;YACZ,kBAAkB;SACnB;QACD,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,MAAM;QAClB,eAAe,EAAE,OAAO;KACzB;IAED,UAAU,EAAE;QACV,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,8CAA8C;QAC3D,OAAO,EAAE;;;;;;;;;;6DAUgD;QACzD,YAAY,EAAE;;;;;;;;;;;;;;;;;;sCAkBoB;QAClC,YAAY,EAAE;YACZ,uBAAuB;YACvB,cAAc;YACd,wBAAwB;YACxB,WAAW;YACX,mBAAmB;SACpB;QACD,KAAK,EAAE;YACL,YAAY;YACZ,WAAW;YACX,cAAc;YACd,MAAM;YACN,kBAAkB;YAClB,MAAM;SACP;QACD,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,QAAQ;QACpB,eAAe,EAAE,MAAM;KACxB;IAED,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,gDAAgD;QAC7D,OAAO,EAAE;;;;;;;;;;iEAUoD;QAC7D,YAAY,EAAE;;;;;;;;;;;;;;;;;;;+CAmB6B;QAC3C,YAAY,EAAE;YACZ,gBAAgB;YAChB,iBAAiB;YACjB,SAAS;YACT,WAAW;YACX,kBAAkB;SACnB;QACD,KAAK,EAAE;YACL,MAAM;YACN,MAAM;YACN,OAAO;YACP,MAAM;YACN,gBAAgB;YAChB,aAAa;SACd;QACD,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,QAAQ;QACpB,eAAe,EAAE,MAAM;KACxB;IAED,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE;;;;;;;;;;oEAUuD;QAChE,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;4BAqBU;QACxB,YAAY,EAAE;YACZ,aAAa;YACb,YAAY;YACZ,mBAAmB;YACnB,iBAAiB;YACjB,wBAAwB;SACzB;QACD,KAAK,EAAE;YACL,MAAM;YACN,MAAM;YACN,kBAAkB;YAClB,YAAY;SACb;QACD,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,MAAM;QAClB,eAAe,EAAE,OAAO;KACzB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAEzC,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAClG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACrG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAED,wCAAwC;IACxC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/agent/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Profile System - v0.2.0
|
|
3
|
+
*
|
|
4
|
+
* Manages USER.md - learned and explicit user preferences.
|
|
5
|
+
* Part of the Persona System (Phase 1.2).
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from "node:fs/promises";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
import { existsSync } from "node:fs";
|
|
10
|
+
const DEFAULT_USER_PROFILE = {
|
|
11
|
+
preferences: {
|
|
12
|
+
coding: {
|
|
13
|
+
style: "balanced",
|
|
14
|
+
comments: "descriptive",
|
|
15
|
+
testing: "basic",
|
|
16
|
+
frameworks: [],
|
|
17
|
+
},
|
|
18
|
+
communication: {
|
|
19
|
+
formality: "casual",
|
|
20
|
+
detailLevel: "medium",
|
|
21
|
+
emojiUsage: true,
|
|
22
|
+
},
|
|
23
|
+
tools: {
|
|
24
|
+
preferredEditor: "vscode",
|
|
25
|
+
preferredShell: "bash",
|
|
26
|
+
preferredModel: "auto",
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
learned: {
|
|
30
|
+
patterns: [],
|
|
31
|
+
dislikes: [],
|
|
32
|
+
favorites: [],
|
|
33
|
+
workflows: [],
|
|
34
|
+
},
|
|
35
|
+
createdAt: new Date().toISOString(),
|
|
36
|
+
updatedAt: new Date().toISOString(),
|
|
37
|
+
};
|
|
38
|
+
const USER_MD_TEMPLATE = `# USER Profile
|
|
39
|
+
|
|
40
|
+
## Identity
|
|
41
|
+
**Name:** {{name}}
|
|
42
|
+
**Email:** {{email}}
|
|
43
|
+
**Timezone:** {{timezone}}
|
|
44
|
+
|
|
45
|
+
## Coding Preferences
|
|
46
|
+
|
|
47
|
+
### Style
|
|
48
|
+
- Approach: {{coding.style}}
|
|
49
|
+
- Comments: {{coding.comments}}
|
|
50
|
+
- Testing: {{coding.testing}}
|
|
51
|
+
- Frameworks: {{coding.frameworks}}
|
|
52
|
+
|
|
53
|
+
### Communication
|
|
54
|
+
- Formality: {{communication.formality}}
|
|
55
|
+
- Detail Level: {{communication.detailLevel}}
|
|
56
|
+
- Emojis: {{communication.emojiUsage}}
|
|
57
|
+
|
|
58
|
+
### Tools
|
|
59
|
+
- Editor: {{tools.preferredEditor}}
|
|
60
|
+
- Shell: {{tools.preferredShell}}
|
|
61
|
+
- Preferred Model: {{tools.preferredModel}}
|
|
62
|
+
|
|
63
|
+
## Learned Preferences
|
|
64
|
+
|
|
65
|
+
### Patterns I Use
|
|
66
|
+
{{#each learned.patterns}}
|
|
67
|
+
- {{this}}
|
|
68
|
+
{{/each}}
|
|
69
|
+
|
|
70
|
+
### Things I Dislike
|
|
71
|
+
{{#each learned.dislikes}}
|
|
72
|
+
- {{this}}
|
|
73
|
+
{{/each}}
|
|
74
|
+
|
|
75
|
+
### Things I Like
|
|
76
|
+
{{#each learned.favorites}}
|
|
77
|
+
- {{this}}
|
|
78
|
+
{{/each}}
|
|
79
|
+
|
|
80
|
+
### Preferred Workflows
|
|
81
|
+
{{#each learned.workflows}}
|
|
82
|
+
#### {{name}}
|
|
83
|
+
{{description}}
|
|
84
|
+
|
|
85
|
+
Steps:
|
|
86
|
+
{{#each steps}}
|
|
87
|
+
1. {{this}}
|
|
88
|
+
{{/each}}
|
|
89
|
+
|
|
90
|
+
Use when: {{contexts}}
|
|
91
|
+
{{/each}}
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
*Last updated: {{updatedAt}}*
|
|
95
|
+
`;
|
|
96
|
+
/**
|
|
97
|
+
* Load user profile from USER.md
|
|
98
|
+
*/
|
|
99
|
+
export async function loadUserProfile(workspaceDir) {
|
|
100
|
+
const userPath = path.join(workspaceDir, "USER.md");
|
|
101
|
+
if (!existsSync(userPath)) {
|
|
102
|
+
return { ...DEFAULT_USER_PROFILE };
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const content = await fs.readFile(userPath, "utf-8");
|
|
106
|
+
return parseUserProfile(content);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.warn("[UserProfile] Failed to load USER.md, using defaults");
|
|
110
|
+
return { ...DEFAULT_USER_PROFILE };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Save user profile to USER.md
|
|
115
|
+
*/
|
|
116
|
+
export async function saveUserProfile(workspaceDir, profile) {
|
|
117
|
+
const userPath = path.join(workspaceDir, "USER.md");
|
|
118
|
+
profile.updatedAt = new Date().toISOString();
|
|
119
|
+
const content = serializeUserProfile(profile);
|
|
120
|
+
await fs.writeFile(userPath, content, "utf-8");
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Parse USER.md content into UserProfile
|
|
124
|
+
*/
|
|
125
|
+
function parseUserProfile(content) {
|
|
126
|
+
const profile = { ...DEFAULT_USER_PROFILE };
|
|
127
|
+
// Simple parsing - extract values from markdown
|
|
128
|
+
const lines = content.split("\n");
|
|
129
|
+
for (let i = 0; i < lines.length; i++) {
|
|
130
|
+
const line = lines[i].trim();
|
|
131
|
+
// Parse identity
|
|
132
|
+
if (line.startsWith("**Name:**")) {
|
|
133
|
+
profile.name = line.replace("**Name:**", "").trim() || undefined;
|
|
134
|
+
}
|
|
135
|
+
if (line.startsWith("**Email:**")) {
|
|
136
|
+
profile.email = line.replace("**Email:**", "").trim() || undefined;
|
|
137
|
+
}
|
|
138
|
+
if (line.startsWith("**Timezone:**")) {
|
|
139
|
+
profile.timezone = line.replace("**Timezone:**", "").trim() || undefined;
|
|
140
|
+
}
|
|
141
|
+
// Parse coding style
|
|
142
|
+
if (line.includes("Approach:") && profile.preferences) {
|
|
143
|
+
const value = line.split(":")[1]?.trim();
|
|
144
|
+
if (value)
|
|
145
|
+
profile.preferences.coding.style = value;
|
|
146
|
+
}
|
|
147
|
+
// Parse communication
|
|
148
|
+
if (line.includes("Formality:") && profile.preferences) {
|
|
149
|
+
const value = line.split(":")[1]?.trim();
|
|
150
|
+
if (value)
|
|
151
|
+
profile.preferences.communication.formality = value;
|
|
152
|
+
}
|
|
153
|
+
// Parse learned sections (simple list parsing)
|
|
154
|
+
if (line === "### Things I Dislike") {
|
|
155
|
+
let j = i + 1;
|
|
156
|
+
while (j < lines.length && lines[j].startsWith("- ")) {
|
|
157
|
+
const item = lines[j].replace("- ", "").trim();
|
|
158
|
+
if (item)
|
|
159
|
+
profile.learned.dislikes.push(item);
|
|
160
|
+
j++;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (line === "### Things I Like") {
|
|
164
|
+
let j = i + 1;
|
|
165
|
+
while (j < lines.length && lines[j].startsWith("- ")) {
|
|
166
|
+
const item = lines[j].replace("- ", "").trim();
|
|
167
|
+
if (item)
|
|
168
|
+
profile.learned.favorites.push(item);
|
|
169
|
+
j++;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return profile;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Serialize UserProfile to USER.md content
|
|
177
|
+
*/
|
|
178
|
+
function serializeUserProfile(profile) {
|
|
179
|
+
// Build markdown manually for now
|
|
180
|
+
const sections = [];
|
|
181
|
+
sections.push("# USER Profile\n");
|
|
182
|
+
// Identity
|
|
183
|
+
sections.push("## Identity");
|
|
184
|
+
sections.push(`**Name:** ${profile.name || ""}`);
|
|
185
|
+
sections.push(`**Email:** ${profile.email || ""}`);
|
|
186
|
+
sections.push(`**Timezone:** ${profile.timezone || ""}\n`);
|
|
187
|
+
// Coding preferences
|
|
188
|
+
sections.push("## Coding Preferences\n");
|
|
189
|
+
sections.push("### Style");
|
|
190
|
+
sections.push(`- Approach: ${profile.preferences.coding.style}`);
|
|
191
|
+
sections.push(`- Comments: ${profile.preferences.coding.comments}`);
|
|
192
|
+
sections.push(`- Testing: ${profile.preferences.coding.testing}`);
|
|
193
|
+
sections.push(`- Frameworks: ${profile.preferences.coding.frameworks.join(", ") || "None specified"}\n`);
|
|
194
|
+
// Communication
|
|
195
|
+
sections.push("### Communication");
|
|
196
|
+
sections.push(`- Formality: ${profile.preferences.communication.formality}`);
|
|
197
|
+
sections.push(`- Detail Level: ${profile.preferences.communication.detailLevel}`);
|
|
198
|
+
sections.push(`- Emojis: ${profile.preferences.communication.emojiUsage ? "Yes" : "No"}\n`);
|
|
199
|
+
// Tools
|
|
200
|
+
sections.push("### Tools");
|
|
201
|
+
sections.push(`- Editor: ${profile.preferences.tools.preferredEditor}`);
|
|
202
|
+
sections.push(`- Shell: ${profile.preferences.tools.preferredShell}`);
|
|
203
|
+
sections.push(`- Preferred Model: ${profile.preferences.tools.preferredModel}\n`);
|
|
204
|
+
// Learned
|
|
205
|
+
sections.push("## Learned Preferences\n");
|
|
206
|
+
sections.push("### Patterns I Use");
|
|
207
|
+
if (profile.learned.patterns.length === 0) {
|
|
208
|
+
sections.push("_No patterns learned yet_\n");
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
for (const pattern of profile.learned.patterns) {
|
|
212
|
+
sections.push(`- ${pattern}`);
|
|
213
|
+
}
|
|
214
|
+
sections.push("");
|
|
215
|
+
}
|
|
216
|
+
sections.push("### Things I Dislike");
|
|
217
|
+
if (profile.learned.dislikes.length === 0) {
|
|
218
|
+
sections.push("_None recorded_\n");
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
for (const dislike of profile.learned.dislikes) {
|
|
222
|
+
sections.push(`- ${dislike}`);
|
|
223
|
+
}
|
|
224
|
+
sections.push("");
|
|
225
|
+
}
|
|
226
|
+
sections.push("### Things I Like");
|
|
227
|
+
if (profile.learned.favorites.length === 0) {
|
|
228
|
+
sections.push("_None recorded_\n");
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
for (const favorite of profile.learned.favorites) {
|
|
232
|
+
sections.push(`- ${favorite}`);
|
|
233
|
+
}
|
|
234
|
+
sections.push("");
|
|
235
|
+
}
|
|
236
|
+
sections.push("---");
|
|
237
|
+
sections.push(`*Last updated: ${profile.updatedAt}*`);
|
|
238
|
+
return sections.join("\n");
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Learn from user interaction
|
|
242
|
+
*/
|
|
243
|
+
export async function learnPreference(workspaceDir, type, value) {
|
|
244
|
+
const profile = await loadUserProfile(workspaceDir);
|
|
245
|
+
switch (type) {
|
|
246
|
+
case "like":
|
|
247
|
+
if (!profile.learned.favorites.includes(value)) {
|
|
248
|
+
profile.learned.favorites.push(value);
|
|
249
|
+
}
|
|
250
|
+
break;
|
|
251
|
+
case "dislike":
|
|
252
|
+
if (!profile.learned.dislikes.includes(value)) {
|
|
253
|
+
profile.learned.dislikes.push(value);
|
|
254
|
+
}
|
|
255
|
+
break;
|
|
256
|
+
case "pattern":
|
|
257
|
+
if (!profile.learned.patterns.includes(value)) {
|
|
258
|
+
profile.learned.patterns.push(value);
|
|
259
|
+
}
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
await saveUserProfile(workspaceDir, profile);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Create default USER.md if missing
|
|
266
|
+
*/
|
|
267
|
+
export async function ensureUserProfile(workspaceDir) {
|
|
268
|
+
const userPath = path.join(workspaceDir, "USER.md");
|
|
269
|
+
if (existsSync(userPath)) {
|
|
270
|
+
console.log("[UserProfile] USER.md exists");
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
const profile = { ...DEFAULT_USER_PROFILE };
|
|
274
|
+
await saveUserProfile(workspaceDir, profile);
|
|
275
|
+
console.log("[UserProfile] Created default USER.md");
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get user preferences as system prompt section
|
|
279
|
+
*/
|
|
280
|
+
export async function getUserPreferencesForPrompt(workspaceDir) {
|
|
281
|
+
const profile = await loadUserProfile(workspaceDir);
|
|
282
|
+
const parts = [];
|
|
283
|
+
parts.push("<!-- User Profile -->");
|
|
284
|
+
if (profile.name) {
|
|
285
|
+
parts.push(`Name: ${profile.name}`);
|
|
286
|
+
}
|
|
287
|
+
parts.push("Preferences:");
|
|
288
|
+
parts.push(`- Coding style: ${profile.preferences.coding.style}`);
|
|
289
|
+
parts.push(`- Comments: ${profile.preferences.coding.comments}`);
|
|
290
|
+
parts.push(`- Testing: ${profile.preferences.coding.testing}`);
|
|
291
|
+
parts.push(`- Communication: ${profile.preferences.communication.formality}, ${profile.preferences.communication.detailLevel} detail`);
|
|
292
|
+
if (profile.learned.favorites.length > 0) {
|
|
293
|
+
parts.push(`- Preferences: ${profile.learned.favorites.slice(0, 3).join(", ")}`);
|
|
294
|
+
}
|
|
295
|
+
if (profile.learned.dislikes.length > 0) {
|
|
296
|
+
parts.push(`- Avoid: ${profile.learned.dislikes.slice(0, 3).join(", ")}`);
|
|
297
|
+
}
|
|
298
|
+
return parts.join("\n");
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=user-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-profile.js","sourceRoot":"","sources":["../../../src/agent/user-profile.ts"],"names":[],"mappings":"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"}
|