dual-brain 0.2.29 → 0.3.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 (309) 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 +122 -51
  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/task-classifier.mjs +328 -0
  240. package/hooks/vibe-router.mjs +387 -0
  241. package/package.json +29 -153
  242. package/src/agents/registry.mjs +0 -405
  243. package/src/awareness.mjs +0 -425
  244. package/src/brief.mjs +0 -266
  245. package/src/calibration.mjs +0 -148
  246. package/src/checkpoint.mjs +0 -109
  247. package/src/ci-triage.mjs +0 -191
  248. package/src/cognitive-loop.mjs +0 -562
  249. package/src/collaboration.mjs +0 -545
  250. package/src/context-intel.mjs +0 -158
  251. package/src/context.mjs +0 -389
  252. package/src/continuity.mjs +0 -298
  253. package/src/cost-tracker.mjs +0 -184
  254. package/src/debrief.mjs +0 -228
  255. package/src/decide.mjs +0 -1099
  256. package/src/decompose.mjs +0 -331
  257. package/src/detect.mjs +0 -702
  258. package/src/dispatch.mjs +0 -1447
  259. package/src/doctor.mjs +0 -1607
  260. package/src/envelope.mjs +0 -139
  261. package/src/failure-memory.mjs +0 -178
  262. package/src/fx.mjs +0 -276
  263. package/src/governance.mjs +0 -279
  264. package/src/handoff.mjs +0 -85
  265. package/src/head-protocol.mjs +0 -128
  266. package/src/head.mjs +0 -952
  267. package/src/health.mjs +0 -528
  268. package/src/inbox.mjs +0 -195
  269. package/src/index.mjs +0 -44
  270. package/src/install-hooks.mjs +0 -100
  271. package/src/integrity.mjs +0 -245
  272. package/src/intelligence.mjs +0 -447
  273. package/src/ledger.mjs +0 -196
  274. package/src/living-docs.mjs +0 -210
  275. package/src/memory-tiers.mjs +0 -193
  276. package/src/models.mjs +0 -363
  277. package/src/narrative.mjs +0 -169
  278. package/src/nextstep.mjs +0 -100
  279. package/src/observer.mjs +0 -241
  280. package/src/outcome.mjs +0 -386
  281. package/src/pipeline.mjs +0 -1689
  282. package/src/playbook.mjs +0 -257
  283. package/src/pr-agent.mjs +0 -214
  284. package/src/predictive.mjs +0 -250
  285. package/src/profile.mjs +0 -1411
  286. package/src/prompt-audit.mjs +0 -231
  287. package/src/prompt-intel.mjs +0 -325
  288. package/src/provider-context.mjs +0 -257
  289. package/src/receipt.mjs +0 -344
  290. package/src/recommendations.mjs +0 -291
  291. package/src/redact.mjs +0 -192
  292. package/src/replit.mjs +0 -1210
  293. package/src/repo.mjs +0 -445
  294. package/src/revert.mjs +0 -149
  295. package/src/routing-advisor.mjs +0 -200
  296. package/src/self-correct.mjs +0 -146
  297. package/src/session-lock.mjs +0 -160
  298. package/src/session.mjs +0 -1655
  299. package/src/settings-tui.mjs +0 -373
  300. package/src/setup-flow.mjs +0 -215
  301. package/src/signal.mjs +0 -114
  302. package/src/simmer.mjs +0 -241
  303. package/src/strategy.mjs +0 -235
  304. package/src/subscription.mjs +0 -212
  305. package/src/templates.mjs +0 -260
  306. package/src/think-engine.mjs +0 -428
  307. package/src/tui.mjs +0 -276
  308. package/src/update-check.mjs +0 -35
  309. 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
+ }[]>;