@stackmemoryai/stackmemory 0.3.9 → 0.3.10

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 (40) hide show
  1. package/README.md +53 -0
  2. package/dist/agents/core/agent-task-manager.js +12 -1
  3. package/dist/agents/core/agent-task-manager.js.map +3 -3
  4. package/dist/agents/testing-agent.js +610 -0
  5. package/dist/agents/testing-agent.js.map +7 -0
  6. package/dist/cli/claude-sm.js +2 -2
  7. package/dist/cli/claude-sm.js.map +2 -2
  8. package/dist/cli/codex-sm.js +2 -2
  9. package/dist/cli/codex-sm.js.map +2 -2
  10. package/dist/cli/commands/handoff.js +65 -18
  11. package/dist/cli/commands/handoff.js.map +3 -3
  12. package/dist/cli/commands/onboard.js +3 -3
  13. package/dist/cli/commands/onboard.js.map +2 -2
  14. package/dist/cli/commands/quality.js +2 -2
  15. package/dist/cli/commands/quality.js.map +2 -2
  16. package/dist/cli/commands/skills.js +113 -28
  17. package/dist/cli/commands/skills.js.map +2 -2
  18. package/dist/cli/commands/test.js +282 -0
  19. package/dist/cli/commands/test.js.map +7 -0
  20. package/dist/cli/commands/worktree.js +28 -10
  21. package/dist/cli/commands/worktree.js.map +2 -2
  22. package/dist/cli/index.js +2 -0
  23. package/dist/cli/index.js.map +2 -2
  24. package/dist/core/config/config-manager.js +26 -0
  25. package/dist/core/config/config-manager.js.map +3 -3
  26. package/dist/core/context/frame-manager.js +139 -0
  27. package/dist/core/context/frame-manager.js.map +2 -2
  28. package/dist/core/context/refactored-frame-manager.js +180 -1
  29. package/dist/core/context/refactored-frame-manager.js.map +2 -2
  30. package/dist/core/utils/update-checker.js +2 -2
  31. package/dist/core/utils/update-checker.js.map +2 -2
  32. package/dist/integrations/claude-code/subagent-client-stub.js +16 -0
  33. package/dist/integrations/claude-code/subagent-client-stub.js.map +7 -0
  34. package/dist/skills/claude-skills.js +97 -3
  35. package/dist/skills/claude-skills.js.map +2 -2
  36. package/dist/skills/security-secrets-scanner.js +21 -6
  37. package/dist/skills/security-secrets-scanner.js.map +2 -2
  38. package/dist/skills/unified-rlm-orchestrator.js +400 -0
  39. package/dist/skills/unified-rlm-orchestrator.js.map +7 -0
  40. package/package.json +3 -2
