grimoire-framework 1.0.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 (1174) hide show
  1. package/.claude/CLAUDE.md +318 -0
  2. package/.claude/hooks/README.md +170 -0
  3. package/.claude/hooks/enforce-architecture-first.py +198 -0
  4. package/.claude/hooks/install-hooks.sh +43 -0
  5. package/.claude/hooks/mind-clone-governance.py +192 -0
  6. package/.claude/hooks/pre-commit-version-check.sh +157 -0
  7. package/.claude/hooks/precompact-session-digest.js +47 -0
  8. package/.claude/hooks/read-protection.py +153 -0
  9. package/.claude/hooks/slug-validation.py +176 -0
  10. package/.claude/hooks/sql-governance.py +182 -0
  11. package/.claude/hooks/synapse-engine.js +77 -0
  12. package/.claude/hooks/write-path-validation.py +196 -0
  13. package/.claude/rules/mcp-usage.md +177 -0
  14. package/.grimoire/cli/commands/config/index.js +609 -0
  15. package/.grimoire/cli/commands/generate/index.js +222 -0
  16. package/.grimoire/cli/commands/manifest/index.js +47 -0
  17. package/.grimoire/cli/commands/manifest/regenerate.js +97 -0
  18. package/.grimoire/cli/commands/manifest/validate.js +66 -0
  19. package/.grimoire/cli/commands/mcp/add.js +235 -0
  20. package/.grimoire/cli/commands/mcp/index.js +77 -0
  21. package/.grimoire/cli/commands/mcp/link.js +218 -0
  22. package/.grimoire/cli/commands/mcp/setup.js +165 -0
  23. package/.grimoire/cli/commands/mcp/status.js +184 -0
  24. package/.grimoire/cli/commands/metrics/cleanup.js +91 -0
  25. package/.grimoire/cli/commands/metrics/index.js +66 -0
  26. package/.grimoire/cli/commands/metrics/record.js +154 -0
  27. package/.grimoire/cli/commands/metrics/seed.js +127 -0
  28. package/.grimoire/cli/commands/metrics/show.js +209 -0
  29. package/.grimoire/cli/commands/migrate/analyze.js +355 -0
  30. package/.grimoire/cli/commands/migrate/backup.js +354 -0
  31. package/.grimoire/cli/commands/migrate/execute.js +294 -0
  32. package/.grimoire/cli/commands/migrate/index.js +443 -0
  33. package/.grimoire/cli/commands/migrate/rollback.js +325 -0
  34. package/.grimoire/cli/commands/migrate/update-imports.js +398 -0
  35. package/.grimoire/cli/commands/migrate/validate.js +454 -0
  36. package/.grimoire/cli/commands/pro/index.js +705 -0
  37. package/.grimoire/cli/commands/qa/index.js +57 -0
  38. package/.grimoire/cli/commands/qa/run.js +163 -0
  39. package/.grimoire/cli/commands/qa/status.js +195 -0
  40. package/.grimoire/cli/commands/validate/index.js +431 -0
  41. package/.grimoire/cli/commands/workers/formatters/info-formatter.js +275 -0
  42. package/.grimoire/cli/commands/workers/formatters/list-table.js +265 -0
  43. package/.grimoire/cli/commands/workers/formatters/list-tree.js +160 -0
  44. package/.grimoire/cli/commands/workers/index.js +57 -0
  45. package/.grimoire/cli/commands/workers/info.js +195 -0
  46. package/.grimoire/cli/commands/workers/list.js +215 -0
  47. package/.grimoire/cli/commands/workers/search-filters.js +185 -0
  48. package/.grimoire/cli/commands/workers/search-keyword.js +310 -0
  49. package/.grimoire/cli/commands/workers/search-semantic.js +294 -0
  50. package/.grimoire/cli/commands/workers/search.js +155 -0
  51. package/.grimoire/cli/commands/workers/utils/pagination.js +102 -0
  52. package/.grimoire/cli/index.js +150 -0
  53. package/.grimoire/cli/utils/output-formatter-cli.js +233 -0
  54. package/.grimoire/cli/utils/score-calculator.js +221 -0
  55. package/.grimoire/constitution.md +172 -0
  56. package/.grimoire/core/README.md +231 -0
  57. package/.grimoire/core/code-intel/code-intel-client.js +280 -0
  58. package/.grimoire/core/code-intel/code-intel-enricher.js +160 -0
  59. package/.grimoire/core/code-intel/index.js +137 -0
  60. package/.grimoire/core/code-intel/providers/code-graph-provider.js +201 -0
  61. package/.grimoire/core/code-intel/providers/provider-interface.js +108 -0
  62. package/.grimoire/core/config/config-cache.js +233 -0
  63. package/.grimoire/core/config/config-loader.js +281 -0
  64. package/.grimoire/core/config/config-resolver.js +609 -0
  65. package/.grimoire/core/config/env-interpolator.js +122 -0
  66. package/.grimoire/core/config/merge-utils.js +101 -0
  67. package/.grimoire/core/config/migrate-config.js +293 -0
  68. package/.grimoire/core/config/schemas/framework-config.schema.json +19 -0
  69. package/.grimoire/core/config/schemas/local-config.schema.json +20 -0
  70. package/.grimoire/core/config/schemas/project-config.schema.json +32 -0
  71. package/.grimoire/core/config/schemas/user-config.schema.json +33 -0
  72. package/.grimoire/core/config/templates/user-config.yaml +24 -0
  73. package/.grimoire/core/docs/SHARD-TRANSLATION-GUIDE.md +337 -0
  74. package/.grimoire/core/docs/component-creation-guide.md +459 -0
  75. package/.grimoire/core/docs/session-update-pattern.md +316 -0
  76. package/.grimoire/core/docs/template-syntax.md +267 -0
  77. package/.grimoire/core/docs/troubleshooting-guide.md +626 -0
  78. package/.grimoire/core/elicitation/agent-elicitation.js +272 -0
  79. package/.grimoire/core/elicitation/elicitation-engine.js +486 -0
  80. package/.grimoire/core/elicitation/session-manager.js +322 -0
  81. package/.grimoire/core/elicitation/task-elicitation.js +281 -0
  82. package/.grimoire/core/elicitation/workflow-elicitation.js +349 -0
  83. package/.grimoire/core/events/dashboard-emitter.js +369 -0
  84. package/.grimoire/core/events/index.js +17 -0
  85. package/.grimoire/core/events/types.js +52 -0
  86. package/.grimoire/core/execution/autonomous-build-loop.js +1068 -0
  87. package/.grimoire/core/execution/build-orchestrator.js +1055 -0
  88. package/.grimoire/core/execution/build-state-manager.js +1530 -0
  89. package/.grimoire/core/execution/context-injector.js +537 -0
  90. package/.grimoire/core/execution/parallel-executor.js +292 -0
  91. package/.grimoire/core/execution/parallel-monitor.js +429 -0
  92. package/.grimoire/core/execution/rate-limit-manager.js +314 -0
  93. package/.grimoire/core/execution/result-aggregator.js +486 -0
  94. package/.grimoire/core/execution/semantic-merge-engine.js +1736 -0
  95. package/.grimoire/core/execution/subagent-dispatcher.js +848 -0
  96. package/.grimoire/core/execution/wave-executor.js +397 -0
  97. package/.grimoire/core/health-check/base-check.js +224 -0
  98. package/.grimoire/core/health-check/check-registry.js +253 -0
  99. package/.grimoire/core/health-check/checks/deployment/build-config.js +111 -0
  100. package/.grimoire/core/health-check/checks/deployment/ci-config.js +125 -0
  101. package/.grimoire/core/health-check/checks/deployment/deployment-readiness.js +152 -0
  102. package/.grimoire/core/health-check/checks/deployment/docker-config.js +122 -0
  103. package/.grimoire/core/health-check/checks/deployment/env-file.js +111 -0
  104. package/.grimoire/core/health-check/checks/deployment/index.js +29 -0
  105. package/.grimoire/core/health-check/checks/index.js +56 -0
  106. package/.grimoire/core/health-check/checks/local/disk-space.js +214 -0
  107. package/.grimoire/core/health-check/checks/local/environment-vars.js +136 -0
  108. package/.grimoire/core/health-check/checks/local/git-install.js +158 -0
  109. package/.grimoire/core/health-check/checks/local/ide-detection.js +148 -0
  110. package/.grimoire/core/health-check/checks/local/index.js +35 -0
  111. package/.grimoire/core/health-check/checks/local/memory.js +138 -0
  112. package/.grimoire/core/health-check/checks/local/network.js +170 -0
  113. package/.grimoire/core/health-check/checks/local/npm-install.js +149 -0
  114. package/.grimoire/core/health-check/checks/local/shell-environment.js +120 -0
  115. package/.grimoire/core/health-check/checks/project/agent-config.js +167 -0
  116. package/.grimoire/core/health-check/checks/project/dependencies.js +150 -0
  117. package/.grimoire/core/health-check/checks/project/framework-config.js +133 -0
  118. package/.grimoire/core/health-check/checks/project/grimoire-directory.js +143 -0
  119. package/.grimoire/core/health-check/checks/project/index.js +35 -0
  120. package/.grimoire/core/health-check/checks/project/node-version.js +163 -0
  121. package/.grimoire/core/health-check/checks/project/package-json.js +107 -0
  122. package/.grimoire/core/health-check/checks/project/task-definitions.js +192 -0
  123. package/.grimoire/core/health-check/checks/project/workflow-dependencies.js +214 -0
  124. package/.grimoire/core/health-check/checks/repository/branch-protection.js +107 -0
  125. package/.grimoire/core/health-check/checks/repository/commit-history.js +144 -0
  126. package/.grimoire/core/health-check/checks/repository/conflicts.js +152 -0
  127. package/.grimoire/core/health-check/checks/repository/git-repo.js +159 -0
  128. package/.grimoire/core/health-check/checks/repository/git-status.js +149 -0
  129. package/.grimoire/core/health-check/checks/repository/gitignore.js +194 -0
  130. package/.grimoire/core/health-check/checks/repository/index.js +35 -0
  131. package/.grimoire/core/health-check/checks/repository/large-files.js +183 -0
  132. package/.grimoire/core/health-check/checks/repository/lockfile-integrity.js +144 -0
  133. package/.grimoire/core/health-check/checks/services/api-endpoints.js +168 -0
  134. package/.grimoire/core/health-check/checks/services/claude-code.js +139 -0
  135. package/.grimoire/core/health-check/checks/services/gemini-cli.js +241 -0
  136. package/.grimoire/core/health-check/checks/services/github-cli.js +117 -0
  137. package/.grimoire/core/health-check/checks/services/index.js +29 -0
  138. package/.grimoire/core/health-check/checks/services/mcp-integration.js +125 -0
  139. package/.grimoire/core/health-check/engine.js +407 -0
  140. package/.grimoire/core/health-check/healers/backup-manager.js +340 -0
  141. package/.grimoire/core/health-check/healers/index.js +330 -0
  142. package/.grimoire/core/health-check/index.js +370 -0
  143. package/.grimoire/core/health-check/reporters/console.js +331 -0
  144. package/.grimoire/core/health-check/reporters/index.js +117 -0
  145. package/.grimoire/core/health-check/reporters/json.js +301 -0
  146. package/.grimoire/core/health-check/reporters/markdown.js +323 -0
  147. package/.grimoire/core/ideation/ideation-engine.js +834 -0
  148. package/.grimoire/core/ids/README.md +123 -0
  149. package/.grimoire/core/ids/circuit-breaker.js +156 -0
  150. package/.grimoire/core/ids/framework-governor.js +567 -0
  151. package/.grimoire/core/ids/gates/g1-epic-creation.js +101 -0
  152. package/.grimoire/core/ids/gates/g2-story-creation.js +133 -0
  153. package/.grimoire/core/ids/gates/g3-story-validation.js +166 -0
  154. package/.grimoire/core/ids/gates/g4-dev-context.js +155 -0
  155. package/.grimoire/core/ids/incremental-decision-engine.js +651 -0
  156. package/.grimoire/core/ids/index.js +157 -0
  157. package/.grimoire/core/ids/registry-healer.js +868 -0
  158. package/.grimoire/core/ids/registry-loader.js +281 -0
  159. package/.grimoire/core/ids/registry-updater.js +703 -0
  160. package/.grimoire/core/ids/verification-gate.js +306 -0
  161. package/.grimoire/core/index.esm.js +44 -0
  162. package/.grimoire/core/index.js +90 -0
  163. package/.grimoire/core/manifest/manifest-generator.js +388 -0
  164. package/.grimoire/core/manifest/manifest-validator.js +431 -0
  165. package/.grimoire/core/mcp/config-migrator.js +341 -0
  166. package/.grimoire/core/mcp/global-config-manager.js +370 -0
  167. package/.grimoire/core/mcp/index.js +34 -0
  168. package/.grimoire/core/mcp/os-detector.js +189 -0
  169. package/.grimoire/core/mcp/symlink-manager.js +415 -0
  170. package/.grimoire/core/memory/__tests__/active-modules.verify.js +254 -0
  171. package/.grimoire/core/memory/gotchas-memory.js +1154 -0
  172. package/.grimoire/core/migration/migration-config.yaml +85 -0
  173. package/.grimoire/core/migration/module-mapping.yaml +91 -0
  174. package/.grimoire/core/orchestration/agent-invoker.js +612 -0
  175. package/.grimoire/core/orchestration/bob-orchestrator.js +1032 -0
  176. package/.grimoire/core/orchestration/bob-status-writer.js +482 -0
  177. package/.grimoire/core/orchestration/bob-surface-criteria.yaml +272 -0
  178. package/.grimoire/core/orchestration/brownfield-handler.js +741 -0
  179. package/.grimoire/core/orchestration/checklist-runner.js +328 -0
  180. package/.grimoire/core/orchestration/cli-commands.js +581 -0
  181. package/.grimoire/core/orchestration/condition-evaluator.js +379 -0
  182. package/.grimoire/core/orchestration/context-manager.js +616 -0
  183. package/.grimoire/core/orchestration/dashboard-integration.js +520 -0
  184. package/.grimoire/core/orchestration/data-lifecycle-manager.js +357 -0
  185. package/.grimoire/core/orchestration/epic-context-accumulator.js +396 -0
  186. package/.grimoire/core/orchestration/execution-profile-resolver.js +107 -0
  187. package/.grimoire/core/orchestration/executor-assignment.js +413 -0
  188. package/.grimoire/core/orchestration/executors/epic-3-executor.js +223 -0
  189. package/.grimoire/core/orchestration/executors/epic-4-executor.js +269 -0
  190. package/.grimoire/core/orchestration/executors/epic-5-executor.js +329 -0
  191. package/.grimoire/core/orchestration/executors/epic-6-executor.js +265 -0
  192. package/.grimoire/core/orchestration/executors/epic-executor.js +237 -0
  193. package/.grimoire/core/orchestration/executors/index.js +86 -0
  194. package/.grimoire/core/orchestration/gate-evaluator.js +495 -0
  195. package/.grimoire/core/orchestration/gemini-model-selector.js +161 -0
  196. package/.grimoire/core/orchestration/greenfield-handler.js +890 -0
  197. package/.grimoire/core/orchestration/index.js +323 -0
  198. package/.grimoire/core/orchestration/lock-manager.js +327 -0
  199. package/.grimoire/core/orchestration/master-orchestrator.js +1544 -0
  200. package/.grimoire/core/orchestration/message-formatter.js +279 -0
  201. package/.grimoire/core/orchestration/parallel-executor.js +225 -0
  202. package/.grimoire/core/orchestration/recovery-handler.js +721 -0
  203. package/.grimoire/core/orchestration/session-state.js +876 -0
  204. package/.grimoire/core/orchestration/skill-dispatcher.js +364 -0
  205. package/.grimoire/core/orchestration/subagent-prompt-builder.js +370 -0
  206. package/.grimoire/core/orchestration/surface-checker.js +403 -0
  207. package/.grimoire/core/orchestration/task-complexity-classifier.js +123 -0
  208. package/.grimoire/core/orchestration/tech-stack-detector.js +599 -0
  209. package/.grimoire/core/orchestration/terminal-spawner.js +1044 -0
  210. package/.grimoire/core/orchestration/workflow-executor.js +1182 -0
  211. package/.grimoire/core/orchestration/workflow-orchestrator.js +907 -0
  212. package/.grimoire/core/permissions/__tests__/permission-mode.test.js +293 -0
  213. package/.grimoire/core/permissions/index.js +140 -0
  214. package/.grimoire/core/permissions/operation-guard.js +395 -0
  215. package/.grimoire/core/permissions/permission-mode.js +271 -0
  216. package/.grimoire/core/quality-gates/base-layer.js +134 -0
  217. package/.grimoire/core/quality-gates/checklist-generator.js +329 -0
  218. package/.grimoire/core/quality-gates/focus-area-recommender.js +361 -0
  219. package/.grimoire/core/quality-gates/human-review-orchestrator.js +530 -0
  220. package/.grimoire/core/quality-gates/layer1-precommit.js +336 -0
  221. package/.grimoire/core/quality-gates/layer2-pr-automation.js +331 -0
  222. package/.grimoire/core/quality-gates/layer3-human-review.js +350 -0
  223. package/.grimoire/core/quality-gates/notification-manager.js +551 -0
  224. package/.grimoire/core/quality-gates/quality-gate-config.yaml +87 -0
  225. package/.grimoire/core/quality-gates/quality-gate-manager.js +603 -0
  226. package/.grimoire/core/registry/README.md +181 -0
  227. package/.grimoire/core/registry/build-registry.js +454 -0
  228. package/.grimoire/core/registry/registry-loader.js +331 -0
  229. package/.grimoire/core/registry/registry-schema.json +168 -0
  230. package/.grimoire/core/registry/service-registry.json +6468 -0
  231. package/.grimoire/core/registry/validate-registry.js +341 -0
  232. package/.grimoire/core/session/context-detector.js +233 -0
  233. package/.grimoire/core/session/context-loader.js +443 -0
  234. package/.grimoire/core/synapse/context/context-builder.js +34 -0
  235. package/.grimoire/core/synapse/context/context-tracker.js +190 -0
  236. package/.grimoire/core/synapse/diagnostics/collectors/consistency-collector.js +168 -0
  237. package/.grimoire/core/synapse/diagnostics/collectors/hook-collector.js +129 -0
  238. package/.grimoire/core/synapse/diagnostics/collectors/manifest-collector.js +82 -0
  239. package/.grimoire/core/synapse/diagnostics/collectors/output-analyzer.js +134 -0
  240. package/.grimoire/core/synapse/diagnostics/collectors/pipeline-collector.js +75 -0
  241. package/.grimoire/core/synapse/diagnostics/collectors/quality-collector.js +252 -0
  242. package/.grimoire/core/synapse/diagnostics/collectors/relevance-matrix.js +174 -0
  243. package/.grimoire/core/synapse/diagnostics/collectors/safe-read-json.js +31 -0
  244. package/.grimoire/core/synapse/diagnostics/collectors/session-collector.js +102 -0
  245. package/.grimoire/core/synapse/diagnostics/collectors/timing-collector.js +126 -0
  246. package/.grimoire/core/synapse/diagnostics/collectors/uap-collector.js +83 -0
  247. package/.grimoire/core/synapse/diagnostics/report-formatter.js +485 -0
  248. package/.grimoire/core/synapse/diagnostics/synapse-diagnostics.js +95 -0
  249. package/.grimoire/core/synapse/domain/domain-loader.js +322 -0
  250. package/.grimoire/core/synapse/engine.js +380 -0
  251. package/.grimoire/core/synapse/layers/l0-constitution.js +80 -0
  252. package/.grimoire/core/synapse/layers/l1-global.js +102 -0
  253. package/.grimoire/core/synapse/layers/l2-agent.js +94 -0
  254. package/.grimoire/core/synapse/layers/l3-workflow.js +94 -0
  255. package/.grimoire/core/synapse/layers/l4-task.js +83 -0
  256. package/.grimoire/core/synapse/layers/l5-squad.js +244 -0
  257. package/.grimoire/core/synapse/layers/l6-keyword.js +154 -0
  258. package/.grimoire/core/synapse/layers/l7-star-command.js +169 -0
  259. package/.grimoire/core/synapse/layers/layer-processor.js +82 -0
  260. package/.grimoire/core/synapse/memory/memory-bridge.js +246 -0
  261. package/.grimoire/core/synapse/output/formatter.js +561 -0
  262. package/.grimoire/core/synapse/runtime/hook-runtime.js +61 -0
  263. package/.grimoire/core/synapse/scripts/generate-constitution.js +205 -0
  264. package/.grimoire/core/synapse/session/session-manager.js +403 -0
  265. package/.grimoire/core/synapse/utils/paths.js +57 -0
  266. package/.grimoire/core/synapse/utils/tokens.js +25 -0
  267. package/.grimoire/core/ui/index.js +43 -0
  268. package/.grimoire/core/ui/observability-panel.js +394 -0
  269. package/.grimoire/core/ui/panel-renderer.js +337 -0
  270. package/.grimoire/core/utils/output-formatter.js +299 -0
  271. package/.grimoire/core/utils/security-utils.js +336 -0
  272. package/.grimoire/core/utils/yaml-validator.js +416 -0
  273. package/.grimoire/core-config.yaml +357 -0
  274. package/.grimoire/data/agent-config-requirements.yaml +409 -0
  275. package/.grimoire/data/entity-registry.yaml +9219 -0
  276. package/.grimoire/data/grimoire-kb.md +918 -0
  277. package/.grimoire/data/learned-patterns.yaml +3 -0
  278. package/.grimoire/data/tech-presets/_template.md +259 -0
  279. package/.grimoire/data/tech-presets/nextjs-react.md +933 -0
  280. package/.grimoire/data/technical-preferences.md +85 -0
  281. package/.grimoire/data/workflow-patterns.yaml +836 -0
  282. package/.grimoire/data/workflow-state-schema.yaml +203 -0
  283. package/.grimoire/development/README.md +143 -0
  284. package/.grimoire/development/agent-teams/team-all.yaml +16 -0
  285. package/.grimoire/development/agent-teams/team-fullstack.yaml +19 -0
  286. package/.grimoire/development/agent-teams/team-ide-minimal.yaml +10 -0
  287. package/.grimoire/development/agent-teams/team-no-ui.yaml +14 -0
  288. package/.grimoire/development/agent-teams/team-qa-focused.yaml +155 -0
  289. package/.grimoire/development/agents/analyst.md +261 -0
  290. package/.grimoire/development/agents/architect.md +461 -0
  291. package/.grimoire/development/agents/caravaggio.md +31 -0
  292. package/.grimoire/development/agents/data-engineer.md +482 -0
  293. package/.grimoire/development/agents/dev.md +548 -0
  294. package/.grimoire/development/agents/devops.md +500 -0
  295. package/.grimoire/development/agents/frida.md +31 -0
  296. package/.grimoire/development/agents/grimoire-master.md +447 -0
  297. package/.grimoire/development/agents/picasso.md +31 -0
  298. package/.grimoire/development/agents/pm.md +365 -0
  299. package/.grimoire/development/agents/po.md +323 -0
  300. package/.grimoire/development/agents/qa.md +437 -0
  301. package/.grimoire/development/agents/salvador.md +31 -0
  302. package/.grimoire/development/agents/sm.md +275 -0
  303. package/.grimoire/development/agents/squad-creator.md +330 -0
  304. package/.grimoire/development/agents/tarsila.md +31 -0
  305. package/.grimoire/development/agents/ux-design-expert.md +482 -0
  306. package/.grimoire/development/agents/van-gogh.md +31 -0
  307. package/.grimoire/development/agents/warhol.md +31 -0
  308. package/.grimoire/development/checklists/agent-quality-gate.md +560 -0
  309. package/.grimoire/development/checklists/brownfield-compatibility-checklist.md +116 -0
  310. package/.grimoire/development/checklists/self-critique-checklist.md +274 -0
  311. package/.grimoire/development/data/decision-heuristics-framework.md +622 -0
  312. package/.grimoire/development/data/quality-dimensions-framework.md +427 -0
  313. package/.grimoire/development/data/tier-system-framework.md +476 -0
  314. package/.grimoire/development/scripts/activation-runtime.js +64 -0
  315. package/.grimoire/development/scripts/agent-assignment-resolver.js +231 -0
  316. package/.grimoire/development/scripts/agent-config-loader.js +628 -0
  317. package/.grimoire/development/scripts/agent-exit-hooks.js +97 -0
  318. package/.grimoire/development/scripts/apply-inline-greeting-all-agents.js +147 -0
  319. package/.grimoire/development/scripts/approval-workflow.js +643 -0
  320. package/.grimoire/development/scripts/audit-agent-config.js +382 -0
  321. package/.grimoire/development/scripts/backlog-manager.js +409 -0
  322. package/.grimoire/development/scripts/backup-manager.js +607 -0
  323. package/.grimoire/development/scripts/batch-update-agents-session-context.js +97 -0
  324. package/.grimoire/development/scripts/branch-manager.js +390 -0
  325. package/.grimoire/development/scripts/code-quality-improver.js +1312 -0
  326. package/.grimoire/development/scripts/commit-message-generator.js +850 -0
  327. package/.grimoire/development/scripts/conflict-resolver.js +675 -0
  328. package/.grimoire/development/scripts/decision-context.js +229 -0
  329. package/.grimoire/development/scripts/decision-log-generator.js +294 -0
  330. package/.grimoire/development/scripts/decision-log-indexer.js +285 -0
  331. package/.grimoire/development/scripts/decision-recorder.js +169 -0
  332. package/.grimoire/development/scripts/dependency-analyzer.js +639 -0
  333. package/.grimoire/development/scripts/dev-context-loader.js +298 -0
  334. package/.grimoire/development/scripts/diff-generator.js +352 -0
  335. package/.grimoire/development/scripts/elicitation-engine.js +385 -0
  336. package/.grimoire/development/scripts/elicitation-session-manager.js +300 -0
  337. package/.grimoire/development/scripts/generate-greeting.js +109 -0
  338. package/.grimoire/development/scripts/git-wrapper.js +462 -0
  339. package/.grimoire/development/scripts/greeting-builder.js +1406 -0
  340. package/.grimoire/development/scripts/greeting-config-cli.js +86 -0
  341. package/.grimoire/development/scripts/greeting-preference-manager.js +170 -0
  342. package/.grimoire/development/scripts/manifest-preview.js +245 -0
  343. package/.grimoire/development/scripts/metrics-tracker.js +776 -0
  344. package/.grimoire/development/scripts/migrate-task-to-v2.js +379 -0
  345. package/.grimoire/development/scripts/modification-validator.js +555 -0
  346. package/.grimoire/development/scripts/pattern-learner.js +1225 -0
  347. package/.grimoire/development/scripts/performance-analyzer.js +758 -0
  348. package/.grimoire/development/scripts/populate-entity-registry.js +281 -0
  349. package/.grimoire/development/scripts/refactoring-suggester.js +1139 -0
  350. package/.grimoire/development/scripts/rollback-handler.js +532 -0
  351. package/.grimoire/development/scripts/security-checker.js +359 -0
  352. package/.grimoire/development/scripts/skill-validator.js +343 -0
  353. package/.grimoire/development/scripts/squad/README.md +114 -0
  354. package/.grimoire/development/scripts/squad/index.js +124 -0
  355. package/.grimoire/development/scripts/squad/squad-analyzer.js +638 -0
  356. package/.grimoire/development/scripts/squad/squad-designer.js +1010 -0
  357. package/.grimoire/development/scripts/squad/squad-downloader.js +511 -0
  358. package/.grimoire/development/scripts/squad/squad-extender.js +872 -0
  359. package/.grimoire/development/scripts/squad/squad-generator.js +1406 -0
  360. package/.grimoire/development/scripts/squad/squad-loader.js +359 -0
  361. package/.grimoire/development/scripts/squad/squad-migrator.js +628 -0
  362. package/.grimoire/development/scripts/squad/squad-publisher.js +630 -0
  363. package/.grimoire/development/scripts/squad/squad-validator.js +857 -0
  364. package/.grimoire/development/scripts/story-index-generator.js +339 -0
  365. package/.grimoire/development/scripts/story-manager.js +375 -0
  366. package/.grimoire/development/scripts/story-update-hook.js +259 -0
  367. package/.grimoire/development/scripts/task-identifier-resolver.js +145 -0
  368. package/.grimoire/development/scripts/template-engine.js +240 -0
  369. package/.grimoire/development/scripts/template-validator.js +279 -0
  370. package/.grimoire/development/scripts/test-generator.js +844 -0
  371. package/.grimoire/development/scripts/test-greeting-system.js +143 -0
  372. package/.grimoire/development/scripts/transaction-manager.js +591 -0
  373. package/.grimoire/development/scripts/unified-activation-pipeline.js +796 -0
  374. package/.grimoire/development/scripts/usage-tracker.js +675 -0
  375. package/.grimoire/development/scripts/validate-filenames.js +228 -0
  376. package/.grimoire/development/scripts/validate-task-v2.js +320 -0
  377. package/.grimoire/development/scripts/verify-workflow-gaps.js +1034 -0
  378. package/.grimoire/development/scripts/version-tracker.js +527 -0
  379. package/.grimoire/development/scripts/workflow-navigator.js +328 -0
  380. package/.grimoire/development/scripts/workflow-state-manager.js +652 -0
  381. package/.grimoire/development/scripts/workflow-validator.js +697 -0
  382. package/.grimoire/development/scripts/yaml-validator.js +397 -0
  383. package/.grimoire/development/tasks/add-mcp.md +437 -0
  384. package/.grimoire/development/tasks/advanced-elicitation.md +320 -0
  385. package/.grimoire/development/tasks/analyst-facilitate-brainstorming.md +343 -0
  386. package/.grimoire/development/tasks/analyze-brownfield.md +458 -0
  387. package/.grimoire/development/tasks/analyze-cross-artifact.md +358 -0
  388. package/.grimoire/development/tasks/analyze-framework.md +698 -0
  389. package/.grimoire/development/tasks/analyze-performance.md +639 -0
  390. package/.grimoire/development/tasks/analyze-project-structure.md +623 -0
  391. package/.grimoire/development/tasks/apply-qa-fixes.md +342 -0
  392. package/.grimoire/development/tasks/architect-analyze-impact.md +828 -0
  393. package/.grimoire/development/tasks/audit-codebase.md +431 -0
  394. package/.grimoire/development/tasks/audit-tailwind-config.md +272 -0
  395. package/.grimoire/development/tasks/audit-utilities.md +360 -0
  396. package/.grimoire/development/tasks/blocks/README.md +180 -0
  397. package/.grimoire/development/tasks/blocks/agent-prompt-template.md +117 -0
  398. package/.grimoire/development/tasks/blocks/context-loading.md +110 -0
  399. package/.grimoire/development/tasks/blocks/execution-pattern.md +122 -0
  400. package/.grimoire/development/tasks/blocks/finalization.md +123 -0
  401. package/.grimoire/development/tasks/bootstrap-shadcn-library.md +288 -0
  402. package/.grimoire/development/tasks/brownfield-create-epic.md +533 -0
  403. package/.grimoire/development/tasks/brownfield-create-story.md +358 -0
  404. package/.grimoire/development/tasks/build-autonomous.md +186 -0
  405. package/.grimoire/development/tasks/build-component.md +480 -0
  406. package/.grimoire/development/tasks/build-resume.md +125 -0
  407. package/.grimoire/development/tasks/build-status.md +155 -0
  408. package/.grimoire/development/tasks/build.md +142 -0
  409. package/.grimoire/development/tasks/calculate-roi.md +457 -0
  410. package/.grimoire/development/tasks/check-docs-links.md +114 -0
  411. package/.grimoire/development/tasks/ci-cd-configuration.md +766 -0
  412. package/.grimoire/development/tasks/cleanup-utilities.md +672 -0
  413. package/.grimoire/development/tasks/cleanup-worktrees.md +39 -0
  414. package/.grimoire/development/tasks/collaborative-edit.md +1110 -0
  415. package/.grimoire/development/tasks/compose-molecule.md +286 -0
  416. package/.grimoire/development/tasks/consolidate-patterns.md +416 -0
  417. package/.grimoire/development/tasks/correct-course.md +281 -0
  418. package/.grimoire/development/tasks/create-agent.md +1199 -0
  419. package/.grimoire/development/tasks/create-brownfield-story.md +728 -0
  420. package/.grimoire/development/tasks/create-deep-research-prompt.md +500 -0
  421. package/.grimoire/development/tasks/create-doc.md +318 -0
  422. package/.grimoire/development/tasks/create-next-story.md +776 -0
  423. package/.grimoire/development/tasks/create-service.md +393 -0
  424. package/.grimoire/development/tasks/create-suite.md +285 -0
  425. package/.grimoire/development/tasks/create-task.md +391 -0
  426. package/.grimoire/development/tasks/create-workflow.md +429 -0
  427. package/.grimoire/development/tasks/create-worktree.md +439 -0
  428. package/.grimoire/development/tasks/db-analyze-hotpaths.md +574 -0
  429. package/.grimoire/development/tasks/db-apply-migration.md +383 -0
  430. package/.grimoire/development/tasks/db-bootstrap.md +644 -0
  431. package/.grimoire/development/tasks/db-domain-modeling.md +695 -0
  432. package/.grimoire/development/tasks/db-dry-run.md +295 -0
  433. package/.grimoire/development/tasks/db-env-check.md +262 -0
  434. package/.grimoire/development/tasks/db-explain.md +633 -0
  435. package/.grimoire/development/tasks/db-impersonate.md +497 -0
  436. package/.grimoire/development/tasks/db-load-csv.md +595 -0
  437. package/.grimoire/development/tasks/db-policy-apply.md +655 -0
  438. package/.grimoire/development/tasks/db-rls-audit.md +413 -0
  439. package/.grimoire/development/tasks/db-rollback.md +741 -0
  440. package/.grimoire/development/tasks/db-run-sql.md +615 -0
  441. package/.grimoire/development/tasks/db-schema-audit.md +1013 -0
  442. package/.grimoire/development/tasks/db-seed.md +392 -0
  443. package/.grimoire/development/tasks/db-smoke-test.md +353 -0
  444. package/.grimoire/development/tasks/db-snapshot.md +571 -0
  445. package/.grimoire/development/tasks/db-squad-integration.md +665 -0
  446. package/.grimoire/development/tasks/db-supabase-setup.md +714 -0
  447. package/.grimoire/development/tasks/db-verify-order.md +517 -0
  448. package/.grimoire/development/tasks/deprecate-component.md +958 -0
  449. package/.grimoire/development/tasks/dev-apply-qa-fixes.md +320 -0
  450. package/.grimoire/development/tasks/dev-backlog-debt.md +471 -0
  451. package/.grimoire/development/tasks/dev-develop-story.md +912 -0
  452. package/.grimoire/development/tasks/dev-improve-code-quality.md +874 -0
  453. package/.grimoire/development/tasks/dev-optimize-performance.md +1035 -0
  454. package/.grimoire/development/tasks/dev-suggest-refactoring.md +872 -0
  455. package/.grimoire/development/tasks/dev-validate-next-story.md +350 -0
  456. package/.grimoire/development/tasks/document-gotchas.md +479 -0
  457. package/.grimoire/development/tasks/document-project.md +554 -0
  458. package/.grimoire/development/tasks/environment-bootstrap.md +1391 -0
  459. package/.grimoire/development/tasks/execute-checklist.md +303 -0
  460. package/.grimoire/development/tasks/execute-epic-plan.md +887 -0
  461. package/.grimoire/development/tasks/export-design-tokens-dtcg.md +276 -0
  462. package/.grimoire/development/tasks/extend-pattern.md +271 -0
  463. package/.grimoire/development/tasks/extract-patterns.md +399 -0
  464. package/.grimoire/development/tasks/extract-tokens.md +469 -0
  465. package/.grimoire/development/tasks/facilitate-brainstorming-session.md +520 -0
  466. package/.grimoire/development/tasks/generate-ai-frontend-prompt.md +262 -0
  467. package/.grimoire/development/tasks/generate-documentation.md +286 -0
  468. package/.grimoire/development/tasks/generate-migration-strategy.md +524 -0
  469. package/.grimoire/development/tasks/generate-shock-report.md +503 -0
  470. package/.grimoire/development/tasks/github-devops-github-pr-automation.md +666 -0
  471. package/.grimoire/development/tasks/github-devops-pre-push-quality-gate.md +791 -0
  472. package/.grimoire/development/tasks/github-devops-repository-cleanup.md +376 -0
  473. package/.grimoire/development/tasks/github-devops-version-management.md +485 -0
  474. package/.grimoire/development/tasks/gotcha.md +138 -0
  475. package/.grimoire/development/tasks/gotchas.md +155 -0
  476. package/.grimoire/development/tasks/health-check.yaml +227 -0
  477. package/.grimoire/development/tasks/ids-governor.md +96 -0
  478. package/.grimoire/development/tasks/ids-health.md +91 -0
  479. package/.grimoire/development/tasks/ids-query.md +156 -0
  480. package/.grimoire/development/tasks/improve-self.md +824 -0
  481. package/.grimoire/development/tasks/index-docs.md +389 -0
  482. package/.grimoire/development/tasks/init-project-status.md +508 -0
  483. package/.grimoire/development/tasks/integrate-squad.md +316 -0
  484. package/.grimoire/development/tasks/kb-mode-interaction.md +285 -0
  485. package/.grimoire/development/tasks/learn-patterns.md +902 -0
  486. package/.grimoire/development/tasks/list-mcps.md +33 -0
  487. package/.grimoire/development/tasks/list-worktrees.md +344 -0
  488. package/.grimoire/development/tasks/mcp-workflow.md +438 -0
  489. package/.grimoire/development/tasks/merge-worktree.md +42 -0
  490. package/.grimoire/development/tasks/modify-agent.md +399 -0
  491. package/.grimoire/development/tasks/modify-task.md +442 -0
  492. package/.grimoire/development/tasks/modify-workflow.md +511 -0
  493. package/.grimoire/development/tasks/next.md +327 -0
  494. package/.grimoire/development/tasks/orchestrate-resume.md +60 -0
  495. package/.grimoire/development/tasks/orchestrate-status.md +64 -0
  496. package/.grimoire/development/tasks/orchestrate-stop.md +55 -0
  497. package/.grimoire/development/tasks/orchestrate.md +66 -0
  498. package/.grimoire/development/tasks/patterns.md +336 -0
  499. package/.grimoire/development/tasks/plan-create-context.md +812 -0
  500. package/.grimoire/development/tasks/plan-create-implementation.md +797 -0
  501. package/.grimoire/development/tasks/plan-execute-subtask.md +962 -0
  502. package/.grimoire/development/tasks/po-backlog-add.md +372 -0
  503. package/.grimoire/development/tasks/po-close-story.md +428 -0
  504. package/.grimoire/development/tasks/po-manage-story-backlog.md +525 -0
  505. package/.grimoire/development/tasks/po-pull-story-from-clickup.md +542 -0
  506. package/.grimoire/development/tasks/po-pull-story.md +318 -0
  507. package/.grimoire/development/tasks/po-stories-index.md +353 -0
  508. package/.grimoire/development/tasks/po-sync-story-to-clickup.md +459 -0
  509. package/.grimoire/development/tasks/po-sync-story.md +305 -0
  510. package/.grimoire/development/tasks/pr-automation.md +703 -0
  511. package/.grimoire/development/tasks/propose-modification.md +844 -0
  512. package/.grimoire/development/tasks/publish-npm.md +259 -0
  513. package/.grimoire/development/tasks/qa-after-creation.md +519 -0
  514. package/.grimoire/development/tasks/qa-backlog-add-followup.md +427 -0
  515. package/.grimoire/development/tasks/qa-browser-console-check.md +343 -0
  516. package/.grimoire/development/tasks/qa-create-fix-request.md +625 -0
  517. package/.grimoire/development/tasks/qa-evidence-requirements.md +314 -0
  518. package/.grimoire/development/tasks/qa-false-positive-detection.md +374 -0
  519. package/.grimoire/development/tasks/qa-fix-issues.md +686 -0
  520. package/.grimoire/development/tasks/qa-gate.md +375 -0
  521. package/.grimoire/development/tasks/qa-generate-tests.md +1176 -0
  522. package/.grimoire/development/tasks/qa-library-validation.md +497 -0
  523. package/.grimoire/development/tasks/qa-migration-validation.md +584 -0
  524. package/.grimoire/development/tasks/qa-nfr-assess.md +559 -0
  525. package/.grimoire/development/tasks/qa-review-build.md +1225 -0
  526. package/.grimoire/development/tasks/qa-review-proposal.md +1159 -0
  527. package/.grimoire/development/tasks/qa-review-story.md +684 -0
  528. package/.grimoire/development/tasks/qa-risk-profile.md +568 -0
  529. package/.grimoire/development/tasks/qa-run-tests.md +279 -0
  530. package/.grimoire/development/tasks/qa-security-checklist.md +552 -0
  531. package/.grimoire/development/tasks/qa-test-design.md +389 -0
  532. package/.grimoire/development/tasks/qa-trace-requirements.md +478 -0
  533. package/.grimoire/development/tasks/release-management.md +754 -0
  534. package/.grimoire/development/tasks/remove-mcp.md +35 -0
  535. package/.grimoire/development/tasks/remove-worktree.md +435 -0
  536. package/.grimoire/development/tasks/run-design-system-pipeline.md +642 -0
  537. package/.grimoire/development/tasks/run-workflow-engine.md +861 -0
  538. package/.grimoire/development/tasks/run-workflow.md +389 -0
  539. package/.grimoire/development/tasks/search-mcp.md +309 -0
  540. package/.grimoire/development/tasks/security-audit.md +556 -0
  541. package/.grimoire/development/tasks/security-scan.md +792 -0
  542. package/.grimoire/development/tasks/session-resume.md +193 -0
  543. package/.grimoire/development/tasks/setup-database.md +743 -0
  544. package/.grimoire/development/tasks/setup-design-system.md +464 -0
  545. package/.grimoire/development/tasks/setup-github.md +876 -0
  546. package/.grimoire/development/tasks/setup-llm-routing.md +231 -0
  547. package/.grimoire/development/tasks/setup-mcp-docker.md +628 -0
  548. package/.grimoire/development/tasks/setup-project-docs.md +442 -0
  549. package/.grimoire/development/tasks/shard-doc.md +539 -0
  550. package/.grimoire/development/tasks/sm-create-next-story.md +482 -0
  551. package/.grimoire/development/tasks/spec-assess-complexity.md +461 -0
  552. package/.grimoire/development/tasks/spec-critique.md +595 -0
  553. package/.grimoire/development/tasks/spec-gather-requirements.md +545 -0
  554. package/.grimoire/development/tasks/spec-research-dependencies.md +446 -0
  555. package/.grimoire/development/tasks/spec-write-spec.md +531 -0
  556. package/.grimoire/development/tasks/squad-creator-analyze.md +318 -0
  557. package/.grimoire/development/tasks/squad-creator-create.md +314 -0
  558. package/.grimoire/development/tasks/squad-creator-design.md +335 -0
  559. package/.grimoire/development/tasks/squad-creator-download.md +169 -0
  560. package/.grimoire/development/tasks/squad-creator-extend.md +413 -0
  561. package/.grimoire/development/tasks/squad-creator-list.md +226 -0
  562. package/.grimoire/development/tasks/squad-creator-migrate.md +245 -0
  563. package/.grimoire/development/tasks/squad-creator-publish.md +231 -0
  564. package/.grimoire/development/tasks/squad-creator-sync-grimoire.md +317 -0
  565. package/.grimoire/development/tasks/squad-creator-sync-ide-command.md +403 -0
  566. package/.grimoire/development/tasks/squad-creator-validate.md +160 -0
  567. package/.grimoire/development/tasks/story-checkpoint.md +361 -0
  568. package/.grimoire/development/tasks/sync-documentation.md +866 -0
  569. package/.grimoire/development/tasks/tailwind-upgrade.md +296 -0
  570. package/.grimoire/development/tasks/test-as-user.md +623 -0
  571. package/.grimoire/development/tasks/test-validation-task.md +172 -0
  572. package/.grimoire/development/tasks/undo-last.md +348 -0
  573. package/.grimoire/development/tasks/update-grimoire.md +153 -0
  574. package/.grimoire/development/tasks/update-manifest.md +411 -0
  575. package/.grimoire/development/tasks/update-source-tree.md +138 -0
  576. package/.grimoire/development/tasks/ux-create-wireframe.md +619 -0
  577. package/.grimoire/development/tasks/ux-ds-scan-artifact.md +674 -0
  578. package/.grimoire/development/tasks/ux-user-research.md +561 -0
  579. package/.grimoire/development/tasks/validate-agents.md +117 -0
  580. package/.grimoire/development/tasks/validate-next-story.md +456 -0
  581. package/.grimoire/development/tasks/validate-tech-preset.md +187 -0
  582. package/.grimoire/development/tasks/validate-workflow.md +323 -0
  583. package/.grimoire/development/tasks/verify-subtask.md +237 -0
  584. package/.grimoire/development/tasks/waves.md +206 -0
  585. package/.grimoire/development/tasks/yolo-toggle.md +115 -0
  586. package/.grimoire/development/templates/grimoire-doc-template.md +496 -0
  587. package/.grimoire/development/templates/research-prompt-tmpl.md +486 -0
  588. package/.grimoire/development/templates/service-template/README.md.hbs +159 -0
  589. package/.grimoire/development/templates/service-template/__tests__/index.test.ts.hbs +238 -0
  590. package/.grimoire/development/templates/service-template/client.ts.hbs +404 -0
  591. package/.grimoire/development/templates/service-template/errors.ts.hbs +183 -0
  592. package/.grimoire/development/templates/service-template/index.ts.hbs +121 -0
  593. package/.grimoire/development/templates/service-template/jest.config.js +89 -0
  594. package/.grimoire/development/templates/service-template/package.json.hbs +88 -0
  595. package/.grimoire/development/templates/service-template/tsconfig.json +45 -0
  596. package/.grimoire/development/templates/service-template/types.ts.hbs +146 -0
  597. package/.grimoire/development/templates/squad/agent-template.md +69 -0
  598. package/.grimoire/development/templates/squad/checklist-template.md +82 -0
  599. package/.grimoire/development/templates/squad/data-template.yaml +105 -0
  600. package/.grimoire/development/templates/squad/script-template.js +179 -0
  601. package/.grimoire/development/templates/squad/task-template.md +125 -0
  602. package/.grimoire/development/templates/squad/template-template.md +98 -0
  603. package/.grimoire/development/templates/squad/tool-template.js +103 -0
  604. package/.grimoire/development/templates/squad/workflow-template.yaml +108 -0
  605. package/.grimoire/development/templates/squad-template/LICENSE +21 -0
  606. package/.grimoire/development/templates/squad-template/README.md +37 -0
  607. package/.grimoire/development/templates/squad-template/agents/example-agent.yaml +36 -0
  608. package/.grimoire/development/templates/squad-template/package.json +20 -0
  609. package/.grimoire/development/templates/squad-template/squad.yaml +26 -0
  610. package/.grimoire/development/templates/squad-template/tasks/example-task.yaml +46 -0
  611. package/.grimoire/development/templates/squad-template/templates/example-template.md +24 -0
  612. package/.grimoire/development/templates/squad-template/tests/example-agent.test.js +54 -0
  613. package/.grimoire/development/templates/squad-template/workflows/example-workflow.yaml +54 -0
  614. package/.grimoire/development/templates/subagent-step-prompt.md +122 -0
  615. package/.grimoire/development/workflows/README.md +82 -0
  616. package/.grimoire/development/workflows/auto-worktree.yaml +423 -0
  617. package/.grimoire/development/workflows/brownfield-discovery.yaml +933 -0
  618. package/.grimoire/development/workflows/brownfield-fullstack.yaml +369 -0
  619. package/.grimoire/development/workflows/brownfield-service.yaml +246 -0
  620. package/.grimoire/development/workflows/brownfield-ui.yaml +260 -0
  621. package/.grimoire/development/workflows/design-system-build-quality.yaml +228 -0
  622. package/.grimoire/development/workflows/development-cycle.yaml +427 -0
  623. package/.grimoire/development/workflows/epic-orchestration.yaml +328 -0
  624. package/.grimoire/development/workflows/greenfield-fullstack.yaml +386 -0
  625. package/.grimoire/development/workflows/greenfield-service.yaml +278 -0
  626. package/.grimoire/development/workflows/greenfield-ui.yaml +284 -0
  627. package/.grimoire/development/workflows/qa-loop.yaml +444 -0
  628. package/.grimoire/development/workflows/spec-pipeline.yaml +577 -0
  629. package/.grimoire/development/workflows/story-development-cycle.yaml +285 -0
  630. package/.grimoire/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +574 -0
  631. package/.grimoire/docs/standards/EXECUTOR-DECISION-TREE.md +698 -0
  632. package/.grimoire/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +513 -0
  633. package/.grimoire/docs/standards/QUALITY-GATES-SPECIFICATION.md +558 -0
  634. package/.grimoire/docs/standards/STANDARDS-INDEX.md +212 -0
  635. package/.grimoire/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +551 -0
  636. package/.grimoire/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1415 -0
  637. package/.grimoire/docs/standards/grimoire-COLOR-PALETTE-QUICK-REFERENCE.md +186 -0
  638. package/.grimoire/docs/standards/grimoire-COLOR-PALETTE-V2.1.md +354 -0
  639. package/.grimoire/docs/standards/grimoire-LIVRO-DE-OURO-V2.1-COMPLETE.md +839 -0
  640. package/.grimoire/docs/standards/grimoire-LIVRO-DE-OURO-V2.2-SUMMARY.md +1341 -0
  641. package/.grimoire/elicitation/agent-elicitation.js +272 -0
  642. package/.grimoire/elicitation/task-elicitation.js +281 -0
  643. package/.grimoire/elicitation/workflow-elicitation.js +315 -0
  644. package/.grimoire/framework-config.yaml +152 -0
  645. package/.grimoire/hooks/gemini/after-tool.js +78 -0
  646. package/.grimoire/hooks/gemini/before-agent.js +80 -0
  647. package/.grimoire/hooks/gemini/before-tool.js +115 -0
  648. package/.grimoire/hooks/gemini/rewind-handler.js +69 -0
  649. package/.grimoire/hooks/gemini/session-end.js +91 -0
  650. package/.grimoire/hooks/gemini/session-start.js +91 -0
  651. package/.grimoire/hooks/ids-post-commit.js +118 -0
  652. package/.grimoire/hooks/ids-pre-push.js +125 -0
  653. package/.grimoire/hooks/unified/README.md +309 -0
  654. package/.grimoire/hooks/unified/hook-interface.js +161 -0
  655. package/.grimoire/hooks/unified/hook-registry.js +143 -0
  656. package/.grimoire/hooks/unified/index.js +36 -0
  657. package/.grimoire/hooks/unified/runners/precompact-runner.js +98 -0
  658. package/.grimoire/index.esm.js +17 -0
  659. package/.grimoire/index.js +17 -0
  660. package/.grimoire/infrastructure/README.md +128 -0
  661. package/.grimoire/infrastructure/contracts/compatibility/grimoire-4.0.4.yaml +46 -0
  662. package/.grimoire/infrastructure/index.js +200 -0
  663. package/.grimoire/infrastructure/integrations/ai-providers/README.md +103 -0
  664. package/.grimoire/infrastructure/integrations/ai-providers/ai-provider-factory.js +286 -0
  665. package/.grimoire/infrastructure/integrations/ai-providers/ai-provider.js +145 -0
  666. package/.grimoire/infrastructure/integrations/ai-providers/claude-provider.js +170 -0
  667. package/.grimoire/infrastructure/integrations/ai-providers/gemini-provider.js +365 -0
  668. package/.grimoire/infrastructure/integrations/ai-providers/index.js +45 -0
  669. package/.grimoire/infrastructure/integrations/gemini-extensions/cloudrun-adapter.js +129 -0
  670. package/.grimoire/infrastructure/integrations/gemini-extensions/index.js +41 -0
  671. package/.grimoire/infrastructure/integrations/gemini-extensions/policy-sync.js +74 -0
  672. package/.grimoire/infrastructure/integrations/gemini-extensions/security-adapter.js +159 -0
  673. package/.grimoire/infrastructure/integrations/gemini-extensions/supabase-adapter.js +88 -0
  674. package/.grimoire/infrastructure/integrations/gemini-extensions/workspace-adapter.js +100 -0
  675. package/.grimoire/infrastructure/integrations/pm-adapters/README.md +60 -0
  676. package/.grimoire/infrastructure/integrations/pm-adapters/clickup-adapter.js +345 -0
  677. package/.grimoire/infrastructure/integrations/pm-adapters/github-adapter.js +393 -0
  678. package/.grimoire/infrastructure/integrations/pm-adapters/jira-adapter.js +449 -0
  679. package/.grimoire/infrastructure/integrations/pm-adapters/local-adapter.js +176 -0
  680. package/.grimoire/infrastructure/schemas/agent-v3-schema.json +160 -0
  681. package/.grimoire/infrastructure/schemas/build-state.schema.json +158 -0
  682. package/.grimoire/infrastructure/schemas/task-v3-schema.json +152 -0
  683. package/.grimoire/infrastructure/scripts/approach-manager.js +1005 -0
  684. package/.grimoire/infrastructure/scripts/approval-workflow.js +644 -0
  685. package/.grimoire/infrastructure/scripts/asset-inventory.js +622 -0
  686. package/.grimoire/infrastructure/scripts/atomic-layer-classifier.js +309 -0
  687. package/.grimoire/infrastructure/scripts/backup-manager.js +607 -0
  688. package/.grimoire/infrastructure/scripts/batch-creator.js +609 -0
  689. package/.grimoire/infrastructure/scripts/branch-manager.js +391 -0
  690. package/.grimoire/infrastructure/scripts/capability-analyzer.js +535 -0
  691. package/.grimoire/infrastructure/scripts/changelog-generator.js +554 -0
  692. package/.grimoire/infrastructure/scripts/cicd-discovery.js +1269 -0
  693. package/.grimoire/infrastructure/scripts/clickup-helpers.js +227 -0
  694. package/.grimoire/infrastructure/scripts/code-quality-improver.js +1312 -0
  695. package/.grimoire/infrastructure/scripts/codebase-mapper.js +1288 -0
  696. package/.grimoire/infrastructure/scripts/codex-skills-sync/index.js +184 -0
  697. package/.grimoire/infrastructure/scripts/codex-skills-sync/validate.js +174 -0
  698. package/.grimoire/infrastructure/scripts/commit-message-generator.js +850 -0
  699. package/.grimoire/infrastructure/scripts/component-generator.js +738 -0
  700. package/.grimoire/infrastructure/scripts/component-metadata.js +628 -0
  701. package/.grimoire/infrastructure/scripts/component-search.js +278 -0
  702. package/.grimoire/infrastructure/scripts/config-cache.js +322 -0
  703. package/.grimoire/infrastructure/scripts/config-loader.js +351 -0
  704. package/.grimoire/infrastructure/scripts/conflict-resolver.js +675 -0
  705. package/.grimoire/infrastructure/scripts/coverage-analyzer.js +882 -0
  706. package/.grimoire/infrastructure/scripts/dashboard-status-writer.js +310 -0
  707. package/.grimoire/infrastructure/scripts/dependency-analyzer.js +639 -0
  708. package/.grimoire/infrastructure/scripts/dependency-impact-analyzer.js +704 -0
  709. package/.grimoire/infrastructure/scripts/diff-generator.js +129 -0
  710. package/.grimoire/infrastructure/scripts/documentation-integrity/brownfield-analyzer.js +502 -0
  711. package/.grimoire/infrastructure/scripts/documentation-integrity/config-generator.js +369 -0
  712. package/.grimoire/infrastructure/scripts/documentation-integrity/deployment-config-loader.js +309 -0
  713. package/.grimoire/infrastructure/scripts/documentation-integrity/doc-generator.js +331 -0
  714. package/.grimoire/infrastructure/scripts/documentation-integrity/gitignore-generator.js +314 -0
  715. package/.grimoire/infrastructure/scripts/documentation-integrity/index.js +75 -0
  716. package/.grimoire/infrastructure/scripts/documentation-integrity/mode-detector.js +391 -0
  717. package/.grimoire/infrastructure/scripts/documentation-synchronizer.js +1432 -0
  718. package/.grimoire/infrastructure/scripts/framework-analyzer.js +763 -0
  719. package/.grimoire/infrastructure/scripts/git-config-detector.js +293 -0
  720. package/.grimoire/infrastructure/scripts/git-hooks/post-commit.js +75 -0
  721. package/.grimoire/infrastructure/scripts/git-wrapper.js +444 -0
  722. package/.grimoire/infrastructure/scripts/gotchas-documenter.js +1296 -0
  723. package/.grimoire/infrastructure/scripts/grimoire-validator.js +295 -0
  724. package/.grimoire/infrastructure/scripts/ide-sync/README.md +220 -0
  725. package/.grimoire/infrastructure/scripts/ide-sync/agent-parser.js +295 -0
  726. package/.grimoire/infrastructure/scripts/ide-sync/gemini-commands.js +207 -0
  727. package/.grimoire/infrastructure/scripts/ide-sync/index.js +540 -0
  728. package/.grimoire/infrastructure/scripts/ide-sync/redirect-generator.js +179 -0
  729. package/.grimoire/infrastructure/scripts/ide-sync/transformers/antigravity.js +107 -0
  730. package/.grimoire/infrastructure/scripts/ide-sync/transformers/claude-code.js +86 -0
  731. package/.grimoire/infrastructure/scripts/ide-sync/transformers/cursor.js +96 -0
  732. package/.grimoire/infrastructure/scripts/ide-sync/validator.js +273 -0
  733. package/.grimoire/infrastructure/scripts/improvement-engine.js +758 -0
  734. package/.grimoire/infrastructure/scripts/improvement-validator.js +710 -0
  735. package/.grimoire/infrastructure/scripts/llm-routing/install-llm-routing.js +282 -0
  736. package/.grimoire/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +129 -0
  737. package/.grimoire/infrastructure/scripts/llm-routing/templates/claude-free-tracked.sh +108 -0
  738. package/.grimoire/infrastructure/scripts/llm-routing/templates/claude-free.cmd +80 -0
  739. package/.grimoire/infrastructure/scripts/llm-routing/templates/claude-free.sh +62 -0
  740. package/.grimoire/infrastructure/scripts/llm-routing/templates/claude-max.cmd +26 -0
  741. package/.grimoire/infrastructure/scripts/llm-routing/templates/claude-max.sh +18 -0
  742. package/.grimoire/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +73 -0
  743. package/.grimoire/infrastructure/scripts/llm-routing/templates/deepseek-proxy.sh +65 -0
  744. package/.grimoire/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +53 -0
  745. package/.grimoire/infrastructure/scripts/llm-routing/templates/deepseek-usage.sh +16 -0
  746. package/.grimoire/infrastructure/scripts/llm-routing/usage-tracker/index.js +551 -0
  747. package/.grimoire/infrastructure/scripts/migrate-agent.js +528 -0
  748. package/.grimoire/infrastructure/scripts/modification-risk-assessment.js +970 -0
  749. package/.grimoire/infrastructure/scripts/modification-validator.js +555 -0
  750. package/.grimoire/infrastructure/scripts/output-formatter.js +298 -0
  751. package/.grimoire/infrastructure/scripts/path-analyzer.js +476 -0
  752. package/.grimoire/infrastructure/scripts/pattern-extractor.js +1563 -0
  753. package/.grimoire/infrastructure/scripts/performance-analyzer.js +758 -0
  754. package/.grimoire/infrastructure/scripts/performance-and-error-resolver.js +258 -0
  755. package/.grimoire/infrastructure/scripts/performance-optimizer.js +1902 -0
  756. package/.grimoire/infrastructure/scripts/performance-tracker.js +454 -0
  757. package/.grimoire/infrastructure/scripts/plan-tracker.js +922 -0
  758. package/.grimoire/infrastructure/scripts/pm-adapter-factory.js +182 -0
  759. package/.grimoire/infrastructure/scripts/pm-adapter.js +134 -0
  760. package/.grimoire/infrastructure/scripts/pr-review-ai.js +1062 -0
  761. package/.grimoire/infrastructure/scripts/project-status-loader.js +850 -0
  762. package/.grimoire/infrastructure/scripts/qa-loop-orchestrator.js +1264 -0
  763. package/.grimoire/infrastructure/scripts/qa-report-generator.js +1154 -0
  764. package/.grimoire/infrastructure/scripts/recovery-tracker.js +965 -0
  765. package/.grimoire/infrastructure/scripts/refactoring-suggester.js +1139 -0
  766. package/.grimoire/infrastructure/scripts/repository-detector.js +66 -0
  767. package/.grimoire/infrastructure/scripts/rollback-manager.js +734 -0
  768. package/.grimoire/infrastructure/scripts/sandbox-tester.js +618 -0
  769. package/.grimoire/infrastructure/scripts/security-checker.js +359 -0
  770. package/.grimoire/infrastructure/scripts/spot-check-validator.js +149 -0
  771. package/.grimoire/infrastructure/scripts/status-mapper.js +116 -0
  772. package/.grimoire/infrastructure/scripts/story-worktree-hooks.js +426 -0
  773. package/.grimoire/infrastructure/scripts/stuck-detector.js +1251 -0
  774. package/.grimoire/infrastructure/scripts/subtask-verifier.js +793 -0
  775. package/.grimoire/infrastructure/scripts/template-engine.js +240 -0
  776. package/.grimoire/infrastructure/scripts/template-validator.js +279 -0
  777. package/.grimoire/infrastructure/scripts/test-discovery.js +1259 -0
  778. package/.grimoire/infrastructure/scripts/test-generator.js +845 -0
  779. package/.grimoire/infrastructure/scripts/test-quality-assessment.js +1082 -0
  780. package/.grimoire/infrastructure/scripts/test-utilities-fast.js +126 -0
  781. package/.grimoire/infrastructure/scripts/test-utilities.js +201 -0
  782. package/.grimoire/infrastructure/scripts/tool-resolver.js +362 -0
  783. package/.grimoire/infrastructure/scripts/transaction-manager.js +590 -0
  784. package/.grimoire/infrastructure/scripts/usage-analytics.js +636 -0
  785. package/.grimoire/infrastructure/scripts/validate-agents.js +527 -0
  786. package/.grimoire/infrastructure/scripts/validate-claude-integration.js +103 -0
  787. package/.grimoire/infrastructure/scripts/validate-codex-integration.js +143 -0
  788. package/.grimoire/infrastructure/scripts/validate-gemini-integration.js +153 -0
  789. package/.grimoire/infrastructure/scripts/validate-output-pattern.js +213 -0
  790. package/.grimoire/infrastructure/scripts/validate-parity.js +357 -0
  791. package/.grimoire/infrastructure/scripts/validate-paths.js +144 -0
  792. package/.grimoire/infrastructure/scripts/validate-user-profile.js +251 -0
  793. package/.grimoire/infrastructure/scripts/visual-impact-generator.js +1056 -0
  794. package/.grimoire/infrastructure/scripts/worktree-manager.js +704 -0
  795. package/.grimoire/infrastructure/scripts/yaml-validator.js +397 -0
  796. package/.grimoire/infrastructure/templates/coderabbit.yaml.template +280 -0
  797. package/.grimoire/infrastructure/templates/core-config/core-config-brownfield.tmpl.yaml +177 -0
  798. package/.grimoire/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +169 -0
  799. package/.grimoire/infrastructure/templates/github-workflows/README.md +110 -0
  800. package/.grimoire/infrastructure/templates/github-workflows/ci.yml.template +170 -0
  801. package/.grimoire/infrastructure/templates/github-workflows/pr-automation.yml.template +331 -0
  802. package/.grimoire/infrastructure/templates/github-workflows/release.yml.template +197 -0
  803. package/.grimoire/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +20 -0
  804. package/.grimoire/infrastructure/templates/gitignore/gitignore-grimoire-base.tmpl +65 -0
  805. package/.grimoire/infrastructure/templates/gitignore/gitignore-node.tmpl +86 -0
  806. package/.grimoire/infrastructure/templates/gitignore/gitignore-python.tmpl +146 -0
  807. package/.grimoire/infrastructure/templates/grimoire-sync.yaml.template +183 -0
  808. package/.grimoire/infrastructure/templates/project-docs/coding-standards-tmpl.md +347 -0
  809. package/.grimoire/infrastructure/templates/project-docs/source-tree-tmpl.md +179 -0
  810. package/.grimoire/infrastructure/templates/project-docs/tech-stack-tmpl.md +269 -0
  811. package/.grimoire/infrastructure/tests/project-status-loader.test.js +569 -0
  812. package/.grimoire/infrastructure/tests/regression-suite-v2.md +622 -0
  813. package/.grimoire/infrastructure/tests/validate-module.js +98 -0
  814. package/.grimoire/infrastructure/tests/worktree-manager.test.js +620 -0
  815. package/.grimoire/infrastructure/tools/README.md +224 -0
  816. package/.grimoire/infrastructure/tools/cli/github-cli.yaml +200 -0
  817. package/.grimoire/infrastructure/tools/cli/llm-routing.yaml +128 -0
  818. package/.grimoire/infrastructure/tools/cli/railway-cli.yaml +260 -0
  819. package/.grimoire/infrastructure/tools/cli/supabase-cli.yaml +224 -0
  820. package/.grimoire/infrastructure/tools/local/ffmpeg.yaml +261 -0
  821. package/.grimoire/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -0
  822. package/.grimoire/infrastructure/tools/mcp/browser.yaml +103 -0
  823. package/.grimoire/infrastructure/tools/mcp/clickup.yaml +535 -0
  824. package/.grimoire/infrastructure/tools/mcp/context7.yaml +78 -0
  825. package/.grimoire/infrastructure/tools/mcp/desktop-commander.yaml +180 -0
  826. package/.grimoire/infrastructure/tools/mcp/exa.yaml +103 -0
  827. package/.grimoire/infrastructure/tools/mcp/google-workspace.yaml +930 -0
  828. package/.grimoire/infrastructure/tools/mcp/n8n.yaml +551 -0
  829. package/.grimoire/infrastructure/tools/mcp/supabase.yaml +808 -0
  830. package/.grimoire/install-manifest.yaml +4058 -0
  831. package/.grimoire/local-config.yaml.template +73 -0
  832. package/.grimoire/manifests/schema/manifest-schema.json +191 -0
  833. package/.grimoire/monitor/hooks/lib/__init__.py +2 -0
  834. package/.grimoire/monitor/hooks/lib/enrich.py +59 -0
  835. package/.grimoire/monitor/hooks/lib/send_event.py +48 -0
  836. package/.grimoire/monitor/hooks/notification.py +30 -0
  837. package/.grimoire/monitor/hooks/post_tool_use.py +46 -0
  838. package/.grimoire/monitor/hooks/pre_compact.py +30 -0
  839. package/.grimoire/monitor/hooks/pre_tool_use.py +41 -0
  840. package/.grimoire/monitor/hooks/stop.py +30 -0
  841. package/.grimoire/monitor/hooks/subagent_stop.py +30 -0
  842. package/.grimoire/monitor/hooks/user_prompt_submit.py +39 -0
  843. package/.grimoire/package.json +104 -0
  844. package/.grimoire/presets/README.md +359 -0
  845. package/.grimoire/product/README.md +57 -0
  846. package/.grimoire/product/checklists/accessibility-wcag-checklist.md +80 -0
  847. package/.grimoire/product/checklists/architect-checklist.md +444 -0
  848. package/.grimoire/product/checklists/change-checklist.md +183 -0
  849. package/.grimoire/product/checklists/component-quality-checklist.md +74 -0
  850. package/.grimoire/product/checklists/database-design-checklist.md +119 -0
  851. package/.grimoire/product/checklists/dba-predeploy-checklist.md +97 -0
  852. package/.grimoire/product/checklists/dba-rollback-checklist.md +99 -0
  853. package/.grimoire/product/checklists/migration-readiness-checklist.md +75 -0
  854. package/.grimoire/product/checklists/pattern-audit-checklist.md +88 -0
  855. package/.grimoire/product/checklists/pm-checklist.md +376 -0
  856. package/.grimoire/product/checklists/po-master-checklist.md +442 -0
  857. package/.grimoire/product/checklists/pre-push-checklist.md +108 -0
  858. package/.grimoire/product/checklists/release-checklist.md +122 -0
  859. package/.grimoire/product/checklists/self-critique-checklist.md +387 -0
  860. package/.grimoire/product/checklists/story-dod-checklist.md +102 -0
  861. package/.grimoire/product/checklists/story-draft-checklist.md +216 -0
  862. package/.grimoire/product/data/atomic-design-principles.md +108 -0
  863. package/.grimoire/product/data/brainstorming-techniques.md +37 -0
  864. package/.grimoire/product/data/consolidation-algorithms.md +142 -0
  865. package/.grimoire/product/data/database-best-practices.md +182 -0
  866. package/.grimoire/product/data/design-token-best-practices.md +107 -0
  867. package/.grimoire/product/data/elicitation-methods.md +135 -0
  868. package/.grimoire/product/data/integration-patterns.md +207 -0
  869. package/.grimoire/product/data/migration-safety-guide.md +329 -0
  870. package/.grimoire/product/data/mode-selection-best-practices.md +471 -0
  871. package/.grimoire/product/data/postgres-tuning-guide.md +300 -0
  872. package/.grimoire/product/data/rls-security-patterns.md +333 -0
  873. package/.grimoire/product/data/roi-calculation-guide.md +142 -0
  874. package/.grimoire/product/data/supabase-patterns.md +330 -0
  875. package/.grimoire/product/data/test-levels-framework.md +149 -0
  876. package/.grimoire/product/data/test-priorities-matrix.md +175 -0
  877. package/.grimoire/product/data/wcag-compliance-guide.md +267 -0
  878. package/.grimoire/product/templates/activation-instructions-inline-greeting.yaml +64 -0
  879. package/.grimoire/product/templates/activation-instructions-template.md +260 -0
  880. package/.grimoire/product/templates/adr.hbs +126 -0
  881. package/.grimoire/product/templates/agent-template.yaml +122 -0
  882. package/.grimoire/product/templates/architecture-tmpl.yaml +651 -0
  883. package/.grimoire/product/templates/brainstorming-output-tmpl.yaml +156 -0
  884. package/.grimoire/product/templates/brownfield-architecture-tmpl.yaml +476 -0
  885. package/.grimoire/product/templates/brownfield-prd-tmpl.yaml +280 -0
  886. package/.grimoire/product/templates/brownfield-risk-report-tmpl.yaml +278 -0
  887. package/.grimoire/product/templates/changelog-template.md +134 -0
  888. package/.grimoire/product/templates/command-rationalization-matrix.md +154 -0
  889. package/.grimoire/product/templates/competitor-analysis-tmpl.yaml +293 -0
  890. package/.grimoire/product/templates/component-react-tmpl.tsx +98 -0
  891. package/.grimoire/product/templates/current-approach-tmpl.md +56 -0
  892. package/.grimoire/product/templates/dbdr.hbs +242 -0
  893. package/.grimoire/product/templates/design-story-tmpl.yaml +588 -0
  894. package/.grimoire/product/templates/ds-artifact-analysis.md +70 -0
  895. package/.grimoire/product/templates/engine/elicitation.js +298 -0
  896. package/.grimoire/product/templates/engine/index.js +310 -0
  897. package/.grimoire/product/templates/engine/loader.js +232 -0
  898. package/.grimoire/product/templates/engine/renderer.js +343 -0
  899. package/.grimoire/product/templates/engine/schemas/adr.schema.json +102 -0
  900. package/.grimoire/product/templates/engine/schemas/dbdr.schema.json +205 -0
  901. package/.grimoire/product/templates/engine/schemas/epic.schema.json +175 -0
  902. package/.grimoire/product/templates/engine/schemas/pmdr.schema.json +175 -0
  903. package/.grimoire/product/templates/engine/schemas/prd-v2.schema.json +300 -0
  904. package/.grimoire/product/templates/engine/schemas/prd.schema.json +152 -0
  905. package/.grimoire/product/templates/engine/schemas/story.schema.json +222 -0
  906. package/.grimoire/product/templates/engine/schemas/task.schema.json +154 -0
  907. package/.grimoire/product/templates/engine/validator.js +295 -0
  908. package/.grimoire/product/templates/epic.hbs +213 -0
  909. package/.grimoire/product/templates/eslintrc-security.json +32 -0
  910. package/.grimoire/product/templates/front-end-architecture-tmpl.yaml +206 -0
  911. package/.grimoire/product/templates/front-end-spec-tmpl.yaml +349 -0
  912. package/.grimoire/product/templates/fullstack-architecture-tmpl.yaml +805 -0
  913. package/.grimoire/product/templates/gemini/settings.json +81 -0
  914. package/.grimoire/product/templates/github-actions-cd.yml +213 -0
  915. package/.grimoire/product/templates/github-actions-ci.yml +173 -0
  916. package/.grimoire/product/templates/github-pr-template.md +68 -0
  917. package/.grimoire/product/templates/gordon-mcp.yaml +141 -0
  918. package/.grimoire/product/templates/grimoire-ai-config.yaml +107 -0
  919. package/.grimoire/product/templates/ide-rules/antigravity-rules.md +117 -0
  920. package/.grimoire/product/templates/ide-rules/claude-rules.md +233 -0
  921. package/.grimoire/product/templates/ide-rules/codex-rules.md +67 -0
  922. package/.grimoire/product/templates/ide-rules/copilot-rules.md +94 -0
  923. package/.grimoire/product/templates/ide-rules/cursor-rules.md +116 -0
  924. package/.grimoire/product/templates/ide-rules/gemini-rules.md +89 -0
  925. package/.grimoire/product/templates/index-strategy-tmpl.yaml +53 -0
  926. package/.grimoire/product/templates/market-research-tmpl.yaml +252 -0
  927. package/.grimoire/product/templates/mcp-workflow.js +273 -0
  928. package/.grimoire/product/templates/migration-plan-tmpl.yaml +1022 -0
  929. package/.grimoire/product/templates/migration-strategy-tmpl.md +524 -0
  930. package/.grimoire/product/templates/personalized-agent-template.md +260 -0
  931. package/.grimoire/product/templates/personalized-checklist-template.md +341 -0
  932. package/.grimoire/product/templates/personalized-task-template-v2.md +907 -0
  933. package/.grimoire/product/templates/personalized-task-template.md +345 -0
  934. package/.grimoire/product/templates/personalized-template-file.yaml +323 -0
  935. package/.grimoire/product/templates/personalized-workflow-template.yaml +461 -0
  936. package/.grimoire/product/templates/pmdr.hbs +187 -0
  937. package/.grimoire/product/templates/prd-tmpl.yaml +202 -0
  938. package/.grimoire/product/templates/prd-v2.0.hbs +217 -0
  939. package/.grimoire/product/templates/prd.hbs +202 -0
  940. package/.grimoire/product/templates/project-brief-tmpl.yaml +221 -0
  941. package/.grimoire/product/templates/qa-gate-tmpl.yaml +240 -0
  942. package/.grimoire/product/templates/qa-report-tmpl.md +235 -0
  943. package/.grimoire/product/templates/rls-policies-tmpl.yaml +1203 -0
  944. package/.grimoire/product/templates/schema-design-tmpl.yaml +428 -0
  945. package/.grimoire/product/templates/shock-report-tmpl.html +502 -0
  946. package/.grimoire/product/templates/spec-tmpl.md +235 -0
  947. package/.grimoire/product/templates/state-persistence-tmpl.yaml +219 -0
  948. package/.grimoire/product/templates/statusline/statusline-script.js +190 -0
  949. package/.grimoire/product/templates/statusline/track-agent.sh +70 -0
  950. package/.grimoire/product/templates/story-tmpl.yaml +369 -0
  951. package/.grimoire/product/templates/story.hbs +264 -0
  952. package/.grimoire/product/templates/task-execution-report.md +496 -0
  953. package/.grimoire/product/templates/task-template.md +123 -0
  954. package/.grimoire/product/templates/task.hbs +171 -0
  955. package/.grimoire/product/templates/tmpl-comment-on-examples.sql +158 -0
  956. package/.grimoire/product/templates/tmpl-migration-script.sql +91 -0
  957. package/.grimoire/product/templates/tmpl-rls-granular-policies.sql +104 -0
  958. package/.grimoire/product/templates/tmpl-rls-kiss-policy.sql +10 -0
  959. package/.grimoire/product/templates/tmpl-rls-roles.sql +135 -0
  960. package/.grimoire/product/templates/tmpl-rls-simple.sql +77 -0
  961. package/.grimoire/product/templates/tmpl-rls-tenant.sql +152 -0
  962. package/.grimoire/product/templates/tmpl-rollback-script.sql +77 -0
  963. package/.grimoire/product/templates/tmpl-seed-data.sql +140 -0
  964. package/.grimoire/product/templates/tmpl-smoke-test.sql +16 -0
  965. package/.grimoire/product/templates/tmpl-staging-copy-merge.sql +139 -0
  966. package/.grimoire/product/templates/tmpl-stored-proc.sql +140 -0
  967. package/.grimoire/product/templates/tmpl-trigger.sql +152 -0
  968. package/.grimoire/product/templates/tmpl-view-materialized.sql +133 -0
  969. package/.grimoire/product/templates/tmpl-view.sql +177 -0
  970. package/.grimoire/product/templates/token-exports-css-tmpl.css +240 -0
  971. package/.grimoire/product/templates/token-exports-tailwind-tmpl.js +395 -0
  972. package/.grimoire/product/templates/tokens-schema-tmpl.yaml +305 -0
  973. package/.grimoire/product/templates/workflow-template.yaml +152 -0
  974. package/.grimoire/project-config.yaml +166 -0
  975. package/.grimoire/quality/metrics-collector.js +601 -0
  976. package/.grimoire/quality/metrics-hook.js +261 -0
  977. package/.grimoire/quality/schemas/quality-metrics.schema.json +234 -0
  978. package/.grimoire/quality/seed-metrics.js +336 -0
  979. package/.grimoire/schemas/README.md +405 -0
  980. package/.grimoire/schemas/agent-v3-schema.json +395 -0
  981. package/.grimoire/schemas/squad-design-schema.json +300 -0
  982. package/.grimoire/schemas/squad-schema.json +187 -0
  983. package/.grimoire/schemas/task-v3-schema.json +354 -0
  984. package/.grimoire/schemas/validate-v3-schema.js +431 -0
  985. package/.grimoire/scripts/README.md +124 -0
  986. package/.grimoire/scripts/batch-migrate-phase1.ps1 +37 -0
  987. package/.grimoire/scripts/batch-migrate-phase2.ps1 +89 -0
  988. package/.grimoire/scripts/batch-migrate-phase3.ps1 +46 -0
  989. package/.grimoire/scripts/command-execution-hook.js +202 -0
  990. package/.grimoire/scripts/diagnostics/diagnose-installation.js +276 -0
  991. package/.grimoire/scripts/diagnostics/diagnose-npx-issue.ps1 +98 -0
  992. package/.grimoire/scripts/diagnostics/health-dashboard/README.md +123 -0
  993. package/.grimoire/scripts/diagnostics/health-dashboard/index.html +14 -0
  994. package/.grimoire/scripts/diagnostics/health-dashboard/package-lock.json +5262 -0
  995. package/.grimoire/scripts/diagnostics/health-dashboard/package.json +25 -0
  996. package/.grimoire/scripts/diagnostics/health-dashboard/public/favicon.svg +10 -0
  997. package/.grimoire/scripts/diagnostics/health-dashboard/src/App.jsx +22 -0
  998. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/AutoFixLog.css +122 -0
  999. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/AutoFixLog.jsx +72 -0
  1000. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/DomainCard.css +121 -0
  1001. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/DomainCard.jsx +116 -0
  1002. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/HealthScore.css +80 -0
  1003. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/HealthScore.jsx +81 -0
  1004. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/IssuesList.css +184 -0
  1005. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/IssuesList.jsx +145 -0
  1006. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/TechDebtList.css +114 -0
  1007. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/TechDebtList.jsx +72 -0
  1008. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/index.js +9 -0
  1009. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/shared/Card.css +44 -0
  1010. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/shared/Card.jsx +25 -0
  1011. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/shared/Chart.css +14 -0
  1012. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/shared/Chart.jsx +138 -0
  1013. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/shared/Header.css +54 -0
  1014. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/shared/Header.jsx +22 -0
  1015. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/shared/StatusBadge.css +77 -0
  1016. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/shared/StatusBadge.jsx +45 -0
  1017. package/.grimoire/scripts/diagnostics/health-dashboard/src/components/shared/index.js +4 -0
  1018. package/.grimoire/scripts/diagnostics/health-dashboard/src/hooks/index.js +2 -0
  1019. package/.grimoire/scripts/diagnostics/health-dashboard/src/hooks/useAutoRefresh.js +89 -0
  1020. package/.grimoire/scripts/diagnostics/health-dashboard/src/hooks/useHealthData.js +308 -0
  1021. package/.grimoire/scripts/diagnostics/health-dashboard/src/main.jsx +13 -0
  1022. package/.grimoire/scripts/diagnostics/health-dashboard/src/pages/Dashboard.css +238 -0
  1023. package/.grimoire/scripts/diagnostics/health-dashboard/src/pages/Dashboard.jsx +154 -0
  1024. package/.grimoire/scripts/diagnostics/health-dashboard/src/pages/DomainDetail.css +259 -0
  1025. package/.grimoire/scripts/diagnostics/health-dashboard/src/pages/DomainDetail.jsx +164 -0
  1026. package/.grimoire/scripts/diagnostics/health-dashboard/src/pages/index.js +2 -0
  1027. package/.grimoire/scripts/diagnostics/health-dashboard/src/styles/App.css +19 -0
  1028. package/.grimoire/scripts/diagnostics/health-dashboard/src/styles/index.css +67 -0
  1029. package/.grimoire/scripts/diagnostics/health-dashboard/vite.config.js +23 -0
  1030. package/.grimoire/scripts/diagnostics/quick-diagnose.cmd +86 -0
  1031. package/.grimoire/scripts/diagnostics/quick-diagnose.ps1 +118 -0
  1032. package/.grimoire/scripts/grimoire-doc-template.md +326 -0
  1033. package/.grimoire/scripts/migrate-framework-docs.sh +302 -0
  1034. package/.grimoire/scripts/pm.sh +455 -0
  1035. package/.grimoire/scripts/session-context-loader.js +46 -0
  1036. package/.grimoire/scripts/test-template-system.js +942 -0
  1037. package/.grimoire/scripts/update-grimoire.sh +176 -0
  1038. package/.grimoire/scripts/validate-phase1.ps1 +36 -0
  1039. package/.grimoire/scripts/workflow-management.md +70 -0
  1040. package/.grimoire/user-guide.md +1411 -0
  1041. package/.grimoire/utils/format-duration.js +95 -0
  1042. package/.grimoire/utils/grimoire-validator.js +27 -0
  1043. package/.grimoire/workflow-intelligence/__tests__/confidence-scorer.test.js +334 -0
  1044. package/.grimoire/workflow-intelligence/__tests__/integration.test.js +339 -0
  1045. package/.grimoire/workflow-intelligence/__tests__/suggestion-engine.test.js +437 -0
  1046. package/.grimoire/workflow-intelligence/__tests__/wave-analyzer.test.js +447 -0
  1047. package/.grimoire/workflow-intelligence/__tests__/workflow-registry.test.js +302 -0
  1048. package/.grimoire/workflow-intelligence/engine/confidence-scorer.js +306 -0
  1049. package/.grimoire/workflow-intelligence/engine/output-formatter.js +299 -0
  1050. package/.grimoire/workflow-intelligence/engine/suggestion-engine.js +798 -0
  1051. package/.grimoire/workflow-intelligence/engine/wave-analyzer.js +683 -0
  1052. package/.grimoire/workflow-intelligence/index.js +330 -0
  1053. package/.grimoire/workflow-intelligence/learning/capture-hook.js +148 -0
  1054. package/.grimoire/workflow-intelligence/learning/gotcha-registry.js +654 -0
  1055. package/.grimoire/workflow-intelligence/learning/index.js +306 -0
  1056. package/.grimoire/workflow-intelligence/learning/pattern-capture.js +330 -0
  1057. package/.grimoire/workflow-intelligence/learning/pattern-store.js +497 -0
  1058. package/.grimoire/workflow-intelligence/learning/pattern-validator.js +310 -0
  1059. package/.grimoire/workflow-intelligence/learning/qa-feedback.js +586 -0
  1060. package/.grimoire/workflow-intelligence/learning/semantic-search.js +521 -0
  1061. package/.grimoire/workflow-intelligence/registry/workflow-registry.js +357 -0
  1062. package/.grimoire/working-in-the-brownfield.md +362 -0
  1063. package/LICENSE +25 -0
  1064. package/README.md +59 -0
  1065. package/bin/grimoire-ids.js +560 -0
  1066. package/bin/grimoire-init.js +1232 -0
  1067. package/bin/grimoire-minimal.js +40 -0
  1068. package/bin/grimoire.js +1118 -0
  1069. package/bin/modules/env-config.js +436 -0
  1070. package/bin/modules/mcp-installer.js +384 -0
  1071. package/bin/utils/install-errors.js +340 -0
  1072. package/bin/utils/install-transaction.js +447 -0
  1073. package/bin/utils/pro-detector.js +110 -0
  1074. package/package.json +158 -0
  1075. package/packages/gemini-grimoire-extension/README.md +55 -0
  1076. package/packages/gemini-grimoire-extension/commands/grimoire-agent.js +7 -0
  1077. package/packages/gemini-grimoire-extension/commands/grimoire-agents.js +51 -0
  1078. package/packages/gemini-grimoire-extension/commands/grimoire-analyst.js +6 -0
  1079. package/packages/gemini-grimoire-extension/commands/grimoire-architect.js +6 -0
  1080. package/packages/gemini-grimoire-extension/commands/grimoire-data-engineer.js +6 -0
  1081. package/packages/gemini-grimoire-extension/commands/grimoire-dev.js +6 -0
  1082. package/packages/gemini-grimoire-extension/commands/grimoire-devops.js +6 -0
  1083. package/packages/gemini-grimoire-extension/commands/grimoire-master.js +7 -0
  1084. package/packages/gemini-grimoire-extension/commands/grimoire-menu.js +6 -0
  1085. package/packages/gemini-grimoire-extension/commands/grimoire-pm.js +6 -0
  1086. package/packages/gemini-grimoire-extension/commands/grimoire-po.js +6 -0
  1087. package/packages/gemini-grimoire-extension/commands/grimoire-qa.js +6 -0
  1088. package/packages/gemini-grimoire-extension/commands/grimoire-sm.js +6 -0
  1089. package/packages/gemini-grimoire-extension/commands/grimoire-squad-creator.js +6 -0
  1090. package/packages/gemini-grimoire-extension/commands/grimoire-status.js +68 -0
  1091. package/packages/gemini-grimoire-extension/commands/grimoire-ux-design-expert.js +6 -0
  1092. package/packages/gemini-grimoire-extension/commands/grimoire-validate.js +35 -0
  1093. package/packages/gemini-grimoire-extension/commands/lib/agent-launcher.js +147 -0
  1094. package/packages/gemini-grimoire-extension/extension.json +149 -0
  1095. package/packages/gemini-grimoire-extension/gemini-extension.json +149 -0
  1096. package/packages/gemini-grimoire-extension/hooks/hooks.json +72 -0
  1097. package/packages/grimoire-install/.releaserc.json +39 -0
  1098. package/packages/grimoire-install/CHANGELOG.md +33 -0
  1099. package/packages/grimoire-install/README.md +119 -0
  1100. package/packages/grimoire-install/bin/edmcp.js +80 -0
  1101. package/packages/grimoire-install/bin/grimoire-install.js +51 -0
  1102. package/packages/grimoire-install/jest.config.js +27 -0
  1103. package/packages/grimoire-install/package.json +68 -0
  1104. package/packages/grimoire-install/src/dep-checker.js +306 -0
  1105. package/packages/grimoire-install/src/edmcp/index.js +382 -0
  1106. package/packages/grimoire-install/src/installer.js +487 -0
  1107. package/packages/grimoire-install/src/os-detector.js +280 -0
  1108. package/packages/grimoire-pro-cli/bin/grimoire-pro.js +233 -0
  1109. package/packages/grimoire-pro-cli/package.json +38 -0
  1110. package/packages/grimoire-pro-cli/src/recover.js +101 -0
  1111. package/packages/installer/package.json +40 -0
  1112. package/packages/installer/src/__tests__/performance-benchmark.js +384 -0
  1113. package/packages/installer/src/config/configure-environment.js +373 -0
  1114. package/packages/installer/src/config/ide-configs.js +161 -0
  1115. package/packages/installer/src/config/templates/core-config-template.js +199 -0
  1116. package/packages/installer/src/config/templates/env-template.js +272 -0
  1117. package/packages/installer/src/config/validation/config-validator.js +244 -0
  1118. package/packages/installer/src/detection/detect-project-type.js +83 -0
  1119. package/packages/installer/src/installer/brownfield-upgrader.js +440 -0
  1120. package/packages/installer/src/installer/dependency-installer.js +335 -0
  1121. package/packages/installer/src/installer/file-hasher.js +234 -0
  1122. package/packages/installer/src/installer/grimoire-core-installer.js +428 -0
  1123. package/packages/installer/src/installer/manifest-signature.js +380 -0
  1124. package/packages/installer/src/installer/post-install-validator.js +1524 -0
  1125. package/packages/installer/src/merger/index.js +72 -0
  1126. package/packages/installer/src/merger/parsers/env-parser.js +153 -0
  1127. package/packages/installer/src/merger/parsers/markdown-section-parser.js +199 -0
  1128. package/packages/installer/src/merger/strategies/base-merger.js +61 -0
  1129. package/packages/installer/src/merger/strategies/env-merger.js +138 -0
  1130. package/packages/installer/src/merger/strategies/index.js +105 -0
  1131. package/packages/installer/src/merger/strategies/markdown-merger.js +208 -0
  1132. package/packages/installer/src/merger/strategies/replace-merger.js +68 -0
  1133. package/packages/installer/src/merger/types.js +72 -0
  1134. package/packages/installer/src/pro/pro-scaffolder.js +387 -0
  1135. package/packages/installer/src/updater/index.js +814 -0
  1136. package/packages/installer/src/utils/grimoire-colors.js +235 -0
  1137. package/packages/installer/src/wizard/feedback.js +232 -0
  1138. package/packages/installer/src/wizard/i18n.js +230 -0
  1139. package/packages/installer/src/wizard/ide-config-generator.js +993 -0
  1140. package/packages/installer/src/wizard/ide-selector.js +86 -0
  1141. package/packages/installer/src/wizard/index.js +831 -0
  1142. package/packages/installer/src/wizard/pro-setup.js +1223 -0
  1143. package/packages/installer/src/wizard/questions.js +336 -0
  1144. package/packages/installer/src/wizard/validation/index.js +121 -0
  1145. package/packages/installer/src/wizard/validation/report-generator.js +254 -0
  1146. package/packages/installer/src/wizard/validation/troubleshooting-system.js +348 -0
  1147. package/packages/installer/src/wizard/validation/validators/config-validator.js +364 -0
  1148. package/packages/installer/src/wizard/validation/validators/dependency-validator.js +333 -0
  1149. package/packages/installer/src/wizard/validation/validators/file-structure-validator.js +175 -0
  1150. package/packages/installer/src/wizard/validation/validators/mcp-health-checker.js +310 -0
  1151. package/packages/installer/src/wizard/validators.js +274 -0
  1152. package/packages/installer/src/wizard/wizard.js +246 -0
  1153. package/packages/installer/tests/integration/environment-configuration.test.js +331 -0
  1154. package/packages/installer/tests/integration/wizard-detection.test.js +353 -0
  1155. package/packages/installer/tests/unit/config-validator.test.js +316 -0
  1156. package/packages/installer/tests/unit/detection/detect-project-type.test.js +403 -0
  1157. package/packages/installer/tests/unit/env-template.test.js +189 -0
  1158. package/packages/installer/tests/unit/merger/env-merger.test.js +192 -0
  1159. package/packages/installer/tests/unit/merger/markdown-merger.test.js +262 -0
  1160. package/packages/installer/tests/unit/merger/strategies.test.js +153 -0
  1161. package/scripts/check-markdown-links.py +353 -0
  1162. package/scripts/code-intel-health-check.js +344 -0
  1163. package/scripts/dashboard-parallel-dev.sh +184 -0
  1164. package/scripts/dashboard-parallel-phase3.sh +130 -0
  1165. package/scripts/dashboard-parallel-phase4.sh +131 -0
  1166. package/scripts/ensure-manifest.js +59 -0
  1167. package/scripts/generate-install-manifest.js +368 -0
  1168. package/scripts/install-monitor-hooks.sh +83 -0
  1169. package/scripts/package-synapse.js +325 -0
  1170. package/scripts/semantic-lint.js +191 -0
  1171. package/scripts/sign-manifest.ps1 +132 -0
  1172. package/scripts/sign-manifest.sh +122 -0
  1173. package/scripts/validate-manifest.js +267 -0
  1174. package/scripts/validate-package-completeness.js +319 -0
