@monoes/monomindcli 2.16.12 → 2.16.13

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 (217) hide show
  1. package/.claude/agents/core/coder.md +1 -1
  2. package/.claude/agents/engineering/engineering-devops-automator.md +1 -1
  3. package/.claude/agents/github/repo-architect.md +1 -1
  4. package/.claude/agents/testing/production-validator.md +1 -1
  5. package/.claude/agents/testing/testing-tool-evaluator.md +1 -1
  6. package/.claude/commands/github/pr-manager.md +1 -1
  7. package/.claude/helpers/pick-rank.cjs +34 -4
  8. package/.claude/skills/monolean-audit/SKILL.md +1 -1
  9. package/dist/src/commands/cleanup-data.d.ts +30 -0
  10. package/dist/src/commands/cleanup-data.d.ts.map +1 -0
  11. package/dist/src/commands/cleanup-data.js +138 -0
  12. package/dist/src/commands/cleanup-data.js.map +1 -0
  13. package/dist/src/commands/cleanup-scratch.d.ts +43 -0
  14. package/dist/src/commands/cleanup-scratch.d.ts.map +1 -0
  15. package/dist/src/commands/cleanup-scratch.js +125 -0
  16. package/dist/src/commands/cleanup-scratch.js.map +1 -0
  17. package/dist/src/commands/cleanup.d.ts +2 -39
  18. package/dist/src/commands/cleanup.d.ts.map +1 -1
  19. package/dist/src/commands/cleanup.js +5 -247
  20. package/dist/src/commands/cleanup.js.map +1 -1
  21. package/dist/src/commands/doctor-gitignore-checks.d.ts +10 -0
  22. package/dist/src/commands/doctor-gitignore-checks.d.ts.map +1 -0
  23. package/dist/src/commands/doctor-gitignore-checks.js +141 -0
  24. package/dist/src/commands/doctor-gitignore-checks.js.map +1 -0
  25. package/dist/src/commands/doctor-helpers-checks.d.ts +10 -0
  26. package/dist/src/commands/doctor-helpers-checks.d.ts.map +1 -0
  27. package/dist/src/commands/doctor-helpers-checks.js +292 -0
  28. package/dist/src/commands/doctor-helpers-checks.js.map +1 -0
  29. package/dist/src/commands/doctor-memory-checks.d.ts +47 -0
  30. package/dist/src/commands/doctor-memory-checks.d.ts.map +1 -0
  31. package/dist/src/commands/doctor-memory-checks.js +298 -0
  32. package/dist/src/commands/doctor-memory-checks.js.map +1 -0
  33. package/dist/src/commands/doctor-monograph-checks.d.ts +9 -0
  34. package/dist/src/commands/doctor-monograph-checks.d.ts.map +1 -0
  35. package/dist/src/commands/doctor-monograph-checks.js +331 -0
  36. package/dist/src/commands/doctor-monograph-checks.js.map +1 -0
  37. package/dist/src/commands/doctor-project-checks.d.ts +7 -66
  38. package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
  39. package/dist/src/commands/doctor-project-checks.js +10 -1331
  40. package/dist/src/commands/doctor-project-checks.js.map +1 -1
  41. package/dist/src/commands/doctor-routing-checks.d.ts +10 -0
  42. package/dist/src/commands/doctor-routing-checks.d.ts.map +1 -0
  43. package/dist/src/commands/doctor-routing-checks.js +194 -0
  44. package/dist/src/commands/doctor-routing-checks.js.map +1 -0
  45. package/dist/src/commands/doctor-worker-checks.d.ts +17 -0
  46. package/dist/src/commands/doctor-worker-checks.d.ts.map +1 -0
  47. package/dist/src/commands/doctor-worker-checks.js +122 -0
  48. package/dist/src/commands/doctor-worker-checks.js.map +1 -0
  49. package/dist/src/commands/hooks-routing-commands.js +1 -1
  50. package/dist/src/commands/hooks-routing-commands.js.map +1 -1
  51. package/dist/src/commands/init.d.ts.map +1 -1
  52. package/dist/src/commands/init.js +6 -15
  53. package/dist/src/commands/init.js.map +1 -1
  54. package/dist/src/index.js +2 -2
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/init/never-commit.d.ts +3 -3
  57. package/dist/src/init/types.d.ts +1 -1
  58. package/dist/src/init/types.js +1 -1
  59. package/dist/src/knowledge/document-store.js +1 -1
  60. package/dist/src/knowledge/document-store.js.map +1 -1
  61. package/dist/src/mcp-tools/hooks-edit-command.d.ts +10 -0
  62. package/dist/src/mcp-tools/hooks-edit-command.d.ts.map +1 -0
  63. package/dist/src/mcp-tools/hooks-edit-command.js +247 -0
  64. package/dist/src/mcp-tools/hooks-edit-command.js.map +1 -0
  65. package/dist/src/mcp-tools/hooks-learning.d.ts +9 -0
  66. package/dist/src/mcp-tools/hooks-learning.d.ts.map +1 -0
  67. package/dist/src/mcp-tools/hooks-learning.js +408 -0
  68. package/dist/src/mcp-tools/hooks-learning.js.map +1 -0
  69. package/dist/src/mcp-tools/hooks-metrics-list.d.ts +8 -0
  70. package/dist/src/mcp-tools/hooks-metrics-list.d.ts.map +1 -0
  71. package/dist/src/mcp-tools/hooks-metrics-list.js +205 -0
  72. package/dist/src/mcp-tools/hooks-metrics-list.js.map +1 -0
  73. package/dist/src/mcp-tools/hooks-route.d.ts +12 -0
  74. package/dist/src/mcp-tools/hooks-route.d.ts.map +1 -0
  75. package/dist/src/mcp-tools/hooks-route.js +251 -0
  76. package/dist/src/mcp-tools/hooks-route.js.map +1 -0
  77. package/dist/src/mcp-tools/hooks-routing.d.ts +6 -27
  78. package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
  79. package/dist/src/mcp-tools/hooks-routing.js +6 -1727
  80. package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
  81. package/dist/src/mcp-tools/hooks-session.d.ts +9 -0
  82. package/dist/src/mcp-tools/hooks-session.d.ts.map +1 -0
  83. package/dist/src/mcp-tools/hooks-session.js +243 -0
  84. package/dist/src/mcp-tools/hooks-session.js.map +1 -0
  85. package/dist/src/mcp-tools/hooks-task.d.ts +17 -0
  86. package/dist/src/mcp-tools/hooks-task.d.ts.map +1 -0
  87. package/dist/src/mcp-tools/hooks-task.js +427 -0
  88. package/dist/src/mcp-tools/hooks-task.js.map +1 -0
  89. package/dist/src/mcp-tools/hooks-tools.d.ts +2 -1
  90. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  91. package/dist/src/mcp-tools/hooks-tools.js +2 -1
  92. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  93. package/dist/src/mcp-tools/memory-tools.js +1 -1
  94. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  95. package/dist/src/memory/bm25-index.d.ts +2 -2
  96. package/dist/src/memory/bm25-index.js +2 -2
  97. package/dist/src/memory/embedding-operations.js +2 -2
  98. package/dist/src/memory/embedding-operations.js.map +1 -1
  99. package/dist/src/memory/entity-name-key.d.ts +1 -1
  100. package/dist/src/memory/entity-name-key.js +1 -1
  101. package/dist/src/memory/hnsw-operations.d.ts +1 -1
  102. package/dist/src/memory/hnsw-operations.js +1 -1
  103. package/dist/src/memory/memory-bridge-backend.d.ts +43 -0
  104. package/dist/src/memory/memory-bridge-backend.d.ts.map +1 -0
  105. package/dist/src/memory/memory-bridge-backend.js +363 -0
  106. package/dist/src/memory/memory-bridge-backend.js.map +1 -0
  107. package/dist/src/memory/memory-bridge-core.d.ts +42 -0
  108. package/dist/src/memory/memory-bridge-core.d.ts.map +1 -0
  109. package/dist/src/memory/memory-bridge-core.js +126 -0
  110. package/dist/src/memory/memory-bridge-core.js.map +1 -0
  111. package/dist/src/memory/memory-bridge-entries.d.ts +131 -0
  112. package/dist/src/memory/memory-bridge-entries.d.ts.map +1 -0
  113. package/dist/src/memory/memory-bridge-entries.js +227 -0
  114. package/dist/src/memory/memory-bridge-entries.js.map +1 -0
  115. package/dist/src/memory/memory-bridge-feedback.d.ts +60 -0
  116. package/dist/src/memory/memory-bridge-feedback.d.ts.map +1 -0
  117. package/dist/src/memory/memory-bridge-feedback.js +118 -0
  118. package/dist/src/memory/memory-bridge-feedback.js.map +1 -0
  119. package/dist/src/memory/memory-bridge-paths.d.ts +123 -0
  120. package/dist/src/memory/memory-bridge-paths.d.ts.map +1 -0
  121. package/dist/src/memory/memory-bridge-paths.js +335 -0
  122. package/dist/src/memory/memory-bridge-paths.js.map +1 -0
  123. package/dist/src/memory/memory-bridge-search.d.ts +48 -0
  124. package/dist/src/memory/memory-bridge-search.d.ts.map +1 -0
  125. package/dist/src/memory/memory-bridge-search.js +383 -0
  126. package/dist/src/memory/memory-bridge-search.js.map +1 -0
  127. package/dist/src/memory/memory-bridge-sessions.d.ts +38 -0
  128. package/dist/src/memory/memory-bridge-sessions.d.ts.map +1 -0
  129. package/dist/src/memory/memory-bridge-sessions.js +109 -0
  130. package/dist/src/memory/memory-bridge-sessions.js.map +1 -0
  131. package/dist/src/memory/memory-bridge-store.d.ts +58 -0
  132. package/dist/src/memory/memory-bridge-store.d.ts.map +1 -0
  133. package/dist/src/memory/memory-bridge-store.js +201 -0
  134. package/dist/src/memory/memory-bridge-store.js.map +1 -0
  135. package/dist/src/memory/memory-bridge.d.ts +10 -438
  136. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  137. package/dist/src/memory/memory-bridge.js +14 -1787
  138. package/dist/src/memory/memory-bridge.js.map +1 -1
  139. package/dist/src/memory/memory-kg-claims.d.ts +52 -0
  140. package/dist/src/memory/memory-kg-claims.d.ts.map +1 -0
  141. package/dist/src/memory/memory-kg-claims.js +99 -0
  142. package/dist/src/memory/memory-kg-claims.js.map +1 -0
  143. package/dist/src/memory/memory-kg-index.d.ts +86 -0
  144. package/dist/src/memory/memory-kg-index.d.ts.map +1 -0
  145. package/dist/src/memory/memory-kg-index.js +256 -0
  146. package/dist/src/memory/memory-kg-index.js.map +1 -0
  147. package/dist/src/memory/memory-kg-ingest.d.ts +44 -0
  148. package/dist/src/memory/memory-kg-ingest.d.ts.map +1 -0
  149. package/dist/src/memory/memory-kg-ingest.js +361 -0
  150. package/dist/src/memory/memory-kg-ingest.js.map +1 -0
  151. package/dist/src/memory/memory-kg-model.d.ts +168 -0
  152. package/dist/src/memory/memory-kg-model.d.ts.map +1 -0
  153. package/dist/src/memory/memory-kg-model.js +158 -0
  154. package/dist/src/memory/memory-kg-model.js.map +1 -0
  155. package/dist/src/memory/memory-kg-names.d.ts +64 -0
  156. package/dist/src/memory/memory-kg-names.d.ts.map +1 -0
  157. package/dist/src/memory/memory-kg-names.js +187 -0
  158. package/dist/src/memory/memory-kg-names.js.map +1 -0
  159. package/dist/src/memory/memory-kg-promote.d.ts +79 -0
  160. package/dist/src/memory/memory-kg-promote.d.ts.map +1 -0
  161. package/dist/src/memory/memory-kg-promote.js +248 -0
  162. package/dist/src/memory/memory-kg-promote.js.map +1 -0
  163. package/dist/src/memory/memory-kg-rebuild.d.ts +77 -0
  164. package/dist/src/memory/memory-kg-rebuild.d.ts.map +1 -0
  165. package/dist/src/memory/memory-kg-rebuild.js +299 -0
  166. package/dist/src/memory/memory-kg-rebuild.js.map +1 -0
  167. package/dist/src/memory/memory-kg-rollback.d.ts +47 -0
  168. package/dist/src/memory/memory-kg-rollback.d.ts.map +1 -0
  169. package/dist/src/memory/memory-kg-rollback.js +193 -0
  170. package/dist/src/memory/memory-kg-rollback.js.map +1 -0
  171. package/dist/src/memory/memory-kg-rules.d.ts +64 -0
  172. package/dist/src/memory/memory-kg-rules.d.ts.map +1 -0
  173. package/dist/src/memory/memory-kg-rules.js +251 -0
  174. package/dist/src/memory/memory-kg-rules.js.map +1 -0
  175. package/dist/src/memory/memory-kg-scan.d.ts +118 -0
  176. package/dist/src/memory/memory-kg-scan.d.ts.map +1 -0
  177. package/dist/src/memory/memory-kg-scan.js +209 -0
  178. package/dist/src/memory/memory-kg-scan.js.map +1 -0
  179. package/dist/src/memory/memory-kg-search.d.ts +80 -0
  180. package/dist/src/memory/memory-kg-search.d.ts.map +1 -0
  181. package/dist/src/memory/memory-kg-search.js +239 -0
  182. package/dist/src/memory/memory-kg-search.js.map +1 -0
  183. package/dist/src/memory/memory-kg.d.ts +19 -547
  184. package/dist/src/memory/memory-kg.d.ts.map +1 -1
  185. package/dist/src/memory/memory-kg.js +10 -2389
  186. package/dist/src/memory/memory-kg.js.map +1 -1
  187. package/dist/src/ui/org-hil.mjs +1 -1
  188. package/dist/src/ui/routes-org-agents.mjs +318 -0
  189. package/dist/src/ui/routes-org-approvals.mjs +133 -0
  190. package/dist/src/ui/routes-org-config.mjs +459 -0
  191. package/dist/src/ui/routes-org-control.mjs +300 -0
  192. package/dist/src/ui/routes-org-files.mjs +172 -0
  193. package/dist/src/ui/routes-org-helpers.mjs +84 -0
  194. package/dist/src/ui/routes-org-knowledge.mjs +262 -0
  195. package/dist/src/ui/routes-org-lifecycle.mjs +224 -0
  196. package/dist/src/ui/routes-org-live.mjs +278 -0
  197. package/dist/src/ui/routes-org-mastermind.mjs +346 -0
  198. package/dist/src/ui/routes-org-planning.mjs +398 -0
  199. package/dist/src/ui/routes-org-runs.mjs +430 -0
  200. package/dist/src/ui/routes-org-status.mjs +342 -0
  201. package/dist/src/ui/routes-org-workflows.mjs +212 -0
  202. package/dist/src/ui/routes-org.mjs +26 -3847
  203. package/dist/src/ui/server.mjs +1 -1
  204. package/dist/src/utils/native-error.d.ts +1 -1
  205. package/dist/src/utils/native-error.js +1 -1
  206. package/dist/src/utils/paths.d.ts +2 -1
  207. package/dist/src/utils/paths.d.ts.map +1 -1
  208. package/dist/src/utils/paths.js +2 -1
  209. package/dist/src/utils/paths.js.map +1 -1
  210. package/dist/tsconfig.tsbuildinfo +1 -1
  211. package/org-skills/adversarial-reviewer/SKILL.md +1 -1
  212. package/org-skills/board-deck-builder/SKILL.md +1 -1
  213. package/org-skills/code-reviewer/SKILL.md +1 -1
  214. package/org-skills/debugging-wizard/SKILL.md +1 -1
  215. package/org-skills/scientific-thinking-literature-review/SKILL.md +1 -1
  216. package/org-skills/scientific-thinking-scholar-evaluation/SKILL.md +1 -1
  217. package/package.json +8 -8
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Hooks MCP Tools — pre/post edit and pre/post command.
3
+ * Extracted from hooks-routing.ts.
4
+ */
5
+ import { existsSync, mkdirSync, renameSync, writeFileSync } from 'node:fs';
6
+ import { join, resolve } from 'node:path';
7
+ import { recordCommand } from '../monovector/command-outcomes.js';
8
+ import { validateMcpString } from '../utils/input-guards.js';
9
+ import { assessCommandRisk, getFileExtension, getMemoryPath, getRouteOutcomesBaseDir, loadMemoryStore, MEMORY_DIR, suggestAgentsForFile, } from './hooks-embedding.js';
10
+ import { getProjectCwd } from './types.js';
11
+ // MCP Tool implementations - return raw data for direct CLI use
12
+ export const hooksPreEdit = {
13
+ name: 'hooks_pre-edit',
14
+ description: 'Get context and agent suggestions before editing a file',
15
+ inputSchema: {
16
+ type: 'object',
17
+ properties: {
18
+ filePath: { type: 'string', description: 'Path to the file being edited' },
19
+ operation: {
20
+ type: 'string',
21
+ description: 'Type of operation (create, update, delete, refactor)',
22
+ },
23
+ context: { type: 'string', description: 'Additional context' },
24
+ },
25
+ required: ['filePath'],
26
+ },
27
+ handler: async (params) => {
28
+ // Cap filePath: passed to suggestAgentsForFile (O(n) regex) and reflected in
29
+ // response. Cap operation to prevent oversized strings in recommendations.
30
+ const MAX_PRE_EDIT_PATH_LEN = 4 * 1024;
31
+ const MAX_PRE_EDIT_OP_LEN = 64;
32
+ const filePath = validateMcpString(params.filePath, 'filePath', MAX_PRE_EDIT_PATH_LEN);
33
+ if (!filePath) {
34
+ return { error: 'filePath is required (non-empty string, no control chars, max 4KB)' };
35
+ }
36
+ const operation = validateMcpString(params.operation, 'operation', MAX_PRE_EDIT_OP_LEN) ?? 'update';
37
+ const suggestedAgents = suggestAgentsForFile(filePath);
38
+ const ext = getFileExtension(filePath);
39
+ return {
40
+ filePath,
41
+ operation,
42
+ context: {
43
+ fileExists: existsSync(resolve(getProjectCwd(), filePath)),
44
+ fileType: ext || 'unknown',
45
+ suggestedAgents,
46
+ risks: operation === 'delete' ? ['File deletion is irreversible'] : [],
47
+ },
48
+ recommendations: [
49
+ `Recommended agents: ${suggestedAgents.join(', ')}`,
50
+ 'Run tests after changes',
51
+ ],
52
+ };
53
+ },
54
+ };
55
+ export const hooksPostEdit = {
56
+ name: 'hooks_post-edit',
57
+ description: 'Record editing outcome for learning',
58
+ inputSchema: {
59
+ type: 'object',
60
+ properties: {
61
+ filePath: { type: 'string', description: 'Path to the edited file' },
62
+ success: { type: 'boolean', description: 'Whether the edit was successful' },
63
+ agent: { type: 'string', description: 'Agent that performed the edit' },
64
+ },
65
+ required: ['filePath'],
66
+ },
67
+ handler: async (params) => {
68
+ // Cap filePath: interpolated into taskId and task text forwarded to
69
+ // bridgeRecordFeedback (which calls generateEmbedding — O(n) hash fallback).
70
+ // Cap agent: stored in feedback record and forwarded to bridge.
71
+ const MAX_POST_EDIT_PATH_LEN = 4 * 1024;
72
+ const MAX_POST_EDIT_AGENT_LEN = 256;
73
+ const filePath = validateMcpString(params.filePath, 'filePath', MAX_POST_EDIT_PATH_LEN);
74
+ if (!filePath) {
75
+ return { error: 'filePath is required (non-empty string, no control chars, max 4KB)' };
76
+ }
77
+ const success = params.success !== false;
78
+ const agent = validateMcpString(params.agent, 'agent', MAX_POST_EDIT_AGENT_LEN) ?? undefined;
79
+ // Wire recordFeedback through bridge (issue #1209)
80
+ let feedbackResult = null;
81
+ try {
82
+ const bridge = await import('../memory/memory-bridge.js');
83
+ feedbackResult = await bridge.bridgeRecordFeedback({
84
+ taskType: agent ?? 'coder',
85
+ action: `edit ${filePath}`,
86
+ outcome: success ? 'success' : 'failure',
87
+ confidence: success ? 0.85 : 0.3,
88
+ });
89
+ }
90
+ catch (e) {
91
+ // Bridge not available — continue with basic response
92
+ if (process.env.DEBUG || process.env.MONOMIND_DEBUG)
93
+ console.error('[hooks-post-edit] memory bridge feedback failed:', e);
94
+ }
95
+ return {
96
+ // The feedback record is the only write this hook makes.
97
+ recorded: feedbackResult?.success === true,
98
+ filePath,
99
+ success,
100
+ timestamp: new Date().toISOString(),
101
+ feedback: feedbackResult
102
+ ? {
103
+ recorded: feedbackResult.success,
104
+ controller: feedbackResult.success ? 'sqlite' : 'unavailable',
105
+ updates: feedbackResult.success ? 1 : 0,
106
+ }
107
+ : { recorded: false, controller: 'unavailable', updates: 0 },
108
+ };
109
+ },
110
+ };
111
+ export const hooksPreCommand = {
112
+ name: 'hooks_pre-command',
113
+ description: 'Assess risk before executing a command',
114
+ inputSchema: {
115
+ type: 'object',
116
+ properties: {
117
+ command: { type: 'string', description: 'Command to execute' },
118
+ },
119
+ required: ['command'],
120
+ },
121
+ handler: async (params) => {
122
+ // Cap command length: assessCommandRisk runs O(n) string searches, and the
123
+ // raw command is reflected verbatim in the response. Limit to 4 KB which
124
+ // is far beyond any realistic shell command.
125
+ const MAX_CMD_LEN = 4 * 1024;
126
+ const command = validateMcpString(params.command, 'command', MAX_CMD_LEN);
127
+ if (!command) {
128
+ return { error: 'command is required (non-empty string, no control chars, max 4KB)' };
129
+ }
130
+ const assessment = assessCommandRisk(command);
131
+ const riskLevel = assessment.level >= 0.8
132
+ ? 'critical'
133
+ : assessment.level >= 0.6
134
+ ? 'high'
135
+ : assessment.level >= 0.3
136
+ ? 'medium'
137
+ : 'low';
138
+ return {
139
+ command,
140
+ riskLevel,
141
+ risks: assessment.warnings.map((warning, i) => ({
142
+ type: `risk-${i + 1}`,
143
+ severity: assessment.level >= 0.6 ? 'high' : 'medium',
144
+ description: warning,
145
+ })),
146
+ recommendations: assessment.warnings.length > 0
147
+ ? ['Review warnings before proceeding', 'Consider using safer alternative']
148
+ : ['Command appears safe to execute'],
149
+ safeAlternatives: [],
150
+ shouldProceed: assessment.level < 0.7,
151
+ };
152
+ },
153
+ };
154
+ export const hooksPostCommand = {
155
+ name: 'hooks_post-command',
156
+ description: 'Record command execution outcome',
157
+ inputSchema: {
158
+ type: 'object',
159
+ properties: {
160
+ command: { type: 'string', description: 'Executed command' },
161
+ exitCode: { type: 'number', description: 'Command exit code' },
162
+ success: {
163
+ type: 'boolean',
164
+ description: 'Whether the command succeeded. false records a failure even with exit code 0; a non-zero exit code is always a failure.',
165
+ },
166
+ },
167
+ required: ['command'],
168
+ },
169
+ handler: async (params) => {
170
+ // Cap command: it is stored in JSON memory store (line 824), forwarded to
171
+ // bridgeStoreEntry which calls generateEmbedding by default — O(n) hash
172
+ // fallback, and reflected verbatim in the response. The recordCommand path
173
+ // already caps to 200 chars; apply a consistent 4 KB cap here that still
174
+ // covers any realistic shell command.
175
+ const MAX_POST_CMD_LEN = 4 * 1024;
176
+ const command = validateMcpString(params.command, 'command', MAX_POST_CMD_LEN);
177
+ if (!command) {
178
+ return { error: 'command is required (non-empty string, no control chars, max 4KB)' };
179
+ }
180
+ const exitCode = typeof params.exitCode === 'number' && Number.isFinite(params.exitCode)
181
+ ? Math.floor(params.exitCode)
182
+ : 0;
183
+ // An explicit success: false wins over a 0 exit code (e.g. a command that
184
+ // exited 0 but printed errors); a non-zero exit code is always a failure.
185
+ const success = exitCode === 0 && params.success !== false;
186
+ // Record the real exit code in the time-windowed command-outcome store so
187
+ // post-task can derive a MEASURED success signal (grounded in actual exit
188
+ // codes) when the caller does not explicitly assert --success. Non-fatal.
189
+ await recordCommand(getRouteOutcomesBaseDir(), {
190
+ ts: Date.now(),
191
+ command: typeof command === 'string' ? command.slice(0, 200) : String(command).slice(0, 200),
192
+ exitCode,
193
+ success,
194
+ });
195
+ // Persist command outcome via memory backend
196
+ let _storedIn = 'none';
197
+ try {
198
+ const bridge = await import('../memory/memory-bridge.js');
199
+ const stored = await bridge.bridgeStoreEntry({
200
+ key: `cmd-${Date.now()}`,
201
+ value: JSON.stringify({ command, exitCode, success }),
202
+ namespace: 'commands',
203
+ tags: [success ? 'success' : 'error'],
204
+ });
205
+ // #293: bridgeStoreEntry RETURNS null when the backend cannot be loaded,
206
+ // it does not throw. Claiming `_storedIn = 'sqlite'` on that return
207
+ // reported `recorded: true` for a write that never happened AND skipped
208
+ // the JSON fallback below, so the record was lost twice over.
209
+ if (!stored?.success)
210
+ throw new Error(stored?.error ?? 'memory backend unavailable');
211
+ _storedIn = 'sqlite';
212
+ }
213
+ catch {
214
+ // memory backend unavailable or refused the write — store in JSON
215
+ try {
216
+ const store = loadMemoryStore();
217
+ const key = `cmd-${Date.now()}`;
218
+ store.entries[key] = {
219
+ key,
220
+ value: JSON.stringify({ command, exitCode, success }),
221
+ namespace: 'commands',
222
+ createdAt: new Date().toISOString(),
223
+ };
224
+ const memDir = join(getProjectCwd(), MEMORY_DIR);
225
+ if (!existsSync(memDir))
226
+ mkdirSync(memDir, { recursive: true });
227
+ const _mp = getMemoryPath();
228
+ const _mptmp = `${_mp}.tmp`;
229
+ writeFileSync(_mptmp, JSON.stringify(store, null, 2), 'utf-8');
230
+ renameSync(_mptmp, _mp);
231
+ _storedIn = 'json-store';
232
+ }
233
+ catch {
234
+ /* non-critical */
235
+ }
236
+ }
237
+ return {
238
+ recorded: _storedIn !== 'none',
239
+ command,
240
+ exitCode,
241
+ success,
242
+ timestamp: new Date().toISOString(),
243
+ _storedIn,
244
+ };
245
+ },
246
+ };
247
+ //# sourceMappingURL=hooks-edit-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-edit-command.js","sourceRoot":"","sources":["../../../src/mcp-tools/hooks-edit-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Hooks MCP Tools — pretrain, transfer and intelligence.
3
+ * Extracted from hooks-routing.ts.
4
+ */
5
+ import { type MCPTool } from './types.js';
6
+ export declare const hooksPretrain: MCPTool;
7
+ export declare const hooksTransfer: MCPTool;
8
+ export declare const hooksIntelligence: MCPTool;
9
+ //# sourceMappingURL=hooks-learning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-learning.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/hooks-learning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAczD,eAAO,MAAM,aAAa,EAAE,OAyK3B,CAAC;AAGF,eAAO,MAAM,aAAa,EAAE,OAqI3B,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,OAwG/B,CAAC"}