dual-brain 0.2.30 → 0.3.1

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 (312) hide show
  1. package/.dual-brain/docs/claude-code-extension-points.md +32 -0
  2. package/.dual-brain/docs/data-tools-capabilities.md +181 -0
  3. package/.dual-brain/docs/ecosystem-tools.md +91 -0
  4. package/.dual-brain/docs/panel-handoff.md +124 -0
  5. package/.dual-brain/docs/ruflo-analysis.md +48 -0
  6. package/bin/dual-brain.mjs +56 -56
  7. package/dist/mcp-server/index.d.ts +27 -0
  8. package/dist/mcp-server/index.js +359 -0
  9. package/dist/mcp-server/index.js.map +1 -0
  10. package/dist/src/agent-protocol.d.ts +163 -0
  11. package/dist/src/agent-protocol.js +368 -0
  12. package/dist/src/agent-protocol.js.map +1 -0
  13. package/dist/src/agents/registry.d.ts +52 -0
  14. package/dist/src/agents/registry.js +393 -0
  15. package/dist/src/agents/registry.js.map +1 -0
  16. package/dist/src/awareness.d.ts +93 -0
  17. package/dist/src/awareness.js +406 -0
  18. package/dist/src/awareness.js.map +1 -0
  19. package/dist/src/brief.d.ts +48 -0
  20. package/dist/src/brief.js +179 -0
  21. package/dist/src/brief.js.map +1 -0
  22. package/dist/src/calibration.d.ts +32 -0
  23. package/dist/src/calibration.js +133 -0
  24. package/dist/src/calibration.js.map +1 -0
  25. package/dist/src/checkpoint.d.ts +33 -0
  26. package/dist/src/checkpoint.js +99 -0
  27. package/dist/src/checkpoint.js.map +1 -0
  28. package/dist/src/ci-triage.d.ts +33 -0
  29. package/dist/src/ci-triage.js +193 -0
  30. package/dist/src/ci-triage.js.map +1 -0
  31. package/dist/src/cognitive-loop.d.ts +56 -0
  32. package/dist/src/cognitive-loop.js +495 -0
  33. package/dist/src/cognitive-loop.js.map +1 -0
  34. package/dist/src/collaboration.d.ts +147 -0
  35. package/dist/src/collaboration.js +438 -0
  36. package/dist/src/collaboration.js.map +1 -0
  37. package/dist/src/context-intel.d.ts +47 -0
  38. package/dist/src/context-intel.js +156 -0
  39. package/dist/src/context-intel.js.map +1 -0
  40. package/dist/src/context.d.ts +53 -0
  41. package/dist/src/context.js +332 -0
  42. package/dist/src/context.js.map +1 -0
  43. package/dist/src/continuity.d.ts +89 -0
  44. package/dist/src/continuity.js +230 -0
  45. package/dist/src/continuity.js.map +1 -0
  46. package/dist/src/cost-tracker.d.ts +47 -0
  47. package/dist/src/cost-tracker.js +170 -0
  48. package/dist/src/cost-tracker.js.map +1 -0
  49. package/dist/src/debrief.d.ts +53 -0
  50. package/dist/src/debrief.js +222 -0
  51. package/dist/src/debrief.js.map +1 -0
  52. package/dist/src/decide.d.ts +96 -0
  53. package/dist/src/decide.js +744 -0
  54. package/dist/src/decide.js.map +1 -0
  55. package/dist/src/decompose.d.ts +39 -0
  56. package/dist/src/decompose.js +218 -0
  57. package/dist/src/decompose.js.map +1 -0
  58. package/dist/src/detect.d.ts +91 -0
  59. package/dist/src/detect.js +544 -0
  60. package/dist/src/detect.js.map +1 -0
  61. package/dist/src/dispatch.d.ts +154 -0
  62. package/dist/src/dispatch.js +1306 -0
  63. package/dist/src/dispatch.js.map +1 -0
  64. package/dist/src/doctor.d.ts +421 -0
  65. package/dist/src/doctor.js +1689 -0
  66. package/dist/src/doctor.js.map +1 -0
  67. package/dist/src/engine.d.ts +70 -0
  68. package/dist/src/engine.js +155 -0
  69. package/dist/src/engine.js.map +1 -0
  70. package/dist/src/envelope.d.ts +36 -0
  71. package/dist/src/envelope.js +80 -0
  72. package/dist/src/envelope.js.map +1 -0
  73. package/dist/src/failure-memory.d.ts +55 -0
  74. package/dist/src/failure-memory.js +175 -0
  75. package/dist/src/failure-memory.js.map +1 -0
  76. package/dist/src/fx.d.ts +87 -0
  77. package/dist/src/fx.js +272 -0
  78. package/dist/src/fx.js.map +1 -0
  79. package/dist/src/governance.d.ts +93 -0
  80. package/dist/src/governance.js +261 -0
  81. package/dist/src/governance.js.map +1 -0
  82. package/dist/src/handoff.d.ts +11 -0
  83. package/dist/src/handoff.js +90 -0
  84. package/dist/src/handoff.js.map +1 -0
  85. package/dist/src/head-protocol.d.ts +76 -0
  86. package/dist/src/head-protocol.js +109 -0
  87. package/dist/src/head-protocol.js.map +1 -0
  88. package/dist/src/head.d.ts +222 -0
  89. package/dist/src/head.js +765 -0
  90. package/dist/src/head.js.map +1 -0
  91. package/dist/src/health.d.ts +132 -0
  92. package/dist/src/health.js +435 -0
  93. package/dist/src/health.js.map +1 -0
  94. package/dist/src/inbox.d.ts +70 -0
  95. package/dist/src/inbox.js +218 -0
  96. package/dist/src/inbox.js.map +1 -0
  97. package/dist/src/index.d.ts +33 -0
  98. package/dist/src/index.js +38 -0
  99. package/dist/src/index.js.map +1 -0
  100. package/dist/src/install-hooks.d.ts +13 -0
  101. package/dist/src/install-hooks.js +88 -0
  102. package/dist/src/install-hooks.js.map +1 -0
  103. package/dist/src/integrity.d.ts +59 -0
  104. package/dist/src/integrity.js +206 -0
  105. package/dist/src/integrity.js.map +1 -0
  106. package/dist/src/intelligence.d.ts +104 -0
  107. package/dist/src/intelligence.js +391 -0
  108. package/dist/src/intelligence.js.map +1 -0
  109. package/dist/src/ledger.d.ts +54 -0
  110. package/dist/src/ledger.js +179 -0
  111. package/dist/src/ledger.js.map +1 -0
  112. package/dist/src/living-docs.d.ts +14 -0
  113. package/dist/src/living-docs.js +197 -0
  114. package/dist/src/living-docs.js.map +1 -0
  115. package/dist/src/memory-tiers.d.ts +37 -0
  116. package/dist/src/memory-tiers.js +160 -0
  117. package/dist/src/memory-tiers.js.map +1 -0
  118. package/dist/src/model-profiles.d.ts +65 -0
  119. package/dist/src/model-profiles.js +568 -0
  120. package/dist/src/model-profiles.js.map +1 -0
  121. package/dist/src/models.d.ts +58 -0
  122. package/dist/src/models.js +327 -0
  123. package/dist/src/models.js.map +1 -0
  124. package/dist/src/narrative.d.ts +54 -0
  125. package/dist/src/narrative.js +163 -0
  126. package/dist/src/narrative.js.map +1 -0
  127. package/dist/src/nextstep.d.ts +16 -0
  128. package/dist/src/nextstep.js +103 -0
  129. package/dist/src/nextstep.js.map +1 -0
  130. package/dist/src/observer.d.ts +18 -0
  131. package/dist/src/observer.js +251 -0
  132. package/dist/src/observer.js.map +1 -0
  133. package/dist/src/outcome.d.ts +110 -0
  134. package/dist/src/outcome.js +377 -0
  135. package/dist/src/outcome.js.map +1 -0
  136. package/dist/src/pipeline.d.ts +167 -0
  137. package/dist/src/pipeline.js +1503 -0
  138. package/dist/src/pipeline.js.map +1 -0
  139. package/dist/src/playbook.d.ts +59 -0
  140. package/dist/src/playbook.js +238 -0
  141. package/dist/src/playbook.js.map +1 -0
  142. package/dist/src/pr-agent.d.ts +97 -0
  143. package/dist/src/pr-agent.js +195 -0
  144. package/dist/src/pr-agent.js.map +1 -0
  145. package/dist/src/predictive.d.ts +57 -0
  146. package/dist/src/predictive.js +230 -0
  147. package/dist/src/predictive.js.map +1 -0
  148. package/dist/src/profile.d.ts +294 -0
  149. package/dist/src/profile.js +1347 -0
  150. package/dist/src/profile.js.map +1 -0
  151. package/dist/src/prompt-audit.d.ts +22 -0
  152. package/dist/src/prompt-audit.js +194 -0
  153. package/dist/src/prompt-audit.js.map +1 -0
  154. package/dist/src/prompt-intel.d.ts +12 -0
  155. package/dist/src/prompt-intel.js +321 -0
  156. package/dist/src/prompt-intel.js.map +1 -0
  157. package/dist/src/provider-context.d.ts +121 -0
  158. package/dist/src/provider-context.js +222 -0
  159. package/dist/src/provider-context.js.map +1 -0
  160. package/dist/src/provider-manager.d.ts +92 -0
  161. package/dist/src/provider-manager.js +428 -0
  162. package/dist/src/provider-manager.js.map +1 -0
  163. package/dist/src/receipt.d.ts +87 -0
  164. package/dist/src/receipt.js +326 -0
  165. package/dist/src/receipt.js.map +1 -0
  166. package/dist/src/recommendations.d.ts +13 -0
  167. package/dist/src/recommendations.js +291 -0
  168. package/dist/src/recommendations.js.map +1 -0
  169. package/dist/src/redact.d.ts +15 -0
  170. package/dist/src/redact.js +129 -0
  171. package/dist/src/redact.js.map +1 -0
  172. package/dist/src/replit.d.ts +397 -0
  173. package/dist/src/replit.js +1160 -0
  174. package/dist/src/replit.js.map +1 -0
  175. package/dist/src/repo.d.ts +149 -0
  176. package/dist/src/repo.js +416 -0
  177. package/dist/src/repo.js.map +1 -0
  178. package/dist/src/revert.d.ts +30 -0
  179. package/dist/src/revert.js +166 -0
  180. package/dist/src/revert.js.map +1 -0
  181. package/dist/src/room.d.ts +102 -0
  182. package/dist/src/room.js +212 -0
  183. package/dist/src/room.js.map +1 -0
  184. package/dist/src/routing-advisor.d.ts +57 -0
  185. package/dist/src/routing-advisor.js +221 -0
  186. package/dist/src/routing-advisor.js.map +1 -0
  187. package/dist/src/self-correct.d.ts +40 -0
  188. package/dist/src/self-correct.js +137 -0
  189. package/dist/src/self-correct.js.map +1 -0
  190. package/dist/src/session-lock.d.ts +35 -0
  191. package/dist/src/session-lock.js +134 -0
  192. package/dist/src/session-lock.js.map +1 -0
  193. package/dist/src/session.d.ts +267 -0
  194. package/dist/src/session.js +1660 -0
  195. package/dist/src/session.js.map +1 -0
  196. package/dist/src/settings-tui.d.ts +5 -0
  197. package/dist/src/settings-tui.js +422 -0
  198. package/dist/src/settings-tui.js.map +1 -0
  199. package/dist/src/setup-flow.d.ts +63 -0
  200. package/dist/src/setup-flow.js +233 -0
  201. package/dist/src/setup-flow.js.map +1 -0
  202. package/dist/src/signal.d.ts +19 -0
  203. package/dist/src/signal.js +122 -0
  204. package/dist/src/signal.js.map +1 -0
  205. package/dist/src/simmer.d.ts +85 -0
  206. package/dist/src/simmer.js +224 -0
  207. package/dist/src/simmer.js.map +1 -0
  208. package/dist/src/state-export.d.ts +129 -0
  209. package/dist/src/state-export.js +233 -0
  210. package/dist/src/state-export.js.map +1 -0
  211. package/dist/src/strategy.d.ts +54 -0
  212. package/dist/src/strategy.js +95 -0
  213. package/dist/src/strategy.js.map +1 -0
  214. package/dist/src/subscription.d.ts +40 -0
  215. package/dist/src/subscription.js +189 -0
  216. package/dist/src/subscription.js.map +1 -0
  217. package/dist/src/templates.d.ts +208 -0
  218. package/dist/src/templates.js +238 -0
  219. package/dist/src/templates.js.map +1 -0
  220. package/dist/src/test.d.ts +9 -0
  221. package/dist/src/test.js +1173 -0
  222. package/dist/src/test.js.map +1 -0
  223. package/dist/src/think-engine.d.ts +67 -0
  224. package/dist/src/think-engine.js +412 -0
  225. package/dist/src/think-engine.js.map +1 -0
  226. package/dist/src/tui.d.ts +71 -0
  227. package/dist/src/tui.js +242 -0
  228. package/dist/src/tui.js.map +1 -0
  229. package/dist/src/types.d.ts +177 -0
  230. package/dist/src/types.js +6 -0
  231. package/dist/src/types.js.map +1 -0
  232. package/dist/src/update-check.d.ts +7 -0
  233. package/dist/src/update-check.js +36 -0
  234. package/dist/src/update-check.js.map +1 -0
  235. package/dist/src/wave-planner.d.ts +30 -0
  236. package/dist/src/wave-planner.js +281 -0
  237. package/dist/src/wave-planner.js.map +1 -0
  238. package/hooks/head-guard.sh +41 -0
  239. package/hooks/precompact.mjs +3 -3
  240. package/hooks/session-end.mjs +3 -3
  241. package/hooks/task-classifier.mjs +328 -0
  242. package/hooks/vibe-router.mjs +387 -0
  243. package/install.mjs +2 -2
  244. package/package.json +29 -153
  245. package/src/agents/registry.mjs +0 -405
  246. package/src/awareness.mjs +0 -425
  247. package/src/brief.mjs +0 -266
  248. package/src/calibration.mjs +0 -148
  249. package/src/checkpoint.mjs +0 -109
  250. package/src/ci-triage.mjs +0 -191
  251. package/src/cognitive-loop.mjs +0 -562
  252. package/src/collaboration.mjs +0 -545
  253. package/src/context-intel.mjs +0 -158
  254. package/src/context.mjs +0 -389
  255. package/src/continuity.mjs +0 -298
  256. package/src/cost-tracker.mjs +0 -184
  257. package/src/debrief.mjs +0 -228
  258. package/src/decide.mjs +0 -1099
  259. package/src/decompose.mjs +0 -331
  260. package/src/detect.mjs +0 -702
  261. package/src/dispatch.mjs +0 -1447
  262. package/src/doctor.mjs +0 -1607
  263. package/src/envelope.mjs +0 -139
  264. package/src/failure-memory.mjs +0 -178
  265. package/src/fx.mjs +0 -276
  266. package/src/governance.mjs +0 -279
  267. package/src/handoff.mjs +0 -87
  268. package/src/head-protocol.mjs +0 -128
  269. package/src/head.mjs +0 -952
  270. package/src/health.mjs +0 -528
  271. package/src/inbox.mjs +0 -195
  272. package/src/index.mjs +0 -44
  273. package/src/install-hooks.mjs +0 -100
  274. package/src/integrity.mjs +0 -245
  275. package/src/intelligence.mjs +0 -447
  276. package/src/ledger.mjs +0 -196
  277. package/src/living-docs.mjs +0 -210
  278. package/src/memory-tiers.mjs +0 -193
  279. package/src/models.mjs +0 -363
  280. package/src/narrative.mjs +0 -169
  281. package/src/nextstep.mjs +0 -100
  282. package/src/observer.mjs +0 -241
  283. package/src/outcome.mjs +0 -400
  284. package/src/pipeline.mjs +0 -1711
  285. package/src/playbook.mjs +0 -257
  286. package/src/pr-agent.mjs +0 -214
  287. package/src/predictive.mjs +0 -250
  288. package/src/profile.mjs +0 -1411
  289. package/src/prompt-audit.mjs +0 -231
  290. package/src/prompt-intel.mjs +0 -325
  291. package/src/provider-context.mjs +0 -257
  292. package/src/receipt.mjs +0 -344
  293. package/src/recommendations.mjs +0 -296
  294. package/src/redact.mjs +0 -192
  295. package/src/replit.mjs +0 -1210
  296. package/src/repo.mjs +0 -445
  297. package/src/revert.mjs +0 -149
  298. package/src/routing-advisor.mjs +0 -204
  299. package/src/self-correct.mjs +0 -147
  300. package/src/session-lock.mjs +0 -160
  301. package/src/session.mjs +0 -1655
  302. package/src/settings-tui.mjs +0 -373
  303. package/src/setup-flow.mjs +0 -223
  304. package/src/signal.mjs +0 -115
  305. package/src/simmer.mjs +0 -241
  306. package/src/strategy.mjs +0 -235
  307. package/src/subscription.mjs +0 -212
  308. package/src/templates.mjs +0 -260
  309. package/src/think-engine.mjs +0 -428
  310. package/src/tui.mjs +0 -276
  311. package/src/update-check.mjs +0 -35
  312. package/src/wave-planner.mjs +0 -294
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../src/recommendations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Scan text for common secret patterns and replace values with [REDACTED].
3
+ * Returns the cleaned text. Fast — pure regex, no I/O.
4
+ */
5
+ declare function redact(text: string): string;
6
+ /**
7
+ * Given a list of file paths, return a Set of paths that should NOT be sent
8
+ * as context to agents (secret files, .git, node_modules).
9
+ */
10
+ declare function redactFiles(filePaths: string[], cwd?: string): Set<string>;
11
+ /**
12
+ * Returns true if the file path matches known secret/sensitive patterns.
13
+ */
14
+ declare function isSecretFile(filePath: string): boolean;
15
+ export { redact, redactFiles, isSecretFile };
@@ -0,0 +1,129 @@
1
+ // redact.ts — Secret redaction utility for dual-brain orchestrator.
2
+ // SAFETY-CRITICAL: nothing reaches AI dispatch without passing through redaction.
3
+ // All functions are synchronous and regex-based — no external dependencies.
4
+ // Exports: redact, redactFiles, isSecretFile
5
+ // --- Non-secret placeholder values (skip redaction) ---
6
+ const PLACEHOLDER_PATTERN = /^(xxx+|changeme|placeholder|your[_-].+|example|fake|dummy|test|none|null|true|false|0|1|<[^>]+>|\$\{[^}]+\}|%[A-Z_]+%|\*+|\.+)$/i;
7
+ const REDACT_PATTERNS = [
8
+ // .env-style: KEY=VALUE (key contains KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL|AUTH)
9
+ {
10
+ pattern: /\b([A-Z_]*(KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL|AUTH)[A-Z_]*\s*=\s*)([^\s\n"'`]+)/gi,
11
+ replacer: (_m, key, _kw, val) => isPlaceholder(val) ? _m : `${key}[REDACTED]`,
12
+ },
13
+ // Explicit named keys (case-insensitive) with = or : assignment
14
+ {
15
+ pattern: /\b((?:api[_-]?key|openai[_-]api[_-]key|anthropic[_-]api[_-]key|aws[_-]secret[_-]access[_-]key|aws[_-]access[_-]key[_-]id|private[_-]key|passwd)\s*[=:]\s*["'`]?)([^\s"'`\n,;]+)(["'`]?)/gi,
16
+ replacer: (_m, prefix, val, suffix) => isPlaceholder(val) ? _m : `${prefix}[REDACTED]${suffix}`,
17
+ },
18
+ // Passwords: password=xxx / PASSWORD="xxx" / passwd: xxx
19
+ {
20
+ pattern: /\b(passwords?\s*[=:]\s*["'`]?)([^\s"'`\n,;]+)(["'`]?)/gi,
21
+ replacer: (_m, prefix, val, suffix) => isPlaceholder(val) ? _m : `${prefix}[REDACTED]${suffix}`,
22
+ },
23
+ // Bearer tokens: Bearer xxx / Authorization: Bearer xxx
24
+ {
25
+ pattern: /(Bearer\s+)([A-Za-z0-9\-._~+/]+=*)/g,
26
+ replacer: (_m, prefix, val) => isPlaceholder(val) ? _m : `${prefix}[REDACTED]`,
27
+ },
28
+ // Authorization header value (non-Bearer forms)
29
+ {
30
+ pattern: /(Authorization\s*:\s*)([^\s\n][^\n]*)/gi,
31
+ replacer: (_m, prefix, val) => {
32
+ const trimmed = val.trim();
33
+ if (isPlaceholder(trimmed))
34
+ return _m;
35
+ // Keep the auth scheme visible (Basic, Digest, etc.) but redact the credential
36
+ const schemeMatch = trimmed.match(/^(\w+)\s+(.+)$/);
37
+ if (schemeMatch)
38
+ return `${prefix}${schemeMatch[1]} [REDACTED]`;
39
+ return `${prefix}[REDACTED]`;
40
+ },
41
+ },
42
+ // AWS credentials
43
+ {
44
+ pattern: /\b((?:AWS_SECRET_ACCESS_KEY|aws_secret_access_key|AWS_ACCESS_KEY_ID|aws_access_key_id)\s*[=:]\s*["'`]?)([^\s"'`\n,;]+)(["'`]?)/g,
45
+ replacer: (_m, prefix, val, suffix) => isPlaceholder(val) ? _m : `${prefix}[REDACTED]${suffix}`,
46
+ },
47
+ // Connection strings: ://user:password@host
48
+ {
49
+ pattern: /([\w+.-]+:\/\/[^:@\s]+:)([^@\s]+)(@)/g,
50
+ replacer: (_m, prefix, pass, at) => isPlaceholder(pass) ? _m : `${prefix}[REDACTED]${at}`,
51
+ },
52
+ // Inline JSON: "api_key": "value", "secret": "...", "token": "..."
53
+ {
54
+ pattern: /("(?:api[_-]?key|secret|token|password|passwd|credential|auth[_-]?key|private[_-]?key)"\s*:\s*")([^"]*?)(")/gi,
55
+ replacer: (_m, prefix, val, suffix) => isPlaceholder(val) ? _m : `${prefix}[REDACTED]${suffix}`,
56
+ },
57
+ // Inline JSON with single quotes
58
+ {
59
+ pattern: /('(?:api[_-]?key|secret|token|password|passwd|credential|auth[_-]?key|private[_-]?key)'\s*:\s*')([^']*?)(')/gi,
60
+ replacer: (_m, prefix, val, suffix) => isPlaceholder(val) ? _m : `${prefix}[REDACTED]${suffix}`,
61
+ },
62
+ // Common secret value prefixes: sk-, pk_, ghp_, gho_, npm_, pypi-
63
+ {
64
+ pattern: /(?<![.\w])(sk-[A-Za-z0-9\-_]{8,}|pk_(?:live|test)_[A-Za-z0-9]{8,}|ghp_[A-Za-z0-9]{8,}|gho_[A-Za-z0-9]{8,}|npm_[A-Za-z0-9]{8,}|pypi-[A-Za-z0-9\-]{8,})/g,
65
+ replacer: '[REDACTED]',
66
+ },
67
+ ];
68
+ // --- Secret file patterns ---
69
+ const SECRET_FILE_PATTERNS = [
70
+ /(?:^|\/)\.env(?:\.[a-zA-Z0-9._-]+)?$/,
71
+ /(?:^|\/)(?:credentials|service-account|serviceaccount)(?:\.[a-zA-Z0-9._-]+)?\.json$/i,
72
+ /\.pem$/i,
73
+ /\.key$/i,
74
+ /(?:^|\/)\.git\//,
75
+ /(?:^|\/)node_modules\//,
76
+ ];
77
+ // --- Helpers ---
78
+ function isPlaceholder(value) {
79
+ if (!value)
80
+ return true;
81
+ return PLACEHOLDER_PATTERN.test(value.trim());
82
+ }
83
+ // --- Public API ---
84
+ /**
85
+ * Scan text for common secret patterns and replace values with [REDACTED].
86
+ * Returns the cleaned text. Fast — pure regex, no I/O.
87
+ */
88
+ function redact(text) {
89
+ if (!text || typeof text !== 'string')
90
+ return text;
91
+ let result = text;
92
+ for (const { pattern, replacer } of REDACT_PATTERNS) {
93
+ // Reset lastIndex for global regexes to avoid skipped matches
94
+ pattern.lastIndex = 0;
95
+ if (typeof replacer === 'string') {
96
+ result = result.replace(pattern, replacer);
97
+ }
98
+ else {
99
+ result = result.replace(pattern, replacer);
100
+ }
101
+ // Reset again after use
102
+ pattern.lastIndex = 0;
103
+ }
104
+ return result;
105
+ }
106
+ /**
107
+ * Given a list of file paths, return a Set of paths that should NOT be sent
108
+ * as context to agents (secret files, .git, node_modules).
109
+ */
110
+ function redactFiles(filePaths, cwd) {
111
+ const blocked = new Set();
112
+ for (const fp of filePaths) {
113
+ if (isSecretFile(fp))
114
+ blocked.add(fp);
115
+ }
116
+ return blocked;
117
+ }
118
+ /**
119
+ * Returns true if the file path matches known secret/sensitive patterns.
120
+ */
121
+ function isSecretFile(filePath) {
122
+ if (!filePath)
123
+ return false;
124
+ // Normalise Windows separators
125
+ const normalised = filePath.replace(/\\/g, '/');
126
+ return SECRET_FILE_PATTERNS.some(p => p.test(normalised));
127
+ }
128
+ export { redact, redactFiles, isSecretFile };
129
+ //# sourceMappingURL=redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/redact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,397 @@
1
+ /**
2
+ * replit.mjs — Replit platform integration for dual-brain.
3
+ *
4
+ * Treats replit-tools as infrastructure and adds intelligence on top.
5
+ * Uses only Node built-ins. Never reads or returns secret values.
6
+ *
7
+ * Sections:
8
+ * 1. Discovery — read-only inspection of environment and replit-tools
9
+ * 2. Planning — compute .replit config changes, no side effects
10
+ * 3. Apply — mutating; low-risk changes only in v1
11
+ * 4. Formatters — pretty-print integration reports
12
+ */
13
+ /**
14
+ * Detect the Replit runtime environment from env vars.
15
+ * @param {string} [cwd]
16
+ * @returns {{ isReplit, replId, replSlug, replOwner, replUrl, nixChannel, containerType, uptimeSeconds }}
17
+ */
18
+ export declare function detectReplitEnvironment(cwd?: string): {
19
+ isReplit: boolean;
20
+ replId: string | null;
21
+ replSlug: string | null;
22
+ replOwner: string | null;
23
+ replUrl: string | null;
24
+ nixChannel: string | null;
25
+ containerType: string;
26
+ uptimeSeconds: number | null;
27
+ };
28
+ /**
29
+ * Read and parse the .replit config file.
30
+ * Uses simple line-by-line parsing — no TOML dependency.
31
+ * @param {string} [cwd]
32
+ * @returns {{ raw, run, onBoot, expertMode, hidden, modules, nix, deployment, hasRun, hasOnBoot, hasExpertMode }}
33
+ */
34
+ export declare function inspectReplitConfig(cwd?: string): {
35
+ raw: null;
36
+ run: null;
37
+ onBoot: null;
38
+ expertMode: null;
39
+ hidden: never[];
40
+ modules: never[];
41
+ nix: {};
42
+ deployment: {};
43
+ hasRun: boolean;
44
+ hasOnBoot: boolean;
45
+ hasExpertMode: boolean;
46
+ } | {
47
+ raw: string;
48
+ run: string | null;
49
+ onBoot: string | null;
50
+ expertMode: boolean | null;
51
+ hidden: string[];
52
+ modules: string[];
53
+ nix: Record<string, string>;
54
+ deployment: Record<string, string>;
55
+ hasRun: boolean;
56
+ hasOnBoot: boolean;
57
+ hasExpertMode: boolean;
58
+ };
59
+ /**
60
+ * Inventory what replit-tools provides in the current workspace.
61
+ * @param {string} [cwd]
62
+ * @returns {object} Structured capability report
63
+ */
64
+ export declare function inspectReplitTools(cwd?: string): {
65
+ installed: boolean;
66
+ version: null;
67
+ toolsDir: null;
68
+ sessionArchive: {
69
+ exists: boolean;
70
+ sessionCount: number;
71
+ latestTimestamp: null;
72
+ };
73
+ persistentHomes: {
74
+ claude: boolean;
75
+ codex: boolean;
76
+ };
77
+ authRefresh: {
78
+ available: boolean;
79
+ scriptPath?: undefined;
80
+ };
81
+ config: null;
82
+ codexPlugins: {
83
+ count: number;
84
+ };
85
+ shellSnapshots: {
86
+ available: boolean;
87
+ count: number;
88
+ };
89
+ mcpAuthCache: {
90
+ available: boolean;
91
+ entries: number;
92
+ };
93
+ } | {
94
+ installed: boolean;
95
+ version: {} | null;
96
+ toolsDir: string;
97
+ sessionArchive: {
98
+ exists: boolean;
99
+ sessionCount: number;
100
+ latestTimestamp: null;
101
+ };
102
+ persistentHomes: {
103
+ claude: boolean;
104
+ codex: boolean;
105
+ };
106
+ authRefresh: {
107
+ available: boolean;
108
+ scriptPath: string | null;
109
+ };
110
+ config: Record<string, unknown> | null;
111
+ codexPlugins: {
112
+ count: number;
113
+ };
114
+ shellSnapshots: {
115
+ available: boolean;
116
+ count: number;
117
+ };
118
+ mcpAuthCache: {
119
+ available: boolean;
120
+ entries: number;
121
+ };
122
+ };
123
+ /**
124
+ * Check whether a named environment variable is set (never returns its value).
125
+ * @param {string} name
126
+ * @returns {boolean}
127
+ */
128
+ export declare function hasSecret(name: string): boolean;
129
+ /**
130
+ * Return names of set secrets/credentials. Never returns values.
131
+ * @returns {string[]}
132
+ */
133
+ export declare function listSecretNames(): unknown[];
134
+ /**
135
+ * Read the session archive from replit-tools directly.
136
+ * @param {string} [cwd]
137
+ * @returns {{ sessions: Array<{id, path, size, lastModified}>, totalSessions, latestTimestamp }}
138
+ */
139
+ export declare function getSessionArchive(cwd?: string): {
140
+ sessions: {
141
+ id: string;
142
+ path: string;
143
+ size: number;
144
+ lastModified: string;
145
+ }[];
146
+ totalSessions: number;
147
+ latestTimestamp: string | null;
148
+ };
149
+ /**
150
+ * Get auth status from the claude-auth-refresh.sh script.
151
+ * @param {string} [cwd]
152
+ * @returns {{ available, tokenStatus, expiresAt, needsRefresh }}
153
+ */
154
+ export declare function getAuthStatus(cwd?: string): {
155
+ available: boolean;
156
+ tokenStatus?: undefined;
157
+ expiresAt?: undefined;
158
+ needsRefresh?: undefined;
159
+ } | {
160
+ available: boolean;
161
+ tokenStatus: string;
162
+ expiresAt: string | null;
163
+ needsRefresh: boolean;
164
+ };
165
+ /**
166
+ * Read replit-tools config.json settings that dual-brain should respect.
167
+ * @param {string} [cwd]
168
+ * @returns {{ recentWindowHours, persistenceDays, mirror, raw } | null}
169
+ */
170
+ export declare function getReplitToolsConfig(cwd?: string): {
171
+ recentWindowHours: {};
172
+ persistenceDays: {};
173
+ mirror: {} | null;
174
+ raw: Record<string, unknown>;
175
+ } | null;
176
+ /**
177
+ * Plan .replit config changes needed to reach a desired state.
178
+ * No side effects — returns a plan object only.
179
+ * @param {object} [desired]
180
+ * @param {string} [cwd]
181
+ * @returns {{ changes, summary, riskLevel, preserves }}
182
+ */
183
+ export declare function planReplitConfig(desired?: Record<string, unknown>, cwd?: string): {
184
+ changes: Record<string, unknown>[];
185
+ summary: string;
186
+ riskLevel: string;
187
+ preserves: string[];
188
+ };
189
+ /**
190
+ * Main integration function: detect, inspect, plan, optionally apply.
191
+ * @param {{ dryRun?: boolean, cwd?: string, skipMedium?: boolean }} options
192
+ * @returns {{ environment, replitTools, config, plan, applied, report }}
193
+ */
194
+ export declare function initReplitIntegration({ dryRun, cwd }?: {
195
+ dryRun?: boolean | undefined;
196
+ cwd?: string | undefined;
197
+ }): {
198
+ environment: {
199
+ isReplit: boolean;
200
+ replId: string | null;
201
+ replSlug: string | null;
202
+ replOwner: string | null;
203
+ replUrl: string | null;
204
+ nixChannel: string | null;
205
+ containerType: string;
206
+ uptimeSeconds: number | null;
207
+ };
208
+ replitTools: {
209
+ toolsConfig: {
210
+ recentWindowHours: {};
211
+ persistenceDays: {};
212
+ mirror: {} | null;
213
+ raw: Record<string, unknown>;
214
+ } | null;
215
+ installed: boolean;
216
+ version: null;
217
+ toolsDir: null;
218
+ sessionArchive: {
219
+ exists: boolean;
220
+ sessionCount: number;
221
+ latestTimestamp: null;
222
+ };
223
+ persistentHomes: {
224
+ claude: boolean;
225
+ codex: boolean;
226
+ };
227
+ authRefresh: {
228
+ available: boolean;
229
+ scriptPath?: undefined;
230
+ };
231
+ config: null;
232
+ codexPlugins: {
233
+ count: number;
234
+ };
235
+ shellSnapshots: {
236
+ available: boolean;
237
+ count: number;
238
+ };
239
+ mcpAuthCache: {
240
+ available: boolean;
241
+ entries: number;
242
+ };
243
+ } | {
244
+ toolsConfig: {
245
+ recentWindowHours: {};
246
+ persistenceDays: {};
247
+ mirror: {} | null;
248
+ raw: Record<string, unknown>;
249
+ } | null;
250
+ installed: boolean;
251
+ version: {} | null;
252
+ toolsDir: string;
253
+ sessionArchive: {
254
+ exists: boolean;
255
+ sessionCount: number;
256
+ latestTimestamp: null;
257
+ };
258
+ persistentHomes: {
259
+ claude: boolean;
260
+ codex: boolean;
261
+ };
262
+ authRefresh: {
263
+ available: boolean;
264
+ scriptPath: string | null;
265
+ };
266
+ config: Record<string, unknown> | null;
267
+ codexPlugins: {
268
+ count: number;
269
+ };
270
+ shellSnapshots: {
271
+ available: boolean;
272
+ count: number;
273
+ };
274
+ mcpAuthCache: {
275
+ available: boolean;
276
+ entries: number;
277
+ };
278
+ };
279
+ config: {
280
+ raw: null;
281
+ run: null;
282
+ onBoot: null;
283
+ expertMode: null;
284
+ hidden: never[];
285
+ modules: never[];
286
+ nix: {};
287
+ deployment: {};
288
+ hasRun: boolean;
289
+ hasOnBoot: boolean;
290
+ hasExpertMode: boolean;
291
+ } | {
292
+ raw: string;
293
+ run: string | null;
294
+ onBoot: string | null;
295
+ expertMode: boolean | null;
296
+ hidden: string[];
297
+ modules: string[];
298
+ nix: Record<string, string>;
299
+ deployment: Record<string, string>;
300
+ hasRun: boolean;
301
+ hasOnBoot: boolean;
302
+ hasExpertMode: boolean;
303
+ };
304
+ plan: {
305
+ changes: Record<string, unknown>[];
306
+ summary: string;
307
+ riskLevel: string;
308
+ preserves: string[];
309
+ };
310
+ applied: string[];
311
+ dryRun: boolean;
312
+ };
313
+ /**
314
+ * Thin escape hatch to run the replit CLI.
315
+ * @param {string[]} args
316
+ * @param {{ timeout?: number }} options
317
+ * @returns {{ ok, stdout, stderr }}
318
+ */
319
+ export declare function runReplitCli(args: string[], options?: {
320
+ timeout?: number;
321
+ }): {
322
+ ok: boolean;
323
+ stdout: string;
324
+ stderr: string;
325
+ };
326
+ /**
327
+ * Pretty-print the integration report for TUI/dashboard display.
328
+ * @param {object} report — from initReplitIntegration
329
+ * @returns {string}
330
+ */
331
+ export declare function formatReplitReport(report: Record<string, unknown>): string;
332
+ /**
333
+ * Scan the Codex plugin directory and return a structured inventory.
334
+ * Reads each plugin's skills subdirectories for SKILL.md (name, description, capabilities).
335
+ * Result is cached after the first call.
336
+ *
337
+ * @param {string} [cwd]
338
+ * @returns {{ plugins: Array<{ id, name, description, capabilities, skillNames, path }>, count }}
339
+ */
340
+ export declare function getPluginInventory(cwd?: string): {
341
+ plugins: Array<{
342
+ id: string;
343
+ name: string;
344
+ description: string;
345
+ capabilities: string[];
346
+ skillNames: string[];
347
+ path: string;
348
+ }>;
349
+ count: number;
350
+ };
351
+ /**
352
+ * Match plugins to a task description using keyword matching.
353
+ * Returns plugins sorted by relevance score (descending).
354
+ *
355
+ * @param {string} taskDescription
356
+ * @param {Array<{ id, name, description, capabilities, skillNames, path }>} [plugins]
357
+ * @param {string} [cwd]
358
+ * @returns {Array<{ plugin: object, relevance: number, reason: string }>}
359
+ */
360
+ export declare function matchPluginsForTask(taskDescription: string, plugins?: Array<{
361
+ id: string;
362
+ name: string;
363
+ description: string;
364
+ capabilities: string[];
365
+ skillNames: string[];
366
+ path: string;
367
+ }>, cwd?: string): {
368
+ plugin: {
369
+ id: string;
370
+ name: string;
371
+ description: string;
372
+ capabilities: string[];
373
+ skillNames: string[];
374
+ path: string;
375
+ };
376
+ relevance: number;
377
+ reason: string;
378
+ }[];
379
+ /**
380
+ * Search the Claude session archive for keyword matches in user messages.
381
+ * Reads session files line by line to avoid loading full files into memory.
382
+ * Results are recency-weighted: today ×2, this week ×1.5, older ×1.
383
+ *
384
+ * @param {string} query
385
+ * @param {{ limit?: number, days?: number }} [options]
386
+ * @param {string} [cwd]
387
+ * @returns {Promise<Array<{ sessionId, date, matchingMessage, relevance }>>}
388
+ */
389
+ export declare function searchSessionArchive(query: string, options?: {
390
+ limit?: number;
391
+ days?: number;
392
+ }, cwd?: string): Promise<{
393
+ sessionId: string;
394
+ date: string;
395
+ matchingMessage: string;
396
+ relevance: number;
397
+ }[]>;