@@ -0,0 +1,400 @@
1
+ import {
2
+ RecursiveAgentOrchestrator
3
+ } from "./recursive-agent-orchestrator.js";
4
+ import {
5
+ ClaudeSkillsManager
6
+ } from "./claude-skills.js";
7
+ import { logger } from "../core/monitoring/logger.js";
8
+ class UnifiedRLMOrchestrator {
9
+ rlmOrchestrator;
10
+ skillsManager;
11
+ skillMappings;
12
+ constructor(frameManager, dualStackManager, contextRetriever, taskStore, skillContext) {
13
+ this.rlmOrchestrator = new RecursiveAgentOrchestrator(
14
+ frameManager,
15
+ dualStackManager,
16
+ contextRetriever,
17
+ taskStore
18
+ );
19
+ this.skillsManager = new ClaudeSkillsManager(skillContext);
20
+ this.skillMappings = this.initializeSkillMappings();
21
+ logger.info("Unified RLM Orchestrator initialized with RLM-first routing");
22
+ }
23
+ /**
24
+ * Initialize skill to RLM agent mappings
25
+ */
26
+ initializeSkillMappings() {
27
+ const mappings = /* @__PURE__ */ new Map();
28
+ mappings.set("handoff", {
29
+ skillName: "handoff",
30
+ primaryAgent: "context",
31
+ secondaryAgents: ["planning"],
32
+ taskTemplate: "Prepare comprehensive handoff to {targetUser}: {message}. Extract relevant context, identify dependencies, and create actionable items.",
33
+ defaultOptions: {
34
+ maxParallel: 3,
35
+ reviewStages: 1,
36
+ shareContextRealtime: true
37
+ },
38
+ preprocessor: (args, options) => ({
39
+ task: `Handoff to ${args[0]}: ${args[1]}`,
40
+ context: {
41
+ targetUser: args[0],
42
+ message: args[1],
43
+ priority: options.priority || "medium",
44
+ frames: options.frames || []
45
+ }
46
+ }),
47
+ postprocessor: (result) => ({
48
+ success: result.success,
49
+ message: `Handoff ${result.success ? "completed" : "failed"}`,
50
+ data: result.rootNode.result
51
+ })
52
+ });
53
+ mappings.set("checkpoint", {
54
+ skillName: "checkpoint",
55
+ primaryAgent: "context",
56
+ secondaryAgents: ["code"],
57
+ taskTemplate: "Create recovery checkpoint: {description}. Capture current state, identify risky operations, and backup critical files.",
58
+ defaultOptions: {
59
+ maxParallel: 2,
60
+ reviewStages: 0,
61
+ verboseLogging: false
62
+ },
63
+ preprocessor: (args, options) => ({
64
+ task: `${args[0]} checkpoint: ${args[1]}`,
65
+ context: {
66
+ operation: args[0],
67
+ description: args[1],
68
+ ...options
69
+ }
70
+ })
71
+ });
72
+ mappings.set("dig", {
73
+ skillName: "dig",
74
+ primaryAgent: "context",
75
+ taskTemplate: "Deep archaeological search: {query}. Analyze patterns, extract decisions, and build timeline.",
76
+ defaultOptions: {
77
+ maxParallel: 1,
78
+ maxTokensPerAgent: 5e4,
79
+ reviewStages: 0
80
+ },
81
+ preprocessor: (args, options) => ({
82
+ task: `Archaeological dig: ${args[0]}`,
83
+ context: {
84
+ query: args[0],
85
+ depth: options.depth || "30days",
86
+ patterns: options.patterns,
87
+ decisions: options.decisions,
88
+ timeline: options.timeline
89
+ }
90
+ })
91
+ });
92
+ mappings.set("lint", {
93
+ skillName: "lint",
94
+ primaryAgent: "linting",
95
+ secondaryAgents: ["improve"],
96
+ taskTemplate: "Comprehensive linting of {path}: Check syntax, types, formatting, security, performance, and dead code. Provide fixes.",
97
+ defaultOptions: {
98
+ maxParallel: 1,
99
+ reviewStages: 0,
100
+ verboseLogging: true
101
+ },
102
+ preprocessor: (args, options) => ({
103
+ task: `Lint ${args[0] || "current directory"}`,
104
+ context: {
105
+ path: args[0] || process.cwd(),
106
+ fix: options.fix,
107
+ focus: options.security ? "security" : options.performance ? "performance" : "all"
108
+ }
109
+ }),
110
+ postprocessor: (result) => {
111
+ const lintingNode = this.findNodeByAgent(result.rootNode, "linting");
112
+ return {
113
+ success: result.success,
114
+ message: `Found ${result.issuesFound} issues, fixed ${result.issuesFixed}`,
115
+ data: {
116
+ issues: lintingNode?.result?.issues || [],
117
+ fixes: lintingNode?.result?.fixes || [],
118
+ stats: {
119
+ found: result.issuesFound,
120
+ fixed: result.issuesFixed,
121
+ duration: result.duration
122
+ }
123
+ }
124
+ };
125
+ }
126
+ });
127
+ mappings.set("test", {
128
+ skillName: "test",
129
+ primaryAgent: "testing",
130
+ secondaryAgents: ["code", "review"],
131
+ taskTemplate: "Generate comprehensive {testMode} tests for {target}. Ensure high coverage and meaningful assertions.",
132
+ defaultOptions: {
133
+ maxParallel: 3,
134
+ testGenerationMode: "all",
135
+ reviewStages: 2,
136
+ qualityThreshold: 0.9
137
+ },
138
+ preprocessor: (args, options) => ({
139
+ task: `Generate tests for ${args[0] || "project"}`,
140
+ context: {
141
+ target: args[0] || process.cwd(),
142
+ testMode: options.mode || "all",
143
+ coverage: options.coverage || "high"
144
+ }
145
+ })
146
+ });
147
+ mappings.set("review", {
148
+ skillName: "review",
149
+ primaryAgent: "review",
150
+ secondaryAgents: ["improve", "testing"],
151
+ taskTemplate: "Multi-stage code review of {target}. Analyze architecture, quality, performance, security. Suggest improvements.",
152
+ defaultOptions: {
153
+ maxParallel: 2,
154
+ reviewStages: 3,
155
+ qualityThreshold: 0.85,
156
+ verboseLogging: true
157
+ },
158
+ preprocessor: (args, options) => ({
159
+ task: `Review code in ${args[0] || "project"}`,
160
+ context: {
161
+ target: args[0] || process.cwd(),
162
+ focus: options.focus || "all",
163
+ autofix: options.fix || false
164
+ }
165
+ })
166
+ });
167
+ mappings.set("refactor", {
168
+ skillName: "refactor",
169
+ primaryAgent: "code",
170
+ secondaryAgents: ["review", "improve", "testing"],
171
+ taskTemplate: "Refactor {target}: Improve architecture, reduce complexity, enhance maintainability. Preserve functionality.",
172
+ defaultOptions: {
173
+ maxParallel: 4,
174
+ reviewStages: 2,
175
+ qualityThreshold: 0.9,
176
+ testGenerationMode: "unit"
177
+ },
178
+ preprocessor: (args, options) => ({
179
+ task: `Refactor ${args[0] || "codebase"}`,
180
+ context: {
181
+ target: args[0] || process.cwd(),
182
+ scope: options.scope || "moderate",
183
+ preserveApi: options.preserveApi !== false
184
+ }
185
+ })
186
+ });
187
+ mappings.set("publish", {
188
+ skillName: "publish",
189
+ primaryAgent: "publish",
190
+ secondaryAgents: ["testing", "linting"],
191
+ taskTemplate: "Prepare and execute {publishType} release. Run tests, update versions, generate changelog, publish.",
192
+ defaultOptions: {
193
+ maxParallel: 1,
194
+ reviewStages: 1,
195
+ testGenerationMode: "all"
196
+ },
197
+ preprocessor: (args, options) => ({
198
+ task: `Publish ${options.type || "npm"} release`,
199
+ context: {
200
+ version: args[0],
201
+ publishType: options.type || "npm",
202
+ prerelease: options.prerelease || false,
203
+ skipTests: options.skipTests || false
204
+ }
205
+ })
206
+ });
207
+ return mappings;
208
+ }
209
+ /**
210
+ * Execute any skill through RLM orchestration first
211
+ */
212
+ async executeSkill(skillName, args, options) {
213
+ logger.info(`Executing skill through RLM: ${skillName}`, { args, options });
214
+ const mapping = this.skillMappings.get(skillName);
215
+ if (mapping) {
216
+ return this.executeViaRLM(mapping, args, options || {});
217
+ }
218
+ if (skillName === "rlm") {
219
+ const task = args.join(" ") || "Analyze and optimize current code";
220
+ const result = await this.rlmOrchestrator.execute(
221
+ task,
222
+ options || {},
223
+ options
224
+ );
225
+ return {
226
+ success: result.success,
227
+ message: `RLM execution ${result.success ? "completed" : "failed"}`,
228
+ data: result
229
+ };
230
+ }
231
+ logger.warn(`Skill ${skillName} not mapped to RLM, using legacy execution`);
232
+ return this.skillsManager.executeSkill(skillName, args, options);
233
+ }
234
+ /**
235
+ * Execute skill via RLM orchestration
236
+ */
237
+ async executeViaRLM(mapping, args, options) {
238
+ try {
239
+ const { task, context } = mapping.preprocessor ? mapping.preprocessor(args, options) : {
240
+ task: mapping.taskTemplate.replace("{args}", args.join(" ")),
241
+ context: { args, ...options }
242
+ };
243
+ const rlmOptions = {
244
+ ...mapping.defaultOptions,
245
+ ...options,
246
+ // Force specific agents if specified
247
+ agents: [mapping.primaryAgent, ...mapping.secondaryAgents || []]
248
+ };
249
+ const result = await this.rlmOrchestrator.execute(
250
+ task,
251
+ context,
252
+ rlmOptions
253
+ );
254
+ if (mapping.postprocessor) {
255
+ return mapping.postprocessor(result);
256
+ }
257
+ return {
258
+ success: result.success,
259
+ message: `${mapping.skillName} ${result.success ? "completed" : "failed"}`,
260
+ data: {
261
+ duration: result.duration,
262
+ tokens: result.totalTokens,
263
+ cost: result.totalCost,
264
+ improvements: result.improvements,
265
+ testsGenerated: result.testsGenerated,
266
+ issuesFound: result.issuesFound,
267
+ issuesFixed: result.issuesFixed,
268
+ details: result.rootNode
269
+ }
270
+ };
271
+ } catch (error) {
272
+ logger.error(`RLM execution failed for ${mapping.skillName}:`, error);
273
+ return {
274
+ success: false,
275
+ message: `Failed to execute ${mapping.skillName}: ${error.message}`
276
+ };
277
+ }
278
+ }
279
+ /**
280
+ * Helper: Find node by agent type in task tree
281
+ */
282
+ findNodeByAgent(node, agentType) {
283
+ if (node.agent === agentType) {
284
+ return node;
285
+ }
286
+ if (node.children) {
287
+ for (const child of node.children) {
288
+ const found = this.findNodeByAgent(child, agentType);
289
+ if (found) return found;
290
+ }
291
+ }
292
+ return null;
293
+ }
294
+ /**
295
+ * Get available skills (all RLM-mapped + legacy)
296
+ */
297
+ getAvailableSkills() {
298
+ const rlmSkills = Array.from(this.skillMappings.keys());
299
+ const legacySkills = this.skillsManager.getAvailableSkills();
300
+ const allSkills = /* @__PURE__ */ new Set([...rlmSkills, ...legacySkills, "rlm"]);
301
+ return Array.from(allSkills);
302
+ }
303
+ /**
304
+ * Get skill help
305
+ */
306
+ getSkillHelp(skillName) {
307
+ const mapping = this.skillMappings.get(skillName);
308
+ if (mapping) {
309
+ return `
310
+ ${skillName} (RLM-Orchestrated)
311
+ Primary Agent: ${mapping.primaryAgent}
312
+ Secondary Agents: ${mapping.secondaryAgents?.join(", ") || "none"}
313
+
314
+ ${mapping.taskTemplate}
315
+
316
+ This skill is executed through RLM orchestration for:
317
+ - Automatic task decomposition
318
+ - Parallel agent execution
319
+ - Multi-stage quality review
320
+ - Comprehensive result aggregation
321
+ `;
322
+ }
323
+ return this.skillsManager.getSkillHelp(skillName);
324
+ }
325
+ /**
326
+ * Execute task with intelligent routing
327
+ */
328
+ async executeTask(task, context) {
329
+ const taskAnalysis = this.analyzeTask(task);
330
+ if (taskAnalysis.suggestedSkill) {
331
+ return this.executeSkill(
332
+ taskAnalysis.suggestedSkill,
333
+ taskAnalysis.args,
334
+ taskAnalysis.options
335
+ );
336
+ }
337
+ const result = await this.rlmOrchestrator.execute(task, context || {}, {
338
+ maxParallel: 5,
339
+ reviewStages: 2,
340
+ qualityThreshold: 0.85,
341
+ verboseLogging: true
342
+ });
343
+ return {
344
+ success: result.success,
345
+ message: `Task ${result.success ? "completed" : "failed"}`,
346
+ data: result
347
+ };
348
+ }
349
+ /**
350
+ * Analyze task to determine best routing
351
+ */
352
+ analyzeTask(task) {
353
+ const taskLower = task.toLowerCase();
354
+ const patterns = [
355
+ { pattern: /lint|format|style|quality/i, skill: "lint" },
356
+ { pattern: /test|coverage|unit|integration/i, skill: "test" },
357
+ { pattern: /review|analyze|improve/i, skill: "review" },
358
+ { pattern: /refactor|restructure|clean/i, skill: "refactor" },
359
+ { pattern: /handoff|transfer|pass/i, skill: "handoff" },
360
+ { pattern: /checkpoint|backup|save/i, skill: "checkpoint" },
361
+ { pattern: /search|find|dig|history/i, skill: "dig" },
362
+ { pattern: /publish|release|deploy/i, skill: "publish" }
363
+ ];
364
+ for (const { pattern, skill } of patterns) {
365
+ if (pattern.test(taskLower)) {
366
+ return {
367
+ suggestedSkill: skill,
368
+ args: [task],
369
+ options: {}
370
+ };
371
+ }
372
+ }
373
+ return {
374
+ args: [task],
375
+ options: {}
376
+ };
377
+ }
378
+ }
379
+ let unifiedOrchestrator = null;
380
+ function initializeUnifiedOrchestrator(frameManager, dualStackManager, contextRetriever, taskStore, skillContext) {
381
+ if (!unifiedOrchestrator) {
382
+ unifiedOrchestrator = new UnifiedRLMOrchestrator(
383
+ frameManager,
384
+ dualStackManager,
385
+ contextRetriever,
386
+ taskStore,
387
+ skillContext
388
+ );
389
+ }
390
+ return unifiedOrchestrator;
391
+ }
392
+ function getUnifiedOrchestrator() {
393
+ return unifiedOrchestrator;
394
+ }
395
+ export {
396
+ UnifiedRLMOrchestrator,
397
+ getUnifiedOrchestrator,
398
+ initializeUnifiedOrchestrator
399
+ };
400
+ //# sourceMappingURL=unified-rlm-orchestrator.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/skills/unified-rlm-orchestrator.ts"],
4
+ "sourcesContent": ["/**\n * Unified RLM-First Orchestrator for StackMemory\n *\n * All skills and tasks flow through RLM orchestration first,\n * ensuring consistent decomposition, parallel execution, and quality control.\n */\n\nimport {\n RecursiveAgentOrchestrator,\n type RLMOptions,\n type SubagentType,\n type ExecutionResult,\n} from './recursive-agent-orchestrator.js';\nimport {\n ClaudeSkillsManager,\n type SkillContext,\n type SkillResult,\n} from './claude-skills.js';\nimport { logger } from '../core/monitoring/logger.js';\nimport type { DualStackManager } from '../core/context/dual-stack-manager.js';\nimport type { ContextRetriever } from '../core/retrieval/context-retriever.js';\nimport type { FrameManager } from '../core/context/frame-manager.js';\nimport type { PebblesTaskStore } from '../features/tasks/pebbles-task-store.js';\n\n// Skill to RLM mapping configuration\ninterface SkillToRLMConfig {\n skillName: string;\n primaryAgent: SubagentType;\n secondaryAgents?: SubagentType[];\n taskTemplate: string;\n defaultOptions?: Partial<RLMOptions>;\n preprocessor?: (\n args: string[],\n options: Record<string, any>\n ) => { task: string; context: Record<string, any> };\n postprocessor?: (result: ExecutionResult) => SkillResult;\n}\n\n/**\n * UnifiedRLMOrchestrator - Routes all skills through RLM first\n */\nexport class UnifiedRLMOrchestrator {\n private rlmOrchestrator: RecursiveAgentOrchestrator;\n private skillsManager: ClaudeSkillsManager;\n private skillMappings: Map<string, SkillToRLMConfig>;\n\n constructor(\n frameManager: FrameManager,\n dualStackManager: DualStackManager,\n contextRetriever: ContextRetriever,\n taskStore: PebblesTaskStore,\n skillContext: SkillContext\n ) {\n // Initialize RLM orchestrator\n this.rlmOrchestrator = new RecursiveAgentOrchestrator(\n frameManager,\n dualStackManager,\n contextRetriever,\n taskStore\n );\n\n // Initialize skills manager (for legacy compatibility)\n this.skillsManager = new ClaudeSkillsManager(skillContext);\n\n // Initialize skill mappings\n this.skillMappings = this.initializeSkillMappings();\n\n logger.info('Unified RLM Orchestrator initialized with RLM-first routing');\n }\n\n /**\n * Initialize skill to RLM agent mappings\n */\n private initializeSkillMappings(): Map<string, SkillToRLMConfig> {\n const mappings = new Map<string, SkillToRLMConfig>();\n\n // Handoff skill -> Context + Planning agents\n mappings.set('handoff', {\n skillName: 'handoff',\n primaryAgent: 'context',\n secondaryAgents: ['planning'],\n taskTemplate:\n 'Prepare comprehensive handoff to {targetUser}: {message}. Extract relevant context, identify dependencies, and create actionable items.',\n defaultOptions: {\n maxParallel: 3,\n reviewStages: 1,\n shareContextRealtime: true,\n },\n preprocessor: (args, options) => ({\n task: `Handoff to ${args[0]}: ${args[1]}`,\n context: {\n targetUser: args[0],\n message: args[1],\n priority: options.priority || 'medium',\n frames: options.frames || [],\n },\n }),\n postprocessor: (result) => ({\n success: result.success,\n message: `Handoff ${result.success ? 'completed' : 'failed'}`,\n data: result.rootNode.result,\n }),\n });\n\n // Checkpoint skill -> Context + Code agents\n mappings.set('checkpoint', {\n skillName: 'checkpoint',\n primaryAgent: 'context',\n secondaryAgents: ['code'],\n taskTemplate:\n 'Create recovery checkpoint: {description}. Capture current state, identify risky operations, and backup critical files.',\n defaultOptions: {\n maxParallel: 2,\n reviewStages: 0,\n verboseLogging: false,\n },\n preprocessor: (args, options) => ({\n task: `${args[0]} checkpoint: ${args[1]}`,\n context: {\n operation: args[0],\n description: args[1],\n ...options,\n },\n }),\n });\n\n // Dig skill -> Context agent (deep search)\n mappings.set('dig', {\n skillName: 'dig',\n primaryAgent: 'context',\n taskTemplate:\n 'Deep archaeological search: {query}. Analyze patterns, extract decisions, and build timeline.',\n defaultOptions: {\n maxParallel: 1,\n maxTokensPerAgent: 50000,\n reviewStages: 0,\n },\n preprocessor: (args, options) => ({\n task: `Archaeological dig: ${args[0]}`,\n context: {\n query: args[0],\n depth: options.depth || '30days',\n patterns: options.patterns,\n decisions: options.decisions,\n timeline: options.timeline,\n },\n }),\n });\n\n // Lint skill -> Linting agent primarily\n mappings.set('lint', {\n skillName: 'lint',\n primaryAgent: 'linting',\n secondaryAgents: ['improve'],\n taskTemplate:\n 'Comprehensive linting of {path}: Check syntax, types, formatting, security, performance, and dead code. Provide fixes.',\n defaultOptions: {\n maxParallel: 1,\n reviewStages: 0,\n verboseLogging: true,\n },\n preprocessor: (args, options) => ({\n task: `Lint ${args[0] || 'current directory'}`,\n context: {\n path: args[0] || process.cwd(),\n fix: options.fix,\n focus: options.security\n ? 'security'\n : options.performance\n ? 'performance'\n : 'all',\n },\n }),\n postprocessor: (result) => {\n const lintingNode = this.findNodeByAgent(result.rootNode, 'linting');\n return {\n success: result.success,\n message: `Found ${result.issuesFound} issues, fixed ${result.issuesFixed}`,\n data: {\n issues: lintingNode?.result?.issues || [],\n fixes: lintingNode?.result?.fixes || [],\n stats: {\n found: result.issuesFound,\n fixed: result.issuesFixed,\n duration: result.duration,\n },\n },\n };\n },\n });\n\n // Test generation -> Testing agent\n mappings.set('test', {\n skillName: 'test',\n primaryAgent: 'testing',\n secondaryAgents: ['code', 'review'],\n taskTemplate:\n 'Generate comprehensive {testMode} tests for {target}. Ensure high coverage and meaningful assertions.',\n defaultOptions: {\n maxParallel: 3,\n testGenerationMode: 'all',\n reviewStages: 2,\n qualityThreshold: 0.9,\n },\n preprocessor: (args, options) => ({\n task: `Generate tests for ${args[0] || 'project'}`,\n context: {\n target: args[0] || process.cwd(),\n testMode: options.mode || 'all',\n coverage: options.coverage || 'high',\n },\n }),\n });\n\n // Code review -> Review + Improve agents\n mappings.set('review', {\n skillName: 'review',\n primaryAgent: 'review',\n secondaryAgents: ['improve', 'testing'],\n taskTemplate:\n 'Multi-stage code review of {target}. Analyze architecture, quality, performance, security. Suggest improvements.',\n defaultOptions: {\n maxParallel: 2,\n reviewStages: 3,\n qualityThreshold: 0.85,\n verboseLogging: true,\n },\n preprocessor: (args, options) => ({\n task: `Review code in ${args[0] || 'project'}`,\n context: {\n target: args[0] || process.cwd(),\n focus: options.focus || 'all',\n autofix: options.fix || false,\n },\n }),\n });\n\n // Refactor -> Code + Review + Improve agents\n mappings.set('refactor', {\n skillName: 'refactor',\n primaryAgent: 'code',\n secondaryAgents: ['review', 'improve', 'testing'],\n taskTemplate:\n 'Refactor {target}: Improve architecture, reduce complexity, enhance maintainability. Preserve functionality.',\n defaultOptions: {\n maxParallel: 4,\n reviewStages: 2,\n qualityThreshold: 0.9,\n testGenerationMode: 'unit',\n },\n preprocessor: (args, options) => ({\n task: `Refactor ${args[0] || 'codebase'}`,\n context: {\n target: args[0] || process.cwd(),\n scope: options.scope || 'moderate',\n preserveApi: options.preserveApi !== false,\n },\n }),\n });\n\n // Deploy/Publish -> Publish agent\n mappings.set('publish', {\n skillName: 'publish',\n primaryAgent: 'publish',\n secondaryAgents: ['testing', 'linting'],\n taskTemplate:\n 'Prepare and execute {publishType} release. Run tests, update versions, generate changelog, publish.',\n defaultOptions: {\n maxParallel: 1,\n reviewStages: 1,\n testGenerationMode: 'all',\n },\n preprocessor: (args, options) => ({\n task: `Publish ${options.type || 'npm'} release`,\n context: {\n version: args[0],\n publishType: options.type || 'npm',\n prerelease: options.prerelease || false,\n skipTests: options.skipTests || false,\n },\n }),\n });\n\n return mappings;\n }\n\n /**\n * Execute any skill through RLM orchestration first\n */\n async executeSkill(\n skillName: string,\n args: string[],\n options?: Record<string, any>\n ): Promise<SkillResult> {\n logger.info(`Executing skill through RLM: ${skillName}`, { args, options });\n\n // Check if skill has RLM mapping\n const mapping = this.skillMappings.get(skillName);\n\n if (mapping) {\n // Route through RLM orchestrator\n return this.executeViaRLM(mapping, args, options || {});\n }\n\n // Special case: Direct RLM execution\n if (skillName === 'rlm') {\n const task = args.join(' ') || 'Analyze and optimize current code';\n const result = await this.rlmOrchestrator.execute(\n task,\n options || {},\n options as RLMOptions\n );\n return {\n success: result.success,\n message: `RLM execution ${result.success ? 'completed' : 'failed'}`,\n data: result,\n };\n }\n\n // Fallback to legacy skill manager for unmapped skills\n logger.warn(`Skill ${skillName} not mapped to RLM, using legacy execution`);\n return this.skillsManager.executeSkill(skillName, args, options);\n }\n\n /**\n * Execute skill via RLM orchestration\n */\n private async executeViaRLM(\n mapping: SkillToRLMConfig,\n args: string[],\n options: Record<string, any>\n ): Promise<SkillResult> {\n try {\n // Preprocess arguments\n const { task, context } = mapping.preprocessor\n ? mapping.preprocessor(args, options)\n : {\n task: mapping.taskTemplate.replace('{args}', args.join(' ')),\n context: { args, ...options },\n };\n\n // Merge options\n const rlmOptions: RLMOptions = {\n ...mapping.defaultOptions,\n ...options,\n // Force specific agents if specified\n agents: [mapping.primaryAgent, ...(mapping.secondaryAgents || [])],\n };\n\n // Execute through RLM\n const result = await this.rlmOrchestrator.execute(\n task,\n context,\n rlmOptions\n );\n\n // Postprocess result\n if (mapping.postprocessor) {\n return mapping.postprocessor(result);\n }\n\n // Default postprocessing\n return {\n success: result.success,\n message: `${mapping.skillName} ${result.success ? 'completed' : 'failed'}`,\n data: {\n duration: result.duration,\n tokens: result.totalTokens,\n cost: result.totalCost,\n improvements: result.improvements,\n testsGenerated: result.testsGenerated,\n issuesFound: result.issuesFound,\n issuesFixed: result.issuesFixed,\n details: result.rootNode,\n },\n };\n } catch (error: any) {\n logger.error(`RLM execution failed for ${mapping.skillName}:`, error);\n return {\n success: false,\n message: `Failed to execute ${mapping.skillName}: ${error.message}`,\n };\n }\n }\n\n /**\n * Helper: Find node by agent type in task tree\n */\n private findNodeByAgent(node: any, agentType: SubagentType): any {\n if (node.agent === agentType) {\n return node;\n }\n if (node.children) {\n for (const child of node.children) {\n const found = this.findNodeByAgent(child, agentType);\n if (found) return found;\n }\n }\n return null;\n }\n\n /**\n * Get available skills (all RLM-mapped + legacy)\n */\n getAvailableSkills(): string[] {\n const rlmSkills = Array.from(this.skillMappings.keys());\n const legacySkills = this.skillsManager.getAvailableSkills();\n const allSkills = new Set([...rlmSkills, ...legacySkills, 'rlm']);\n return Array.from(allSkills);\n }\n\n /**\n * Get skill help\n */\n getSkillHelp(skillName: string): string {\n const mapping = this.skillMappings.get(skillName);\n if (mapping) {\n return `\n${skillName} (RLM-Orchestrated)\nPrimary Agent: ${mapping.primaryAgent}\nSecondary Agents: ${mapping.secondaryAgents?.join(', ') || 'none'}\n\n${mapping.taskTemplate}\n\nThis skill is executed through RLM orchestration for:\n- Automatic task decomposition\n- Parallel agent execution\n- Multi-stage quality review\n- Comprehensive result aggregation\n`;\n }\n\n // Fallback to legacy help\n return this.skillsManager.getSkillHelp(skillName);\n }\n\n /**\n * Execute task with intelligent routing\n */\n async executeTask(\n task: string,\n context?: Record<string, any>\n ): Promise<SkillResult> {\n // Analyze task to determine best skill/agent combination\n const taskAnalysis = this.analyzeTask(task);\n\n if (taskAnalysis.suggestedSkill) {\n // Route to specific skill\n return this.executeSkill(\n taskAnalysis.suggestedSkill,\n taskAnalysis.args,\n taskAnalysis.options\n );\n }\n\n // Direct RLM execution for complex/ambiguous tasks\n const result = await this.rlmOrchestrator.execute(task, context || {}, {\n maxParallel: 5,\n reviewStages: 2,\n qualityThreshold: 0.85,\n verboseLogging: true,\n });\n\n return {\n success: result.success,\n message: `Task ${result.success ? 'completed' : 'failed'}`,\n data: result,\n };\n }\n\n /**\n * Analyze task to determine best routing\n */\n private analyzeTask(task: string): {\n suggestedSkill?: string;\n args: string[];\n options: Record<string, any>;\n } {\n const taskLower = task.toLowerCase();\n\n // Pattern matching for skill detection\n const patterns = [\n { pattern: /lint|format|style|quality/i, skill: 'lint' },\n { pattern: /test|coverage|unit|integration/i, skill: 'test' },\n { pattern: /review|analyze|improve/i, skill: 'review' },\n { pattern: /refactor|restructure|clean/i, skill: 'refactor' },\n { pattern: /handoff|transfer|pass/i, skill: 'handoff' },\n { pattern: /checkpoint|backup|save/i, skill: 'checkpoint' },\n { pattern: /search|find|dig|history/i, skill: 'dig' },\n { pattern: /publish|release|deploy/i, skill: 'publish' },\n ];\n\n for (const { pattern, skill } of patterns) {\n if (pattern.test(taskLower)) {\n return {\n suggestedSkill: skill,\n args: [task],\n options: {},\n };\n }\n }\n\n // No specific skill detected\n return {\n args: [task],\n options: {},\n };\n }\n}\n\n/**\n * Singleton instance for global access\n */\nlet unifiedOrchestrator: UnifiedRLMOrchestrator | null = null;\n\nexport function initializeUnifiedOrchestrator(\n frameManager: FrameManager,\n dualStackManager: DualStackManager,\n contextRetriever: ContextRetriever,\n taskStore: PebblesTaskStore,\n skillContext: SkillContext\n): UnifiedRLMOrchestrator {\n if (!unifiedOrchestrator) {\n unifiedOrchestrator = new UnifiedRLMOrchestrator(\n frameManager,\n dualStackManager,\n contextRetriever,\n taskStore,\n skillContext\n );\n }\n return unifiedOrchestrator;\n}\n\nexport function getUnifiedOrchestrator(): UnifiedRLMOrchestrator | null {\n return unifiedOrchestrator;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackmemoryai/stackmemory",
3
- "version": "0.3.9",
3
+ "version": "0.3.10",
4
4
  "description": "Lossless memory runtime for AI coding tools - organizes context as a call stack instead of linear chat logs, with team collaboration and infinite retention",
5
5
  "engines": {
6
6
  "node": ">=20.0.0",
@@ -63,7 +63,7 @@
63
63
  "tui": "npm run build && node dist/features/tui/index.js",
64
64
  "tui:dev": "./scripts/dev-tui.sh",
65
65
  "tui:watch": "npm run build && nodemon --watch src/features/tui --watch src/cli --watch src/skills -e ts --exec 'npm run build && node dist/features/tui/index.js'",
66
- "claude:setup": "./scripts/setup-claude-autostart.sh",
66
+ "claude:setup": "node scripts/setup-claude-integration.js",
67
67
  "daemons:start": "node scripts/claude-sm-autostart.js",
68
68
  "daemons:status": "node scripts/claude-sm-autostart.js status",
69
69
  "daemons:stop": "node scripts/claude-sm-autostart.js stop",
@@ -112,6 +112,7 @@
112
112
  "puppeteer": "^24.34.0",
113
113
  "rate-limiter-flexible": "^9.0.1",
114
114
  "redis": "^5.10.0",
115
+ "shell-escape": "^0.2.0",
115
116
  "simple-peer": "^9.11.1",
116
117
  "socket.io": "^4.6.0",
117
118
  "socket.io-client": "^4.6.0",