@stackmemoryai/stackmemory 1.10.4 → 1.12.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/README.md +104 -23
- package/dist/src/cli/claude-sm.js +266 -84
- package/dist/src/cli/codex-sm.js +185 -33
- package/dist/src/cli/commands/bench.js +209 -2
- package/dist/src/cli/commands/cache.js +126 -0
- package/dist/src/cli/commands/daemon.js +41 -0
- package/dist/src/cli/commands/handoff.js +40 -9
- package/dist/src/cli/commands/onboard.js +70 -3
- package/dist/src/cli/commands/optimize.js +117 -0
- package/dist/src/cli/commands/orchestrate.js +230 -5
- package/dist/src/cli/commands/orchestrator.js +312 -24
- package/dist/src/cli/commands/pack.js +322 -0
- package/dist/src/cli/commands/search.js +40 -1
- package/dist/src/cli/commands/setup.js +177 -7
- package/dist/src/cli/commands/skills.js +10 -1
- package/dist/src/cli/commands/state.js +265 -0
- package/dist/src/cli/commands/wiki.js +33 -0
- package/dist/src/cli/gemini-sm.js +19 -29
- package/dist/src/cli/index.js +90 -29
- package/dist/src/cli/opencode-sm.js +38 -21
- package/dist/src/cli/utils/determinism-watcher.js +66 -0
- package/dist/src/cli/utils/real-cli-bin.js +44 -0
- package/dist/src/core/cache/content-cache.js +238 -0
- package/dist/src/core/cache/index.js +11 -0
- package/dist/src/core/cache/token-estimator.js +16 -0
- package/dist/src/core/context/frame-database.js +38 -30
- package/dist/src/core/cross-search/cross-project-search.js +269 -0
- package/dist/src/core/{merge → cross-search}/index.js +6 -4
- package/dist/src/core/database/sqlite-adapter.js +0 -83
- package/dist/src/core/extensions/provider-adapter.js +5 -0
- package/dist/src/core/models/model-router.js +22 -2
- package/dist/src/core/monitoring/logger.js +2 -1
- package/dist/src/core/optimization/trace-optimizer.js +413 -0
- package/dist/src/core/provenance/confidence-scorer.js +128 -0
- package/dist/src/core/provenance/index.js +40 -0
- package/dist/src/core/provenance/provenance-store.js +194 -0
- package/dist/src/core/provenance/types.js +82 -0
- package/dist/src/core/session/project-handoff.js +64 -0
- package/dist/src/core/session/session-manager.js +28 -0
- package/dist/src/core/shared-state/canonical-store.js +564 -0
- package/dist/src/core/skill-packs/index.js +18 -0
- package/dist/src/core/skill-packs/parser.js +42 -0
- package/dist/src/core/skill-packs/registry.js +224 -0
- package/dist/src/core/skill-packs/types.js +66 -0
- package/dist/src/core/trace/trace-event-store.js +282 -0
- package/dist/src/core/trace/trace-event.js +4 -0
- package/dist/src/core/wiki/wiki-compiler.js +219 -0
- package/dist/src/daemon/daemon-config.js +7 -0
- package/dist/src/daemon/services/github-service.js +126 -0
- package/dist/src/daemon/unified-daemon.js +30 -0
- package/dist/src/features/sweep/pty-wrapper.js +13 -5
- package/dist/src/hooks/schemas.js +2 -0
- package/dist/src/integrations/claude-code/subagent-client.js +89 -0
- package/dist/src/integrations/github/pr-state.js +158 -0
- package/dist/src/integrations/linear/client.js +4 -1
- package/dist/src/integrations/mcp/handlers/cross-search-handlers.js +188 -0
- package/dist/src/integrations/mcp/handlers/index.js +40 -59
- package/dist/src/integrations/mcp/server.js +425 -311
- package/dist/src/integrations/mcp/tool-alias-registry.js +370 -0
- package/dist/src/integrations/mcp/tool-definitions.js +98 -229
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +3 -40
- package/dist/src/integrations/ralph/learning/pattern-learner.js +1 -20
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +0 -2
- package/dist/src/mcp/stackmemory-mcp-server.js +315 -0
- package/dist/src/orchestrators/multimodal/determinism.js +243 -0
- package/dist/src/orchestrators/multimodal/harness.js +147 -77
- package/dist/src/orchestrators/multimodal/providers.js +44 -3
- package/dist/src/utils/hook-installer.js +8 -8
- package/package.json +10 -1
- package/packs/coding/python-fastapi/instructions.md +60 -0
- package/packs/coding/python-fastapi/pack.yaml +28 -0
- package/packs/coding/typescript-react/instructions.md +47 -0
- package/packs/coding/typescript-react/pack.yaml +28 -0
- package/packs/core/commands/capture.md +32 -0
- package/packs/core/commands/learn.md +73 -0
- package/packs/core/commands/next.md +36 -0
- package/packs/core/commands/restart.md +58 -0
- package/packs/core/commands/restore.md +29 -0
- package/packs/core/commands/start.md +57 -0
- package/packs/core/commands/stop.md +65 -0
- package/packs/core/commands/summary.md +40 -0
- package/packs/core/manifest.json +24 -0
- package/packs/ops/decision-recovery/instructions.md +65 -0
- package/packs/ops/decision-recovery/pack.yaml +89 -0
- package/templates/claude-hooks/doc-ingest.js +76 -0
- package/dist/src/cli/commands/team.js +0 -168
- package/dist/src/core/context/shared-context-layer.js +0 -620
- package/dist/src/core/context/stack-merge-resolver.js +0 -748
- package/dist/src/core/merge/conflict-detector.js +0 -430
- package/dist/src/core/merge/resolution-engine.js +0 -557
- package/dist/src/core/merge/stack-diff.js +0 -531
- package/dist/src/core/merge/unified-merge-resolver.js +0 -302
- package/dist/src/integrations/mcp/handlers/cord-handlers.js +0 -397
- package/dist/src/integrations/mcp/handlers/team-handlers.js +0 -211
- /package/dist/src/core/{merge → cache}/types.js +0 -0
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
-
import { dirname as __pathDirname } from 'path';
|
|
3
|
-
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
-
const __dirname = __pathDirname(__filename);
|
|
5
|
-
import { logger } from "../../../core/monitoring/logger.js";
|
|
6
|
-
class TeamHandlers {
|
|
7
|
-
constructor(deps) {
|
|
8
|
-
this.deps = deps;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Get context from other agents working on the same project.
|
|
12
|
-
* Returns recent frames and shared anchors from other sessions.
|
|
13
|
-
*/
|
|
14
|
-
async handleTeamContextGet(args) {
|
|
15
|
-
try {
|
|
16
|
-
const limit = args.limit ?? 10;
|
|
17
|
-
const types = args.types;
|
|
18
|
-
const since = args.since;
|
|
19
|
-
const projectId = this.getProjectId();
|
|
20
|
-
const runId = this.getRunId();
|
|
21
|
-
const frames = await this.deps.dbAdapter.getRecentFramesExcludingRun(
|
|
22
|
-
projectId,
|
|
23
|
-
runId,
|
|
24
|
-
{ limit, types, since }
|
|
25
|
-
);
|
|
26
|
-
const sharedAnchors = await this.deps.dbAdapter.getSharedAnchors(
|
|
27
|
-
projectId,
|
|
28
|
-
{ limit, since }
|
|
29
|
-
);
|
|
30
|
-
if (frames.length === 0 && sharedAnchors.length === 0) {
|
|
31
|
-
return {
|
|
32
|
-
content: [
|
|
33
|
-
{
|
|
34
|
-
type: "text",
|
|
35
|
-
text: "No context from other agents found in this project."
|
|
36
|
-
}
|
|
37
|
-
]
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
const frameSummaries = frames.map((f) => ({
|
|
41
|
-
frame_id: f.frame_id,
|
|
42
|
-
run_id: f.run_id,
|
|
43
|
-
name: f.name,
|
|
44
|
-
type: f.type,
|
|
45
|
-
state: f.state,
|
|
46
|
-
created_at: f.created_at,
|
|
47
|
-
digest_text: f.digest_text || null,
|
|
48
|
-
anchors: f.anchors.map((a) => ({
|
|
49
|
-
type: a.type,
|
|
50
|
-
text: a.text,
|
|
51
|
-
priority: a.priority
|
|
52
|
-
}))
|
|
53
|
-
}));
|
|
54
|
-
const sharedSummaries = sharedAnchors.map((a) => ({
|
|
55
|
-
type: a.type,
|
|
56
|
-
text: a.text,
|
|
57
|
-
priority: a.priority,
|
|
58
|
-
frame_name: a.frame_name,
|
|
59
|
-
run_id: a.run_id,
|
|
60
|
-
shared_by: a.metadata?.sharedBy
|
|
61
|
-
}));
|
|
62
|
-
const text = `Team Context (${frames.length} frames, ${sharedAnchors.length} shared anchors):
|
|
63
|
-
|
|
64
|
-
` + frameSummaries.map(
|
|
65
|
-
(f) => `[${f.run_id?.slice(0, 8)}] ${f.name} (${f.type}, ${f.state})` + (f.digest_text ? `
|
|
66
|
-
${f.digest_text}` : "") + (f.anchors.length > 0 ? "\n Anchors: " + f.anchors.map((a) => `${a.type}: ${a.text}`).join("; ") : "")
|
|
67
|
-
).join("\n") + (sharedSummaries.length > 0 ? "\n\nShared Anchors:\n" + sharedSummaries.map((a) => ` [${a.type}] ${a.text} (priority: ${a.priority})`).join("\n") : "");
|
|
68
|
-
return {
|
|
69
|
-
content: [{ type: "text", text }],
|
|
70
|
-
metadata: { frames: frameSummaries, sharedAnchors: sharedSummaries }
|
|
71
|
-
};
|
|
72
|
-
} catch (error) {
|
|
73
|
-
logger.error(
|
|
74
|
-
"Error getting team context",
|
|
75
|
-
error instanceof Error ? error : new Error(String(error))
|
|
76
|
-
);
|
|
77
|
-
throw error;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Share a piece of context with other agents.
|
|
82
|
-
* Creates a high-priority anchor tagged with shared=true.
|
|
83
|
-
*/
|
|
84
|
-
async handleTeamContextShare(args) {
|
|
85
|
-
try {
|
|
86
|
-
const { content, type = "FACT", priority = 8 } = args;
|
|
87
|
-
if (!content) {
|
|
88
|
-
throw new Error("content is required");
|
|
89
|
-
}
|
|
90
|
-
const validTypes = [
|
|
91
|
-
"FACT",
|
|
92
|
-
"DECISION",
|
|
93
|
-
"CONSTRAINT",
|
|
94
|
-
"INTERFACE_CONTRACT",
|
|
95
|
-
"TODO",
|
|
96
|
-
"RISK"
|
|
97
|
-
];
|
|
98
|
-
if (!validTypes.includes(type)) {
|
|
99
|
-
throw new Error(
|
|
100
|
-
`Invalid type. Must be one of: ${validTypes.join(", ")}`
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
let frameId = this.deps.frameManager.getCurrentFrameId();
|
|
104
|
-
if (!frameId) {
|
|
105
|
-
frameId = this.deps.frameManager.createFrame({
|
|
106
|
-
type: "tool_scope",
|
|
107
|
-
name: "team_context_share"
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
const runId = this.getRunId();
|
|
111
|
-
this.deps.frameManager.addAnchor(type, content, priority, {
|
|
112
|
-
shared: true,
|
|
113
|
-
sharedBy: runId,
|
|
114
|
-
sharedAt: Date.now()
|
|
115
|
-
});
|
|
116
|
-
logger.info("Shared team context", { type, priority });
|
|
117
|
-
return {
|
|
118
|
-
content: [
|
|
119
|
-
{
|
|
120
|
-
type: "text",
|
|
121
|
-
text: `Shared ${type}: ${content}`
|
|
122
|
-
}
|
|
123
|
-
]
|
|
124
|
-
};
|
|
125
|
-
} catch (error) {
|
|
126
|
-
logger.error(
|
|
127
|
-
"Error sharing team context",
|
|
128
|
-
error instanceof Error ? error : new Error(String(error))
|
|
129
|
-
);
|
|
130
|
-
throw error;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Search across all agents' context in the project.
|
|
135
|
-
* Uses FTS5 search without run_id filtering.
|
|
136
|
-
*/
|
|
137
|
-
async handleTeamSearch(args) {
|
|
138
|
-
try {
|
|
139
|
-
const { query, limit = 20, include_events = false } = args;
|
|
140
|
-
if (!query) {
|
|
141
|
-
throw new Error("query is required");
|
|
142
|
-
}
|
|
143
|
-
const projectId = this.getProjectId();
|
|
144
|
-
const results = await this.deps.dbAdapter.search({
|
|
145
|
-
query,
|
|
146
|
-
projectId,
|
|
147
|
-
limit
|
|
148
|
-
});
|
|
149
|
-
if (results.length === 0) {
|
|
150
|
-
return {
|
|
151
|
-
content: [
|
|
152
|
-
{
|
|
153
|
-
type: "text",
|
|
154
|
-
text: `No results found for "${query}" across team sessions.`
|
|
155
|
-
}
|
|
156
|
-
]
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
const frameResults = results.map((f) => ({
|
|
160
|
-
frame_id: f.frame_id,
|
|
161
|
-
run_id: f.run_id,
|
|
162
|
-
name: f.name,
|
|
163
|
-
type: f.type,
|
|
164
|
-
state: f.state,
|
|
165
|
-
score: f.score,
|
|
166
|
-
digest_text: f.digest_text || null,
|
|
167
|
-
created_at: f.created_at,
|
|
168
|
-
events: []
|
|
169
|
-
}));
|
|
170
|
-
if (include_events) {
|
|
171
|
-
for (const fr of frameResults) {
|
|
172
|
-
const events = await this.deps.dbAdapter.getFrameEvents(fr.frame_id, {
|
|
173
|
-
limit: 5
|
|
174
|
-
});
|
|
175
|
-
fr.events = events.map((e) => ({
|
|
176
|
-
event_type: e.event_type,
|
|
177
|
-
payload: e.payload,
|
|
178
|
-
ts: e.ts
|
|
179
|
-
}));
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
const text = `Team Search: ${results.length} results for "${query}":
|
|
183
|
-
|
|
184
|
-
` + frameResults.map(
|
|
185
|
-
(f) => `[${f.run_id?.slice(0, 8)}] ${f.name} (score: ${f.score?.toFixed(3)})` + (f.digest_text ? `
|
|
186
|
-
${f.digest_text}` : "")
|
|
187
|
-
).join("\n");
|
|
188
|
-
return {
|
|
189
|
-
content: [{ type: "text", text }],
|
|
190
|
-
metadata: { results: frameResults, total: results.length }
|
|
191
|
-
};
|
|
192
|
-
} catch (error) {
|
|
193
|
-
logger.error(
|
|
194
|
-
"Error in team search",
|
|
195
|
-
error instanceof Error ? error : new Error(String(error))
|
|
196
|
-
);
|
|
197
|
-
throw error;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/** Extract projectId from the dbAdapter (protected field on DatabaseAdapter) */
|
|
201
|
-
getProjectId() {
|
|
202
|
-
return this.deps.dbAdapter.projectId;
|
|
203
|
-
}
|
|
204
|
-
/** Extract current runId from frameManager (private field) */
|
|
205
|
-
getRunId() {
|
|
206
|
-
return this.deps.frameManager.currentRunId;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
export {
|
|
210
|
-
TeamHandlers
|
|
211
|
-
};
|
|
File without changes
|