devsmind-mcp 2.2.2 → 2.4.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 (54) hide show
  1. package/README.md +234 -606
  2. package/dist/cli/analyze.d.ts +13 -0
  3. package/dist/cli/analyze.js +143 -0
  4. package/dist/cli/analyze.js.map +1 -0
  5. package/dist/cli/index.js +62 -0
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/cli/init.js +9 -0
  8. package/dist/cli/init.js.map +1 -1
  9. package/dist/cli/integrations/memory.js +9 -3
  10. package/dist/cli/integrations/memory.js.map +1 -1
  11. package/dist/cli/integrations/prompt.d.ts +2 -0
  12. package/dist/cli/integrations/prompt.js +21 -7
  13. package/dist/cli/integrations/prompt.js.map +1 -1
  14. package/dist/cli/prune.js +4 -3
  15. package/dist/cli/prune.js.map +1 -1
  16. package/dist/cli/rule.js +43 -83
  17. package/dist/cli/rule.js.map +1 -1
  18. package/dist/cli/sync.d.ts +7 -0
  19. package/dist/cli/sync.js +40 -7
  20. package/dist/cli/sync.js.map +1 -1
  21. package/dist/cli/workflow.d.ts +8 -0
  22. package/dist/cli/workflow.js +156 -0
  23. package/dist/cli/workflow.js.map +1 -0
  24. package/dist/db/analyze.d.ts +67 -0
  25. package/dist/db/analyze.js +167 -0
  26. package/dist/db/analyze.js.map +1 -0
  27. package/dist/db/database.d.ts +195 -2
  28. package/dist/db/database.js +870 -74
  29. package/dist/db/database.js.map +1 -1
  30. package/dist/db/schema.d.ts +28 -1
  31. package/dist/db/schema.js +34 -0
  32. package/dist/db/schema.js.map +1 -1
  33. package/dist/db/staging.d.ts +4 -0
  34. package/dist/db/staging.js +16 -2
  35. package/dist/db/staging.js.map +1 -1
  36. package/dist/db/workflow-import.d.ts +22 -0
  37. package/dist/db/workflow-import.js +116 -0
  38. package/dist/db/workflow-import.js.map +1 -0
  39. package/dist/mcp/server.d.ts +1 -1
  40. package/dist/mcp/server.js +641 -48
  41. package/dist/mcp/server.js.map +1 -1
  42. package/dist/utils/ast.d.ts +98 -0
  43. package/dist/utils/ast.js +262 -10
  44. package/dist/utils/ast.js.map +1 -1
  45. package/dist/utils/config.d.ts +2 -0
  46. package/dist/utils/config.js +11 -0
  47. package/dist/utils/config.js.map +1 -1
  48. package/dist/utils/edit.d.ts +41 -0
  49. package/dist/utils/edit.js +163 -0
  50. package/dist/utils/edit.js.map +1 -0
  51. package/dist/utils/git.d.ts +14 -0
  52. package/dist/utils/git.js +43 -0
  53. package/dist/utils/git.js.map +1 -0
  54. package/package.json +1 -1
