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.
Files changed (120) hide show
  1. package/HEARTBEAT.md +66 -32
  2. package/README.md +220 -1
  3. package/dist/package.json +3 -2
  4. package/dist/src/agent/bootstrap-loader.js +138 -0
  5. package/dist/src/agent/bootstrap-loader.js.map +1 -0
  6. package/dist/src/agent/context-pruning.js +279 -0
  7. package/dist/src/agent/context-pruning.js.map +1 -0
  8. package/dist/src/agent/dynamic-personality.js +211 -0
  9. package/dist/src/agent/dynamic-personality.js.map +1 -0
  10. package/dist/src/agent/embedded-runner.js +79 -0
  11. package/dist/src/agent/embedded-runner.js.map +1 -0
  12. package/dist/src/agent/index.js +16 -0
  13. package/dist/src/agent/index.js.map +1 -0
  14. package/dist/src/agent/system-prompt.js +84 -0
  15. package/dist/src/agent/system-prompt.js.map +1 -0
  16. package/dist/src/agent/task-router.js +194 -0
  17. package/dist/src/agent/task-router.js.map +1 -0
  18. package/dist/src/agent/tools/index.js +2 -0
  19. package/dist/src/agent/tools/index.js.map +1 -0
  20. package/dist/src/agent/tools/spawn-agent.js +200 -0
  21. package/dist/src/agent/tools/spawn-agent.js.map +1 -0
  22. package/dist/src/agent/types/definitions.js +317 -0
  23. package/dist/src/agent/types/definitions.js.map +1 -0
  24. package/dist/src/agent/types/index.js +2 -0
  25. package/dist/src/agent/types/index.js.map +1 -0
  26. package/dist/src/agent/user-profile.js +300 -0
  27. package/dist/src/agent/user-profile.js.map +1 -0
  28. package/dist/src/agents/task-router.js +194 -0
  29. package/dist/src/agents/task-router.js.map +1 -0
  30. package/dist/src/agents/tools/index.js +2 -0
  31. package/dist/src/agents/tools/index.js.map +1 -0
  32. package/dist/src/agents/tools/spawn-agent.js +200 -0
  33. package/dist/src/agents/tools/spawn-agent.js.map +1 -0
  34. package/dist/src/agents/types/definitions.js +317 -0
  35. package/dist/src/agents/types/definitions.js.map +1 -0
  36. package/dist/src/agents/types/index.js +2 -0
  37. package/dist/src/agents/types/index.js.map +1 -0
  38. package/dist/src/cli/commands/embedded.js +36 -0
  39. package/dist/src/cli/commands/embedded.js.map +1 -0
  40. package/dist/src/cli/commands/gateway.js +127 -166
  41. package/dist/src/cli/commands/gateway.js.map +1 -1
  42. package/dist/src/cli/program-fixed.js +1 -0
  43. package/dist/src/cli/program-fixed.js.map +1 -0
  44. package/dist/src/cli/program.js +10 -29
  45. package/dist/src/cli/program.js.map +1 -1
  46. package/dist/src/extensions/core/agent-lifecycle-extension.js +323 -0
  47. package/dist/src/extensions/core/agent-lifecycle-extension.js.map +1 -0
  48. package/dist/src/extensions/core/agent-orchestrator-extension.js +642 -0
  49. package/dist/src/extensions/core/agent-orchestrator-extension.js.map +1 -0
  50. package/dist/src/extensions/core/agent-workspace-extension.js +174 -0
  51. package/dist/src/extensions/core/agent-workspace-extension.js.map +1 -0
  52. package/dist/src/extensions/core/autonomous-executor-extension.js +145 -0
  53. package/dist/src/extensions/core/autonomous-executor-extension.js.map +1 -0
  54. package/dist/src/extensions/core/autonomous-subagent-extension.js +333 -0
  55. package/dist/src/extensions/core/autonomous-subagent-extension.js.map +1 -0
  56. package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js +323 -0
  57. package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js.map +1 -0
  58. package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js +333 -0
  59. package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js.map +1 -0
  60. package/dist/src/extensions/core/deprecated/subagent-extension.js +647 -0
  61. package/dist/src/extensions/core/deprecated/subagent-extension.js.map +1 -0
  62. package/dist/src/extensions/core/mode-manager-extension.js +11 -0
  63. package/dist/src/extensions/core/mode-manager-extension.js.map +1 -1
  64. package/dist/src/extensions/core/perennial-memory-extension.js +10 -2
  65. package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -1
  66. package/dist/src/extensions/core/persona-loader-extension.js +61 -129
  67. package/dist/src/extensions/core/persona-loader-extension.js.map +1 -1
  68. package/dist/src/extensions/core/websearch-enhanced-extension.js +705 -0
  69. package/dist/src/extensions/core/websearch-enhanced-extension.js.map +1 -0
  70. package/dist/src/extensions/core/websearch-v2-extension.js +303 -0
  71. package/dist/src/extensions/core/websearch-v2-extension.js.map +1 -0
  72. package/dist/src/gateway/discord-bot.js +185 -0
  73. package/dist/src/gateway/discord-bot.js.map +1 -0
  74. package/dist/src/gateway/index.js +10 -350
  75. package/dist/src/gateway/index.js.map +1 -1
  76. package/dist/src/gateway/server.js +325 -0
  77. package/dist/src/gateway/server.js.map +1 -0
  78. package/dist/src/gateway/websocket-server.js +142 -0
  79. package/dist/src/gateway/websocket-server.js.map +1 -0
  80. package/dist/src/heartbeat/checkin.js +185 -0
  81. package/dist/src/heartbeat/checkin.js.map +1 -0
  82. package/dist/src/heartbeat/index.js +5 -0
  83. package/dist/src/heartbeat/index.js.map +1 -0
  84. package/dist/src/heartbeat/notifications.js +216 -0
  85. package/dist/src/heartbeat/notifications.js.map +1 -0
  86. package/dist/src/heartbeat/scheduler.js +284 -0
  87. package/dist/src/heartbeat/scheduler.js.map +1 -0
  88. package/dist/src/index.js +21 -3
  89. package/dist/src/index.js.map +1 -1
  90. package/dist/src/mode/auto-detector.js +211 -0
  91. package/dist/src/mode/auto-detector.js.map +1 -0
  92. package/dist/src/mode/index.js +3 -0
  93. package/dist/src/mode/index.js.map +1 -0
  94. package/dist/src/mode/natural-switcher.js +123 -0
  95. package/dist/src/mode/natural-switcher.js.map +1 -0
  96. package/dist/src/skills/builtin/api-worker.js +88 -0
  97. package/dist/src/skills/builtin/api-worker.js.map +1 -0
  98. package/dist/src/skills/builtin/nextjs-worker.js +55 -0
  99. package/dist/src/skills/builtin/nextjs-worker.js.map +1 -0
  100. package/dist/src/skills/builtin/real-workers.js +166 -0
  101. package/dist/src/skills/builtin/real-workers.js.map +1 -0
  102. package/dist/src/skills/builtin/sql-worker.js +61 -0
  103. package/dist/src/skills/builtin/sql-worker.js.map +1 -0
  104. package/dist/src/skills/builtin/test-worker.js +79 -0
  105. package/dist/src/skills/builtin/test-worker.js.map +1 -0
  106. package/dist/src/skills/builtin/web-research.js +77 -0
  107. package/dist/src/skills/builtin/web-research.js.map +1 -0
  108. package/dist/src/skills/framework.js +250 -0
  109. package/dist/src/skills/framework.js.map +1 -0
  110. package/dist/src/skills/index.js +10 -10
  111. package/dist/src/skills/index.js.map +1 -1
  112. package/dist/src/streaming/block-streamer.js +172 -0
  113. package/dist/src/streaming/block-streamer.js.map +1 -0
  114. package/dist/src/streaming/index.js +2 -0
  115. package/dist/src/streaming/index.js.map +1 -0
  116. package/dist/src/workspace/index.js +2 -0
  117. package/dist/src/workspace/index.js.map +1 -0
  118. package/dist/src/workspace/manager.js +181 -0
  119. package/dist/src/workspace/manager.js.map +1 -0
  120. 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,2 @@
1
+ export { AGENT_TYPES, getAgentType, getAllAgentTypes, getAgentTypesForTask } from "./definitions.js";
2
+ //# sourceMappingURL=index.js.map
@@ -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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"}