opencode-forge 0.1.5
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/LICENSE +21 -0
- package/README.md +534 -0
- package/config.jsonc +47 -0
- package/dist/agents/architect.d.ts +3 -0
- package/dist/agents/architect.d.ts.map +1 -0
- package/dist/agents/architect.js +152 -0
- package/dist/agents/architect.js.map +1 -0
- package/dist/agents/auditor.d.ts +3 -0
- package/dist/agents/auditor.d.ts.map +1 -0
- package/dist/agents/auditor.js +168 -0
- package/dist/agents/auditor.js.map +1 -0
- package/dist/agents/code.d.ts +3 -0
- package/dist/agents/code.d.ts.map +1 -0
- package/dist/agents/code.js +67 -0
- package/dist/agents/code.js.map +1 -0
- package/dist/agents/index.d.ts +4 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +9 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/prompts.d.ts +1 -0
- package/dist/agents/prompts.d.ts.map +1 -0
- package/dist/agents/prompts.js +4 -0
- package/dist/agents/prompts.js.map +1 -0
- package/dist/agents/types.d.ts +34 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cache/index.d.ts +4 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +5 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-cache.d.ts +14 -0
- package/dist/cache/memory-cache.d.ts.map +1 -0
- package/dist/cache/memory-cache.js +51 -0
- package/dist/cache/memory-cache.js.map +1 -0
- package/dist/cache/types.d.ts +8 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +2 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/cli/commands/cancel.d.ts +15 -0
- package/dist/cli/commands/cancel.d.ts.map +1 -0
- package/dist/cli/commands/cancel.js +194 -0
- package/dist/cli/commands/cancel.js.map +1 -0
- package/dist/cli/commands/graph.d.ts +16 -0
- package/dist/cli/commands/graph.d.ts.map +1 -0
- package/dist/cli/commands/graph.js +208 -0
- package/dist/cli/commands/graph.js.map +1 -0
- package/dist/cli/commands/restart.d.ts +15 -0
- package/dist/cli/commands/restart.d.ts.map +1 -0
- package/dist/cli/commands/restart.js +268 -0
- package/dist/cli/commands/restart.js.map +1 -0
- package/dist/cli/commands/status.d.ts +17 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +356 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +3 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -0
- package/dist/cli/commands/upgrade.js +40 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +224 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils.d.ts +36 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +163 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/command/template/review.txt +101 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +186 -0
- package/dist/config.js.map +1 -0
- package/dist/constants/loop.d.ts +10 -0
- package/dist/constants/loop.d.ts.map +1 -0
- package/dist/constants/loop.js +6 -0
- package/dist/constants/loop.js.map +1 -0
- package/dist/graph/cache.d.ts +17 -0
- package/dist/graph/cache.d.ts.map +1 -0
- package/dist/graph/cache.js +50 -0
- package/dist/graph/cache.js.map +1 -0
- package/dist/graph/client.d.ts +51 -0
- package/dist/graph/client.d.ts.map +1 -0
- package/dist/graph/client.js +152 -0
- package/dist/graph/client.js.map +1 -0
- package/dist/graph/clone-detection.d.ts +9 -0
- package/dist/graph/clone-detection.d.ts.map +1 -0
- package/dist/graph/clone-detection.js +148 -0
- package/dist/graph/clone-detection.js.map +1 -0
- package/dist/graph/constants.d.ts +18 -0
- package/dist/graph/constants.d.ts.map +1 -0
- package/dist/graph/constants.js +532 -0
- package/dist/graph/constants.js.map +1 -0
- package/dist/graph/database.d.ts +11 -0
- package/dist/graph/database.d.ts.map +1 -0
- package/dist/graph/database.js +250 -0
- package/dist/graph/database.js.map +1 -0
- package/dist/graph/index.d.ts +14 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +13 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/repo-map.d.ts +59 -0
- package/dist/graph/repo-map.d.ts.map +1 -0
- package/dist/graph/repo-map.js +948 -0
- package/dist/graph/repo-map.js.map +1 -0
- package/dist/graph/rpc.d.ts +34 -0
- package/dist/graph/rpc.d.ts.map +1 -0
- package/dist/graph/rpc.js +139 -0
- package/dist/graph/rpc.js.map +1 -0
- package/dist/graph/service.d.ts +46 -0
- package/dist/graph/service.d.ts.map +1 -0
- package/dist/graph/service.js +329 -0
- package/dist/graph/service.js.map +1 -0
- package/dist/graph/tree-sitter.d.ts +40 -0
- package/dist/graph/tree-sitter.d.ts.map +1 -0
- package/dist/graph/tree-sitter.js +799 -0
- package/dist/graph/tree-sitter.js.map +1 -0
- package/dist/graph/types.d.ts +175 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +105 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/graph/utils.d.ts +64 -0
- package/dist/graph/utils.d.ts.map +1 -0
- package/dist/graph/utils.js +406 -0
- package/dist/graph/utils.js.map +1 -0
- package/dist/graph/worker.d.ts +2 -0
- package/dist/graph/worker.d.ts.map +1 -0
- package/dist/graph/worker.js +6043 -0
- package/dist/graph/worker.js.map +1 -0
- package/dist/hooks/compaction-utils.d.ts +21 -0
- package/dist/hooks/compaction-utils.d.ts.map +1 -0
- package/dist/hooks/compaction-utils.js +82 -0
- package/dist/hooks/compaction-utils.js.map +1 -0
- package/dist/hooks/graph-command.d.ts +27 -0
- package/dist/hooks/graph-command.d.ts.map +1 -0
- package/dist/hooks/graph-command.js +57 -0
- package/dist/hooks/graph-command.js.map +1 -0
- package/dist/hooks/graph-tools.d.ts +11 -0
- package/dist/hooks/graph-tools.d.ts.map +1 -0
- package/dist/hooks/graph-tools.js +125 -0
- package/dist/hooks/graph-tools.js.map +1 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/loop.d.ts +23 -0
- package/dist/hooks/loop.d.ts.map +1 -0
- package/dist/hooks/loop.js +667 -0
- package/dist/hooks/loop.js.map +1 -0
- package/dist/hooks/sandbox-tools.d.ts +13 -0
- package/dist/hooks/sandbox-tools.d.ts.map +1 -0
- package/dist/hooks/sandbox-tools.js +105 -0
- package/dist/hooks/sandbox-tools.js.map +1 -0
- package/dist/hooks/session.d.ts +19 -0
- package/dist/hooks/session.d.ts.map +1 -0
- package/dist/hooks/session.js +56 -0
- package/dist/hooks/session.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +298 -0
- package/dist/index.js.map +1 -0
- package/dist/sandbox/context.d.ts +27 -0
- package/dist/sandbox/context.d.ts.map +1 -0
- package/dist/sandbox/context.js +18 -0
- package/dist/sandbox/context.js.map +1 -0
- package/dist/sandbox/docker.d.ts +29 -0
- package/dist/sandbox/docker.d.ts.map +1 -0
- package/dist/sandbox/docker.js +213 -0
- package/dist/sandbox/docker.js.map +1 -0
- package/dist/sandbox/manager.d.ts +23 -0
- package/dist/sandbox/manager.d.ts.map +1 -0
- package/dist/sandbox/manager.js +131 -0
- package/dist/sandbox/manager.js.map +1 -0
- package/dist/sandbox/path.d.ts +4 -0
- package/dist/sandbox/path.d.ts.map +1 -0
- package/dist/sandbox/path.js +27 -0
- package/dist/sandbox/path.js.map +1 -0
- package/dist/services/kv.d.ts +17 -0
- package/dist/services/kv.d.ts.map +1 -0
- package/dist/services/kv.js +62 -0
- package/dist/services/kv.js.map +1 -0
- package/dist/services/loop.d.ts +96 -0
- package/dist/services/loop.d.ts.map +1 -0
- package/dist/services/loop.js +315 -0
- package/dist/services/loop.js.map +1 -0
- package/dist/setup.d.ts +4 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +118 -0
- package/dist/setup.js.map +1 -0
- package/dist/storage/database.d.ts +6 -0
- package/dist/storage/database.d.ts.map +1 -0
- package/dist/storage/database.js +90 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/storage/graph-projects.d.ts +80 -0
- package/dist/storage/graph-projects.d.ts.map +1 -0
- package/dist/storage/graph-projects.js +154 -0
- package/dist/storage/graph-projects.js.map +1 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +3 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/kv-queries.d.ts +18 -0
- package/dist/storage/kv-queries.d.ts.map +1 -0
- package/dist/storage/kv-queries.js +70 -0
- package/dist/storage/kv-queries.js.map +1 -0
- package/dist/tools/graph.d.ts +9 -0
- package/dist/tools/graph.d.ts.map +1 -0
- package/dist/tools/graph.js +272 -0
- package/dist/tools/graph.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/loop.d.ts +21 -0
- package/dist/tools/loop.d.ts.map +1 -0
- package/dist/tools/loop.js +570 -0
- package/dist/tools/loop.js.map +1 -0
- package/dist/tools/plan-approval.d.ts +15 -0
- package/dist/tools/plan-approval.d.ts.map +1 -0
- package/dist/tools/plan-approval.js +203 -0
- package/dist/tools/plan-approval.js.map +1 -0
- package/dist/tools/plan-execute.d.ts +4 -0
- package/dist/tools/plan-execute.d.ts.map +1 -0
- package/dist/tools/plan-execute.js +85 -0
- package/dist/tools/plan-execute.js.map +1 -0
- package/dist/tools/plan-kv.d.ts +4 -0
- package/dist/tools/plan-kv.d.ts.map +1 -0
- package/dist/tools/plan-kv.js +107 -0
- package/dist/tools/plan-kv.js.map +1 -0
- package/dist/tools/review.d.ts +4 -0
- package/dist/tools/review.d.ts.map +1 -0
- package/dist/tools/review.js +90 -0
- package/dist/tools/review.js.map +1 -0
- package/dist/tools/sandbox-fs.d.ts +22 -0
- package/dist/tools/sandbox-fs.d.ts.map +1 -0
- package/dist/tools/sandbox-fs.js +83 -0
- package/dist/tools/sandbox-fs.js.map +1 -0
- package/dist/tools/types.d.ts +26 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tui.d.ts +3 -0
- package/dist/tui.js +2061 -0
- package/dist/types.d.ts +124 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/git-branch.d.ts +11 -0
- package/dist/utils/git-branch.d.ts.map +1 -0
- package/dist/utils/git-branch.js +35 -0
- package/dist/utils/git-branch.js.map +1 -0
- package/dist/utils/graph-status-store.d.ts +72 -0
- package/dist/utils/graph-status-store.d.ts.map +1 -0
- package/dist/utils/graph-status-store.js +62 -0
- package/dist/utils/graph-status-store.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +89 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/loop-format.d.ts +5 -0
- package/dist/utils/loop-format.d.ts.map +1 -0
- package/dist/utils/loop-format.js +29 -0
- package/dist/utils/loop-format.js.map +1 -0
- package/dist/utils/loop-helpers.d.ts +9 -0
- package/dist/utils/loop-helpers.d.ts.map +1 -0
- package/dist/utils/loop-helpers.js +20 -0
- package/dist/utils/loop-helpers.js.map +1 -0
- package/dist/utils/loop-launch.d.ts +32 -0
- package/dist/utils/loop-launch.d.ts.map +1 -0
- package/dist/utils/loop-launch.js +162 -0
- package/dist/utils/loop-launch.js.map +1 -0
- package/dist/utils/model-fallback.d.ts +27 -0
- package/dist/utils/model-fallback.d.ts.map +1 -0
- package/dist/utils/model-fallback.js +33 -0
- package/dist/utils/model-fallback.js.map +1 -0
- package/dist/utils/partial-match.d.ts +7 -0
- package/dist/utils/partial-match.d.ts.map +1 -0
- package/dist/utils/partial-match.js +56 -0
- package/dist/utils/partial-match.js.map +1 -0
- package/dist/utils/plan-execution.d.ts +65 -0
- package/dist/utils/plan-execution.d.ts.map +1 -0
- package/dist/utils/plan-execution.js +107 -0
- package/dist/utils/plan-execution.js.map +1 -0
- package/dist/utils/session-stats.d.ts +36 -0
- package/dist/utils/session-stats.d.ts.map +1 -0
- package/dist/utils/session-stats.js +145 -0
- package/dist/utils/session-stats.js.map +1 -0
- package/dist/utils/tui-graph-status.d.ts +38 -0
- package/dist/utils/tui-graph-status.d.ts.map +1 -0
- package/dist/utils/tui-graph-status.js +95 -0
- package/dist/utils/tui-graph-status.js.map +1 -0
- package/dist/utils/tui-plan-store.d.ts +54 -0
- package/dist/utils/tui-plan-store.d.ts.map +1 -0
- package/dist/utils/tui-plan-store.js +168 -0
- package/dist/utils/tui-plan-store.js.map +1 -0
- package/dist/utils/tui-refresh-helpers.d.ts +44 -0
- package/dist/utils/tui-refresh-helpers.d.ts.map +1 -0
- package/dist/utils/tui-refresh-helpers.js +120 -0
- package/dist/utils/tui-refresh-helpers.js.map +1 -0
- package/dist/utils/upgrade.d.ts +23 -0
- package/dist/utils/upgrade.d.ts.map +1 -0
- package/dist/utils/upgrade.js +111 -0
- package/dist/utils/upgrade.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +92 -0
- package/scripts/build.ts +67 -0
- package/src/command/template/review.txt +101 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
function extractActivity(parts) {
|
|
2
|
+
const toolCalls = [];
|
|
3
|
+
const textLines = [];
|
|
4
|
+
const toolLines = [];
|
|
5
|
+
const subtaskLines = [];
|
|
6
|
+
const reasoningLines = [];
|
|
7
|
+
for (const p of parts) {
|
|
8
|
+
if (p.type === 'text' && typeof p.text === 'string' && p.text.trim()) {
|
|
9
|
+
textLines.push(p.text.trim());
|
|
10
|
+
}
|
|
11
|
+
else if (p.type === 'tool' && p.tool && p.state) {
|
|
12
|
+
const s = p.state;
|
|
13
|
+
const name = p.tool;
|
|
14
|
+
const status = s.status;
|
|
15
|
+
if (status === 'completed') {
|
|
16
|
+
const title = s.title ?? name;
|
|
17
|
+
toolCalls.push({ tool: name, title, status: 'completed' });
|
|
18
|
+
toolLines.push(`[done] ${name}: ${title}`);
|
|
19
|
+
}
|
|
20
|
+
else if (status === 'running') {
|
|
21
|
+
const title = s.title ?? name;
|
|
22
|
+
toolCalls.push({ tool: name, title, status: 'running' });
|
|
23
|
+
toolLines.push(`[running] ${name}: ${title}`);
|
|
24
|
+
}
|
|
25
|
+
else if (status === 'error') {
|
|
26
|
+
const msg = s.error ?? 'error';
|
|
27
|
+
toolCalls.push({ tool: name, title: msg, status: 'error' });
|
|
28
|
+
toolLines.push(`[error] ${name}: ${msg}`);
|
|
29
|
+
}
|
|
30
|
+
else if (status === 'pending') {
|
|
31
|
+
toolCalls.push({ tool: name, title: name, status: 'pending' });
|
|
32
|
+
toolLines.push(`[pending] ${name}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else if (p.type === 'subtask' && p.description) {
|
|
36
|
+
const agentLabel = p.agent ? `${p.agent}: ` : '';
|
|
37
|
+
subtaskLines.push(`-> ${agentLabel}${p.description}`);
|
|
38
|
+
}
|
|
39
|
+
else if (p.type === 'reasoning' && typeof p.text === 'string' && p.text.trim()) {
|
|
40
|
+
reasoningLines.push(p.text.trim());
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Priority: text > tool titles > subtask > reasoning
|
|
44
|
+
let summary = '';
|
|
45
|
+
if (textLines.length > 0) {
|
|
46
|
+
summary = textLines.join('\n');
|
|
47
|
+
}
|
|
48
|
+
else if (toolLines.length > 0) {
|
|
49
|
+
summary = toolLines.join('\n');
|
|
50
|
+
}
|
|
51
|
+
else if (subtaskLines.length > 0) {
|
|
52
|
+
summary = subtaskLines.join('\n');
|
|
53
|
+
}
|
|
54
|
+
else if (reasoningLines.length > 0) {
|
|
55
|
+
summary = reasoningLines.join('\n');
|
|
56
|
+
}
|
|
57
|
+
if (!summary && toolCalls.length === 0)
|
|
58
|
+
return null;
|
|
59
|
+
return { summary, toolCalls };
|
|
60
|
+
}
|
|
61
|
+
export async function fetchSessionStats(api, sessionId, directory) {
|
|
62
|
+
if (!directory || !sessionId) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const messagesResult = await api.client.session.messages({
|
|
67
|
+
sessionID: sessionId,
|
|
68
|
+
directory,
|
|
69
|
+
});
|
|
70
|
+
const messages = (messagesResult.data ?? []);
|
|
71
|
+
const assistantMessages = messages.filter((m) => m.info.role === 'assistant');
|
|
72
|
+
// Walk backwards through the last 3 assistant messages to find meaningful activity
|
|
73
|
+
let lastActivity = null;
|
|
74
|
+
for (let i = assistantMessages.length - 1; i >= Math.max(0, assistantMessages.length - 3); i--) {
|
|
75
|
+
const result = extractActivity(assistantMessages[i].parts);
|
|
76
|
+
if (result) {
|
|
77
|
+
lastActivity = result;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
let totalInputTokens = 0;
|
|
82
|
+
let totalOutputTokens = 0;
|
|
83
|
+
let totalReasoningTokens = 0;
|
|
84
|
+
let totalCacheRead = 0;
|
|
85
|
+
let totalCacheWrite = 0;
|
|
86
|
+
let totalCost = 0;
|
|
87
|
+
for (const msg of messages) {
|
|
88
|
+
totalCost += msg.info.cost ?? 0;
|
|
89
|
+
const tokens = msg.info.tokens;
|
|
90
|
+
if (tokens) {
|
|
91
|
+
totalInputTokens += tokens.input ?? 0;
|
|
92
|
+
totalOutputTokens += tokens.output ?? 0;
|
|
93
|
+
totalReasoningTokens += tokens.reasoning ?? 0;
|
|
94
|
+
totalCacheRead += tokens.cache?.read ?? 0;
|
|
95
|
+
totalCacheWrite += tokens.cache?.write ?? 0;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const sessionResult = await api.client.session.get({
|
|
99
|
+
sessionID: sessionId,
|
|
100
|
+
directory,
|
|
101
|
+
});
|
|
102
|
+
const session = sessionResult.data;
|
|
103
|
+
const fileChanges = session?.summary
|
|
104
|
+
? {
|
|
105
|
+
additions: session.summary.additions,
|
|
106
|
+
deletions: session.summary.deletions,
|
|
107
|
+
files: session.summary.files,
|
|
108
|
+
}
|
|
109
|
+
: null;
|
|
110
|
+
const timing = session?.time?.created && session?.time?.updated
|
|
111
|
+
? {
|
|
112
|
+
created: session.time.created,
|
|
113
|
+
updated: session.time.updated,
|
|
114
|
+
durationMs: new Date(session.time.updated).getTime() -
|
|
115
|
+
new Date(session.time.created).getTime(),
|
|
116
|
+
}
|
|
117
|
+
: null;
|
|
118
|
+
return {
|
|
119
|
+
tokens: {
|
|
120
|
+
input: totalInputTokens,
|
|
121
|
+
output: totalOutputTokens,
|
|
122
|
+
reasoning: totalReasoningTokens,
|
|
123
|
+
cacheRead: totalCacheRead,
|
|
124
|
+
cacheWrite: totalCacheWrite,
|
|
125
|
+
total: totalInputTokens +
|
|
126
|
+
totalOutputTokens +
|
|
127
|
+
totalReasoningTokens +
|
|
128
|
+
totalCacheRead +
|
|
129
|
+
totalCacheWrite,
|
|
130
|
+
},
|
|
131
|
+
cost: totalCost,
|
|
132
|
+
messages: {
|
|
133
|
+
total: messages.length,
|
|
134
|
+
assistant: assistantMessages.length,
|
|
135
|
+
},
|
|
136
|
+
fileChanges,
|
|
137
|
+
timing,
|
|
138
|
+
lastActivity,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=session-stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-stats.js","sourceRoot":"","sources":["../../src/utils/session-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI graph status helper for reading persisted graph state.
|
|
3
|
+
*
|
|
4
|
+
* This module provides read helpers for accessing graph service status
|
|
5
|
+
* from the shared project KV store, following the same pattern as
|
|
6
|
+
* src/utils/tui-plan-store.ts.
|
|
7
|
+
*/
|
|
8
|
+
import type { GraphStatusPayload } from './graph-status-store';
|
|
9
|
+
/**
|
|
10
|
+
* Gets the database path used by the memory plugin.
|
|
11
|
+
* Exported for testing purposes.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getDbPath(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Gets the database path for a specific data directory.
|
|
16
|
+
* Exported for testing purposes.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getDbPathForDataDir(dataDir: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Reads graph status from the shared KV store.
|
|
21
|
+
*
|
|
22
|
+
* @param projectId - The project ID (git commit hash)
|
|
23
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
24
|
+
* @returns The graph status payload or null if not found
|
|
25
|
+
*/
|
|
26
|
+
export declare function readGraphStatus(projectId: string, dbPathOverride?: string): GraphStatusPayload | null;
|
|
27
|
+
/**
|
|
28
|
+
* Formats graph status for display in the TUI sidebar.
|
|
29
|
+
* Returns the state text and color based solely on the persisted graph state.
|
|
30
|
+
*
|
|
31
|
+
* @param status - The graph status payload
|
|
32
|
+
* @returns Formatted display with state text and color
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatGraphStatus(status: GraphStatusPayload | null): {
|
|
35
|
+
text: string;
|
|
36
|
+
color: 'success' | 'info' | 'warning' | 'error' | 'textMuted';
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=tui-graph-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-graph-status.d.ts","sourceRoot":"","sources":["../../src/utils/tui-graph-status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAG9D;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CA0BrG;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAAG;IACpE,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAA;CAC9D,CA+BA"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI graph status helper for reading persisted graph state.
|
|
3
|
+
*
|
|
4
|
+
* This module provides read helpers for accessing graph service status
|
|
5
|
+
* from the shared project KV store, following the same pattern as
|
|
6
|
+
* src/utils/tui-plan-store.ts.
|
|
7
|
+
*/
|
|
8
|
+
import { Database } from 'bun:sqlite';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { resolveDataDir } from '../storage';
|
|
12
|
+
/**
|
|
13
|
+
* Gets the database path used by the memory plugin.
|
|
14
|
+
* Exported for testing purposes.
|
|
15
|
+
*/
|
|
16
|
+
export function getDbPath() {
|
|
17
|
+
return join(resolveDataDir(), 'graph.db');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Gets the database path for a specific data directory.
|
|
21
|
+
* Exported for testing purposes.
|
|
22
|
+
*/
|
|
23
|
+
export function getDbPathForDataDir(dataDir) {
|
|
24
|
+
return join(dataDir, 'graph.db');
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Reads graph status from the shared KV store.
|
|
28
|
+
*
|
|
29
|
+
* @param projectId - The project ID (git commit hash)
|
|
30
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
31
|
+
* @returns The graph status payload or null if not found
|
|
32
|
+
*/
|
|
33
|
+
export function readGraphStatus(projectId, dbPathOverride) {
|
|
34
|
+
const dbPath = dbPathOverride || getDbPath();
|
|
35
|
+
if (!existsSync(dbPath))
|
|
36
|
+
return null;
|
|
37
|
+
let db = null;
|
|
38
|
+
try {
|
|
39
|
+
db = new Database(dbPath, { readonly: true });
|
|
40
|
+
const now = Date.now();
|
|
41
|
+
const row = db.prepare('SELECT data FROM project_kv WHERE project_id = ? AND key = ? AND expires_at > ?').get(projectId, 'graph:status', now);
|
|
42
|
+
if (!row)
|
|
43
|
+
return null;
|
|
44
|
+
try {
|
|
45
|
+
return JSON.parse(row.data);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
try {
|
|
56
|
+
db?.close();
|
|
57
|
+
}
|
|
58
|
+
catch { }
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Formats graph status for display in the TUI sidebar.
|
|
63
|
+
* Returns the state text and color based solely on the persisted graph state.
|
|
64
|
+
*
|
|
65
|
+
* @param status - The graph status payload
|
|
66
|
+
* @returns Formatted display with state text and color
|
|
67
|
+
*/
|
|
68
|
+
export function formatGraphStatus(status) {
|
|
69
|
+
if (!status) {
|
|
70
|
+
return { text: 'unavailable', color: 'textMuted' };
|
|
71
|
+
}
|
|
72
|
+
switch (status.state) {
|
|
73
|
+
case 'ready':
|
|
74
|
+
if (status.stats) {
|
|
75
|
+
return {
|
|
76
|
+
text: `ready · ${status.stats.files} files`,
|
|
77
|
+
color: 'success'
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
text: 'ready',
|
|
82
|
+
color: 'success'
|
|
83
|
+
};
|
|
84
|
+
case 'indexing':
|
|
85
|
+
return { text: 'indexing', color: 'warning' };
|
|
86
|
+
case 'initializing':
|
|
87
|
+
return { text: 'initializing', color: 'info' };
|
|
88
|
+
case 'error':
|
|
89
|
+
return { text: 'error', color: 'error' };
|
|
90
|
+
case 'unavailable':
|
|
91
|
+
default:
|
|
92
|
+
return { text: 'unavailable', color: 'textMuted' };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=tui-graph-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-graph-status.js","sourceRoot":"","sources":["../../src/utils/tui-graph-status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,CAAC,CAAA;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,cAAuB;IACxE,MAAM,MAAM,GAAG,cAAc,IAAI,SAAS,EAAE,CAAA;IAE5C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAA;IAEpC,IAAI,EAAE,GAAoB,IAAI,CAAA;IAC9B,IAAI,CAAC;QACH,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAEtB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CACpB,iFAAiF,CAClF,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,CAA4B,CAAA;QAEhE,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAuB,CAAA;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YAAC,EAAE,EAAE,KAAK,EAAE,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IAC9B,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAiC;IAIjE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;IACpD,CAAC;IAED,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,OAAO;YACV,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO;oBACL,IAAI,EAAE,WAAW,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ;oBAC3C,KAAK,EAAE,SAAS;iBACjB,CAAA;YACH,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,SAAS;aACjB,CAAA;QAEH,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;QAE/C,KAAK,cAAc;YACjB,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;QAEhD,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QAE1C,KAAK,aAAa,CAAC;QACnB;YACE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI plan store helper for resolving plan keys with loop-session awareness.
|
|
3
|
+
*
|
|
4
|
+
* This module provides plan key resolution that mirrors the tool-side
|
|
5
|
+
* convention in src/tools/plan-kv.ts:9-15, ensuring TUI plan access
|
|
6
|
+
* honors loop worktree-scoped plan keys.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Gets the database path used by the memory plugin.
|
|
10
|
+
* Exported for testing purposes.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getDbPath(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Resolves the plan key for a session, checking for loop-session mapping first.
|
|
15
|
+
*
|
|
16
|
+
* Loop sessions store their plan under plan:{worktreeName}, while normal
|
|
17
|
+
* sessions use plan:{sessionId}. This function checks for a loop-session
|
|
18
|
+
* mapping and returns the appropriate plan key.
|
|
19
|
+
*
|
|
20
|
+
* @param projectId - The project ID (git commit hash)
|
|
21
|
+
* @param sessionID - The session ID to resolve
|
|
22
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
23
|
+
* @returns The resolved plan key (either plan:{worktreeName} or plan:{sessionID})
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolvePlanKey(projectId: string, sessionID: string, dbPathOverride?: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Reads plan content from the KV store for a session.
|
|
28
|
+
*
|
|
29
|
+
* @param projectId - The project ID (git commit hash)
|
|
30
|
+
* @param sessionID - The session ID to read plan for
|
|
31
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
32
|
+
* @returns The plan content or null if not found
|
|
33
|
+
*/
|
|
34
|
+
export declare function readPlan(projectId: string, sessionID: string, dbPathOverride?: string): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* Writes plan content to the KV store for a session.
|
|
37
|
+
*
|
|
38
|
+
* @param projectId - The project ID (git commit hash)
|
|
39
|
+
* @param sessionID - The session ID to write plan for
|
|
40
|
+
* @param content - The plan content to write
|
|
41
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
42
|
+
* @returns true if successful, false otherwise
|
|
43
|
+
*/
|
|
44
|
+
export declare function writePlan(projectId: string, sessionID: string, content: string, dbPathOverride?: string): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Deletes plan content from the KV store for a session.
|
|
47
|
+
*
|
|
48
|
+
* @param projectId - The project ID (git commit hash)
|
|
49
|
+
* @param sessionID - The session ID to delete plan for
|
|
50
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
51
|
+
* @returns true if a row was deleted, false otherwise
|
|
52
|
+
*/
|
|
53
|
+
export declare function deletePlan(projectId: string, sessionID: string, dbPathOverride?: string): boolean;
|
|
54
|
+
//# sourceMappingURL=tui-plan-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-plan-store.d.ts","sourceRoot":"","sources":["../../src/utils/tui-plan-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAmCpG;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0BrG;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAqBjH;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAoBjG"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI plan store helper for resolving plan keys with loop-session awareness.
|
|
3
|
+
*
|
|
4
|
+
* This module provides plan key resolution that mirrors the tool-side
|
|
5
|
+
* convention in src/tools/plan-kv.ts:9-15, ensuring TUI plan access
|
|
6
|
+
* honors loop worktree-scoped plan keys.
|
|
7
|
+
*/
|
|
8
|
+
import { Database } from 'bun:sqlite';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { resolveDataDir } from '../storage';
|
|
12
|
+
/**
|
|
13
|
+
* Gets the database path used by the memory plugin.
|
|
14
|
+
* Exported for testing purposes.
|
|
15
|
+
*/
|
|
16
|
+
export function getDbPath() {
|
|
17
|
+
return join(resolveDataDir(), 'graph.db');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolves the plan key for a session, checking for loop-session mapping first.
|
|
21
|
+
*
|
|
22
|
+
* Loop sessions store their plan under plan:{worktreeName}, while normal
|
|
23
|
+
* sessions use plan:{sessionId}. This function checks for a loop-session
|
|
24
|
+
* mapping and returns the appropriate plan key.
|
|
25
|
+
*
|
|
26
|
+
* @param projectId - The project ID (git commit hash)
|
|
27
|
+
* @param sessionID - The session ID to resolve
|
|
28
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
29
|
+
* @returns The resolved plan key (either plan:{worktreeName} or plan:{sessionID})
|
|
30
|
+
*/
|
|
31
|
+
export function resolvePlanKey(projectId, sessionID, dbPathOverride) {
|
|
32
|
+
const dbPath = dbPathOverride || getDbPath();
|
|
33
|
+
if (!existsSync(dbPath)) {
|
|
34
|
+
return `plan:${sessionID}`;
|
|
35
|
+
}
|
|
36
|
+
let db = null;
|
|
37
|
+
try {
|
|
38
|
+
db = new Database(dbPath, { readonly: true });
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
// Check for loop-session mapping first
|
|
41
|
+
const mappingRow = db.prepare('SELECT data FROM project_kv WHERE project_id = ? AND key = ? AND expires_at > ?').get(projectId, `loop-session:${sessionID}`, now);
|
|
42
|
+
if (mappingRow) {
|
|
43
|
+
try {
|
|
44
|
+
const worktreeName = JSON.parse(mappingRow.data);
|
|
45
|
+
if (typeof worktreeName === 'string' && worktreeName) {
|
|
46
|
+
return `plan:${worktreeName}`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Fall through to default if JSON parse fails
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Fall through to default on DB errors
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
try {
|
|
59
|
+
db?.close();
|
|
60
|
+
}
|
|
61
|
+
catch { }
|
|
62
|
+
}
|
|
63
|
+
// Default to session-based key for non-loop sessions
|
|
64
|
+
return `plan:${sessionID}`;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Reads plan content from the KV store for a session.
|
|
68
|
+
*
|
|
69
|
+
* @param projectId - The project ID (git commit hash)
|
|
70
|
+
* @param sessionID - The session ID to read plan for
|
|
71
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
72
|
+
* @returns The plan content or null if not found
|
|
73
|
+
*/
|
|
74
|
+
export function readPlan(projectId, sessionID, dbPathOverride) {
|
|
75
|
+
const dbPath = dbPathOverride || getDbPath();
|
|
76
|
+
if (!existsSync(dbPath))
|
|
77
|
+
return null;
|
|
78
|
+
let db = null;
|
|
79
|
+
try {
|
|
80
|
+
db = new Database(dbPath, { readonly: true });
|
|
81
|
+
const now = Date.now();
|
|
82
|
+
const planKey = resolvePlanKey(projectId, sessionID, dbPath);
|
|
83
|
+
const row = db.prepare('SELECT data FROM project_kv WHERE project_id = ? AND key = ? AND expires_at > ?').get(projectId, planKey, now);
|
|
84
|
+
if (!row)
|
|
85
|
+
return null;
|
|
86
|
+
const data = row.data;
|
|
87
|
+
if (typeof data === 'string' && data.startsWith('"')) {
|
|
88
|
+
try {
|
|
89
|
+
return JSON.parse(data);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return data;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return data;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
try {
|
|
102
|
+
db?.close();
|
|
103
|
+
}
|
|
104
|
+
catch { }
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Writes plan content to the KV store for a session.
|
|
109
|
+
*
|
|
110
|
+
* @param projectId - The project ID (git commit hash)
|
|
111
|
+
* @param sessionID - The session ID to write plan for
|
|
112
|
+
* @param content - The plan content to write
|
|
113
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
114
|
+
* @returns true if successful, false otherwise
|
|
115
|
+
*/
|
|
116
|
+
export function writePlan(projectId, sessionID, content, dbPathOverride) {
|
|
117
|
+
const dbPath = dbPathOverride || getDbPath();
|
|
118
|
+
if (!existsSync(dbPath))
|
|
119
|
+
return false;
|
|
120
|
+
let db = null;
|
|
121
|
+
try {
|
|
122
|
+
db = new Database(dbPath);
|
|
123
|
+
const now = Date.now();
|
|
124
|
+
const ttl = 7 * 24 * 60 * 60 * 1000;
|
|
125
|
+
const planKey = resolvePlanKey(projectId, sessionID, dbPath);
|
|
126
|
+
db.prepare('INSERT OR REPLACE INTO project_kv (project_id, key, data, expires_at, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)').run(projectId, planKey, JSON.stringify(content), now + ttl, now, now);
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
try {
|
|
134
|
+
db?.close();
|
|
135
|
+
}
|
|
136
|
+
catch { }
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Deletes plan content from the KV store for a session.
|
|
141
|
+
*
|
|
142
|
+
* @param projectId - The project ID (git commit hash)
|
|
143
|
+
* @param sessionID - The session ID to delete plan for
|
|
144
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
145
|
+
* @returns true if a row was deleted, false otherwise
|
|
146
|
+
*/
|
|
147
|
+
export function deletePlan(projectId, sessionID, dbPathOverride) {
|
|
148
|
+
const dbPath = dbPathOverride || getDbPath();
|
|
149
|
+
if (!existsSync(dbPath))
|
|
150
|
+
return false;
|
|
151
|
+
let db = null;
|
|
152
|
+
try {
|
|
153
|
+
db = new Database(dbPath);
|
|
154
|
+
const planKey = resolvePlanKey(projectId, sessionID, dbPath);
|
|
155
|
+
const result = db.prepare('DELETE FROM project_kv WHERE project_id = ? AND key = ?').run(projectId, planKey);
|
|
156
|
+
return (result.changes || 0) > 0;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
try {
|
|
163
|
+
db?.close();
|
|
164
|
+
}
|
|
165
|
+
catch { }
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=tui-plan-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-plan-store.js","sourceRoot":"","sources":["../../src/utils/tui-plan-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI refresh helpers for reading loop states from KV.
|
|
3
|
+
*
|
|
4
|
+
* This module provides testable helpers for accessing loop state
|
|
5
|
+
* from the shared project KV store.
|
|
6
|
+
*/
|
|
7
|
+
export type LoopInfo = {
|
|
8
|
+
name: string;
|
|
9
|
+
phase: string;
|
|
10
|
+
iteration: number;
|
|
11
|
+
maxIterations: number;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
active: boolean;
|
|
14
|
+
startedAt?: string;
|
|
15
|
+
completedAt?: string;
|
|
16
|
+
terminationReason?: string;
|
|
17
|
+
worktreeBranch?: string;
|
|
18
|
+
worktree?: boolean;
|
|
19
|
+
worktreeDir?: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Gets the database path used by the memory plugin.
|
|
23
|
+
* Exported for testing purposes.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getDbPath(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Reads loop states from the shared KV store.
|
|
28
|
+
*
|
|
29
|
+
* @param projectId - The project ID (git commit hash)
|
|
30
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
31
|
+
* @returns Array of loop states
|
|
32
|
+
*/
|
|
33
|
+
export declare function readLoopStates(projectId: string, dbPathOverride?: string): LoopInfo[];
|
|
34
|
+
/**
|
|
35
|
+
* Reads a single loop's current state by name from KV.
|
|
36
|
+
* Used by LoopDetailsDialog to avoid stale snapshots.
|
|
37
|
+
*
|
|
38
|
+
* @param projectId - The project ID (git commit hash)
|
|
39
|
+
* @param loopName - The loop name to read
|
|
40
|
+
* @param dbPathOverride - Optional database path override (for testing)
|
|
41
|
+
* @returns The loop state or null if not found
|
|
42
|
+
*/
|
|
43
|
+
export declare function readLoopByName(projectId: string, loopName: string, dbPathOverride?: string): LoopInfo | null;
|
|
44
|
+
//# sourceMappingURL=tui-refresh-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-refresh-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/tui-refresh-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAuCrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAqC5G"}
|