package/dist/cli/prune.js CHANGED
@@ -75,10 +75,11 @@ async function handlePrune(opts) {
75
75
  try {
76
76
  await runPruneLoop(db);
77
77
  }
78
- catch (err) {
79
- console.error(`❌ Pruning failed: ${err.message}`);
80
- }
81
78
  finally {
79
+ // No catch here on purpose: index.ts's own action wrapper already catches, logs this
80
+ // exact "Pruning failed" message, and calls process.exit(1) — swallowing the error here
81
+ // (as this used to do) meant that outer handler never ran, so a genuine failure mid-prune
82
+ // still exited 0. db.close() only needs guaranteed cleanup, not error interception.
82
83
  db.close();
83
84
  }
84
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/cli/prune.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/cli/prune.ts"],"names":[],"mappings":"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"}
package/dist/cli/rule.js CHANGED
@@ -68,95 +68,51 @@ function buildRule(config, devmindDir) {
68
68
  `**Repos**: ${repoLines}`,
69
69
  notes ? `**Notes**: ${notes}` : '',
70
70
  '',
71
- '### 🧠 What DevsMind Actually Is — Read This First',
71
+ '### What This Is',
72
72
  '',
73
- 'This is NOT a normal tool you reach for only when asked to search something. DevsMind is the **persistent shared brain for this entire team** every teammate\'s AI agent, in every session, reads from the exact same graph you are about to write to. There is no "your copy" vs "their copy."',
74
- '',
75
- `**If you skip ${bt}stage_change${bt} + ${bt}commit_changes${bt}, you are not skipping a formality.** You are leaving the graph stale for every other developer's AI agent that queries this code later — tomorrow, next week, on a completely different task. And the reasoning behind your change (why it was made, what ticket drove it, what was broken before, what you tried and rejected) exists **only in this conversation, right now**. It is not in the diff. It is not in the commit message. If it isn't recorded this turn, it is gone forever — no reindex, no log, no ${bt}git blame${bt} can ever recover it.`,
76
- '',
77
- `* ${bt}get_node_graph${bt} fills the gap git can't: git shows you WHAT lines changed, never what depends on them. This gives you the live call graph instantly — every caller, every callee — so you find out what breaks BEFORE you change a signature, not after a teammate hits the bug.`,
78
- `* ${bt}get_node_history${bt} fills a different gap: git blame tells you WHO and WHEN. It never tells you WHY. The actual decision — what was tried, what was rejected, what ticket demanded this, what was broken before — only exists here, written by whichever AI agent made the change. Skip it before refactoring and you risk silently re-breaking a bug that was already fixed once, or undoing a decision that had a reason you never saw.`,
79
- '',
80
- '### ⚠️ CRITICAL PRE-FLIGHT CHECK & FEW-SHOT EXAMPLE',
81
- '',
82
- 'Before executing any filesystem search or reading any file contents, you MUST perform this check:',
83
- `1. **Am I searching for code/modules/features?** -> You MUST use ${bt}search_nodes${bt} first — it searches names/reasoning AND falls back to full code-content search automatically if nothing matches, in the SAME call. DO NOT start with grep or native filesystem search.`,
84
- `2. **Am I reading a source file?** -> You MUST call ${bt}get_node_code${bt} instead. It returns that one function/class parsed live from the file, not the whole file — far cheaper. Only read the raw file if the node genuinely isn't in the graph.`,
85
- `3. **Am I tracing how something flows through the code?** -> You MUST call ${bt}get_node_graph${bt} with ${bt}direction: "out"${bt} and ${bt}include_code: true${bt}. This returns the entry point PLUS everything it transitively calls, each with its source, in ONE call. Do NOT chain ${bt}get_node_code${bt} calls one function at a time — that wastes a chat turn per function.`,
86
- '',
87
- '#### Correct Workflow Example (single entity):',
88
- '* **User asks:** "Explain how rule generation works."',
89
- `* **Step 1 (Search):** Call ${bt}search_nodes${bt} with query "rule".`,
90
- `* **Step 2 (Get Code):** Call ${bt}get_node_code${bt} with node_id "${bt}{DevMinds}/src/cli/rule.ts#handleRule${bt}".`,
91
- '* **Step 3 (Explain):** Explain the logic using the returned code.',
92
- '',
93
- '#### Correct Workflow Example (tracing a flow — DO THIS, it is 2 turns not 15):',
94
- '* **User asks:** "How does an Alipay payment get processed end to end?"',
95
- `* **Step 1 (Find the entry point):** Call ${bt}search_nodes${bt} with query "alipay".`,
96
- `* **Step 2 (Pull the whole flow at once):** Call ${bt}get_node_graph${bt} with the entry node_id, ${bt}direction: "out"${bt}, ${bt}include_code: true${bt}, ${bt}max_depth: 3${bt}.`,
97
- '* **Step 3 (Explain):** You now have every function in the call chain with its code. Explain the flow. Do NOT make further tool calls to fetch code you already have.',
73
+ `DevsMind is this team's shared code graph every teammate's AI agent reads the same graph you write to, there is no "your copy." ${bt}get_node_graph${bt} shows what git can't (live callers/callees, before you break a signature). ${bt}get_node_history${bt} shows what git blame can't (why a change was made, not just who/when). Both are worthless if changes stop getting recorded so recording is not optional, it's the product.`,
98
74
  '',
99
75
  '### Tool Triggers',
100
76
  '',
101
77
  '| Situation | Tool |',
102
78
  '|-----------|------|',
103
- `| Searching for a module, feature, concept, code fragment, variable, or regex pattern | ${bt}search_nodes${bt} (name/reasoning match, auto-falls-back to code-content search) |`,
104
- `| Want to list/discover all nodes for a component or directory | ${bt}list_nodes${bt} |`,
105
- `| Need to read the code of ONE specific function/class | ${bt}get_node_code${bt} |`,
106
- `| Tracing a request/feature/flow through MULTIPLE functions | ${bt}get_node_graph${bt} with ${bt}direction:"out"${bt} + ${bt}include_code:true${bt} (ONE call — never chain ${bt}get_node_code${bt}) |`,
107
- `| Need to know what would break if I change this | ${bt}get_node_graph${bt} with ${bt}direction:"in"${bt} (finds every caller) |`,
108
- `| Working on / debugging a specific function or class | ${bt}get_node_summary${bt} → ${bt}get_node_history${bt} ${bt}get_node_graph${bt} |`,
109
- `| After adding/editing code (one file or many) | ${bt}stage_change${bt} once per touched entity, then ${bt}commit_changes${bt} once |`,
110
- `| Function/class is renamed | ${bt}rename_node${bt} |`,
111
- `| Function/class is removed from codebase | ${bt}deprecate_node${bt} |`,
112
- '',
113
- '### ⚠️ MANDATORY: Record Every Code Change in the Graph',
114
- '',
115
- 'This is NOT optional. Whenever you add, modify, rename, or delete code, you MUST record it in the graph in the SAME turn — before you consider the task done. An answer that changed code but did not update the graph is INCOMPLETE: the code changed, but every other developer\'s AI agent querying this project still sees the old version and none of the reasoning behind the new one.',
116
- '',
117
- `**Scope — this applies to source code only.** ${bt}stage_change${bt} models functions/classes/logic entities and will be REJECTED for anything outside: ${Array.from(scanner_1.INDEXABLE_EXTENSIONS).sort().join(', ')}. Do NOT stage stylesheets (${bt}.css${bt}/${bt}.scss${bt}/${bt}.less${bt}), markup, JSON/config, docs, images, or other non-code assets — they have no callers/callees to resolve and only bloat the graph with dead-end nodes. If a file's extension isn't in that list, skip it; do not retry.`,
118
- '',
119
- `1. **For ANY change (one file or many):** call ${bt}stage_change${bt} EXACTLY ONCE for EVERY function/class/entity you touched — pass its ${bt}node_id${bt}, ${bt}file_path${bt}, ${bt}code_snapshot${bt}, and ${bt}reasoning${bt}. You do NOT reason about connections. The ${bt}reasoning${bt} you write is the whole point — it's the only place "why" ever gets recorded, and it only exists if you write it down right now. When every touched entity is staged, call ${bt}commit_changes${bt} EXACTLY ONCE.`,
120
- `2. **⚠️ ${bt}commit_changes${bt} IS REQUIRED.** Staging alone writes NOTHING to the graph it just buffers to a local file no one else will ever read. If you call ${bt}stage_change${bt} and forget ${bt}commit_changes${bt}, the reasoning you just wrote is stranded and effectively lost: the next session (yours or a teammate's) starts from a graph that never learned about this change. NEVER end your turn with un-committed staged changes.`,
121
- `3. **Do NOT hand-manage edges.** ${bt}commit_changes${bt} resolves all connections from the code via AST automatically. Never try to reason about or pass connections yourself — a hand-guessed edge is more likely wrong than one resolved from the actual code.`,
122
- `4. **Do NOT print node/history data as text instead of calling the tools.** Printing looks like you did the work, but writes nothing to the graph the next session sees no trace this ever happened.`,
123
- '',
124
- '### Critical Rules',
125
- '',
126
- `1. **Never guess dependencies** — call ${bt}get_node_graph${bt} before touching any function signature. Git shows you what a diff changed; it never shows you what else calls this function and would silently break. Guessing here is how a "small" change becomes a production incident someone else has to debug without knowing why you touched this.`,
127
- `2. **Always read history first** call ${bt}get_node_history${bt} before refactoring to understand past decisions. Skipping this risks re-introducing a bug that was already fixed once, or undoing a decision that had a reason you can't see from the code alone.`,
128
- `3. **No deletions** never delete nodes. Use ${bt}deprecate_node${bt} to preserve history, so the reasoning behind code that's no longer active isn't lost the moment it's removed.`,
129
- `4. **Resurrecting nodes** — calling ${bt}stage_change${bt} on a deprecated node automatically re-activates it on the next ${bt}commit_changes${bt}.`,
130
- `5. **Search before grep** use ${bt}search_nodes${bt} before any filesystem search; it tries identifiers first and automatically falls back to a full code-content search if nothing matches, so one call covers both cases. A raw grep finds text; it can't tell you the reasoning already recorded behind that code, which is the whole reason to check here first. If it still finds nothing, use the ${bt}list_nodes${bt} tool to see all available nodes in the graph.`,
131
- `6. **Read code through the graph, not the filesystem** — call ${bt}get_node_code${bt} instead of opening a source file. It parses the node live from disk and returns only that entity, so it is always current AND far cheaper than reading the whole file. Reading the raw file instead means the graph has no way to know you looked, so any drift between what's recorded and what's on disk goes unnoticed. If the node isn't in the graph at all, read the file, then ${bt}stage_change${bt} + ${bt}commit_changes${bt} to add it.`,
132
- `7. **Fix drift when the tools report it** — if ${bt}get_node_code${bt} returns ${bt}snapshot_outdated: true${bt}, the graph has fallen behind the code on disk. Re-record that node with ${bt}stage_change${bt} + ${bt}commit_changes${bt}. If it returns ${bt}source: "cached"${bt}, the symbol could NOT be found in its file — it was likely renamed, moved, or deleted, so the code you got may be wrong. Verify against the file, then ${bt}rename_node${bt} or ${bt}deprecate_node${bt} as appropriate. Ignoring a drift signal means everyone after you keeps trusting a record you already know is wrong.`,
133
- `8. **No external scripts for indexing** — When indexing a repository, NEVER write or run external scripts (like Python, Bash, or Node.js) to automate or lazy load indexing. You must perform the indexing natively step-by-step in the chat using the designated tools: ${bt}index_start${bt}, ${bt}index_checkpoint${bt}, ${bt}index_continue${bt}, and ${bt}index_complete${bt}. This ensures progress is tracked in the SQLite scratchpad database and allows indexing to be safely resumed across chat sessions if context limits are hit.`,
134
- `9. **Continuous Indexing** Once you start the codebase indexing process, do not stop, pause, or ask for user confirmation between checkpoints. Keep executing and indexing files continuously until the workspace is fully indexed, or until the chat session's context token limit is reached.`,
135
- `10. **Grow-as-you-go Graph Maintenance (MANDATORY)** — DevsMind is a living code graph and keeping it in sync is a hard requirement, not a nicety. At the end of EVERY task or message where code was added, modified, renamed, or deleted, you MUST record it per the "MANDATORY: Record Every Code Change" section above — ${bt}stage_change${bt} per touched entity then ${bt}commit_changes${bt} once. NEVER finish a turn with un-committed staged changes. If you notice deprecated/stale nodes, clean them up with ${bt}deprecate_node${bt} or ${bt}rename_node${bt}. A graph that's allowed to go stale stops being worth checking at all — every skipped update is one more reason for the next agent to distrust what's here and fall back to guessing.`,
136
- '',
137
- '### Available Tools',
138
- '',
139
- '| Tool | Use when |',
140
- '|------|----------|',
141
- `| ${bt}search_nodes${bt} | Find code by name, keyword, or reasoning text — auto-falls-back to a regex/string code-content search if nothing matches |`,
142
- `| ${bt}list_nodes${bt} | List nodes in the graph with optional filters (type, file path, etc.) |`,
143
- `| ${bt}get_node_summary${bt} | Get file location, connection count, history count for a node |`,
144
- `| ${bt}get_node_code${bt} | Get ONE node's current source, parsed live from its file (use instead of reading the file) |`,
145
- `| ${bt}get_node_graph${bt} | See a node's callers/dependencies. With ${bt}direction:"out"${bt} + ${bt}include_code:true${bt}, returns an entire call flow WITH source code in a single call |`,
146
- `| ${bt}get_node_history${bt} | Read all past snapshots and reasoning logs for a node |`,
147
- `| ${bt}stage_change${bt} | Buffer one touched node after a code change (code + reasoning only; no edge reasoning) |`,
148
- `| ${bt}commit_changes${bt} | Flush all staged changes: create nodes, save history, resolve all connections via AST |`,
149
- `| ${bt}rename_node${bt} | Rename a node ID and update all its connections/history |`,
150
- `| ${bt}deprecate_node${bt} | Mark a removed function/class as deprecated (preserves history) |`,
151
- `| ${bt}get_recent_changes${bt} | List nodes modified in the last N hours across the project |`,
152
- `| ${bt}get_developer_activity${bt} | List recent changes made by a specific developer |`,
153
- `| ${bt}get_changes_by_requirement${bt} | Find all changes linked to a ticket or requirement ID |`,
154
- `| ${bt}search_decisions${bt} | Search architectural reasoning and decision logs by keyword |`,
155
- `| ${bt}get_orphaned_nodes${bt} | Find nodes with no connections (dead code / stale entries) |`,
156
- `| ${bt}recheck_graph${bt} | Scan files, deprecate nodes for deleted files, clean primitives |`,
157
- `| ${bt}get_visualizer_url${bt} | Get URL to open the interactive 2D/3D graph visualizer |`,
158
- '',
159
- '> All tool argument schemas are exposed automatically by the MCP server.'
79
+ `| Searching for a module, feature, concept, or code fragment | ${bt}search_nodes${bt} (name/reasoning match, auto-falls-back to code-content search) — never start with grep |`,
80
+ `| List/discover all nodes for a component or directory | ${bt}list_nodes${bt} |`,
81
+ `| Read the code of ONE function/class | ${bt}get_node_code${bt} (live-parsed, cheaper than opening the file) |`,
82
+ `| Trace a flow through MULTIPLE functions | ${bt}get_node_graph${bt} ${bt}direction:"out"${bt} + ${bt}include_code:true${bt} in ONE call — don't chain ${bt}get_node_code${bt} per function |`,
83
+ `| What would break if I change this? | ${bt}get_node_graph${bt} ${bt}direction:"in"${bt} (every caller) |`,
84
+ `| Before refactoring a function | ${bt}get_node_history${bt} first |`,
85
+ `| ANY edit to ANY file ${bt}.ts${bt}, ${bt}.vue${bt}, ${bt}.css${bt}, ${bt}.json${bt}, ${bt}.xml${bt}, anything | ${bt}edit_node${bt} (${bt}file_path${bt} + ${bt}old_string${bt} + ${bt}new_string${bt} + ${bt}reasoning${bt}) never your own edit tool. It never refuses a file type, and records what you changed for you |`,
86
+ `| Create a NEW file | ${bt}edit_node${bt} with ${bt}old_string: ""${bt} and the whole file as ${bt}new_string${bt} — never your own write tool |`,
87
+ `| You wrote a language with no parser (${bt}.py${bt}, ${bt}.go${bt}, ${bt}.java${bt}, …) | ${bt}stage_change${bt} for that node — immediately, not batched (${bt}edit_node${bt}'s response tells you when) |`,
88
+ `| Checkpoints during a long task, and before ending any turn with staged work | ${bt}commit_changes${bt} |`,
89
+ `| Function/class renamed | ${bt}rename_node${bt} |`,
90
+ `| Function/class removed | ${bt}deprecate_node${bt} (never delete — history is lost otherwise) |`,
91
+ '',
92
+ '### Recording Changes — Per Node, Not Per File, Not At The End',
93
+ '',
94
+ `${bt}stage_change${bt} is source code only (${Array.from(scanner_1.INDEXABLE_EXTENSIONS).sort().join(', ')}) — skip stylesheets, markup, config, docs, images.`,
95
+ '',
96
+ `1. ${bt}edit_node${bt} is the write path for **every** file — never your own edit/write tool, whatever the extension. Pass ${bt}file_path${bt} + ${bt}old_string${bt} + ${bt}new_string${bt} + ${bt}reasoning${bt}, exactly like an ordinary edit tool; to create a file, pass ${bt}old_string: ""${bt} and the whole file as ${bt}new_string${bt}. It traces where your text landed, records your reasoning against the function/class you actually changed, and answers with that node's callers. No ${bt}node_id${bt} to look up, no ${bt}code_snapshot${bt} to send back, no ${bt}stage_change${bt} call. Writes landing outside any function (markup, config, imports) record nothing — expected, not a failure.`,
97
+ `2. ${bt}stage_change${bt} is only for what no parser can read: a language with no AST support (${bt}.py${bt}, ${bt}.go${bt}, ${bt}.java${bt}, …). ${bt}edit_node${bt} still writes those files and tells you when it couldn't trace one. One call per **node**, the moment you finish it — a file with 3 changed functions is 3 calls, not saved up. Pass ${bt}node_id${bt}, ${bt}file_path${bt}, ${bt}code_snapshot${bt}, ${bt}reasoning${bt}. Never hand-guess connections — ${bt}commit_changes${bt} resolves them via AST.`,
98
+ `3. Call ${bt}commit_changes${bt} at natural checkpoints (a batch of related nodes, a context switch) — not saved for a single end-of-task call that's easy to skip when the task runs long. ${bt}edit_node${bt} and ${bt}stage_change${bt} both only stage; neither writes to the graph on its own. Always commit before ending a turn with anything staged.`,
99
+ `4. Don't print node/history data as text instead of calling the tools — that looks done but records nothing.`,
100
+ '',
101
+ '### Other Rules',
102
+ '',
103
+ `1. **No external scripts for indexing.** Use ${bt}index_start${bt} / ${bt}index_checkpoint${bt} / ${bt}index_continue${bt} / ${bt}index_complete${bt} natively so progress survives a context reset.`,
104
+ `2. **Don't pause mid-index** for confirmation keep going until the workspace is indexed or the context limit is hit.`,
105
+ `3. **Drift signals** — ${bt}get_node_code${bt} returning ${bt}snapshot_outdated:true${bt} means the graph disagrees with disk. If you're about to edit that node anyway, an ${bt}edit_node${bt} call re-syncs it as a side effect — nothing extra to do. To force a resync with NO real code change, ${bt}edit_node${bt} can't help (it requires ${bt}old_string${bt} to actually differ from ${bt}new_string${bt}) — use ${bt}stage_change${bt} instead, passing the current on-disk code as ${bt}code_snapshot${bt}, then ${bt}commit_changes${bt}. ${bt}source:"cached"${bt} means the symbol wasn't found (renamed/moved/deleted) — verify, then ${bt}rename_node${bt} or ${bt}deprecate_node${bt}.`,
106
+ `4. **Before multi-day work**, call ${bt}workflow_list${bt} if a paused workflow matches, offer to resume it (${bt}workflow_resume${bt} + ${bt}workflow_get_context${bt}) instead of starting fresh. While a workflow is active, ${bt}commit_changes${bt} auto-logs a step from what you staged call ${bt}workflow_add_step${bt} directly only for something a commit doesn't cover (a decision with no code change, or a ${bt}pending_tasks${bt} note).`,
107
+ '',
108
+ '### A Few Less-Obvious Tools',
109
+ '',
110
+ `Every tool's own name/schema/description is already sent to you automatically by the MCP server no need to list them all here. Just the ones worth knowing about ahead of time:`,
111
+ '',
112
+ `* ${bt}get_orphaned_nodes${bt} / ${bt}recheck_graph${bt} / ${bt}analyze_graph${bt} — maintenance, not day-to-day lookup. ${bt}analyze_graph${bt} is a zero-token local health check (god entities, cycles, dangling edges, renames); ${bt}fix:true${bt} applies only the safe automatic fixes.`,
113
+ `* ${bt}workflow_get_context${bt} — call right after ${bt}workflow_resume${bt} to load that workflow's full timeline + artifacts in one shot.`,
114
+ `* ${bt}workflow_sync_retroactive${bt} — backfills a workflow's timeline after a whole session went by without a step being recorded; takes already-extracted steps, not raw transcript text.`,
115
+ `* ${bt}workflow_import${bt} turns existing flow/architecture docs into paused, resumable workflows.`,
160
116
  ];
161
117
  return lines.filter(l => l !== null).join('\n');
162
118
  }