@@ -0,0 +1,1223 @@
1
+ /**
2
+ * Pro Installation Wizard with License Gate
3
+ *
4
+ * 3-step wizard: (1) License Gate, (2) Install/Scaffold, (3) Verify
5
+ * Supports interactive mode, CI mode (grimoire_PRO_KEY/grimoire_PRO_EMAIL env vars), and lazy import.
6
+ *
7
+ * License Gate supports two activation methods:
8
+ * - Email + Password authentication (recommended, PRO-11)
9
+ * - License key (legacy, PRO-6)
10
+ *
11
+ * @module wizard/pro-setup
12
+ * @story INS-3.2 — Implement Pro Installation Wizard with License Gate
13
+ * @story PRO-11 — Email Authentication & Buyer-Based Pro Activation
14
+ */
15
+
16
+ 'use strict';
17
+
18
+ const { createSpinner, showSuccess, showError, showWarning, showInfo } = require('./feedback');
19
+ const { colors, status } = require('../utils/grimoire-colors');
20
+
21
+ /**
22
+ * Gold color for Pro branding.
23
+ * Falls back gracefully if chalk hex is unavailable.
24
+ */
25
+ let gold;
26
+ try {
27
+ const chalk = require('chalk');
28
+ gold = chalk.hex('#FFD700').bold;
29
+ } catch {
30
+ gold = (text) => text;
31
+ }
32
+
33
+ /**
34
+ * License key format: PRO-XXXX-XXXX-XXXX-XXXX
35
+ */
36
+ const LICENSE_KEY_PATTERN = /^PRO-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$/;
37
+
38
+ /**
39
+ * Maximum retry attempts for license validation.
40
+ */
41
+ const MAX_RETRIES = 3;
42
+
43
+ /**
44
+ * Email verification polling interval in milliseconds.
45
+ */
46
+ const VERIFY_POLL_INTERVAL_MS = 5000;
47
+
48
+ /**
49
+ * Email verification polling timeout in milliseconds (10 minutes).
50
+ */
51
+ const VERIFY_POLL_TIMEOUT_MS = 10 * 60 * 1000;
52
+
53
+ /**
54
+ * Minimum password length.
55
+ */
56
+ const MIN_PASSWORD_LENGTH = 8;
57
+
58
+ /**
59
+ * Email format regex.
60
+ */
61
+ const EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
62
+
63
+ /**
64
+ * Detect CI environment.
65
+ *
66
+ * @returns {boolean} true if running in CI or non-interactive terminal
67
+ */
68
+ function isCIEnvironment() {
69
+ return process.env.CI === 'true' || !process.stdout.isTTY;
70
+ }
71
+
72
+ /**
73
+ * Mask a license key for safe display.
74
+ * Shows first and last segments, masks middle two.
75
+ * Example: PRO-ABCD-****-****-WXYZ
76
+ *
77
+ * @param {string} key - License key
78
+ * @returns {string} Masked key
79
+ */
80
+ function maskLicenseKey(key) {
81
+ if (!key || typeof key !== 'string') {
82
+ return '****';
83
+ }
84
+
85
+ const trimmed = key.trim().toUpperCase();
86
+
87
+ if (!LICENSE_KEY_PATTERN.test(trimmed)) {
88
+ return '****';
89
+ }
90
+
91
+ const parts = trimmed.split('-');
92
+ return `${parts[0]}-${parts[1]}-****-****-${parts[4]}`;
93
+ }
94
+
95
+ /**
96
+ * Validate license key format before sending to API.
97
+ *
98
+ * @param {string} key - License key
99
+ * @returns {boolean} true if format is valid
100
+ */
101
+ function validateKeyFormat(key) {
102
+ if (!key || typeof key !== 'string') {
103
+ return false;
104
+ }
105
+ return LICENSE_KEY_PATTERN.test(key.trim().toUpperCase());
106
+ }
107
+
108
+ /**
109
+ * Show the Pro branding header.
110
+ */
111
+ function showProHeader() {
112
+ console.log('');
113
+ console.log(gold(' ╔══════════════════════════════════════════════╗'));
114
+ console.log(gold(' ║ grimoire Pro Installation Wizard ║'));
115
+ console.log(gold(' ║ Premium Content & Features ║'));
116
+ console.log(gold(' ╚══════════════════════════════════════════════╝'));
117
+ console.log('');
118
+ }
119
+
120
+ /**
121
+ * Show step indicator.
122
+ *
123
+ * @param {number} current - Current step (1-based)
124
+ * @param {number} total - Total steps
125
+ * @param {string} label - Step label
126
+ */
127
+ function showStep(current, total, label) {
128
+ const progress = `[${current}/${total}]`;
129
+ console.log(gold(`\n ${progress} ${label}`));
130
+ console.log(colors.dim(' ' + '─'.repeat(44)));
131
+ }
132
+
133
+ /**
134
+ * Try to load the license API client via lazy import.
135
+ *
136
+ * @returns {{ LicenseApiClient: Function, licenseApi: Object }|null} License API or null
137
+ */
138
+ function loadLicenseApi() {
139
+ try {
140
+ return require('../../../../pro/license/license-api');
141
+ } catch {
142
+ return null;
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Try to load the feature gate via lazy import.
148
+ *
149
+ * @returns {{ featureGate: Object }|null} Feature gate or null
150
+ */
151
+ function loadFeatureGate() {
152
+ try {
153
+ return require('../../../../pro/license/feature-gate');
154
+ } catch {
155
+ return null;
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Try to load the pro scaffolder via lazy import.
161
+ *
162
+ * @returns {{ scaffoldProContent: Function }|null} Scaffolder or null
163
+ */
164
+ function loadProScaffolder() {
165
+ try {
166
+ return require('../pro/pro-scaffolder');
167
+ } catch {
168
+ return null;
169
+ }
170
+ }
171
+
172
+ /**
173
+ * Step 1: License Gate — authenticate and validate license.
174
+ *
175
+ * Supports two activation methods:
176
+ * 1. Email + Password authentication (recommended, PRO-11)
177
+ * 2. License key (legacy, PRO-6)
178
+ *
179
+ * In CI mode, reads from grimoire_PRO_EMAIL + grimoire_PRO_PASSWORD or grimoire_PRO_KEY env vars.
180
+ * In interactive mode, prompts user to choose method.
181
+ *
182
+ * @param {Object} [options={}] - Options
183
+ * @param {string} [options.key] - Pre-provided key (from CLI args or env)
184
+ * @param {string} [options.email] - Pre-provided email (from CLI args or env)
185
+ * @param {string} [options.password] - Pre-provided password (from CLI args or env)
186
+ * @returns {Promise<Object>} Result with { success, key, activationResult }
187
+ */
188
+ async function stepLicenseGate(options = {}) {
189
+ showStep(1, 3, 'License Activation');
190
+
191
+ const isCI = isCIEnvironment();
192
+
193
+ // CI mode: check env vars
194
+ if (isCI) {
195
+ return stepLicenseGateCI(options);
196
+ }
197
+
198
+ // Pre-provided key (from CLI args)
199
+ if (options.key) {
200
+ return stepLicenseGateWithKey(options.key);
201
+ }
202
+
203
+ // Pre-provided email credentials (from CLI args)
204
+ if (options.email && options.password) {
205
+ return authenticateWithEmail(options.email, options.password);
206
+ }
207
+
208
+ // Interactive mode: prompt for method
209
+ const inquirer = require('inquirer');
210
+
211
+ const { method } = await inquirer.prompt([
212
+ {
213
+ type: 'list',
214
+ name: 'method',
215
+ message: colors.primary('How would you like to activate Pro?'),
216
+ choices: [
217
+ {
218
+ name: 'Login or create account (Recommended)',
219
+ value: 'email',
220
+ },
221
+ {
222
+ name: 'Enter license key (legacy)',
223
+ value: 'key',
224
+ },
225
+ ],
226
+ },
227
+ ]);
228
+
229
+ if (method === 'email') {
230
+ return stepLicenseGateWithEmail();
231
+ }
232
+
233
+ return stepLicenseGateWithKeyInteractive();
234
+ }
235
+
236
+ /**
237
+ * CI mode license gate — reads from env vars.
238
+ *
239
+ * Priority: grimoire_PRO_EMAIL + grimoire_PRO_PASSWORD > grimoire_PRO_KEY
240
+ *
241
+ * @param {Object} options - Options with possible pre-provided credentials
242
+ * @returns {Promise<Object>} Result with { success, key, activationResult }
243
+ */
244
+ async function stepLicenseGateCI(options) {
245
+ const email = options.email || process.env.grimoire_PRO_EMAIL;
246
+ const password = options.password || process.env.grimoire_PRO_PASSWORD;
247
+ const key = options.key || process.env.grimoire_PRO_KEY;
248
+
249
+ // Prefer email auth over key
250
+ if (email && password) {
251
+ return authenticateWithEmail(email, password);
252
+ }
253
+
254
+ if (key) {
255
+ return stepLicenseGateWithKey(key);
256
+ }
257
+
258
+ return {
259
+ success: false,
260
+ error: 'CI mode: Set grimoire_PRO_EMAIL + grimoire_PRO_PASSWORD or grimoire_PRO_KEY environment variables.',
261
+ };
262
+ }
263
+
264
+ /**
265
+ * Interactive email/password license gate flow.
266
+ *
267
+ * New flow (PRO-11 v2):
268
+ * 1. Email → checkEmail API → { isBuyer, hasAccount }
269
+ * 2. NOT buyer → "No Pro access found" → STOP
270
+ * 3. IS buyer + HAS account → Password → Login (with retry) → Activate
271
+ * 4. IS buyer + NO account → Password + Confirm → Signup → Verify email → Login → Activate
272
+ *
273
+ * @returns {Promise<Object>} Result with { success, key, activationResult }
274
+ */
275
+ async function stepLicenseGateWithEmail() {
276
+ const inquirer = require('inquirer');
277
+
278
+ // Step 1: Get email
279
+ const { email } = await inquirer.prompt([
280
+ {
281
+ type: 'input',
282
+ name: 'email',
283
+ message: colors.primary('Email:'),
284
+ validate: (input) => {
285
+ if (!input || !input.trim()) {
286
+ return 'Email is required';
287
+ }
288
+ if (!EMAIL_PATTERN.test(input.trim())) {
289
+ return 'Please enter a valid email address';
290
+ }
291
+ return true;
292
+ },
293
+ },
294
+ ]);
295
+
296
+ const trimmedEmail = email.trim();
297
+
298
+ // Step 2: Check buyer status + account existence
299
+ const loader = module.exports._testing ? module.exports._testing.loadLicenseApi : loadLicenseApi;
300
+ const licenseModule = loader();
301
+
302
+ if (!licenseModule) {
303
+ return {
304
+ success: false,
305
+ error: 'Pro license module not available. Ensure @grimoire-fullstack/pro is installed.',
306
+ };
307
+ }
308
+
309
+ const { LicenseApiClient } = licenseModule;
310
+ const client = new LicenseApiClient();
311
+
312
+ // Check connectivity
313
+ const online = await client.isOnline();
314
+ if (!online) {
315
+ return {
316
+ success: false,
317
+ error: 'License server is unreachable. Check your internet connection and try again.',
318
+ };
319
+ }
320
+
321
+ const checkSpinner = createSpinner('Verifying your access...');
322
+ checkSpinner.start();
323
+
324
+ let checkResult;
325
+ try {
326
+ checkResult = await client.checkEmail(trimmedEmail);
327
+ } catch (checkError) {
328
+ checkSpinner.fail(`Verification failed: ${checkError.message}`);
329
+ return { success: false, error: checkError.message };
330
+ }
331
+
332
+ // Step 2a: NOT a buyer → stop
333
+ if (!checkResult.isBuyer) {
334
+ checkSpinner.fail('No grimoire Pro access found for this email.');
335
+ console.log('');
336
+ showInfo('If you believe this is an error, please contact support:');
337
+ showInfo(' Email: support@grimoire.ai');
338
+ showInfo(' Purchase Pro: https://pro.grimoire.ai');
339
+ return { success: false, error: 'Email not found in Pro buyers list.' };
340
+ }
341
+
342
+ // Step 2b: IS a buyer
343
+ if (checkResult.hasAccount) {
344
+ checkSpinner.succeed('Pro access confirmed! Account found.');
345
+ // Flow 3: Existing account → Login with password (retry loop)
346
+ return loginWithRetry(client, trimmedEmail);
347
+ }
348
+
349
+ checkSpinner.succeed('Pro access confirmed! Let\'s create your account.');
350
+ // Flow 4: New account → Create account flow
351
+ return createAccountFlow(client, trimmedEmail);
352
+ }
353
+
354
+ /**
355
+ * Login flow with password retry (max 3 attempts).
356
+ *
357
+ * @param {object} client - LicenseApiClient instance
358
+ * @param {string} email - Verified buyer email
359
+ * @returns {Promise<Object>} Result with { success, key, activationResult }
360
+ */
361
+ async function loginWithRetry(client, email) {
362
+ const inquirer = require('inquirer');
363
+
364
+ for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
365
+ const { password } = await inquirer.prompt([
366
+ {
367
+ type: 'password',
368
+ name: 'password',
369
+ message: colors.primary('Password:'),
370
+ mask: '*',
371
+ validate: (input) => {
372
+ if (!input || input.length < MIN_PASSWORD_LENGTH) {
373
+ return `Password must be at least ${MIN_PASSWORD_LENGTH} characters`;
374
+ }
375
+ return true;
376
+ },
377
+ },
378
+ ]);
379
+
380
+ const spinner = createSpinner('Authenticating...');
381
+ spinner.start();
382
+
383
+ try {
384
+ const loginResult = await client.login(email, password);
385
+ spinner.succeed('Authenticated successfully.');
386
+
387
+ // Wait for email verification if needed
388
+ if (!loginResult.emailVerified) {
389
+ const verifyResult = await waitForEmailVerification(client, loginResult.sessionToken, email);
390
+ if (!verifyResult.success) {
391
+ return verifyResult;
392
+ }
393
+ }
394
+
395
+ // Activate Pro
396
+ return activateProByAuth(client, loginResult.sessionToken);
397
+ } catch (loginError) {
398
+ if (loginError.code === 'INVALID_CREDENTIALS') {
399
+ const remaining = MAX_RETRIES - attempt;
400
+ if (remaining > 0) {
401
+ spinner.fail(`Incorrect password. ${remaining} attempt${remaining > 1 ? 's' : ''} remaining.`);
402
+ showInfo('Forgot your password? Visit https://pro.grimoire.ai/reset-password');
403
+ } else {
404
+ spinner.fail('Maximum login attempts reached.');
405
+ showInfo('Forgot your password? Visit https://pro.grimoire.ai/reset-password');
406
+ showInfo('Or contact support: support@grimoire.ai');
407
+ return { success: false, error: 'Maximum login attempts reached.' };
408
+ }
409
+ } else if (loginError.code === 'AUTH_RATE_LIMITED') {
410
+ spinner.fail(loginError.message);
411
+ return { success: false, error: loginError.message };
412
+ } else {
413
+ spinner.fail(`Authentication failed: ${loginError.message}`);
414
+ return { success: false, error: loginError.message };
415
+ }
416
+ }
417
+ }
418
+
419
+ return { success: false, error: 'Maximum login attempts reached.' };
420
+ }
421
+
422
+ /**
423
+ * Create account flow for new buyers.
424
+ *
425
+ * Asks for password, creates account, waits for email verification.
426
+ *
427
+ * @param {object} client - LicenseApiClient instance
428
+ * @param {string} email - Verified buyer email
429
+ * @returns {Promise<Object>} Result with { success, key, activationResult }
430
+ */
431
+ async function createAccountFlow(client, email) {
432
+ const inquirer = require('inquirer');
433
+
434
+ console.log('');
435
+ showInfo('Create your grimoire Pro account to get started.');
436
+
437
+ // Ask for password with confirmation
438
+ const { newPassword } = await inquirer.prompt([
439
+ {
440
+ type: 'password',
441
+ name: 'newPassword',
442
+ message: colors.primary('Choose a password:'),
443
+ mask: '*',
444
+ validate: (input) => {
445
+ if (!input || input.length < MIN_PASSWORD_LENGTH) {
446
+ return `Password must be at least ${MIN_PASSWORD_LENGTH} characters`;
447
+ }
448
+ return true;
449
+ },
450
+ },
451
+ ]);
452
+
453
+ const { confirmPassword } = await inquirer.prompt([
454
+ {
455
+ type: 'password',
456
+ name: 'confirmPassword',
457
+ message: colors.primary('Confirm password:'),
458
+ mask: '*',
459
+ validate: (input) => {
460
+ if (input !== newPassword) {
461
+ return 'Passwords do not match';
462
+ }
463
+ return true;
464
+ },
465
+ },
466
+ ]);
467
+
468
+ // Create account
469
+ const spinner = createSpinner('Creating account...');
470
+ spinner.start();
471
+
472
+ let sessionToken;
473
+ try {
474
+ await client.signup(email, confirmPassword);
475
+ spinner.succeed('Account created! Verification email sent.');
476
+ } catch (signupError) {
477
+ if (signupError.code === 'EMAIL_ALREADY_REGISTERED') {
478
+ spinner.info('Account already exists. Switching to login...');
479
+ return loginWithRetry(client, email);
480
+ }
481
+ spinner.fail(`Account creation failed: ${signupError.message}`);
482
+ return { success: false, error: signupError.message };
483
+ }
484
+
485
+ // Wait for email verification
486
+ console.log('');
487
+ showInfo('Please check your email and click the verification link.');
488
+
489
+ // Login after signup to get session token
490
+ try {
491
+ const loginResult = await client.login(email, confirmPassword);
492
+ sessionToken = loginResult.sessionToken;
493
+ } catch {
494
+ // Login might fail if email not verified yet — that's OK, we'll poll
495
+ }
496
+
497
+ if (sessionToken) {
498
+ const verifyResult = await waitForEmailVerification(client, sessionToken, email);
499
+ if (!verifyResult.success) {
500
+ return verifyResult;
501
+ }
502
+ } else {
503
+ // Need to wait for verification then login
504
+ showInfo('Waiting for email verification...');
505
+ showInfo('After verifying, the installation will continue automatically.');
506
+
507
+ // Poll by trying to login periodically
508
+ const startTime = Date.now();
509
+ while (Date.now() - startTime < VERIFY_POLL_TIMEOUT_MS) {
510
+ await new Promise((resolve) => setTimeout(resolve, VERIFY_POLL_INTERVAL_MS));
511
+ try {
512
+ const loginResult = await client.login(email, confirmPassword);
513
+ sessionToken = loginResult.sessionToken;
514
+ if (loginResult.emailVerified) {
515
+ showSuccess('Email verified!');
516
+ break;
517
+ }
518
+ // Got session but not verified yet — use the verification polling
519
+ const verifyResult = await waitForEmailVerification(client, sessionToken, email);
520
+ if (!verifyResult.success) {
521
+ return verifyResult;
522
+ }
523
+ break;
524
+ } catch {
525
+ // Still waiting for verification
526
+ }
527
+ }
528
+
529
+ if (!sessionToken) {
530
+ showError('Email verification timed out after 10 minutes.');
531
+ showInfo('Run the installer again to retry.');
532
+ return { success: false, error: 'Email verification timed out.' };
533
+ }
534
+ }
535
+
536
+ // Activate Pro
537
+ return activateProByAuth(client, sessionToken);
538
+ }
539
+
540
+ /**
541
+ * Authenticate with email and password (CI mode / pre-provided credentials).
542
+ *
543
+ * For interactive mode, use stepLicenseGateWithEmail() instead (buyer-first flow).
544
+ * This function is used when credentials are pre-provided (CI, CLI args).
545
+ *
546
+ * @param {string} email - User email
547
+ * @param {string} password - User password
548
+ * @returns {Promise<Object>} Result with { success, key, activationResult }
549
+ */
550
+ async function authenticateWithEmail(email, password) {
551
+ const loader = module.exports._testing ? module.exports._testing.loadLicenseApi : loadLicenseApi;
552
+ const licenseModule = loader();
553
+
554
+ if (!licenseModule) {
555
+ return {
556
+ success: false,
557
+ error: 'Pro license module not available. Ensure @grimoire-fullstack/pro is installed.',
558
+ };
559
+ }
560
+
561
+ const { LicenseApiClient } = licenseModule;
562
+ const client = new LicenseApiClient();
563
+
564
+ // Check connectivity
565
+ const online = await client.isOnline();
566
+ if (!online) {
567
+ return {
568
+ success: false,
569
+ error: 'License server is unreachable. Check your internet connection and try again.',
570
+ };
571
+ }
572
+
573
+ // CI mode: check buyer first, then try login or auto-signup
574
+ const checkSpinner = createSpinner('Verifying access...');
575
+ checkSpinner.start();
576
+
577
+ try {
578
+ const checkResult = await client.checkEmail(email);
579
+ if (!checkResult.isBuyer) {
580
+ checkSpinner.fail('No grimoire Pro access found for this email.');
581
+ return { success: false, error: 'Email not found in Pro buyers list.' };
582
+ }
583
+ checkSpinner.succeed('Pro access confirmed.');
584
+ } catch {
585
+ checkSpinner.info('Buyer check unavailable, proceeding with login...');
586
+ }
587
+
588
+ // Try login
589
+ const spinner = createSpinner('Authenticating...');
590
+ spinner.start();
591
+
592
+ let sessionToken;
593
+ let emailVerified;
594
+
595
+ try {
596
+ const loginResult = await client.login(email, password);
597
+ sessionToken = loginResult.sessionToken;
598
+ emailVerified = loginResult.emailVerified;
599
+ spinner.succeed('Authenticated successfully.');
600
+ } catch (loginError) {
601
+ if (loginError.code === 'INVALID_CREDENTIALS') {
602
+ spinner.info('Login failed, attempting signup...');
603
+ try {
604
+ await client.signup(email, password);
605
+ showSuccess('Account created. Verification email sent!');
606
+ emailVerified = false;
607
+ const loginAfterSignup = await client.login(email, password);
608
+ sessionToken = loginAfterSignup.sessionToken;
609
+ } catch (signupError) {
610
+ if (signupError.code === 'EMAIL_ALREADY_REGISTERED') {
611
+ showError('Account exists but the password is incorrect.');
612
+ return { success: false, error: 'Invalid password.' };
613
+ }
614
+ return { success: false, error: signupError.message };
615
+ }
616
+ } else {
617
+ spinner.fail(`Authentication failed: ${loginError.message}`);
618
+ return { success: false, error: loginError.message };
619
+ }
620
+ }
621
+
622
+ if (!sessionToken) {
623
+ return { success: false, error: 'Authentication failed.' };
624
+ }
625
+
626
+ // Wait for email verification if needed
627
+ if (!emailVerified) {
628
+ const verifyResult = await waitForEmailVerification(client, sessionToken, email);
629
+ if (!verifyResult.success) {
630
+ return verifyResult;
631
+ }
632
+ }
633
+
634
+ // Activate Pro
635
+ return activateProByAuth(client, sessionToken);
636
+ }
637
+
638
+ /**
639
+ * Wait for email verification with polling.
640
+ *
641
+ * Polls the server every 5 seconds for up to 10 minutes.
642
+ * User can press R to resend verification email.
643
+ *
644
+ * @param {object} client - LicenseApiClient instance
645
+ * @param {string} sessionToken - Session token (accessToken)
646
+ * @param {string} email - User email for resend functionality
647
+ * @returns {Promise<Object>} Result with { success }
648
+ */
649
+ async function waitForEmailVerification(client, sessionToken, email) {
650
+ console.log('');
651
+ showInfo('Waiting for email verification...');
652
+ showInfo('Open your email and click the verification link.');
653
+ console.log(colors.dim(' (Checking every 5 seconds... timeout in 10 minutes)'));
654
+
655
+ if (!isCIEnvironment()) {
656
+ console.log(colors.dim(' [Press R to resend verification email]'));
657
+ }
658
+
659
+ const startTime = Date.now();
660
+ let resendHint = false;
661
+
662
+ // Set up keyboard listener for resend (non-CI only)
663
+ let keyListener;
664
+ if (!isCIEnvironment() && process.stdin.setRawMode) {
665
+ process.stdin.setRawMode(true);
666
+ process.stdin.resume();
667
+ keyListener = (key) => {
668
+ if (key.toString().toLowerCase() === 'r') {
669
+ resendHint = true;
670
+ }
671
+ // Ctrl+C
672
+ if (key.toString() === '\u0003') {
673
+ cleanupKeyListener();
674
+ process.exit(0);
675
+ }
676
+ };
677
+ process.stdin.on('data', keyListener);
678
+ }
679
+
680
+ function cleanupKeyListener() {
681
+ if (keyListener) {
682
+ process.stdin.removeListener('data', keyListener);
683
+ if (process.stdin.setRawMode) {
684
+ process.stdin.setRawMode(false);
685
+ }
686
+ process.stdin.pause();
687
+ }
688
+ }
689
+
690
+ try {
691
+ while (Date.now() - startTime < VERIFY_POLL_TIMEOUT_MS) {
692
+ // Handle resend request
693
+ if (resendHint) {
694
+ resendHint = false;
695
+ try {
696
+ await client.resendVerification(email);
697
+ showInfo('Verification email resent.');
698
+ } catch (error) {
699
+ showWarning(`Could not resend: ${error.message}`);
700
+ }
701
+ }
702
+
703
+ // Poll verification status
704
+ try {
705
+ const status = await client.checkEmailVerified(sessionToken);
706
+ if (status.verified) {
707
+ showSuccess('Email verified!');
708
+ return { success: true };
709
+ }
710
+ } catch {
711
+ // Polling failure is non-fatal, continue
712
+ }
713
+
714
+ // Wait before next poll
715
+ await new Promise((resolve) => setTimeout(resolve, VERIFY_POLL_INTERVAL_MS));
716
+ }
717
+
718
+ // Timeout
719
+ showError('Email verification timed out after 10 minutes.');
720
+ showInfo('Run the installer again to retry verification.');
721
+ return { success: false, error: 'Email verification timed out.' };
722
+ } finally {
723
+ cleanupKeyListener();
724
+ }
725
+ }
726
+
727
+ /**
728
+ * Activate Pro using an authenticated session.
729
+ *
730
+ * @param {object} client - LicenseApiClient instance
731
+ * @param {string} sessionToken - Authenticated session token
732
+ * @returns {Promise<Object>} Result with { success, key, activationResult }
733
+ */
734
+ async function activateProByAuth(client, sessionToken) {
735
+ const spinner = createSpinner('Validating Pro subscription...');
736
+ spinner.start();
737
+
738
+ try {
739
+ // Generate machine fingerprint
740
+ const os = require('os');
741
+ const crypto = require('crypto');
742
+ const machineId = crypto
743
+ .createHash('sha256')
744
+ .update(`${os.hostname()}-${os.platform()}-${os.arch()}`)
745
+ .digest('hex')
746
+ .substring(0, 32);
747
+
748
+ // Read grimoire version
749
+ let grimoireCoreVersion = 'unknown';
750
+ try {
751
+ const path = require('path');
752
+ const fs = require('fs');
753
+ const pkgPath = path.join(__dirname, '..', '..', '..', '..', 'package.json');
754
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
755
+ grimoireCoreVersion = pkg.version || 'unknown';
756
+ } catch {
757
+ // Keep 'unknown'
758
+ }
759
+
760
+ const activationResult = await client.activateByAuth(sessionToken, machineId, grimoireCoreVersion);
761
+
762
+ spinner.succeed(`Pro subscription confirmed! License: ${maskLicenseKey(activationResult.key)}`);
763
+ return { success: true, key: activationResult.key, activationResult };
764
+ } catch (error) {
765
+ if (error.code === 'NOT_A_BUYER') {
766
+ spinner.fail('No active Pro subscription found for this email.');
767
+ showInfo('Purchase Pro at https://pro.grimoire.ai');
768
+ return { success: false, error: error.message };
769
+ }
770
+ if (error.code === 'SEAT_LIMIT_EXCEEDED') {
771
+ spinner.fail(error.message);
772
+ showInfo('Deactivate another device or upgrade your license.');
773
+ return { success: false, error: error.message };
774
+ }
775
+
776
+ spinner.fail(`Activation failed: ${error.message}`);
777
+ return { success: false, error: error.message };
778
+ }
779
+ }
780
+
781
+ /**
782
+ * Interactive license key gate (legacy flow).
783
+ *
784
+ * @returns {Promise<Object>} Result with { success, key, activationResult }
785
+ */
786
+ async function stepLicenseGateWithKeyInteractive() {
787
+ const inquirer = require('inquirer');
788
+
789
+ for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
790
+ const { licenseKey } = await inquirer.prompt([
791
+ {
792
+ type: 'password',
793
+ name: 'licenseKey',
794
+ message: colors.primary('Enter your Pro license key:'),
795
+ mask: '*',
796
+ validate: (input) => {
797
+ if (!input || !input.trim()) {
798
+ return 'License key is required';
799
+ }
800
+ if (!validateKeyFormat(input)) {
801
+ return 'Invalid format. Expected: PRO-XXXX-XXXX-XXXX-XXXX';
802
+ }
803
+ return true;
804
+ },
805
+ },
806
+ ]);
807
+
808
+ const key = licenseKey.trim().toUpperCase();
809
+ const result = await validateKeyWithApi(key);
810
+
811
+ if (result.success) {
812
+ showSuccess(`License validated: ${maskLicenseKey(key)}`);
813
+ return { success: true, key, activationResult: result.data };
814
+ }
815
+
816
+ const remaining = MAX_RETRIES - attempt;
817
+ if (remaining > 0) {
818
+ showError(`${result.error} (${remaining} attempt${remaining > 1 ? 's' : ''} remaining)`);
819
+ } else {
820
+ showError(`${result.error} — no attempts remaining.`);
821
+ return { success: false, error: result.error };
822
+ }
823
+ }
824
+
825
+ return { success: false, error: 'Maximum attempts reached.' };
826
+ }
827
+
828
+ /**
829
+ * Validate with pre-provided license key (CI or CLI arg).
830
+ *
831
+ * @param {string} key - License key
832
+ * @returns {Promise<Object>} Result with { success, key, activationResult }
833
+ */
834
+ async function stepLicenseGateWithKey(key) {
835
+ if (!validateKeyFormat(key)) {
836
+ return {
837
+ success: false,
838
+ error: `Invalid key format: ${maskLicenseKey(key)}. Expected: PRO-XXXX-XXXX-XXXX-XXXX`,
839
+ };
840
+ }
841
+
842
+ const spinner = createSpinner(`Validating license ${maskLicenseKey(key)}...`);
843
+ spinner.start();
844
+
845
+ const result = await validateKeyWithApi(key);
846
+
847
+ if (result.success) {
848
+ spinner.succeed(`License validated: ${maskLicenseKey(key)}`);
849
+ return { success: true, key, activationResult: result.data };
850
+ }
851
+
852
+ spinner.fail(result.error);
853
+ return { success: false, error: result.error };
854
+ }
855
+
856
+ /**
857
+ * Validate a key against the license API.
858
+ *
859
+ * @param {string} key - License key
860
+ * @returns {Promise<Object>} Result with { success, data?, error? }
861
+ */
862
+ async function validateKeyWithApi(key) {
863
+ // Use exports._testing for testability (allows mock injection)
864
+ const loader = module.exports._testing ? module.exports._testing.loadLicenseApi : loadLicenseApi;
865
+ const licenseModule = loader();
866
+
867
+ if (!licenseModule) {
868
+ return {
869
+ success: false,
870
+ error: 'Pro license module not available. Ensure @grimoire-fullstack/pro is installed.',
871
+ };
872
+ }
873
+
874
+ const { LicenseApiClient } = licenseModule;
875
+ const client = new LicenseApiClient();
876
+
877
+ try {
878
+ // Check if API is reachable
879
+ const online = await client.isOnline();
880
+
881
+ if (!online) {
882
+ return {
883
+ success: false,
884
+ error: 'License server is unreachable. Check your internet connection and try again.',
885
+ };
886
+ }
887
+
888
+ // Generate a simple machine fingerprint
889
+ const os = require('os');
890
+ const crypto = require('crypto');
891
+ const machineId = crypto
892
+ .createHash('sha256')
893
+ .update(`${os.hostname()}-${os.platform()}-${os.arch()}`)
894
+ .digest('hex')
895
+ .substring(0, 32);
896
+
897
+ // Read grimoire version
898
+ let grimoireCoreVersion = 'unknown';
899
+ try {
900
+ const path = require('path');
901
+ const fs = require('fs');
902
+ const pkgPath = path.join(__dirname, '..', '..', '..', '..', 'package.json');
903
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
904
+ grimoireCoreVersion = pkg.version || 'unknown';
905
+ } catch {
906
+ // Keep 'unknown'
907
+ }
908
+
909
+ const activationResult = await client.activate(key, machineId, grimoireCoreVersion);
910
+
911
+ return { success: true, data: activationResult };
912
+ } catch (error) {
913
+ // Handle specific error codes from license-api
914
+ if (error.code === 'INVALID_KEY') {
915
+ return { success: false, error: 'Invalid license key.' };
916
+ }
917
+ if (error.code === 'EXPIRED_KEY') {
918
+ return { success: false, error: 'License key has expired.' };
919
+ }
920
+ if (error.code === 'SEAT_LIMIT_EXCEEDED') {
921
+ return { success: false, error: 'Maximum activations reached for this key.' };
922
+ }
923
+ if (error.code === 'RATE_LIMITED') {
924
+ return { success: false, error: 'Too many requests. Please wait and try again.' };
925
+ }
926
+ if (error.code === 'NETWORK_ERROR') {
927
+ return {
928
+ success: false,
929
+ error: 'License server is unreachable. Check your internet connection and try again.',
930
+ };
931
+ }
932
+
933
+ return {
934
+ success: false,
935
+ error: `License validation failed: ${error.message || 'Unknown error'}`,
936
+ };
937
+ }
938
+ }
939
+
940
+ /**
941
+ * Step 2: Install/Scaffold — copy pro content into the project.
942
+ *
943
+ * @param {string} targetDir - Project root directory
944
+ * @param {Object} [options={}] - Options
945
+ * @returns {Promise<Object>} Result with { success, scaffoldResult }
946
+ */
947
+ async function stepInstallScaffold(targetDir, options = {}) {
948
+ showStep(2, 3, 'Pro Content Installation');
949
+
950
+ const path = require('path');
951
+ const fs = require('fs');
952
+ const { execSync } = require('child_process');
953
+
954
+ const proSourceDir = path.join(targetDir, 'node_modules', '@grimoire-fullstack', 'pro');
955
+
956
+ // Step 2a: Ensure package.json exists (greenfield projects)
957
+ const packageJsonPath = path.join(targetDir, 'package.json');
958
+ if (!fs.existsSync(packageJsonPath)) {
959
+ const initSpinner = createSpinner('Initializing package.json...');
960
+ initSpinner.start();
961
+ try {
962
+ execSync('npm init -y', { cwd: targetDir, stdio: 'pipe' });
963
+ initSpinner.succeed('package.json created');
964
+ } catch (err) {
965
+ initSpinner.fail('Failed to create package.json');
966
+ return { success: false, error: `npm init failed: ${err.message}` };
967
+ }
968
+ }
969
+
970
+ // Step 2b: Install @grimoire-fullstack/pro if not present
971
+ if (!fs.existsSync(proSourceDir)) {
972
+ const installSpinner = createSpinner('Installing @grimoire-fullstack/pro...');
973
+ installSpinner.start();
974
+ try {
975
+ execSync('npm install @grimoire-fullstack/pro', {
976
+ cwd: targetDir,
977
+ stdio: 'pipe',
978
+ timeout: 120000,
979
+ });
980
+ installSpinner.succeed('Pro package installed');
981
+ } catch (err) {
982
+ installSpinner.fail('Failed to install Pro package');
983
+ return {
984
+ success: false,
985
+ error: `npm install @grimoire-fullstack/pro failed: ${err.message}. Try manually: npm install @grimoire-fullstack/pro`,
986
+ };
987
+ }
988
+
989
+ // Validate installation
990
+ if (!fs.existsSync(proSourceDir)) {
991
+ return {
992
+ success: false,
993
+ error: 'Pro package not found after npm install. Check npm output.',
994
+ };
995
+ }
996
+ }
997
+
998
+ // Step 2c: Scaffold pro content
999
+ const scaffolderModule = loadProScaffolder();
1000
+
1001
+ if (!scaffolderModule) {
1002
+ showWarning('Pro scaffolder not available. Ensure @grimoire-fullstack/pro is installed.');
1003
+ return { success: false, error: 'Pro scaffolder module not found.' };
1004
+ }
1005
+
1006
+ const { scaffoldProContent } = scaffolderModule;
1007
+
1008
+ const spinner = createSpinner('Scaffolding pro content...');
1009
+ spinner.start();
1010
+
1011
+ try {
1012
+ const scaffoldResult = await scaffoldProContent(targetDir, proSourceDir, {
1013
+ onProgress: (progress) => {
1014
+ spinner.text = `Scaffolding: ${progress.message}`;
1015
+ },
1016
+ force: options.force || false,
1017
+ });
1018
+
1019
+ if (scaffoldResult.success) {
1020
+ spinner.succeed(`Pro content installed (${scaffoldResult.copiedFiles.length} files)`);
1021
+
1022
+ if (scaffoldResult.warnings.length > 0) {
1023
+ for (const warning of scaffoldResult.warnings) {
1024
+ showWarning(warning);
1025
+ }
1026
+ }
1027
+
1028
+ return { success: true, scaffoldResult };
1029
+ }
1030
+
1031
+ spinner.fail('Scaffolding failed');
1032
+ for (const error of scaffoldResult.errors) {
1033
+ showError(error);
1034
+ }
1035
+
1036
+ return { success: false, error: scaffoldResult.errors.join('; '), scaffoldResult };
1037
+ } catch (error) {
1038
+ spinner.fail(`Scaffolding error: ${error.message}`);
1039
+ return { success: false, error: error.message };
1040
+ }
1041
+ }
1042
+
1043
+ /**
1044
+ * Step 3: Verify — check installed pro content and list features.
1045
+ *
1046
+ * @param {Object} [scaffoldResult] - Result from step 2
1047
+ * @returns {Promise<Object>} Verification result
1048
+ */
1049
+ async function stepVerify(scaffoldResult) {
1050
+ showStep(3, 3, 'Verification');
1051
+
1052
+ const result = {
1053
+ success: true,
1054
+ features: [],
1055
+ squads: [],
1056
+ configs: [],
1057
+ };
1058
+
1059
+ // Show scaffolded content summary
1060
+ if (scaffoldResult && scaffoldResult.copiedFiles) {
1061
+ const files = scaffoldResult.copiedFiles;
1062
+
1063
+ // Categorize files
1064
+ result.squads = files.filter((f) => f.startsWith('squads/'));
1065
+ result.configs = files.filter(
1066
+ (f) => f.endsWith('.yaml') || f.endsWith('.json'),
1067
+ );
1068
+
1069
+ showInfo(`Files installed: ${files.length}`);
1070
+
1071
+ if (result.squads.length > 0) {
1072
+ // Extract unique squad names
1073
+ const squadNames = [...new Set(
1074
+ result.squads
1075
+ .map((f) => f.split('/')[1])
1076
+ .filter(Boolean),
1077
+ )];
1078
+ showSuccess(`Squads: ${squadNames.join(', ')}`);
1079
+ }
1080
+
1081
+ if (result.configs.length > 0) {
1082
+ showSuccess(`Configs: ${result.configs.length} files`);
1083
+ }
1084
+ }
1085
+
1086
+ // Check feature gate if available
1087
+ const featureModule = loadFeatureGate();
1088
+
1089
+ if (featureModule) {
1090
+ const { featureGate } = featureModule;
1091
+ featureGate.reload();
1092
+
1093
+ const available = featureGate.listAvailable();
1094
+ result.features = available;
1095
+
1096
+ if (available.length > 0) {
1097
+ showSuccess(`Features unlocked: ${available.length}`);
1098
+ for (const feature of available.slice(0, 5)) {
1099
+ console.log(colors.dim(` ${feature}`));
1100
+ }
1101
+ if (available.length > 5) {
1102
+ console.log(colors.dim(` ... and ${available.length - 5} more`));
1103
+ }
1104
+ }
1105
+ }
1106
+
1107
+ // Final status
1108
+ console.log('');
1109
+ console.log(gold(' ════════════════════════════════════════════════'));
1110
+ console.log(status.celebrate('grimoire Pro installation complete!'));
1111
+ console.log(gold(' ════════════════════════════════════════════════'));
1112
+ console.log('');
1113
+
1114
+ return result;
1115
+ }
1116
+
1117
+ /**
1118
+ * Run the full Pro Installation Wizard.
1119
+ *
1120
+ * Main entry point. Orchestrates the 3-step flow:
1121
+ * 1. License Gate (validate key)
1122
+ * 2. Install/Scaffold (copy pro content)
1123
+ * 3. Verify (list installed features)
1124
+ *
1125
+ * @param {Object} [options={}] - Wizard options
1126
+ * @param {string} [options.key] - Pre-provided license key
1127
+ * @param {string} [options.targetDir] - Project root (default: process.cwd())
1128
+ * @param {boolean} [options.force] - Force overwrite existing content
1129
+ * @param {boolean} [options.quiet] - Suppress non-essential output
1130
+ * @returns {Promise<Object>} Wizard result
1131
+ */
1132
+ async function runProWizard(options = {}) {
1133
+ const targetDir = options.targetDir || process.cwd();
1134
+ const isCI = isCIEnvironment();
1135
+
1136
+ const result = {
1137
+ success: false,
1138
+ licenseValidated: false,
1139
+ scaffolded: false,
1140
+ verified: false,
1141
+ };
1142
+
1143
+ // Show branding (skip in CI or quiet mode)
1144
+ if (!isCI && !options.quiet) {
1145
+ showProHeader();
1146
+ }
1147
+
1148
+ // Step 1: License Gate
1149
+ const licenseResult = await stepLicenseGate({
1150
+ key: options.key || process.env.grimoire_PRO_KEY,
1151
+ email: options.email || process.env.grimoire_PRO_EMAIL,
1152
+ password: options.password || process.env.grimoire_PRO_PASSWORD,
1153
+ });
1154
+
1155
+ if (!licenseResult.success) {
1156
+ showError(licenseResult.error);
1157
+
1158
+ if (!isCI) {
1159
+ showInfo('Need help? Run: npx grimoire-pro recover');
1160
+ }
1161
+
1162
+ result.error = licenseResult.error;
1163
+ return result;
1164
+ }
1165
+
1166
+ result.licenseValidated = true;
1167
+
1168
+ // Step 2: Install/Scaffold
1169
+ const scaffoldResult = await stepInstallScaffold(targetDir, {
1170
+ force: options.force,
1171
+ });
1172
+
1173
+ if (!scaffoldResult.success) {
1174
+ result.error = scaffoldResult.error;
1175
+ return result;
1176
+ }
1177
+
1178
+ result.scaffolded = true;
1179
+
1180
+ // Step 3: Verify
1181
+ const verifyResult = await stepVerify(scaffoldResult.scaffoldResult);
1182
+ result.verified = verifyResult.success;
1183
+ result.features = verifyResult.features;
1184
+ result.squads = verifyResult.squads;
1185
+ result.success = true;
1186
+
1187
+ return result;
1188
+ }
1189
+
1190
+ module.exports = {
1191
+ runProWizard,
1192
+ stepLicenseGate,
1193
+ stepInstallScaffold,
1194
+ stepVerify,
1195
+ maskLicenseKey,
1196
+ validateKeyFormat,
1197
+ isCIEnvironment,
1198
+ showProHeader,
1199
+ // Internal helpers exported for testing
1200
+ _testing: {
1201
+ validateKeyWithApi,
1202
+ authenticateWithEmail,
1203
+ waitForEmailVerification,
1204
+ activateProByAuth,
1205
+ loginWithRetry,
1206
+ createAccountFlow,
1207
+ stepLicenseGateCI,
1208
+ stepLicenseGateWithKey,
1209
+ stepLicenseGateWithKeyInteractive,
1210
+ stepLicenseGateWithEmail,
1211
+ loadLicenseApi,
1212
+ loadFeatureGate,
1213
+ loadProScaffolder,
1214
+ MAX_RETRIES,
1215
+ LICENSE_KEY_PATTERN,
1216
+ EMAIL_PATTERN,
1217
+ MIN_PASSWORD_LENGTH,
1218
+ VERIFY_POLL_INTERVAL_MS,
1219
+ VERIFY_POLL_TIMEOUT_MS,
1220
+ },
1221
+ };
1222
+
1223
+