@tyroneross/build-loop 0.30.3

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 (389) hide show
  1. package/.agents/plugins/marketplace.json +10 -0
  2. package/.claude-plugin/marketplace.json +38 -0
  3. package/.claude-plugin/plugin.json +30 -0
  4. package/.codex-plugin/plugin.json +41 -0
  5. package/.cursor/rules/build-loop-surface.mdc +22 -0
  6. package/AGENTS.md +498 -0
  7. package/LICENSE +202 -0
  8. package/README.md +403 -0
  9. package/agents/alignment-checker.md +124 -0
  10. package/agents/api-assessor.md +136 -0
  11. package/agents/architecture-scout.md +185 -0
  12. package/agents/assessment-orchestrator.md +163 -0
  13. package/agents/build-orchestrator.md +198 -0
  14. package/agents/database-assessor.md +133 -0
  15. package/agents/design-contract-specialist.md +239 -0
  16. package/agents/fact-checker.md +69 -0
  17. package/agents/fix-critique.md +161 -0
  18. package/agents/frontend-assessor.md +136 -0
  19. package/agents/implementer.md +185 -0
  20. package/agents/independent-auditor.md +143 -0
  21. package/agents/mock-scanner.md +78 -0
  22. package/agents/optimize-runner.md +112 -0
  23. package/agents/overfitting-reviewer.md +96 -0
  24. package/agents/performance-assessor.md +159 -0
  25. package/agents/plan-critic.md +85 -0
  26. package/agents/promotion-reviewer.md +121 -0
  27. package/agents/recurring-pattern-detector.md +248 -0
  28. package/agents/retrospective-synthesizer.md +109 -0
  29. package/agents/root-cause-investigator.md +285 -0
  30. package/agents/scope-auditor.md +121 -0
  31. package/agents/security-reviewer.md +151 -0
  32. package/agents/self-improvement-architect.md +125 -0
  33. package/agents/synthesis-critic.md +99 -0
  34. package/agents/transcript-pattern-miner.md +165 -0
  35. package/agents/ui-validator.md +193 -0
  36. package/codex-skills/build-loop/SKILL.md +20 -0
  37. package/codex-skills/debug-loop/SKILL.md +18 -0
  38. package/codex-skills/handoff/SKILL.md +22 -0
  39. package/codex-skills/knowledge/SKILL.md +21 -0
  40. package/codex-skills/optimize/SKILL.md +18 -0
  41. package/codex-skills/research/SKILL.md +18 -0
  42. package/commands/agent-rally-point.md +301 -0
  43. package/commands/assess.md +41 -0
  44. package/commands/debug.md +20 -0
  45. package/commands/debugger-detail.md +34 -0
  46. package/commands/debugger-scan.md +15 -0
  47. package/commands/debugger-status.md +20 -0
  48. package/commands/debugger.md +32 -0
  49. package/commands/handoff.md +113 -0
  50. package/commands/knowledge-review.md +16 -0
  51. package/commands/optimize.md +31 -0
  52. package/commands/plan-verify.md +39 -0
  53. package/commands/promote-experiment.md +129 -0
  54. package/commands/research.md +22 -0
  55. package/commands/run.md +12 -0
  56. package/commands/self-review.md +51 -0
  57. package/commands/start-prd.md +57 -0
  58. package/commands/test.md +34 -0
  59. package/dist/src/assessment-orchestrator.d.ts +78 -0
  60. package/dist/src/assessment-orchestrator.d.ts.map +1 -0
  61. package/dist/src/assessment-orchestrator.js +304 -0
  62. package/dist/src/assessment-orchestrator.js.map +1 -0
  63. package/dist/src/audit-miner.d.ts +21 -0
  64. package/dist/src/audit-miner.d.ts.map +1 -0
  65. package/dist/src/audit-miner.js +421 -0
  66. package/dist/src/audit-miner.js.map +1 -0
  67. package/dist/src/batch-operations.d.ts +30 -0
  68. package/dist/src/batch-operations.d.ts.map +1 -0
  69. package/dist/src/batch-operations.js +339 -0
  70. package/dist/src/batch-operations.js.map +1 -0
  71. package/dist/src/config.d.ts +83 -0
  72. package/dist/src/config.d.ts.map +1 -0
  73. package/dist/src/config.js +176 -0
  74. package/dist/src/config.js.map +1 -0
  75. package/dist/src/context-engine.d.ts +45 -0
  76. package/dist/src/context-engine.d.ts.map +1 -0
  77. package/dist/src/context-engine.js +135 -0
  78. package/dist/src/context-engine.js.map +1 -0
  79. package/dist/src/debug-wrapper.d.ts +58 -0
  80. package/dist/src/debug-wrapper.d.ts.map +1 -0
  81. package/dist/src/debug-wrapper.js +285 -0
  82. package/dist/src/debug-wrapper.js.map +1 -0
  83. package/dist/src/index.d.ts +31 -0
  84. package/dist/src/index.d.ts.map +1 -0
  85. package/dist/src/index.js +149 -0
  86. package/dist/src/index.js.map +1 -0
  87. package/dist/src/interactive-verifier.d.ts +26 -0
  88. package/dist/src/interactive-verifier.d.ts.map +1 -0
  89. package/dist/src/interactive-verifier.js +435 -0
  90. package/dist/src/interactive-verifier.js.map +1 -0
  91. package/dist/src/lessons.d.ts +59 -0
  92. package/dist/src/lessons.d.ts.map +1 -0
  93. package/dist/src/lessons.js +172 -0
  94. package/dist/src/lessons.js.map +1 -0
  95. package/dist/src/log-reader.d.ts +39 -0
  96. package/dist/src/log-reader.d.ts.map +1 -0
  97. package/dist/src/log-reader.js +291 -0
  98. package/dist/src/log-reader.js.map +1 -0
  99. package/dist/src/logger.d.ts +59 -0
  100. package/dist/src/logger.d.ts.map +1 -0
  101. package/dist/src/logger.js +328 -0
  102. package/dist/src/logger.js.map +1 -0
  103. package/dist/src/parallel-retrieval.d.ts +52 -0
  104. package/dist/src/parallel-retrieval.d.ts.map +1 -0
  105. package/dist/src/parallel-retrieval.js +309 -0
  106. package/dist/src/parallel-retrieval.js.map +1 -0
  107. package/dist/src/pattern-extractor.d.ts +30 -0
  108. package/dist/src/pattern-extractor.d.ts.map +1 -0
  109. package/dist/src/pattern-extractor.js +386 -0
  110. package/dist/src/pattern-extractor.js.map +1 -0
  111. package/dist/src/result-aggregator.d.ts +44 -0
  112. package/dist/src/result-aggregator.d.ts.map +1 -0
  113. package/dist/src/result-aggregator.js +315 -0
  114. package/dist/src/result-aggregator.js.map +1 -0
  115. package/dist/src/retrieval.d.ts +139 -0
  116. package/dist/src/retrieval.d.ts.map +1 -0
  117. package/dist/src/retrieval.js +724 -0
  118. package/dist/src/retrieval.js.map +1 -0
  119. package/dist/src/setup/auto-setup.d.ts +15 -0
  120. package/dist/src/setup/auto-setup.d.ts.map +1 -0
  121. package/dist/src/setup/auto-setup.js +157 -0
  122. package/dist/src/setup/auto-setup.js.map +1 -0
  123. package/dist/src/setup/configure-hooks.d.ts +8 -0
  124. package/dist/src/setup/configure-hooks.d.ts.map +1 -0
  125. package/dist/src/setup/configure-hooks.js +16 -0
  126. package/dist/src/setup/configure-hooks.js.map +1 -0
  127. package/dist/src/setup/create-slash-commands.d.ts +8 -0
  128. package/dist/src/setup/create-slash-commands.d.ts.map +1 -0
  129. package/dist/src/setup/create-slash-commands.js +101 -0
  130. package/dist/src/setup/create-slash-commands.js.map +1 -0
  131. package/dist/src/setup/index.d.ts +8 -0
  132. package/dist/src/setup/index.d.ts.map +1 -0
  133. package/dist/src/setup/index.js +17 -0
  134. package/dist/src/setup/index.js.map +1 -0
  135. package/dist/src/setup/inject-claude-md.d.ts +10 -0
  136. package/dist/src/setup/inject-claude-md.d.ts.map +1 -0
  137. package/dist/src/setup/inject-claude-md.js +150 -0
  138. package/dist/src/setup/inject-claude-md.js.map +1 -0
  139. package/dist/src/setup/uninstall.d.ts +22 -0
  140. package/dist/src/setup/uninstall.d.ts.map +1 -0
  141. package/dist/src/setup/uninstall.js +235 -0
  142. package/dist/src/setup/uninstall.js.map +1 -0
  143. package/dist/src/storage.d.ts +192 -0
  144. package/dist/src/storage.d.ts.map +1 -0
  145. package/dist/src/storage.js +1037 -0
  146. package/dist/src/storage.js.map +1 -0
  147. package/dist/src/string-similarity.d.ts +8 -0
  148. package/dist/src/string-similarity.d.ts.map +1 -0
  149. package/dist/src/string-similarity.js +57 -0
  150. package/dist/src/string-similarity.js.map +1 -0
  151. package/dist/src/traces/adapters/browser.d.ts +69 -0
  152. package/dist/src/traces/adapters/browser.d.ts.map +1 -0
  153. package/dist/src/traces/adapters/browser.js +280 -0
  154. package/dist/src/traces/adapters/browser.js.map +1 -0
  155. package/dist/src/traces/adapters/index.d.ts +23 -0
  156. package/dist/src/traces/adapters/index.d.ts.map +1 -0
  157. package/dist/src/traces/adapters/index.js +67 -0
  158. package/dist/src/traces/adapters/index.js.map +1 -0
  159. package/dist/src/traces/adapters/langchain.d.ts +42 -0
  160. package/dist/src/traces/adapters/langchain.d.ts.map +1 -0
  161. package/dist/src/traces/adapters/langchain.js +151 -0
  162. package/dist/src/traces/adapters/langchain.js.map +1 -0
  163. package/dist/src/traces/adapters/opentelemetry.d.ts +46 -0
  164. package/dist/src/traces/adapters/opentelemetry.d.ts.map +1 -0
  165. package/dist/src/traces/adapters/opentelemetry.js +164 -0
  166. package/dist/src/traces/adapters/opentelemetry.js.map +1 -0
  167. package/dist/src/traces/adapters/sentry.d.ts +58 -0
  168. package/dist/src/traces/adapters/sentry.d.ts.map +1 -0
  169. package/dist/src/traces/adapters/sentry.js +212 -0
  170. package/dist/src/traces/adapters/sentry.js.map +1 -0
  171. package/dist/src/traces/index.d.ts +10 -0
  172. package/dist/src/traces/index.d.ts.map +1 -0
  173. package/dist/src/traces/index.js +45 -0
  174. package/dist/src/traces/index.js.map +1 -0
  175. package/dist/src/traces/storage.d.ts +78 -0
  176. package/dist/src/traces/storage.d.ts.map +1 -0
  177. package/dist/src/traces/storage.js +399 -0
  178. package/dist/src/traces/storage.js.map +1 -0
  179. package/dist/src/traces/summarizer.d.ts +83 -0
  180. package/dist/src/traces/summarizer.d.ts.map +1 -0
  181. package/dist/src/traces/summarizer.js +247 -0
  182. package/dist/src/traces/summarizer.js.map +1 -0
  183. package/dist/src/traces/types.d.ts +365 -0
  184. package/dist/src/traces/types.d.ts.map +1 -0
  185. package/dist/src/traces/types.js +14 -0
  186. package/dist/src/traces/types.js.map +1 -0
  187. package/dist/src/types.d.ts +495 -0
  188. package/dist/src/types.d.ts.map +1 -0
  189. package/dist/src/types.js +27 -0
  190. package/dist/src/types.js.map +1 -0
  191. package/docs/agent-surface-policy.md +45 -0
  192. package/docs/memory-setup.md +226 -0
  193. package/hooks/_arch_scan_bg.py +88 -0
  194. package/hooks/_plugin_drift_check_bg.py +85 -0
  195. package/hooks/_session_start_lib.sh +42 -0
  196. package/hooks/git/pre-push +141 -0
  197. package/hooks/hooks.json +126 -0
  198. package/hooks/post-commit +30 -0
  199. package/hooks/pre-commit +29 -0
  200. package/hooks/pre-edit-apppulse.sh +6 -0
  201. package/hooks/pre-edit-architecture.sh +106 -0
  202. package/hooks/pre-edit-rally-point.sh +92 -0
  203. package/hooks/session-start-apppulse.sh +6 -0
  204. package/hooks/session-start-architecture.sh +10 -0
  205. package/hooks/session-start-git-hooks.sh +12 -0
  206. package/hooks/session-start-plugin-drift.sh +27 -0
  207. package/hooks/session-start-rally-point.sh +44 -0
  208. package/hooks/session-start-retrieval.sh +24 -0
  209. package/hooks/session-start-worktree-gc.sh +105 -0
  210. package/hooks/test_apppulse_hooks.sh +6 -0
  211. package/hooks/test_rally_point_hooks.sh +388 -0
  212. package/hooks/test_sec008_hooks.sh +66 -0
  213. package/package.json +111 -0
  214. package/scripts/README.md +301 -0
  215. package/scripts/_db_url.py +61 -0
  216. package/scripts/_paths.py +445 -0
  217. package/scripts/blm.py +162 -0
  218. package/scripts/blm_api.py +263 -0
  219. package/scripts/check_cache_sync.py +490 -0
  220. package/scripts/embed_backend.py +475 -0
  221. package/scripts/install_memory.py +556 -0
  222. package/scripts/lessons_index/__init__.py +77 -0
  223. package/scripts/lessons_index/__main__.py +135 -0
  224. package/scripts/lessons_index/ingest.py +288 -0
  225. package/scripts/lessons_index/query.py +285 -0
  226. package/scripts/lessons_index/schema.py +114 -0
  227. package/scripts/memory_context/__init__.py +610 -0
  228. package/scripts/memory_graph/__init__.py +393 -0
  229. package/scripts/project_resolver.py +172 -0
  230. package/scripts/prune_codex_plugin_cache.py +23 -0
  231. package/scripts/prune_plugin_cache.py +359 -0
  232. package/scripts/semantic_index/__init__.py +482 -0
  233. package/scripts/semantic_index/_bench_hybrid.py +175 -0
  234. package/scripts/semantic_index/backfill.py +263 -0
  235. package/scripts/semantic_index/hybrid.py +174 -0
  236. package/scripts/semantic_index/test_backfill.py +292 -0
  237. package/scripts/semantic_index/test_hybrid.py +541 -0
  238. package/scripts/sync_navgator_lessons.py +666 -0
  239. package/scripts/sync_plugin_cache.py +388 -0
  240. package/skills/agent-rally-point/SKILL.md +165 -0
  241. package/skills/agent-rally-watcher/SKILL.md +83 -0
  242. package/skills/api-registry-bridge/SKILL.md +59 -0
  243. package/skills/architecture/dead/SKILL.md +56 -0
  244. package/skills/architecture/impact/SKILL.md +88 -0
  245. package/skills/architecture/review/SKILL.md +227 -0
  246. package/skills/architecture/rules/SKILL.md +72 -0
  247. package/skills/architecture/scan/SKILL.md +79 -0
  248. package/skills/architecture/trace/SKILL.md +65 -0
  249. package/skills/attribution-standard/SKILL.md +122 -0
  250. package/skills/authentication/SKILL.md +81 -0
  251. package/skills/authentication/references/better-auth-magic-link.md +135 -0
  252. package/skills/authentication/references/better-auth-setup.md +224 -0
  253. package/skills/authentication/references/google-calendar-sync.md +278 -0
  254. package/skills/authentication/references/google-cloud-console.md +159 -0
  255. package/skills/authentication/references/google-geocoding-directions.md +126 -0
  256. package/skills/authentication/references/google-lessons-example-web-app.md +177 -0
  257. package/skills/authentication/references/google-maps.md +162 -0
  258. package/skills/authentication/references/google-oauth-setup.md +343 -0
  259. package/skills/authentication/references/google-places.md +173 -0
  260. package/skills/authentication/references/lessons-example-web-app-better-auth.md +126 -0
  261. package/skills/authentication/references/resend-email.md +227 -0
  262. package/skills/authentication/references/resend-otp-magic-link.md +153 -0
  263. package/skills/authentication/references/supabase-auth.md +172 -0
  264. package/skills/auto-decision-capture/SKILL.md +419 -0
  265. package/skills/build-loop/SKILL.md +516 -0
  266. package/skills/build-loop/detect-plugins.mjs +82 -0
  267. package/skills/build-loop/eval-guide.md +65 -0
  268. package/skills/build-loop/fallbacks.md +549 -0
  269. package/skills/build-loop/phases/fact-check.md +42 -0
  270. package/skills/build-loop/phases/ui-validation.md +267 -0
  271. package/skills/build-loop/references/apple-native-planning.md +439 -0
  272. package/skills/build-loop/references/capability-routing.md +181 -0
  273. package/skills/build-loop/references/codex-subagents.md +98 -0
  274. package/skills/build-loop/references/coordination.md +161 -0
  275. package/skills/build-loop/references/correction-aware-capture.md +177 -0
  276. package/skills/build-loop/references/independent-auditor.md +72 -0
  277. package/skills/build-loop/references/intent-capability-pack.md +170 -0
  278. package/skills/build-loop/references/intent-exploration-prompts.md +96 -0
  279. package/skills/build-loop/references/leadership.md +72 -0
  280. package/skills/build-loop/references/memory.md +284 -0
  281. package/skills/build-loop/references/modular-systems-pack.md +96 -0
  282. package/skills/build-loop/references/output-style.md +129 -0
  283. package/skills/build-loop/references/pay-it-forward-arch.md +98 -0
  284. package/skills/build-loop/references/phase-1-assess.md +218 -0
  285. package/skills/build-loop/references/phase-2-plan.md +77 -0
  286. package/skills/build-loop/references/phase-3-execute.md +47 -0
  287. package/skills/build-loop/references/phase-4-review.md +310 -0
  288. package/skills/build-loop/references/phase-5-iterate.md +71 -0
  289. package/skills/build-loop/references/phase-6-learn.md +56 -0
  290. package/skills/build-loop/references/recent-design-structures.md +274 -0
  291. package/skills/build-loop/references/refactor-history/ASSESSMENT.md +85 -0
  292. package/skills/build-loop/references/refactor-history/STANDALONE_TEST_RUN.md +149 -0
  293. package/skills/build-loop/references/refactor-history/scenarios/01-simple-bugfix.md +32 -0
  294. package/skills/build-loop/references/refactor-history/scenarios/02-ui-build-with-iteration.md +48 -0
  295. package/skills/build-loop/references/refactor-history/scenarios/03-multi-failure-escalation.md +60 -0
  296. package/skills/build-loop/references/refactor-history/scenarios/04-ui-build-ibr-absent.md +51 -0
  297. package/skills/build-loop/references/refactor-history/scenarios/05-refactor-navgator-absent.md +71 -0
  298. package/skills/build-loop/references/refactor-history/scenarios/06-recurring-bug-debugger-absent.md +52 -0
  299. package/skills/build-loop/references/refactor-history/trace-comparison.md +202 -0
  300. package/skills/build-loop/references/self-recursive-dev.md +77 -0
  301. package/skills/build-loop/references/self-review.md +232 -0
  302. package/skills/build-loop/references/ui-io-contract.md +116 -0
  303. package/skills/build-loop/scanners/audit-design-rules.mjs +476 -0
  304. package/skills/build-loop/scanners/require-visual-evidence.mjs +239 -0
  305. package/skills/build-loop/templates/backlog-item.md +35 -0
  306. package/skills/build-loop/templates/codex-worker-prompt.md +89 -0
  307. package/skills/build-loop/templates/ui-subagent-prompt.md +179 -0
  308. package/skills/build-loop/templates/ux-fix-plan.md +40 -0
  309. package/skills/building-with-deepagents/SKILL.md +195 -0
  310. package/skills/building-with-deepagents/references/anti-patterns.md +141 -0
  311. package/skills/building-with-deepagents/references/api-quick-reference.md +184 -0
  312. package/skills/capabilities/SKILL.md +91 -0
  313. package/skills/debug-loop/SKILL.md +278 -0
  314. package/skills/debug-loop/references/convergence-rules.md +145 -0
  315. package/skills/debug-loop/references/swiftui-macos-clunky-ui-debugger.html +823 -0
  316. package/skills/debugging/assess/SKILL.md +111 -0
  317. package/skills/debugging/debug-loop/SKILL.md +231 -0
  318. package/skills/debugging/memory/SKILL.md +147 -0
  319. package/skills/debugging/store/SKILL.md +153 -0
  320. package/skills/debugging-memory/SKILL.md +440 -0
  321. package/skills/debugging-memory/examples/incident-example.json +67 -0
  322. package/skills/debugging-memory/references/incident-documentation.md +280 -0
  323. package/skills/debugging-memory/references/ios-notification-alarm-playbook.md +300 -0
  324. package/skills/debugging-memory/references/pattern-extraction.md +163 -0
  325. package/skills/debugging-memory/references/subagent-integration.md +312 -0
  326. package/skills/defenseclaw-bridge/SKILL.md +156 -0
  327. package/skills/defenseclaw-bridge/references/dc-config-mapping.md +162 -0
  328. package/skills/defenseclaw-bridge/references/output-format.md +108 -0
  329. package/skills/handoff/SKILL.md +94 -0
  330. package/skills/ibr-bridge/SKILL.md +68 -0
  331. package/skills/knowledge/SKILL.md +127 -0
  332. package/skills/knowledge/references/recall-integration.md +83 -0
  333. package/skills/knowledge/templates/madr-minimal.md +56 -0
  334. package/skills/knowledge-review/SKILL.md +112 -0
  335. package/skills/logging-tracer/SKILL.md +202 -0
  336. package/skills/logging-tracer/references/log-analysis.md +128 -0
  337. package/skills/logging-tracer/references/stack-templates.md +274 -0
  338. package/skills/logging-tracer-bridge/SKILL.md +70 -0
  339. package/skills/mcp-builder/SKILL.md +278 -0
  340. package/skills/mcp-builder/references/mcp-security.md +106 -0
  341. package/skills/model-tiering/SKILL.md +216 -0
  342. package/skills/native-ax-driver/SKILL.md +220 -0
  343. package/skills/native-ax-driver/scripts/layout_fill.py +222 -0
  344. package/skills/native-ax-driver/scripts/native_driver.py +495 -0
  345. package/skills/native-ax-driver/swift/bl-ax-driver/Package.swift +20 -0
  346. package/skills/native-ax-driver/swift/bl-ax-driver/Sources/main.swift +542 -0
  347. package/skills/optimize/SKILL.md +202 -0
  348. package/skills/optimize/profiles.md +61 -0
  349. package/skills/plan-verify/SKILL.md +115 -0
  350. package/skills/plan-verify/test-fixtures/example-app-v20-findings.json +27 -0
  351. package/skills/plan-verify/test-fixtures/example-app-v20.md +42 -0
  352. package/skills/plan-verify/test-fixtures/example-app-v22-findings.json +15 -0
  353. package/skills/plan-verify/test-fixtures/example-app-v22.md +1608 -0
  354. package/skills/plan-verify/test-fixtures/unrelated-good-plan-findings.json +15 -0
  355. package/skills/plan-verify/test-fixtures/unrelated-good-plan.md +55 -0
  356. package/skills/plugin-builder/SKILL.md +329 -0
  357. package/skills/plugin-builder/references/authoritative-sources.md +104 -0
  358. package/skills/plugin-builder/references/build-loop-phase-guidance.md +94 -0
  359. package/skills/plugin-builder/references/components-guide.md +221 -0
  360. package/skills/plugin-builder/references/distribution.md +317 -0
  361. package/skills/plugin-builder/references/dual-host-claude-codex.md +220 -0
  362. package/skills/plugin-builder/references/hooks-reference.md +210 -0
  363. package/skills/plugin-builder/references/manifest-schema.md +111 -0
  364. package/skills/plugin-builder/references/plugin-hygiene-lessons.md +307 -0
  365. package/skills/plugin-tests/SKILL.md +94 -0
  366. package/skills/prd-bridge/SKILL.md +135 -0
  367. package/skills/research/SKILL.md +80 -0
  368. package/skills/security-methodology/SKILL.md +105 -0
  369. package/skills/security-methodology/references/cross-source-matrix.md +77 -0
  370. package/skills/security-methodology/references/mitre-atlas-starter.md +83 -0
  371. package/skills/security-methodology/references/nist-600-1-mapping.md +119 -0
  372. package/skills/security-methodology/references/owasp-agentic-top-10.md +157 -0
  373. package/skills/security-methodology/references/owasp-llm-top-10.md +144 -0
  374. package/skills/security-methodology/references/owasp-web-top-10.md +65 -0
  375. package/skills/self-improve/SKILL.md +298 -0
  376. package/skills/spec-writing/SKILL.md +548 -0
  377. package/skills/spec-writing/scripts/check_checklist.py +478 -0
  378. package/skills/sync-skills/SKILL.md +132 -0
  379. package/skills/telemetry/SKILL.md +66 -0
  380. package/skills/ui-design/SKILL.md +75 -0
  381. package/skills/ui-design/references/design-patterns-multi.md +165 -0
  382. package/skills/ui-design/references/design-preferences-from-owned-apps.md +150 -0
  383. package/skills/ui-design/references/evidence-capture-policy.md +55 -0
  384. package/skills/ui-design/references/ui-guidance-sources.md +330 -0
  385. package/skills/ui-design/references/universal-design-principles.alt.md +182 -0
  386. package/skills/ui-design/references/universal-design-principles.md +419 -0
  387. package/templates/memory/MEMORY.md.template +55 -0
  388. package/templates/memory/constitution.md.template +64 -0
  389. package/templates/memory/manifest.json +47 -0
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ // SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com>
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ /**
5
+ * Claude Memory - Main Entry Point
6
+ *
7
+ * Debugging memory system for Claude Code.
8
+ * Never solve the same bug twice.
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
22
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.batchCleanup = exports.batchExtractPatterns = exports.batchReviewIncomplete = exports.autoExtractPatternIfReady = exports.suggestPatterns = exports.extractPatterns = exports.getMemoryStatus = exports.storeDebugIncident = exports.debugWithMemory = exports.enhancedSearch = exports.getRecentIncidents = exports.searchByTags = exports.getFullIncident = exports.checkMemory = exports.generateQualityFeedback = exports.calculateQualityScore = exports.buildIncidentInteractive = exports.getOutcomeStats = exports.loadOutcomes = exports.recordOutcome = exports.updateIndexIncremental = exports.rebuildKeywordIndex = exports.findCandidatesByKeyword = exports.loadKeywordIndex = exports.updateKeywordIndex = exports.toCompactPatterns = exports.toCompactIncidents = exports.toCompactPattern = exports.toCompactIncident = exports.enforceTokenBudget = exports.compressContext = exports.archiveOldIncidents = exports.buildMemorySummary = exports.loadIndex = exports.rebuildIndex = exports.searchIncidentLog = exports.appendToIncidentLog = exports.getMemoryStats = exports.generatePatternId = exports.generateIncidentId = exports.validateIncident = exports.loadAllPatterns = exports.loadPattern = exports.storePattern = exports.loadAllIncidents = exports.loadIncident = exports.storeIncident = exports.displayConfig = exports.getMemoryPaths = exports.getConfig = void 0;
26
+ exports.readProjectLogs = exports.configureLogger = exports.readLogs = exports.log = exports.traced = exports.checkFileContext = exports.generateSessionContext = exports.generateDynamicSection = exports.createQuickSummary = exports.formatAggregatedResults = exports.aggregateResults = exports.scorePattern = exports.scoreIncident = exports.scoreAssessment = exports.prepareOrchestration = exports.formatOrchestrationResult = exports.createOrchestrationResult = exports.rankAssessments = exports.parseAssessmentResponse = exports.generateAssessorPrompts = exports.selectDomainsForAssessment = exports.detectDomains = exports.parallelMemoryCheck = exports.parallelPatternMatch = exports.parallelSearch = exports.checkMemoryScaled = exports.checkMemoryProgressive = exports.classifyVerdict = exports.checkMemoryWithVerdict = exports.getPatternDetails = exports.getIncidentDetails = exports.quickMemoryCheck = exports.checkMemoryTiered = exports.previewAuditMining = exports.mineAuditTrail = void 0;
27
+ // Configuration
28
+ var config_1 = require("./config");
29
+ Object.defineProperty(exports, "getConfig", { enumerable: true, get: function () { return config_1.getConfig; } });
30
+ Object.defineProperty(exports, "getMemoryPaths", { enumerable: true, get: function () { return config_1.getMemoryPaths; } });
31
+ Object.defineProperty(exports, "displayConfig", { enumerable: true, get: function () { return config_1.displayConfig; } });
32
+ // Storage Operations
33
+ var storage_1 = require("./storage");
34
+ Object.defineProperty(exports, "storeIncident", { enumerable: true, get: function () { return storage_1.storeIncident; } });
35
+ Object.defineProperty(exports, "loadIncident", { enumerable: true, get: function () { return storage_1.loadIncident; } });
36
+ Object.defineProperty(exports, "loadAllIncidents", { enumerable: true, get: function () { return storage_1.loadAllIncidents; } });
37
+ Object.defineProperty(exports, "storePattern", { enumerable: true, get: function () { return storage_1.storePattern; } });
38
+ Object.defineProperty(exports, "loadPattern", { enumerable: true, get: function () { return storage_1.loadPattern; } });
39
+ Object.defineProperty(exports, "loadAllPatterns", { enumerable: true, get: function () { return storage_1.loadAllPatterns; } });
40
+ Object.defineProperty(exports, "validateIncident", { enumerable: true, get: function () { return storage_1.validateIncident; } });
41
+ Object.defineProperty(exports, "generateIncidentId", { enumerable: true, get: function () { return storage_1.generateIncidentId; } });
42
+ Object.defineProperty(exports, "generatePatternId", { enumerable: true, get: function () { return storage_1.generatePatternId; } });
43
+ Object.defineProperty(exports, "getMemoryStats", { enumerable: true, get: function () { return storage_1.getMemoryStats; } });
44
+ // v1.5.0 additions
45
+ Object.defineProperty(exports, "appendToIncidentLog", { enumerable: true, get: function () { return storage_1.appendToIncidentLog; } });
46
+ Object.defineProperty(exports, "searchIncidentLog", { enumerable: true, get: function () { return storage_1.searchIncidentLog; } });
47
+ Object.defineProperty(exports, "rebuildIndex", { enumerable: true, get: function () { return storage_1.rebuildIndex; } });
48
+ Object.defineProperty(exports, "loadIndex", { enumerable: true, get: function () { return storage_1.loadIndex; } });
49
+ Object.defineProperty(exports, "buildMemorySummary", { enumerable: true, get: function () { return storage_1.buildMemorySummary; } });
50
+ Object.defineProperty(exports, "archiveOldIncidents", { enumerable: true, get: function () { return storage_1.archiveOldIncidents; } });
51
+ Object.defineProperty(exports, "compressContext", { enumerable: true, get: function () { return storage_1.compressContext; } });
52
+ Object.defineProperty(exports, "enforceTokenBudget", { enumerable: true, get: function () { return storage_1.enforceTokenBudget; } });
53
+ Object.defineProperty(exports, "toCompactIncident", { enumerable: true, get: function () { return storage_1.toCompactIncident; } });
54
+ Object.defineProperty(exports, "toCompactPattern", { enumerable: true, get: function () { return storage_1.toCompactPattern; } });
55
+ Object.defineProperty(exports, "toCompactIncidents", { enumerable: true, get: function () { return storage_1.toCompactIncidents; } });
56
+ Object.defineProperty(exports, "toCompactPatterns", { enumerable: true, get: function () { return storage_1.toCompactPatterns; } });
57
+ // v1.6.0 additions
58
+ Object.defineProperty(exports, "updateKeywordIndex", { enumerable: true, get: function () { return storage_1.updateKeywordIndex; } });
59
+ Object.defineProperty(exports, "loadKeywordIndex", { enumerable: true, get: function () { return storage_1.loadKeywordIndex; } });
60
+ Object.defineProperty(exports, "findCandidatesByKeyword", { enumerable: true, get: function () { return storage_1.findCandidatesByKeyword; } });
61
+ Object.defineProperty(exports, "rebuildKeywordIndex", { enumerable: true, get: function () { return storage_1.rebuildKeywordIndex; } });
62
+ Object.defineProperty(exports, "updateIndexIncremental", { enumerable: true, get: function () { return storage_1.updateIndexIncremental; } });
63
+ Object.defineProperty(exports, "recordOutcome", { enumerable: true, get: function () { return storage_1.recordOutcome; } });
64
+ Object.defineProperty(exports, "loadOutcomes", { enumerable: true, get: function () { return storage_1.loadOutcomes; } });
65
+ Object.defineProperty(exports, "getOutcomeStats", { enumerable: true, get: function () { return storage_1.getOutcomeStats; } });
66
+ // Interactive Verification
67
+ var interactive_verifier_1 = require("./interactive-verifier");
68
+ Object.defineProperty(exports, "buildIncidentInteractive", { enumerable: true, get: function () { return interactive_verifier_1.buildIncidentInteractive; } });
69
+ Object.defineProperty(exports, "calculateQualityScore", { enumerable: true, get: function () { return interactive_verifier_1.calculateQualityScore; } });
70
+ Object.defineProperty(exports, "generateQualityFeedback", { enumerable: true, get: function () { return interactive_verifier_1.generateQualityFeedback; } });
71
+ // Retrieval Operations
72
+ var retrieval_1 = require("./retrieval");
73
+ Object.defineProperty(exports, "checkMemory", { enumerable: true, get: function () { return retrieval_1.checkMemory; } });
74
+ Object.defineProperty(exports, "getFullIncident", { enumerable: true, get: function () { return retrieval_1.getFullIncident; } });
75
+ Object.defineProperty(exports, "searchByTags", { enumerable: true, get: function () { return retrieval_1.searchByTags; } });
76
+ Object.defineProperty(exports, "getRecentIncidents", { enumerable: true, get: function () { return retrieval_1.getRecentIncidents; } });
77
+ Object.defineProperty(exports, "enhancedSearch", { enumerable: true, get: function () { return retrieval_1.enhancedSearch; } });
78
+ // Main Debugging Wrapper
79
+ // Note: These will be added when we copy debug-with-memory.ts
80
+ var debug_wrapper_1 = require("./debug-wrapper");
81
+ Object.defineProperty(exports, "debugWithMemory", { enumerable: true, get: function () { return debug_wrapper_1.debugWithMemory; } });
82
+ Object.defineProperty(exports, "storeDebugIncident", { enumerable: true, get: function () { return debug_wrapper_1.storeDebugIncident; } });
83
+ Object.defineProperty(exports, "getMemoryStatus", { enumerable: true, get: function () { return debug_wrapper_1.getMemoryStatus; } });
84
+ // Pattern Extraction
85
+ var pattern_extractor_1 = require("./pattern-extractor");
86
+ Object.defineProperty(exports, "extractPatterns", { enumerable: true, get: function () { return pattern_extractor_1.extractPatterns; } });
87
+ Object.defineProperty(exports, "suggestPatterns", { enumerable: true, get: function () { return pattern_extractor_1.suggestPatterns; } });
88
+ Object.defineProperty(exports, "autoExtractPatternIfReady", { enumerable: true, get: function () { return pattern_extractor_1.autoExtractPatternIfReady; } });
89
+ // Batch Operations
90
+ var batch_operations_1 = require("./batch-operations");
91
+ Object.defineProperty(exports, "batchReviewIncomplete", { enumerable: true, get: function () { return batch_operations_1.batchReviewIncomplete; } });
92
+ Object.defineProperty(exports, "batchExtractPatterns", { enumerable: true, get: function () { return batch_operations_1.batchExtractPatterns; } });
93
+ Object.defineProperty(exports, "batchCleanup", { enumerable: true, get: function () { return batch_operations_1.batchCleanup; } });
94
+ // Audit Trail Mining
95
+ var audit_miner_1 = require("./audit-miner");
96
+ Object.defineProperty(exports, "mineAuditTrail", { enumerable: true, get: function () { return audit_miner_1.mineAuditTrail; } });
97
+ Object.defineProperty(exports, "previewAuditMining", { enumerable: true, get: function () { return audit_miner_1.previewAuditMining; } });
98
+ // Token-Efficient Retrieval
99
+ var retrieval_2 = require("./retrieval");
100
+ Object.defineProperty(exports, "checkMemoryTiered", { enumerable: true, get: function () { return retrieval_2.checkMemoryTiered; } });
101
+ Object.defineProperty(exports, "quickMemoryCheck", { enumerable: true, get: function () { return retrieval_2.quickMemoryCheck; } });
102
+ Object.defineProperty(exports, "getIncidentDetails", { enumerable: true, get: function () { return retrieval_2.getIncidentDetails; } });
103
+ Object.defineProperty(exports, "getPatternDetails", { enumerable: true, get: function () { return retrieval_2.getPatternDetails; } });
104
+ // v1.5.0 verdict system
105
+ Object.defineProperty(exports, "checkMemoryWithVerdict", { enumerable: true, get: function () { return retrieval_2.checkMemoryWithVerdict; } });
106
+ Object.defineProperty(exports, "classifyVerdict", { enumerable: true, get: function () { return retrieval_2.classifyVerdict; } });
107
+ // v1.6.0 progressive + scaled
108
+ Object.defineProperty(exports, "checkMemoryProgressive", { enumerable: true, get: function () { return retrieval_2.checkMemoryProgressive; } });
109
+ Object.defineProperty(exports, "checkMemoryScaled", { enumerable: true, get: function () { return retrieval_2.checkMemoryScaled; } });
110
+ // Parallel Retrieval
111
+ var parallel_retrieval_1 = require("./parallel-retrieval");
112
+ Object.defineProperty(exports, "parallelSearch", { enumerable: true, get: function () { return parallel_retrieval_1.parallelSearch; } });
113
+ Object.defineProperty(exports, "parallelPatternMatch", { enumerable: true, get: function () { return parallel_retrieval_1.parallelPatternMatch; } });
114
+ Object.defineProperty(exports, "parallelMemoryCheck", { enumerable: true, get: function () { return parallel_retrieval_1.parallelMemoryCheck; } });
115
+ // Assessment Orchestration
116
+ var assessment_orchestrator_1 = require("./assessment-orchestrator");
117
+ Object.defineProperty(exports, "detectDomains", { enumerable: true, get: function () { return assessment_orchestrator_1.detectDomains; } });
118
+ Object.defineProperty(exports, "selectDomainsForAssessment", { enumerable: true, get: function () { return assessment_orchestrator_1.selectDomainsForAssessment; } });
119
+ Object.defineProperty(exports, "generateAssessorPrompts", { enumerable: true, get: function () { return assessment_orchestrator_1.generateAssessorPrompts; } });
120
+ Object.defineProperty(exports, "parseAssessmentResponse", { enumerable: true, get: function () { return assessment_orchestrator_1.parseAssessmentResponse; } });
121
+ Object.defineProperty(exports, "rankAssessments", { enumerable: true, get: function () { return assessment_orchestrator_1.rankAssessments; } });
122
+ Object.defineProperty(exports, "createOrchestrationResult", { enumerable: true, get: function () { return assessment_orchestrator_1.createOrchestrationResult; } });
123
+ Object.defineProperty(exports, "formatOrchestrationResult", { enumerable: true, get: function () { return assessment_orchestrator_1.formatOrchestrationResult; } });
124
+ Object.defineProperty(exports, "prepareOrchestration", { enumerable: true, get: function () { return assessment_orchestrator_1.prepareOrchestration; } });
125
+ // Result Aggregation
126
+ var result_aggregator_1 = require("./result-aggregator");
127
+ Object.defineProperty(exports, "scoreAssessment", { enumerable: true, get: function () { return result_aggregator_1.scoreAssessment; } });
128
+ Object.defineProperty(exports, "scoreIncident", { enumerable: true, get: function () { return result_aggregator_1.scoreIncident; } });
129
+ Object.defineProperty(exports, "scorePattern", { enumerable: true, get: function () { return result_aggregator_1.scorePattern; } });
130
+ Object.defineProperty(exports, "aggregateResults", { enumerable: true, get: function () { return result_aggregator_1.aggregateResults; } });
131
+ Object.defineProperty(exports, "formatAggregatedResults", { enumerable: true, get: function () { return result_aggregator_1.formatAggregatedResults; } });
132
+ Object.defineProperty(exports, "createQuickSummary", { enumerable: true, get: function () { return result_aggregator_1.createQuickSummary; } });
133
+ // Context Engine (v1.6.0)
134
+ var context_engine_1 = require("./context-engine");
135
+ Object.defineProperty(exports, "generateDynamicSection", { enumerable: true, get: function () { return context_engine_1.generateDynamicSection; } });
136
+ Object.defineProperty(exports, "generateSessionContext", { enumerable: true, get: function () { return context_engine_1.generateSessionContext; } });
137
+ Object.defineProperty(exports, "checkFileContext", { enumerable: true, get: function () { return context_engine_1.checkFileContext; } });
138
+ // Trace Ingestion (v1.4.0)
139
+ __exportStar(require("./traces"), exports);
140
+ // Internal Logger (v1.8.0)
141
+ var logger_1 = require("./logger");
142
+ Object.defineProperty(exports, "traced", { enumerable: true, get: function () { return logger_1.traced; } });
143
+ Object.defineProperty(exports, "log", { enumerable: true, get: function () { return logger_1.log; } });
144
+ Object.defineProperty(exports, "readLogs", { enumerable: true, get: function () { return logger_1.readLogs; } });
145
+ Object.defineProperty(exports, "configureLogger", { enumerable: true, get: function () { return logger_1.configureLogger; } });
146
+ // Log Reader (v1.8.0)
147
+ var log_reader_1 = require("./log-reader");
148
+ Object.defineProperty(exports, "readProjectLogs", { enumerable: true, get: function () { return log_reader_1.readProjectLogs; } });
149
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Interactive Verification System
3
+ *
4
+ * Guides users through completing incident details with interactive prompts.
5
+ * Improves incident quality by ensuring all critical fields are filled.
6
+ */
7
+ import type { Incident } from './types';
8
+ /**
9
+ * Build a complete incident using interactive prompts
10
+ */
11
+ export declare function buildIncidentInteractive(baseIncident: Partial<Incident>): Promise<Incident>;
12
+ /**
13
+ * Calculate overall quality score for an incident
14
+ *
15
+ * Scoring rubric:
16
+ * - Root cause analysis: 30% (description length + confidence)
17
+ * - Fix details: 30% (approach + changes documented)
18
+ * - Verification: 20% (verification status)
19
+ * - Documentation: 20% (tags + prevention advice)
20
+ */
21
+ export declare function calculateQualityScore(incident: Incident | Partial<Incident>): number;
22
+ /**
23
+ * Generate quality feedback text
24
+ */
25
+ export declare function generateQualityFeedback(incident: Incident): string;
26
+ //# sourceMappingURL=interactive-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-verifier.d.ts","sourceRoot":"","sources":["../../src/interactive-verifier.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAA4D,MAAM,SAAS,CAAC;AAElG;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,GAC9B,OAAO,CAAC,QAAQ,CAAC,CAyDnB;AAkSD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAiDpF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAkDlE"}
@@ -0,0 +1,435 @@
1
+ "use strict";
2
+ // SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com>
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ /**
5
+ * Interactive Verification System
6
+ *
7
+ * Guides users through completing incident details with interactive prompts.
8
+ * Improves incident quality by ensuring all critical fields are filled.
9
+ */
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.buildIncidentInteractive = buildIncidentInteractive;
15
+ exports.calculateQualityScore = calculateQualityScore;
16
+ exports.generateQualityFeedback = generateQualityFeedback;
17
+ const prompts_1 = __importDefault(require("prompts"));
18
+ /**
19
+ * Build a complete incident using interactive prompts
20
+ */
21
+ async function buildIncidentInteractive(baseIncident) {
22
+ console.log('\n📝 Interactive Incident Builder');
23
+ console.log('Let\'s ensure this incident is complete and useful for future reference.\n');
24
+ // Initialize with base incident
25
+ let incident = { ...baseIncident };
26
+ // 1. Check and improve root cause
27
+ incident.root_cause = await ensureRootCauseQuality(incident.root_cause);
28
+ // 2. Ensure fix details are complete
29
+ incident.fix = await ensureFixDetails(incident.fix);
30
+ // 3. Verification status
31
+ incident.verification = await ensureVerification(incident.verification);
32
+ // 4. Suggest and collect tags
33
+ incident.tags = await ensureTags(incident.symptom, incident.tags || []);
34
+ // 5. Ensure files changed are documented
35
+ if (!incident.files_changed || incident.files_changed.length === 0) {
36
+ incident.files_changed = await collectFilesChanged();
37
+ }
38
+ // 6. Calculate quality score
39
+ const qualityScore = calculateQualityScore(incident);
40
+ // Update completeness
41
+ incident.completeness = {
42
+ symptom: !!incident.symptom && incident.symptom.length >= 20,
43
+ root_cause: !!incident.root_cause?.description && incident.root_cause.description.length >= 50,
44
+ fix: !!incident.fix?.approach && (incident.fix.changes?.length || 0) > 0,
45
+ verification: incident.verification?.status === 'verified',
46
+ quality_score: qualityScore
47
+ };
48
+ // 7. Show final quality report
49
+ console.log('\n📊 Quality Report:');
50
+ console.log(` Overall Score: ${(qualityScore * 100).toFixed(0)}%`);
51
+ console.log(` Root Cause: ${incident.completeness.root_cause ? '✅' : '⚠️'}`);
52
+ console.log(` Fix Details: ${incident.completeness.fix ? '✅' : '⚠️'}`);
53
+ console.log(` Verification: ${incident.completeness.verification ? '✅' : '⚠️'}`);
54
+ console.log(` Tags: ${incident.tags.length >= 3 ? '✅' : '⚠️'} (${incident.tags.length})`);
55
+ // 8. Confirm storage
56
+ const { confirm } = await (0, prompts_1.default)({
57
+ type: 'confirm',
58
+ name: 'confirm',
59
+ message: 'Store this incident?',
60
+ initial: true
61
+ });
62
+ if (!confirm) {
63
+ throw new Error('Incident storage cancelled by user');
64
+ }
65
+ return incident;
66
+ }
67
+ /**
68
+ * Ensure root cause has sufficient detail (min 50 characters)
69
+ */
70
+ async function ensureRootCauseQuality(rootCause) {
71
+ if (!rootCause) {
72
+ const { description } = await (0, prompts_1.default)({
73
+ type: 'text',
74
+ name: 'description',
75
+ message: 'What was the root cause? (min 50 chars)',
76
+ validate: (value) => value.length >= 50 || 'Please provide at least 50 characters'
77
+ });
78
+ return {
79
+ description,
80
+ category: 'unknown',
81
+ confidence: 0.5
82
+ };
83
+ }
84
+ // Check if description is too short
85
+ if (!rootCause.description || rootCause.description.length < 50) {
86
+ console.log(`\n⚠️ Root cause description is too brief (${rootCause.description?.length || 0} chars, need 50+)`);
87
+ const { description } = await (0, prompts_1.default)({
88
+ type: 'text',
89
+ name: 'description',
90
+ message: 'Please provide a more detailed root cause explanation:',
91
+ initial: rootCause.description || '',
92
+ validate: (value) => value.length >= 50 || 'Please provide at least 50 characters'
93
+ });
94
+ rootCause.description = description;
95
+ }
96
+ // Ensure confidence is set
97
+ if (rootCause.confidence === undefined || rootCause.confidence === 0) {
98
+ const { confidence } = await (0, prompts_1.default)({
99
+ type: 'number',
100
+ name: 'confidence',
101
+ message: 'How confident are you in this root cause? (0-1)',
102
+ initial: 0.8,
103
+ min: 0,
104
+ max: 1,
105
+ float: true
106
+ });
107
+ rootCause.confidence = confidence;
108
+ }
109
+ // Ensure category is set
110
+ if (!rootCause.category || rootCause.category === 'unknown') {
111
+ const { category } = await (0, prompts_1.default)({
112
+ type: 'select',
113
+ name: 'category',
114
+ message: 'What category best describes this issue?',
115
+ choices: [
116
+ { title: 'Logic Error', value: 'logic' },
117
+ { title: 'Configuration', value: 'config' },
118
+ { title: 'API/Integration', value: 'api' },
119
+ { title: 'Database', value: 'database' },
120
+ { title: 'Dependency', value: 'dependency' },
121
+ { title: 'React/Hooks', value: 'react-hooks' },
122
+ { title: 'TypeScript/Types', value: 'typescript' },
123
+ { title: 'Performance', value: 'performance' },
124
+ { title: 'Security', value: 'security' },
125
+ { title: 'Other', value: 'other' }
126
+ ]
127
+ });
128
+ rootCause.category = category;
129
+ }
130
+ return rootCause;
131
+ }
132
+ /**
133
+ * Ensure fix details are documented
134
+ */
135
+ async function ensureFixDetails(fix) {
136
+ if (!fix || !fix.approach) {
137
+ const { approach } = await (0, prompts_1.default)({
138
+ type: 'text',
139
+ name: 'approach',
140
+ message: 'How did you fix this issue? (high-level approach)',
141
+ validate: (value) => value.length >= 20 || 'Please provide at least 20 characters'
142
+ });
143
+ return {
144
+ approach,
145
+ changes: []
146
+ };
147
+ }
148
+ // Ensure changes are documented
149
+ if (!fix.changes || fix.changes.length === 0) {
150
+ const { hasChanges } = await (0, prompts_1.default)({
151
+ type: 'confirm',
152
+ name: 'hasChanges',
153
+ message: 'Would you like to document the specific file changes?',
154
+ initial: true
155
+ });
156
+ if (hasChanges) {
157
+ fix.changes = [];
158
+ let addMore = true;
159
+ while (addMore) {
160
+ const change = await (0, prompts_1.default)([
161
+ {
162
+ type: 'text',
163
+ name: 'file',
164
+ message: 'File path:'
165
+ },
166
+ {
167
+ type: 'number',
168
+ name: 'lines_changed',
169
+ message: 'Approximate lines changed:',
170
+ initial: 5
171
+ },
172
+ {
173
+ type: 'select',
174
+ name: 'change_type',
175
+ message: 'Change type:',
176
+ choices: [
177
+ { title: 'Modified', value: 'modify' },
178
+ { title: 'Added', value: 'add' },
179
+ { title: 'Deleted', value: 'delete' },
180
+ { title: 'Refactored', value: 'refactor' }
181
+ ]
182
+ },
183
+ {
184
+ type: 'text',
185
+ name: 'summary',
186
+ message: 'What changed:',
187
+ validate: (value) => value.length > 0 || 'Summary required'
188
+ }
189
+ ]);
190
+ fix.changes.push(change);
191
+ const { more } = await (0, prompts_1.default)({
192
+ type: 'confirm',
193
+ name: 'more',
194
+ message: 'Add another file change?',
195
+ initial: false
196
+ });
197
+ addMore = more;
198
+ }
199
+ }
200
+ }
201
+ return fix;
202
+ }
203
+ /**
204
+ * Ensure verification status is documented
205
+ */
206
+ async function ensureVerification(verification) {
207
+ if (!verification) {
208
+ verification = {
209
+ status: 'unverified',
210
+ regression_tests_passed: false,
211
+ user_journey_tested: false,
212
+ success_criteria_met: false
213
+ };
214
+ }
215
+ const { status } = await (0, prompts_1.default)({
216
+ type: 'select',
217
+ name: 'status',
218
+ message: 'Has this fix been verified?',
219
+ choices: [
220
+ { title: 'Fully Verified', value: 'verified', description: 'Tested and confirmed working' },
221
+ { title: 'Partially Verified', value: 'partial', description: 'Some testing done' },
222
+ { title: 'Not Verified', value: 'unverified', description: 'No testing yet' }
223
+ ],
224
+ initial: verification.status === 'verified' ? 0 : verification.status === 'partial' ? 1 : 2
225
+ });
226
+ verification.status = status;
227
+ // If verified, ask about specific verification methods
228
+ if (status === 'verified' || status === 'partial') {
229
+ const verificationDetails = await (0, prompts_1.default)([
230
+ {
231
+ type: 'confirm',
232
+ name: 'regression_tests_passed',
233
+ message: 'Did existing tests pass?',
234
+ initial: verification.regression_tests_passed
235
+ },
236
+ {
237
+ type: 'confirm',
238
+ name: 'user_journey_tested',
239
+ message: 'Did you test the user journey?',
240
+ initial: verification.user_journey_tested
241
+ },
242
+ {
243
+ type: 'confirm',
244
+ name: 'success_criteria_met',
245
+ message: 'Did the fix meet success criteria?',
246
+ initial: verification.success_criteria_met
247
+ }
248
+ ]);
249
+ verification = { ...verification, ...verificationDetails };
250
+ }
251
+ return verification;
252
+ }
253
+ /**
254
+ * Suggest and collect tags based on symptom analysis
255
+ */
256
+ async function ensureTags(symptom, existingTags) {
257
+ // Suggest tags based on symptom keywords
258
+ const suggestedTags = suggestTagsFromSymptom(symptom);
259
+ // Combine with existing tags (deduplicate)
260
+ const allTags = [...new Set([...existingTags, ...suggestedTags])];
261
+ console.log(`\n🏷️ Suggested tags based on symptom: ${suggestedTags.join(', ')}`);
262
+ const { tags } = await (0, prompts_1.default)({
263
+ type: 'list',
264
+ name: 'tags',
265
+ message: 'Tags (comma-separated, min 3 recommended):',
266
+ initial: allTags.join(', '),
267
+ separator: ',',
268
+ format: (val) => val.split(',').map((t) => t.trim()).filter(Boolean)
269
+ });
270
+ return tags || allTags;
271
+ }
272
+ /**
273
+ * Suggest tags based on symptom text analysis
274
+ */
275
+ function suggestTagsFromSymptom(symptom) {
276
+ const tags = [];
277
+ const lower = symptom.toLowerCase();
278
+ // Technology keywords
279
+ if (lower.includes('react') || lower.includes('component') || lower.includes('hook'))
280
+ tags.push('react');
281
+ if (lower.includes('typescript') || lower.includes('type error'))
282
+ tags.push('typescript');
283
+ if (lower.includes('api') || lower.includes('endpoint'))
284
+ tags.push('api');
285
+ if (lower.includes('database') || lower.includes('query') || lower.includes('sql'))
286
+ tags.push('database');
287
+ if (lower.includes('cache') || lower.includes('caching'))
288
+ tags.push('caching');
289
+ if (lower.includes('auth') || lower.includes('authentication'))
290
+ tags.push('auth');
291
+ // Issue type keywords
292
+ if (lower.includes('error') || lower.includes('crash') || lower.includes('fail'))
293
+ tags.push('error');
294
+ if (lower.includes('slow') || lower.includes('performance') || lower.includes('timeout'))
295
+ tags.push('performance');
296
+ if (lower.includes('infinite loop') || lower.includes('hang'))
297
+ tags.push('infinite-loop');
298
+ if (lower.includes('memory') || lower.includes('leak'))
299
+ tags.push('memory');
300
+ if (lower.includes('security') || lower.includes('vulnerability'))
301
+ tags.push('security');
302
+ return tags;
303
+ }
304
+ /**
305
+ * Collect files that were changed
306
+ */
307
+ async function collectFilesChanged() {
308
+ const { hasFiles } = await (0, prompts_1.default)({
309
+ type: 'confirm',
310
+ name: 'hasFiles',
311
+ message: 'Would you like to document which files were changed?',
312
+ initial: true
313
+ });
314
+ if (!hasFiles)
315
+ return [];
316
+ const { files } = await (0, prompts_1.default)({
317
+ type: 'list',
318
+ name: 'files',
319
+ message: 'File paths (comma-separated):',
320
+ separator: ',',
321
+ format: (val) => val.split(',').map((f) => f.trim()).filter(Boolean)
322
+ });
323
+ return files || [];
324
+ }
325
+ /**
326
+ * Calculate overall quality score for an incident
327
+ *
328
+ * Scoring rubric:
329
+ * - Root cause analysis: 30% (description length + confidence)
330
+ * - Fix details: 30% (approach + changes documented)
331
+ * - Verification: 20% (verification status)
332
+ * - Documentation: 20% (tags + prevention advice)
333
+ */
334
+ function calculateQualityScore(incident) {
335
+ let score = 0.0;
336
+ // Root cause analysis (0.3 max)
337
+ if (incident.root_cause) {
338
+ // Description quality (0.15 max)
339
+ const descLength = incident.root_cause.description?.length || 0;
340
+ if (descLength >= 50)
341
+ score += 0.10;
342
+ if (descLength >= 100)
343
+ score += 0.05;
344
+ // Confidence (0.15 max)
345
+ const confidence = incident.root_cause.confidence || 0;
346
+ if (confidence >= 0.7)
347
+ score += 0.10;
348
+ if (confidence >= 0.9)
349
+ score += 0.05;
350
+ }
351
+ // Fix details (0.3 max)
352
+ if (incident.fix) {
353
+ // Approach documented (0.15 max)
354
+ if (incident.fix.approach && incident.fix.approach.length >= 20) {
355
+ score += 0.15;
356
+ }
357
+ // Changes documented (0.15 max)
358
+ const changesCount = incident.fix.changes?.length || 0;
359
+ if (changesCount >= 1)
360
+ score += 0.10;
361
+ if (changesCount >= 3)
362
+ score += 0.05;
363
+ }
364
+ // Verification (0.2 max)
365
+ if (incident.verification) {
366
+ if (incident.verification.status === 'verified')
367
+ score += 0.15;
368
+ else if (incident.verification.status === 'partial')
369
+ score += 0.08;
370
+ // Additional verification details (0.05 max)
371
+ if (incident.verification.regression_tests_passed)
372
+ score += 0.025;
373
+ if (incident.verification.user_journey_tested)
374
+ score += 0.025;
375
+ }
376
+ // Documentation (0.2 max)
377
+ const tagsCount = incident.tags?.length || 0;
378
+ if (tagsCount >= 2)
379
+ score += 0.05;
380
+ if (tagsCount >= 3)
381
+ score += 0.05;
382
+ if (tagsCount >= 5)
383
+ score += 0.05;
384
+ // Prevention advice
385
+ if (incident.prevention)
386
+ score += 0.05;
387
+ return Math.min(score, 1.0); // Cap at 1.0
388
+ }
389
+ /**
390
+ * Generate quality feedback text
391
+ */
392
+ function generateQualityFeedback(incident) {
393
+ const score = calculateQualityScore(incident);
394
+ const percentage = (score * 100).toFixed(0);
395
+ const feedback = [];
396
+ feedback.push(`Overall Quality: ${percentage}%`);
397
+ if (score >= 0.9) {
398
+ feedback.push('✅ Excellent - This incident is well documented and highly reusable.');
399
+ }
400
+ else if (score >= 0.75) {
401
+ feedback.push('✅ Good - This incident has sufficient detail for future reference.');
402
+ }
403
+ else if (score >= 0.5) {
404
+ feedback.push('⚠️ Fair - Consider adding more details to improve reusability.');
405
+ }
406
+ else {
407
+ feedback.push('❌ Poor - This incident needs more detail to be useful.');
408
+ }
409
+ // Specific improvement suggestions
410
+ const suggestions = [];
411
+ if (!incident.root_cause?.description || incident.root_cause.description.length < 50) {
412
+ suggestions.push('- Add more detail to root cause analysis');
413
+ }
414
+ if ((incident.root_cause?.confidence || 0) < 0.7) {
415
+ suggestions.push('- Increase confidence score if diagnosis is clear');
416
+ }
417
+ if (!incident.fix?.approach || incident.fix.approach.length < 20) {
418
+ suggestions.push('- Document the fix approach more thoroughly');
419
+ }
420
+ if ((incident.fix?.changes?.length || 0) === 0) {
421
+ suggestions.push('- Document specific file changes');
422
+ }
423
+ if (incident.verification?.status !== 'verified') {
424
+ suggestions.push('- Verify the fix works before storing');
425
+ }
426
+ if ((incident.tags?.length || 0) < 3) {
427
+ suggestions.push('- Add more tags for better categorization');
428
+ }
429
+ if (suggestions.length > 0) {
430
+ feedback.push('\nSuggestions for improvement:');
431
+ feedback.push(...suggestions);
432
+ }
433
+ return feedback.join('\n');
434
+ }
435
+ //# sourceMappingURL=interactive-verifier.js.map