@@ -231,6 +187,10 @@ async function handleRule(opts) {
231
187
  filePath = (0, registry_1.resolveScopeFile)(scope.file, 'global', workspaceRoot);
232
188
  }
233
189
  const merged = (0, prompt_1.mergeRuleFile)(filePath, rule, target.rules.style, target.rules.wrap);
190
+ if (merged.error) {
191
+ console.error(`\n❌ ${merged.error}`);
192
+ return;
193
+ }
234
194
  console.log(`\n📝 Target: ${filePath.replace(/\\/g, '/')} (${merged.existed ? (target.rules.style === 'append-section' ? 'merge DevsMind block into existing' : 'overwrite dedicated file') : 'create new'})`);
235
195
  console.log(`\n${target.rules.style === 'append-section' ? 'The DevsMind block to be written:' : 'File contents to be written:'}\n`);
236
196
  console.log(merged.preview.split('\n').map(l => ' ' + l).join('\n'));
@@ -1 +1 @@
1
- {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/cli/rule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/cli/rule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,8BA4EC;AAyBD,gCAqFC;AA9MD,uCAAyB;AACzB,2CAA6B;AAC7B,4CAAmE;AACnE,kDAS+B;AAC/B,sDAA0E;AAC1E,8CAAwD;AAExD;;;GAGG;AACH,SAAgB,SAAS,CAAC,MAAqB,EAAE,UAAkB;IACjE,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAE3B,MAAM,SAAS,GAAG,KAAK;SACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;SACrG,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,QAAQ,GAAG,IAAI;QACnB,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACpE,CAAC,CAAC,eAAe,CAAC;IAEpB,MAAM,OAAO,GAAG,MAAM,CAAC,uBAAuB,IAAI,EAAE,CAAC;IACrD,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEtD,MAAM,EAAE,GAAG,GAAG,CAAC;IAEf,MAAM,KAAK,GAAG;QACZ,wBAAwB;QACxB,EAAE;QACF,qBAAqB,EAAE,GAAG,cAAc,GAAG,EAAE,EAAE;QAC/C,gBAAgB,WAAW,gBAAgB,IAAI,gBAAgB,QAAQ,2BAA2B,OAAO,KAAK;QAC9G,cAAc,SAAS,EAAE;QACzB,KAAK,CAAC,CAAC,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;QAClC,EAAE;QACF,kBAAkB;QAClB,EAAE;QACF,qIAAqI,EAAE,iBAAiB,EAAE,+EAA+E,EAAE,mBAAmB,EAAE,+KAA+K;QAC/a,EAAE;QACF,mBAAmB;QACnB,EAAE;QACF,sBAAsB;QACtB,sBAAsB;QACtB,kEAAkE,EAAE,eAAe,EAAE,2FAA2F;QAChL,4DAA4D,EAAE,aAAa,EAAE,IAAI;QACjF,2CAA2C,EAAE,gBAAgB,EAAE,iDAAiD;QAChH,+CAA+C,EAAE,iBAAiB,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,iBAAiB;QAC/L,0CAA0C,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE,mBAAmB;QAC3G,qCAAqC,EAAE,mBAAmB,EAAE,UAAU;QACtE,4BAA4B,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,oGAAoG;QACpU,yBAAyB,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,aAAa,EAAE,gCAAgC;QAClJ,0CAA0C,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,8CAA8C,EAAE,YAAY,EAAE,+BAA+B;QAC9M,mFAAmF,EAAE,iBAAiB,EAAE,IAAI;QAC5G,8BAA8B,EAAE,cAAc,EAAE,IAAI;QACpD,8BAA8B,EAAE,iBAAiB,EAAE,+CAA+C;QAClG,EAAE;QACF,gEAAgE;QAChE,EAAE;QACF,GAAG,EAAE,eAAe,EAAE,yBAAyB,KAAK,CAAC,IAAI,CAAC,8BAAoB,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,qDAAqD;QACtJ,EAAE;QACF,MAAM,EAAE,YAAY,EAAE,wGAAwG,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,gEAAgE,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,aAAa,EAAE,wJAAwJ,EAAE,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gHAAgH;QACvrB,MAAM,EAAE,eAAe,EAAE,yEAAyE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,wLAAwL,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,oCAAoC,EAAE,iBAAiB,EAAE,yBAAyB;QAChgB,WAAW,EAAE,iBAAiB,EAAE,+JAA+J,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,oHAAoH;QAC9V,8GAA8G;QAC9G,EAAE;QACF,iBAAiB;QACjB,EAAE;QACF,gDAAgD,EAAE,cAAc,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,iDAAiD;QACtM,wHAAwH;QACxH,0BAA0B,EAAE,gBAAgB,EAAE,cAAc,EAAE,yBAAyB,EAAE,sFAAsF,EAAE,YAAY,EAAE,yGAAyG,EAAE,YAAY,EAAE,4BAA4B,EAAE,aAAa,EAAE,4BAA4B,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,iDAAiD,EAAE,gBAAgB,EAAE,UAAU,EAAE,iBAAiB,EAAE,KAAK,EAAE,kBAAkB,EAAE,yEAAyE,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG;QACzqB,sCAAsC,EAAE,gBAAgB,EAAE,wDAAwD,EAAE,kBAAkB,EAAE,MAAM,EAAE,uBAAuB,EAAE,4DAA4D,EAAE,iBAAiB,EAAE,iDAAiD,EAAE,oBAAoB,EAAE,6FAA6F,EAAE,gBAAgB,EAAE,SAAS;QAC7b,EAAE;QACF,8BAA8B;QAC9B,EAAE;QACF,mLAAmL;QACnL,EAAE;QACF,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,0CAA0C,EAAE,gBAAgB,EAAE,wFAAwF,EAAE,WAAW,EAAE,yCAAyC;QAChS,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,iEAAiE;QAC9I,KAAK,EAAE,4BAA4B,EAAE,yJAAyJ;QAC9L,KAAK,EAAE,kBAAkB,EAAE,4EAA4E;KACxG,CAAC;IAEF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,WAAmB,EAAE,GAAY;IACtE,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,+BAA+B,WAAW,GAAG,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC5B,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,UAAU,CAAC,IAAwC;IACvE,MAAM,UAAU,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CACX,kCAAkC;YAClC,4EAA4E,CAC7E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACxD,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAkB,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,mCAAmC,UAAU,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;IAExC,8EAA8E;IAC9E,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACxC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,GAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,IAAA,iBAAQ,GAAE,CAAC;QAE9B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,IAAA,2BAAgB,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YACtE,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI;gBACvC,CAAC,CAAC,sEAAsE;gBACxE,CAAC,CAAC,EAAE,CAAC;YACP,eAAe,CACb,IAAI,EACJ,WAAW,EACX,oBAAoB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,eAAe,EAAE,CACjE,CAAC;YACF,OAAO;QACT,CAAC;QAED,kBAAkB;QAClB,MAAM,KAAK,GAAG,MAAM,IAAA,sBAAa,EAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,QAAgB,CAAC;QACrB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,IAAA,sBAAa,EAAC,aAAa,EAAE,iCAAiC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;YAClG,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAA,wBAAa,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,IAAA,2BAAgB,EAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,gBAAgB,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC;QAChN,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,gBAAgB,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,8BAA8B,IAAI,CAAC,CAAC;QACrI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvE,MAAM,EAAE,GAAG,MAAM,IAAA,sBAAa,EAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,IAAA,wBAAe,EAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,gCAAgC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACnG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,uBAAc,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -7,7 +7,14 @@
7
7
  * trigger a sync, and the DB's constructor-time `syncFromDisk()` only runs once
8
8
  * per process. So after a `git pull` the committed graph changes never reach the
9
9
  * local DB without a restart. This command applies them on demand.
10
+ *
11
+ * `--analyze` (optionally with `--fix`) runs `devsmind analyze` immediately after,
12
+ * on the same connection — the natural place to catch drift a teammate's changes
13
+ * introduced, right when you pull them in.
10
14
  */
11
15
  export declare function handleSync(opts: {
12
16
  path?: string;
17
+ analyze?: boolean;
18
+ fix?: boolean;
19
+ godEntityThreshold?: string;
13
20
  }): Promise<void>;
package/dist/cli/sync.js CHANGED
@@ -42,6 +42,8 @@ const path = __importStar(require("path"));
42
42
  const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
43
43
  const config_1 = require("../utils/config");
44
44
  const database_1 = require("../db/database");
45
+ const analyze_1 = require("../db/analyze");
46
+ const analyze_2 = require("./analyze");
45
47
  /**
46
48
  * `devsmind sync` — force the on-disk graph (`graph/**`) and history
47
49
  * (`history/*.json`) into the local `brain.db`.
@@ -51,6 +53,10 @@ const database_1 = require("../db/database");
51
53
  * trigger a sync, and the DB's constructor-time `syncFromDisk()` only runs once
52
54
  * per process. So after a `git pull` the committed graph changes never reach the
53
55
  * local DB without a restart. This command applies them on demand.
56
+ *
57
+ * `--analyze` (optionally with `--fix`) runs `devsmind analyze` immediately after,
58
+ * on the same connection — the natural place to catch drift a teammate's changes
59
+ * introduced, right when you pull them in.
54
60
  */
55
61
  async function handleSync(opts) {
56
62
  const devmindDir = (0, config_1.resolveDevmindDir)(opts.path);
@@ -65,12 +71,20 @@ async function handleSync(opts) {
65
71
  // Read the pre-sync counts straight from the existing brain.db file (if any),
66
72
  // BEFORE DevMindDatabase's constructor runs syncFromDisk(). This lets us show
67
73
  // an honest delta of what the sync actually pulled in.
68
- const before = readRawCounts(dbPath);
74
+ let before;
75
+ try {
76
+ before = readRawCounts(dbPath);
77
+ }
78
+ catch (err) {
79
+ console.error(`\n❌ ${err.message}`);
80
+ process.exit(1);
81
+ }
69
82
  // Constructing the DB runs syncFromDisk() once; we call it again explicitly so
70
83
  // the behaviour is obvious and robust even if the constructor changes later.
71
84
  const db = new database_1.DevMindDatabase(dbPath);
72
85
  try {
73
86
  db.syncFromDisk();
87
+ db.syncToDisk();
74
88
  const after = db.getCounts();
75
89
  const delta = (a, b) => {
76
90
  const d = b - a;
@@ -80,12 +94,24 @@ async function handleSync(opts) {
80
94
  console.log(` Nodes : ${after.nodes}${delta(before.nodes, after.nodes)}`);
81
95
  console.log(` Connections : ${after.connections}${delta(before.connections, after.connections)}`);
82
96
  console.log(` History : ${after.history}${delta(before.history, after.history)}\n`);
97
+ if (opts.analyze) {
98
+ const godEntityThreshold = opts.godEntityThreshold ? parseInt(opts.godEntityThreshold, 10) : undefined;
99
+ console.log(`🩺 Running analyze${opts.fix ? ' (--fix)' : ''}...`);
100
+ const report = (0, analyze_1.runAnalysis)(db, path.dirname(devmindDir), { fix: opts.fix === true, godEntityThreshold });
101
+ (0, analyze_2.printReport)(report);
102
+ }
83
103
  }
84
104
  finally {
85
105
  db.close();
86
106
  }
87
107
  }
88
- /** Count rows in an existing brain.db without triggering a sync. Missing file or tables → zeros. */
108
+ /**
109
+ * Count rows in an existing brain.db without triggering a sync. A missing file is a
110
+ * legitimate zero (first-ever sync). A file that exists but fails to OPEN (corrupt/
111
+ * truncated SQLite) is NOT a legitimate zero — that would print a misleading "+500"
112
+ * delta as if the DB were simply empty, masking real corruption. Per-table read
113
+ * failures (e.g. a table missing on an older schema) still fall back to 0.
114
+ */
89
115
  function readRawCounts(dbPath) {
90
116
  const zero = { nodes: 0, connections: 0, history: 0 };
91
117
  if (!fs.existsSync(dbPath))
@@ -93,6 +119,17 @@ function readRawCounts(dbPath) {
93
119
  let raw = null;
94
120
  try {
95
121
  raw = new better_sqlite3_1.default(dbPath, { readonly: true });
122
+ // better-sqlite3 opens lazily — a garbage/truncated file doesn't throw until the
123
+ // first real read, so force one here to detect corruption up front rather than
124
+ // letting per-table reads below silently swallow it into a misleading zero.
125
+ raw.prepare('SELECT 1').get();
126
+ }
127
+ catch (err) {
128
+ if (raw)
129
+ raw.close();
130
+ throw new Error(`brain.db exists but could not be read (${err.message}) — it may be corrupted. Investigate before syncing, or remove it to start fresh.`);
131
+ }
132
+ try {
96
133
  const one = (sql) => {
97
134
  try {
98
135
  const row = raw.prepare(sql).get();
@@ -108,12 +145,8 @@ function readRawCounts(dbPath) {
108
145
  history: one('SELECT COUNT(*) AS c FROM history'),
109
146
  };
110
147
  }
111
- catch {
112
- return zero;
113
- }
114
148
  finally {
115
- if (raw)
116
- raw.close();
149
+ raw.close();
117
150
  }
118
151
  }
119
152
  //# sourceMappingURL=sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** `devsmind workflow` — interactive list/view/pause/resume. Day-to-day creation and step-recording happens through the MCP tools the agent calls, not this command. */
2
+ export declare function handleWorkflow(opts: {
3
+ path?: string;
4
+ }): Promise<void>;
5
+ /** `devsmind workflow import <path>` — imports a folder of .md flow docs, or a single file, as paused workflows. */
6
+ export declare function handleWorkflowImport(pathArg: string, opts: {
7
+ path?: string;
8
+ }): Promise<void>;
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.handleWorkflow = handleWorkflow;
40
+ exports.handleWorkflowImport = handleWorkflowImport;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const prompts_1 = __importDefault(require("prompts"));
44
+ const config_1 = require("../utils/config");
45
+ const database_1 = require("../db/database");
46
+ const workflow_import_1 = require("../db/workflow-import");
47
+ function openDb(pathOpt) {
48
+ const devmindDir = (0, config_1.resolveDevmindDir)(pathOpt);
49
+ if (!devmindDir) {
50
+ console.error(`❌ No .devmind directory found.\n` +
51
+ ` Run from inside a DevsMind brain folder, or pass --path <devmind_path>.`);
52
+ process.exit(1);
53
+ }
54
+ return { db: new database_1.DevMindDatabase(path.join(devmindDir, 'brain.db')), devmindDir };
55
+ }
56
+ /** `devsmind workflow` — interactive list/view/pause/resume. Day-to-day creation and step-recording happens through the MCP tools the agent calls, not this command. */
57
+ async function handleWorkflow(opts) {
58
+ const { db } = openDb(opts.path);
59
+ try {
60
+ await runWorkflowLoop(db);
61
+ }
62
+ finally {
63
+ db.close();
64
+ }
65
+ }
66
+ async function runWorkflowLoop(db) {
67
+ while (true) {
68
+ const workflows = db.listWorkflows();
69
+ if (workflows.length === 0) {
70
+ console.log('📝 No workflows yet. Create one via the workflow_create MCP tool, or import existing docs with `devsmind workflow import <path>`.');
71
+ return;
72
+ }
73
+ const statusEmoji = { active: '🟢', paused: '⏸️', completed: '✅' };
74
+ const choices = workflows.map(w => ({
75
+ title: `${statusEmoji[w.status] || ''} [${w.status}] ${w.name}`,
76
+ value: w.id
77
+ }));
78
+ choices.push({ title: '🚪 Exit', value: 'exit' });
79
+ const response = await (0, prompts_1.default)({
80
+ type: 'select',
81
+ name: 'id',
82
+ message: `Workflows (${workflows.length}):`,
83
+ choices
84
+ });
85
+ if (!response.id || response.id === 'exit') {
86
+ console.log('🚪 Goodbye!');
87
+ break;
88
+ }
89
+ await showWorkflowMenu(db, response.id);
90
+ }
91
+ }
92
+ async function showWorkflowMenu(db, id) {
93
+ while (true) {
94
+ let workflow;
95
+ let steps, artifacts;
96
+ try {
97
+ ({ workflow, steps, artifacts } = db.getWorkflowContext(id));
98
+ }
99
+ catch {
100
+ return;
101
+ }
102
+ console.log(`\n==================================================`);
103
+ console.log(`📋 ${workflow.name} [${workflow.status}]`);
104
+ console.log(`==================================================`);
105
+ console.log(workflow.description);
106
+ console.log(`\nSteps (${steps.length}):`);
107
+ for (const s of steps) {
108
+ console.log(` ${s.step_index}. ${s.summary}${s.pending_tasks ? ` (pending: ${s.pending_tasks})` : ''}`);
109
+ }
110
+ console.log(`\nArtifacts (${artifacts.length}):`);
111
+ for (const a of artifacts) {
112
+ console.log(` - [${a.type}] ${a.source_name} → ${a.file_path.replace(/\\/g, '/')}`);
113
+ }
114
+ const choices = [];
115
+ if (workflow.status !== 'active')
116
+ choices.push({ title: '▶️ Resume (make active)', value: 'resume' });
117
+ if (workflow.status === 'active')
118
+ choices.push({ title: '⏸️ Pause', value: 'pause' });
119
+ if (workflow.status !== 'completed')
120
+ choices.push({ title: '✅ Mark completed', value: 'complete' });
121
+ choices.push({ title: '⬅️ Back to list', value: 'back' });
122
+ const response = await (0, prompts_1.default)({ type: 'select', name: 'action', message: 'Action:', choices });
123
+ if (!response.action || response.action === 'back')
124
+ return;
125
+ if (response.action === 'resume')
126
+ db.resumeWorkflow(id);
127
+ if (response.action === 'pause')
128
+ db.pauseWorkflow();
129
+ if (response.action === 'complete')
130
+ db.completeWorkflow(id);
131
+ }
132
+ }
133
+ /** `devsmind workflow import <path>` — imports a folder of .md flow docs, or a single file, as paused workflows. */
134
+ async function handleWorkflowImport(pathArg, opts) {
135
+ const { db } = openDb(opts.path);
136
+ try {
137
+ const resolved = path.resolve(pathArg);
138
+ const isDir = fs.existsSync(resolved) && fs.statSync(resolved).isDirectory();
139
+ const result = (0, workflow_import_1.importWorkflowDocs)(db, isDir ? resolved : undefined, isDir ? undefined : resolved);
140
+ console.log(`\n📥 Import complete.`);
141
+ if (result.created.length)
142
+ console.log(` Created (${result.created.length}): ${result.created.join(', ')}`);
143
+ if (result.updated.length)
144
+ console.log(` Updated (${result.updated.length}): ${result.updated.join(', ')}`);
145
+ if (result.skipped.length)
146
+ console.log(` Skipped (${result.skipped.length}): ${result.skipped.join(', ')}`);
147
+ if (!result.created.length && !result.updated.length && !result.skipped.length) {
148
+ console.log(' Nothing to import.');
149
+ }
150
+ console.log();
151
+ }
152
+ finally {
153
+ db.close();
154
+ }
155
+ }
156
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/cli/workflow.ts"],"names":[],"mappings":"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"}