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,1406 @@
1
+ /**
2
+ * Greeting Builder - Context-Aware Agent Greeting System (Core Logic)
3
+ *
4
+ * ARCHITECTURE NOTE:
5
+ * This is the CORE CLASS that contains all greeting logic.
6
+ * It can be used directly by agents OR via the CLI wrapper (generate-greeting.js).
7
+ *
8
+ * - This file: Core GreetingBuilder class
9
+ * - generate-greeting.js: CLI wrapper that orchestrates context loading
10
+ *
11
+ * Builds intelligent greetings based on:
12
+ * - Session type (new/existing/workflow)
13
+ * - Git configuration status
14
+ * - Project status (natural language narrative)
15
+ * - Command visibility metadata
16
+ * - Previous agent handoff context
17
+ * - Current story and branch references
18
+ *
19
+ * Story ACT-7: Context-Aware Greeting Sections
20
+ * - Section builders receive full enriched context from UnifiedActivationPipeline
21
+ * - Presentation adapts: new=full intro, existing=brief, workflow=focused
22
+ * - Role description references current story and branch
23
+ * - Project status uses natural language narrative
24
+ * - Context section references previous agent handoff intelligently
25
+ * - Footer varies by session context
26
+ * - Parallelizable sections executed with Promise.all()
27
+ * - Fallback to static templates if context loading fails (150ms per section)
28
+ *
29
+ * Used by: Most agents (direct invocation in STEP 3)
30
+ * Also used by: generate-greeting.js (CLI wrapper for @devops, @data-engineer, @ux-design-expert)
31
+ *
32
+ * @see docs/architecture/greeting-system.md for full architecture documentation
33
+ * @see generate-greeting.js for CLI wrapper
34
+ *
35
+ * Performance: <200ms total (hard limit with timeout protection)
36
+ * Fallback: Simple greeting on any error
37
+ */
38
+
39
+ const ContextDetector = require('../../core/session/context-detector');
40
+ const GitConfigDetector = require('../../infrastructure/scripts/git-config-detector');
41
+ const WorkflowNavigator = require('./workflow-navigator');
42
+ const GreetingPreferenceManager = require('./greeting-preference-manager');
43
+ const { loadProjectStatus } = require('../../infrastructure/scripts/project-status-loader');
44
+ const { PermissionMode } = require('../../core/permissions');
45
+ const { resolveConfig } = require('../../core/config/config-resolver');
46
+ const { validateUserProfile } = require('../../infrastructure/scripts/validate-user-profile');
47
+ // Story ACT-5: SessionState integration for cross-terminal workflow continuity
48
+ const { SessionState } = require('../../core/orchestration/session-state');
49
+ // Story ACT-5: SurfaceChecker integration for proactive suggestions
50
+ const { SurfaceChecker } = require('../../core/orchestration/surface-checker');
51
+ const fs = require('fs');
52
+ const path = require('path');
53
+ const yaml = require('js-yaml');
54
+
55
+ const GREETING_TIMEOUT = 150; // 150ms hard limit per-section
56
+ const _TOTAL_GREETING_TIMEOUT = 200; // 200ms total pipeline budget (Story ACT-7, documented constant)
57
+ const SECTION_TIMEOUT = 150; // 150ms per section builder (Story ACT-7 AC8)
58
+
59
+ // Story ACT-2: Validation now delegated to validate-user-profile.js
60
+ const DEFAULT_USER_PROFILE = 'advanced';
61
+
62
+ const GIT_WARNING_TEMPLATE = `
63
+ ⚠️ **Git Configuration Needed**
64
+ Your project is not connected to a git repository.
65
+ Run \`git init\` and \`git remote add origin <url>\` to enable version control.
66
+ `;
67
+
68
+ class GreetingBuilder {
69
+ constructor() {
70
+ this.contextDetector = new ContextDetector();
71
+ this.gitConfigDetector = new GitConfigDetector();
72
+ this.workflowNavigator = new WorkflowNavigator();
73
+ this.preferenceManager = new GreetingPreferenceManager();
74
+ this.config = this._loadConfig();
75
+ }
76
+
77
+ /**
78
+ * Load resolved config once, shared across greeting build.
79
+ * Story ACT-9 QA fix: Eliminates duplicate resolveConfig() calls per greeting build.
80
+ * @returns {Object|null} Resolved config object, or null on failure
81
+ */
82
+ _loadResolvedConfig() {
83
+ try {
84
+ const result = resolveConfig(process.cwd(), { skipCache: true });
85
+ return result?.config || null;
86
+ } catch (error) {
87
+ console.warn('[GreetingBuilder] Failed to load config:', error.message);
88
+ return null;
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Load user profile via config-resolver (L5 User layer has highest priority).
94
+ * Story 12.1 - AC3: Uses resolveConfig() to read user_profile from layered hierarchy.
95
+ * Story ACT-2 - AC3: Runs validate-user-profile during activation (not just installation).
96
+ * Reads fresh each time (skipCache: true) to reflect toggle changes immediately.
97
+ * @param {Object} [resolvedConfig] - Pre-loaded config to avoid duplicate resolveConfig() call
98
+ * @returns {string} User profile ('bob' | 'advanced'), defaults to 'advanced'
99
+ */
100
+ loadUserProfile(resolvedConfig) {
101
+ try {
102
+ const config = resolvedConfig || this._loadResolvedConfig();
103
+ const userProfile = config?.user_profile;
104
+
105
+ if (!userProfile) {
106
+ return DEFAULT_USER_PROFILE;
107
+ }
108
+
109
+ // Story ACT-2 - AC3: Run validation during activation pipeline (graceful)
110
+ const validation = validateUserProfile(userProfile);
111
+ if (!validation.valid) {
112
+ console.warn(`[GreetingBuilder] user_profile validation failed: ${validation.error}`);
113
+ return DEFAULT_USER_PROFILE;
114
+ }
115
+ if (validation.warning) {
116
+ console.warn(`[GreetingBuilder] user_profile warning: ${validation.warning}`);
117
+ }
118
+
119
+ return validation.value;
120
+ } catch (error) {
121
+ console.warn('[GreetingBuilder] Failed to load user_profile:', error.message);
122
+ return DEFAULT_USER_PROFILE;
123
+ }
124
+ }
125
+
126
+ /**
127
+ * Build contextual greeting for agent
128
+ * @param {Object} agent - Agent definition
129
+ * @param {Object} context - Session context
130
+ * @returns {Promise<string>} Formatted greeting
131
+ */
132
+ async buildGreeting(agent, context = {}) {
133
+ const fallbackGreeting = this.buildSimpleGreeting(agent);
134
+
135
+ try {
136
+ // ACT-11: Use pre-loaded config from pipeline context to avoid duplicate resolveConfig()
137
+ const resolvedConfig = context._coreConfig || this._loadResolvedConfig();
138
+ // Story ACT-2: Load user profile early so preference manager can account for it
139
+ const userProfile = this.loadUserProfile(resolvedConfig);
140
+
141
+ // Check user preference (Story 6.1.4), now profile-aware (Story ACT-2)
142
+ // Story ACT-2: PM agent bypasses bob mode preference restriction because
143
+ // PM is the primary interface in bob mode and needs the full contextual greeting.
144
+ const preference = (userProfile === 'bob' && agent.id === 'pm')
145
+ ? this.preferenceManager.getPreference('advanced')
146
+ : this.preferenceManager.getPreference(userProfile);
147
+
148
+ if (preference !== 'auto') {
149
+ // Override with fixed level
150
+ return this.buildFixedLevelGreeting(agent, preference);
151
+ }
152
+
153
+ // Use session-aware logic (Story 6.1.2.5)
154
+ // Story ACT-2: Pass pre-loaded userProfile to avoid double loadUserProfile() call
155
+ const greetingPromise = this._buildContextualGreeting(agent, context, userProfile);
156
+ const timeoutPromise = new Promise((_, reject) =>
157
+ setTimeout(() => reject(new Error('Greeting timeout')), GREETING_TIMEOUT),
158
+ );
159
+
160
+ return await Promise.race([greetingPromise, timeoutPromise]);
161
+ } catch (error) {
162
+ console.warn('[GreetingBuilder] Fallback to simple greeting:', error.message);
163
+ return fallbackGreeting;
164
+ }
165
+ }
166
+
167
+ /**
168
+ * Build contextual greeting (internal implementation)
169
+ * Story 10.3: Profile-aware greeting with conditional agent visibility
170
+ * Story ACT-2: Accepts pre-loaded userProfile to avoid redundant loadUserProfile() calls
171
+ * Story ACT-7: Context-aware sections with parallelization and enriched context
172
+ * Story ACT-12: Language removed — delegated to Claude Code native settings.json
173
+ * @private
174
+ * @param {Object} agent - Agent definition
175
+ * @param {Object} context - Session context (may contain pre-loaded values from pipeline)
176
+ * @param {string} [preloadedUserProfile] - Pre-loaded user profile (avoids double call)
177
+ * @returns {Promise<string>} Contextual greeting
178
+ */
179
+ async _buildContextualGreeting(agent, context, preloadedUserProfile) {
180
+ // Use pre-loaded values if available, otherwise load
181
+ const sessionType = context.sessionType || (await this._safeDetectSessionType(context));
182
+
183
+ const projectStatus = context.projectStatus || (await this._safeLoadProjectStatus());
184
+
185
+ // gitConfig: use from enriched context if available, otherwise load
186
+ const gitConfig = context.gitConfig || (await this._safeCheckGitConfig());
187
+
188
+ // Story 10.3 - AC7, AC8: Load user profile fresh each time
189
+ // Story ACT-2: Use pre-loaded value if available to avoid double resolveConfig() call
190
+ const userProfile = preloadedUserProfile || this.loadUserProfile();
191
+
192
+ // Story ACT-7 AC1: Build enriched section context for all builders
193
+ const sectionContext = {
194
+ sessionType,
195
+ projectStatus,
196
+ gitConfig,
197
+ userProfile,
198
+ previousAgent: context.previousAgent || null,
199
+ sessionStory: context.sessionStory || null,
200
+ lastCommands: context.lastCommands || [],
201
+ sessionMessage: context.sessionMessage || null,
202
+ workflowState: context.workflowState || null,
203
+ workflowActive: context.workflowActive || null,
204
+ permissions: context.permissions || null,
205
+ };
206
+
207
+ // Permission badge: use from enriched context if available, otherwise load
208
+ const permissionBadge = context.permissions?.badge || (await this._safeGetPermissionBadge());
209
+
210
+ // Build greeting sections based on session type
211
+ const sections = [];
212
+
213
+ // 1. Presentation with permission mode badge (always)
214
+ // Story ACT-7 AC2: Adapts based on session type (new=full, existing=brief, workflow=focused)
215
+ sections.push(this.buildPresentation(agent, sessionType, permissionBadge, sectionContext));
216
+
217
+ // 2. Role description (new session only, but skip in bob mode for non-PM)
218
+ // Story ACT-7 AC3: References current story and branch when available
219
+ if (sessionType === 'new' && !(userProfile === 'bob' && agent.id !== 'pm')) {
220
+ sections.push(this.buildRoleDescription(agent, sectionContext));
221
+ }
222
+
223
+ // 3. Project status (if git configured, but skip in bob mode for non-PM)
224
+ // Story ACT-7 AC4: Natural language narrative format
225
+ if (gitConfig.configured && projectStatus && !(userProfile === 'bob' && agent.id !== 'pm')) {
226
+ sections.push(this.buildProjectStatus(projectStatus, sessionType, sectionContext));
227
+ }
228
+
229
+ // Story 10.3 - AC1, AC4: Bob mode redirect for non-PM agents
230
+ if (userProfile === 'bob' && agent.id !== 'pm') {
231
+ // Show redirect message instead of normal content
232
+ sections.push(this.buildBobModeRedirect(agent));
233
+ return sections.filter(Boolean).join('\n\n');
234
+ }
235
+
236
+ // Story ACT-7 AC7: Parallel execution of independent sections
237
+ // Context section and workflow suggestions use different data sources
238
+ const [contextSection, workflowSection] = await Promise.all([
239
+ // 4. Context section (intelligent contextualization + recommendations)
240
+ // Story ACT-7 AC5: References previous agent handoff intelligently
241
+ this._safeBuildSection(() =>
242
+ this.buildContextSection(agent, context, sessionType, projectStatus, sectionContext),
243
+ ),
244
+ // 5. Workflow suggestions (Story ACT-5: relaxed trigger + fixed method call)
245
+ this._safeBuildSection(() => {
246
+ if (sessionType !== 'new') {
247
+ return this.buildWorkflowSuggestions(context);
248
+ }
249
+ return null;
250
+ }),
251
+ ]);
252
+
253
+ if (contextSection) {
254
+ sections.push(contextSection);
255
+ }
256
+ if (workflowSection) {
257
+ sections.push(workflowSection);
258
+ }
259
+
260
+ // 7. Commands (filtered by visibility and user profile)
261
+ // Story 10.3 - AC2, AC5: Pass userProfile for profile-aware filtering
262
+ const commands = this.filterCommandsByVisibility(agent, sessionType, userProfile);
263
+ sections.push(this.buildCommands(commands, sessionType));
264
+
265
+ // 8. Footer with signature
266
+ // Story ACT-7 AC6: Footer varies by session context
267
+ sections.push(this.buildFooter(agent, sectionContext));
268
+
269
+ return sections.filter(Boolean).join('\n\n');
270
+ }
271
+
272
+ /**
273
+ * Execute a section builder with timeout protection.
274
+ * Story ACT-7 AC8: Fallback to null if section builder exceeds SECTION_TIMEOUT.
275
+ * @private
276
+ * @param {Function} builderFn - Section builder function (sync or async)
277
+ * @returns {Promise<string|null>} Section result or null on timeout/error
278
+ */
279
+ async _safeBuildSection(builderFn) {
280
+ try {
281
+ const result = builderFn();
282
+ // If the builder returns a promise, race it against the timeout
283
+ if (result && typeof result.then === 'function') {
284
+ return await Promise.race([
285
+ result,
286
+ new Promise((resolve) => setTimeout(() => resolve(null), SECTION_TIMEOUT)),
287
+ ]);
288
+ }
289
+ return result;
290
+ } catch (error) {
291
+ console.warn('[GreetingBuilder] Section builder failed:', error.message);
292
+ return null;
293
+ }
294
+ }
295
+
296
+ /**
297
+ * Build fixed-level greeting (Story 6.1.4)
298
+ * ACT-12: Language removed — Claude Code handles translation natively via settings.json
299
+ * @param {Object} agent - Agent definition
300
+ * @param {string} level - Preference level (minimal|named|archetypal)
301
+ * @returns {string} Fixed-level greeting
302
+ */
303
+ buildFixedLevelGreeting(agent, level) {
304
+ const profile = agent.persona_profile;
305
+
306
+ if (!profile || !profile.greeting_levels) {
307
+ return this.buildSimpleGreeting(agent);
308
+ }
309
+
310
+ // Select greeting based on preference
311
+ let greetingText;
312
+ switch (level) {
313
+ case 'minimal':
314
+ greetingText = profile.greeting_levels.minimal || `${agent.icon} ${agent.id} Agent ready`;
315
+ break;
316
+ case 'named':
317
+ greetingText = profile.greeting_levels.named || `${agent.icon} ${agent.name} ready`;
318
+ break;
319
+ case 'archetypal':
320
+ greetingText =
321
+ profile.greeting_levels.archetypal ||
322
+ `${agent.icon} ${agent.name} the ${profile.archetype} ready`;
323
+ break;
324
+ default:
325
+ greetingText = profile.greeting_levels.named || `${agent.icon} ${agent.name} ready`;
326
+ }
327
+
328
+ return `${greetingText}\n\nType \`*help\` to see available commands.`;
329
+ }
330
+
331
+ /**
332
+ * Build simple greeting (fallback)
333
+ * ACT-12: Language removed — Claude Code handles translation natively via settings.json
334
+ * @param {Object} agent - Agent definition
335
+ * @returns {string} Simple greeting
336
+ */
337
+ buildSimpleGreeting(agent) {
338
+ const greetingLevels =
339
+ agent.persona_profile?.communication?.greeting_levels ||
340
+ agent.persona_profile?.greeting_levels;
341
+ const greeting = greetingLevels?.named || `${agent.icon} ${agent.name} ready`;
342
+ return `${greeting}\n\nType \`*help\` to see available commands.`;
343
+ }
344
+
345
+ /**
346
+ * Build presentation section
347
+ * Story ACT-7 AC2: Adapts based on session type
348
+ * - new session: full archetypal intro
349
+ * - existing session: brief "Welcome back" with current focus
350
+ * - workflow session: focused on workflow state
351
+ * @param {Object} agent - Agent definition
352
+ * @param {string} sessionType - Session type
353
+ * @param {string} permissionBadge - Permission mode badge (optional)
354
+ * @param {Object} [sectionContext] - Enriched section context (Story ACT-7)
355
+ * @returns {string} Presentation text
356
+ */
357
+ buildPresentation(agent, sessionType, permissionBadge = '', sectionContext = null) {
358
+ const profile = agent.persona_profile;
359
+
360
+ // Try greeting_levels from communication first, then fall back to top level
361
+ const greetingLevels = profile?.communication?.greeting_levels || profile?.greeting_levels;
362
+
363
+ if (!greetingLevels) {
364
+ const base = `${agent.icon} ${agent.name} ready`;
365
+ return permissionBadge ? `${base} ${permissionBadge}` : base;
366
+ }
367
+
368
+ // Story ACT-7 AC2: Presentation adapts based on session type
369
+ // ACT-12: Language delegated to Claude Code settings.json — hardcoded English phrases
370
+ let greeting;
371
+
372
+ if (sessionType === 'existing' && sectionContext) {
373
+ // Existing session: brief welcome back
374
+ const namedGreeting = greetingLevels.named || `${agent.icon} ${agent.name} ready`;
375
+ const storyRef = sectionContext.sessionStory || sectionContext.projectStatus?.currentStory;
376
+ if (storyRef) {
377
+ greeting = `${namedGreeting} -- continuing ${storyRef}`;
378
+ } else {
379
+ greeting = `${namedGreeting} -- welcome back`;
380
+ }
381
+ } else if (sessionType === 'workflow' && sectionContext) {
382
+ // Workflow session: focused on current workflow
383
+ const namedGreeting = greetingLevels.named || `${agent.icon} ${agent.name} ready`;
384
+ const workflowPhase = sectionContext.workflowState?.currentPhase || sectionContext.workflowActive;
385
+ if (workflowPhase) {
386
+ greeting = `${namedGreeting} -- workflow active`;
387
+ } else {
388
+ greeting = namedGreeting;
389
+ }
390
+ } else {
391
+ // New session or no context: full archetypal greeting
392
+ greeting =
393
+ greetingLevels.archetypal || greetingLevels.named || `${agent.icon} ${agent.name} ready`;
394
+ }
395
+
396
+ // Append permission badge if available
397
+ return permissionBadge ? `${greeting} ${permissionBadge}` : greeting;
398
+ }
399
+
400
+ /**
401
+ * Build role description section
402
+ * Story ACT-7 AC3: References current story and branch when available.
403
+ * Skipped entirely for returning sessions (too verbose).
404
+ * @param {Object} agent - Agent definition
405
+ * @param {Object} [sectionContext] - Enriched section context (Story ACT-7)
406
+ * @returns {string} Role description
407
+ */
408
+ buildRoleDescription(agent, sectionContext = null) {
409
+ if (!agent.persona || !agent.persona.role) {
410
+ return '';
411
+ }
412
+
413
+ let roleText = `**Role:** ${agent.persona.role}`;
414
+
415
+ // Story ACT-7 AC3: Append story/branch references when available
416
+ if (sectionContext) {
417
+ const storyRef = sectionContext.sessionStory || sectionContext.projectStatus?.currentStory;
418
+ const branchRef = sectionContext.projectStatus?.branch || sectionContext.gitConfig?.branch;
419
+
420
+ const refs = [];
421
+ if (storyRef) {
422
+ refs.push(`Story: ${storyRef}`);
423
+ }
424
+ if (branchRef && branchRef !== 'main' && branchRef !== 'master') {
425
+ refs.push(`Branch: \`${branchRef}\``);
426
+ }
427
+
428
+ if (refs.length > 0) {
429
+ roleText += `\n ${refs.join(' | ')}`;
430
+ }
431
+ }
432
+
433
+ return roleText;
434
+ }
435
+
436
+ /**
437
+ * Build project status section
438
+ * Story ACT-7 AC4: Natural language narrative format alongside bullet points.
439
+ * @param {Object} projectStatus - Project status data
440
+ * @param {string} sessionType - Session type
441
+ * @param {Object} [sectionContext] - Enriched section context (Story ACT-7)
442
+ * @returns {string} Formatted project status
443
+ */
444
+ buildProjectStatus(projectStatus, sessionType = 'full', sectionContext = null) {
445
+ if (!projectStatus) {
446
+ return '';
447
+ }
448
+
449
+ // Story ACT-7 AC4: Use narrative format when enriched context is available
450
+ if (sectionContext) {
451
+ return this._formatProjectStatusNarrative(projectStatus, sessionType);
452
+ }
453
+
454
+ // Legacy: bullet-point format (backward compatible)
455
+ const format = sessionType === 'workflow' ? 'condensed' : 'full';
456
+ return this._formatProjectStatus(projectStatus, format);
457
+ }
458
+
459
+ /**
460
+ * Format project status as natural language narrative.
461
+ * Story ACT-7 AC4: Instead of bullet points, produce human-readable sentences.
462
+ * Example: "You're on branch `feat/act-7` with 3 modified files. Story ACT-7 is in progress."
463
+ * @private
464
+ * @param {Object} status - Project status
465
+ * @param {string} sessionType - Session type
466
+ * @returns {string} Narrative status
467
+ */
468
+ _formatProjectStatusNarrative(status, sessionType) {
469
+ // Workflow sessions get condensed inline format
470
+ if (sessionType === 'workflow') {
471
+ return this._formatProjectStatus(status, 'condensed');
472
+ }
473
+
474
+ const sentences = [];
475
+
476
+ // Branch + modified files as natural sentence
477
+ if (status.branch) {
478
+ let branchSentence = `You're on branch \`${status.branch}\``;
479
+ const fileCount = status.modifiedFilesTotalCount || 0;
480
+ if (fileCount > 0) {
481
+ branchSentence += ` with ${fileCount} modified file${fileCount !== 1 ? 's' : ''}`;
482
+ }
483
+ branchSentence += '.';
484
+ sentences.push(branchSentence);
485
+ }
486
+
487
+ // Current story as narrative
488
+ if (status.currentStory) {
489
+ sentences.push(`Story **${status.currentStory}** is in progress.`);
490
+ }
491
+
492
+ // Recent commits as brief reference
493
+ if (status.recentCommits && status.recentCommits.length > 0) {
494
+ const lastCommit = status.recentCommits[0];
495
+ const commitMsg = typeof lastCommit === 'string' ? lastCommit : lastCommit.message || lastCommit;
496
+ const shortMsg = String(commitMsg).length > 60
497
+ ? String(commitMsg).substring(0, 57) + '...'
498
+ : String(commitMsg);
499
+ sentences.push(`Last commit: "${shortMsg}"`);
500
+ }
501
+
502
+ if (sentences.length === 0) {
503
+ return '';
504
+ }
505
+
506
+ return `📊 **Project Status:** ${sentences.join(' ')}`;
507
+ }
508
+
509
+ /**
510
+ * Format project status (legacy bullet-point format)
511
+ * @private
512
+ * @param {Object} status - Project status
513
+ * @param {string} format - 'full' | 'condensed'
514
+ * @returns {string} Formatted status
515
+ */
516
+ _formatProjectStatus(status, format) {
517
+ if (format === 'condensed') {
518
+ const parts = [];
519
+
520
+ if (status.branch) {
521
+ parts.push(`🌿 ${status.branch}`);
522
+ }
523
+
524
+ if (status.modifiedFilesTotalCount > 0) {
525
+ parts.push(`📝 ${status.modifiedFilesTotalCount} modified`);
526
+ }
527
+
528
+ if (status.currentStory) {
529
+ parts.push(`📖 ${status.currentStory}`);
530
+ }
531
+
532
+ return parts.length > 0 ? `📊 ${parts.join(' | ')}` : '';
533
+ }
534
+
535
+ // Full format with emojis
536
+ const lines = [];
537
+
538
+ if (status.branch) {
539
+ lines.push(`🌿 **Branch:** ${status.branch}`);
540
+ }
541
+
542
+ if (status.modifiedFiles && status.modifiedFiles.length > 0) {
543
+ let filesDisplay = status.modifiedFiles.join(', ');
544
+ const totalCount = status.modifiedFilesTotalCount || status.modifiedFiles.length;
545
+ if (totalCount > status.modifiedFiles.length) {
546
+ const remaining = totalCount - status.modifiedFiles.length;
547
+ filesDisplay += ` ...and ${remaining} more`;
548
+ }
549
+ lines.push(`📝 **Modified:** ${filesDisplay}`);
550
+ }
551
+
552
+ if (status.recentCommits && status.recentCommits.length > 0) {
553
+ lines.push(`📖 **Recent:** ${status.recentCommits.join(', ')}`);
554
+ }
555
+
556
+ if (status.currentStory) {
557
+ lines.push(`📌 **Story:** ${status.currentStory}`);
558
+ }
559
+
560
+ if (lines.length === 0) {
561
+ return '';
562
+ }
563
+
564
+ return `📊 **Project Status:**\n - ${lines.join('\n - ')}`;
565
+ }
566
+
567
+ /**
568
+ * Build intelligent context section with recommendations
569
+ * Story ACT-7 AC5: References previous agent handoff intelligently.
570
+ * @param {Object} agent - Agent definition
571
+ * @param {Object} context - Session context
572
+ * @param {string} sessionType - Session type
573
+ * @param {Object} projectStatus - Project status
574
+ * @param {Object} [sectionContext] - Enriched section context (Story ACT-7)
575
+ * @returns {string|null} Context section with recommendations
576
+ */
577
+ buildContextSection(agent, context, sessionType, projectStatus, sectionContext = null) {
578
+ // Skip for new sessions
579
+ if (sessionType === 'new') {
580
+ return null;
581
+ }
582
+
583
+ const parts = [];
584
+
585
+ // Build intelligent context narrative
586
+ const contextNarrative = this._buildContextNarrative(agent, context, projectStatus);
587
+
588
+ if (contextNarrative.description) {
589
+ parts.push(`💡 **Context:** ${contextNarrative.description}`);
590
+ }
591
+
592
+ // Story ACT-7 AC5: Add handoff context when previous agent is detected
593
+ if (sectionContext && sectionContext.previousAgent && !contextNarrative.description) {
594
+ const prevName = this._getPreviousAgentName(context);
595
+ if (prevName) {
596
+ parts.push(`💡 **Context:** Picked up from @${prevName}'s session`);
597
+ }
598
+ }
599
+
600
+ if (contextNarrative.recommendedCommand) {
601
+ parts.push(` **Recommended:** Use \`${contextNarrative.recommendedCommand}\` to continue`);
602
+ }
603
+
604
+ return parts.length > 0 ? parts.join('\n') : null;
605
+ }
606
+
607
+ /**
608
+ * Build intelligent context narrative based on previous work
609
+ * Analyzes files, story, and previous agent to create rich context
610
+ * @private
611
+ */
612
+ _buildContextNarrative(agent, context, projectStatus) {
613
+ const prevAgentId = this._getPreviousAgentId(context);
614
+ const prevAgentName = this._getPreviousAgentName(context);
615
+
616
+ // Priority 1: Agent transition + Story + Modified files (richest context)
617
+ if (prevAgentId && projectStatus?.modifiedFiles) {
618
+ // Use session story if available (more accurate), otherwise use git story
619
+ const sessionStory = context.sessionStory || projectStatus.currentStory;
620
+ const storyContext = this._analyzeStoryContext({
621
+ ...projectStatus,
622
+ currentStory: sessionStory,
623
+ });
624
+ const fileContext = this._analyzeModifiedFiles(projectStatus.modifiedFiles, sessionStory);
625
+
626
+ let description = `Vejo que @${prevAgentName} finalizou os ajustes`;
627
+
628
+ if (fileContext.keyFiles.length > 0) {
629
+ description += ` ${fileContext.summary}`;
630
+ }
631
+
632
+ if (storyContext.storyFile) {
633
+ description += ` no **\`${storyContext.storyFile}\`**`;
634
+ }
635
+
636
+ description += `. Agora podemos ${this._getAgentAction(agent.id, storyContext)}`;
637
+
638
+ const recommendedCommand = this._suggestCommand(agent.id, prevAgentId, storyContext);
639
+
640
+ return { description, recommendedCommand };
641
+ }
642
+
643
+ // Priority 2: Agent transition + Story (no file details)
644
+ if (
645
+ prevAgentId &&
646
+ projectStatus?.currentStory &&
647
+ projectStatus.currentStory !== 'EPIC-SPLIT-IMPLEMENTATION-COMPLETE'
648
+ ) {
649
+ const storyContext = this._analyzeStoryContext(projectStatus);
650
+ const description = `Continuando do trabalho de @${prevAgentName} em ${projectStatus.currentStory}. ${this._getAgentAction(agent.id, storyContext)}`;
651
+ const recommendedCommand = this._suggestCommand(agent.id, prevAgentId, storyContext);
652
+
653
+ return { description, recommendedCommand };
654
+ }
655
+
656
+ // Priority 3: Just agent transition
657
+ if (prevAgentId) {
658
+ const description = `Continuing from @${prevAgentName}`;
659
+ const recommendedCommand = this._suggestCommand(agent.id, prevAgentId, {});
660
+
661
+ return { description, recommendedCommand };
662
+ }
663
+
664
+ // Priority 4: Story-based context
665
+ if (
666
+ projectStatus?.currentStory &&
667
+ projectStatus.currentStory !== 'EPIC-SPLIT-IMPLEMENTATION-COMPLETE'
668
+ ) {
669
+ const storyContext = this._analyzeStoryContext(projectStatus);
670
+ const description = `Working on ${projectStatus.currentStory}`;
671
+ const recommendedCommand = this._suggestCommand(agent.id, null, storyContext);
672
+
673
+ return { description, recommendedCommand };
674
+ }
675
+
676
+ // Priority 5: Last command context
677
+ if (context.lastCommands && context.lastCommands.length > 0) {
678
+ const lastCmd = context.lastCommands[context.lastCommands.length - 1];
679
+ const cmdName = typeof lastCmd === 'object' ? lastCmd.command : lastCmd;
680
+ const description = `Last action: *${cmdName}`;
681
+
682
+ return { description, recommendedCommand: null };
683
+ }
684
+
685
+ // Priority 6: Session message
686
+ if (context.sessionMessage) {
687
+ return { description: context.sessionMessage, recommendedCommand: null };
688
+ }
689
+
690
+ return { description: null, recommendedCommand: null };
691
+ }
692
+
693
+ _getPreviousAgentId(context) {
694
+ if (!context.previousAgent) return null;
695
+ return typeof context.previousAgent === 'string'
696
+ ? context.previousAgent
697
+ : context.previousAgent.agentId;
698
+ }
699
+
700
+ _getPreviousAgentName(context) {
701
+ if (!context.previousAgent) return null;
702
+ return typeof context.previousAgent === 'string'
703
+ ? context.previousAgent
704
+ : context.previousAgent.agentName || context.previousAgent.agentId;
705
+ }
706
+
707
+ _analyzeStoryContext(projectStatus) {
708
+ const currentStory = projectStatus.currentStory || '';
709
+ const storyFile = currentStory ? `${currentStory}.md` : null;
710
+
711
+ return {
712
+ storyId: currentStory,
713
+ storyFile: storyFile,
714
+ hasStory: !!currentStory && currentStory !== 'EPIC-SPLIT-IMPLEMENTATION-COMPLETE',
715
+ };
716
+ }
717
+
718
+ _analyzeModifiedFiles(modifiedFiles, _currentStory) {
719
+ if (!modifiedFiles || modifiedFiles.length === 0) {
720
+ return { keyFiles: [], summary: '' };
721
+ }
722
+
723
+ const keyFiles = [];
724
+ const patterns = [
725
+ {
726
+ regex: /greeting-builder\.js/,
727
+ priority: 1,
728
+ desc: 'do **`.grimoire/scripts/greeting-builder.js`**',
729
+ category: 'script',
730
+ },
731
+ {
732
+ regex: /agent-config-loader\.js/,
733
+ priority: 1,
734
+ desc: 'do **`agent-config-loader.js`**',
735
+ category: 'script',
736
+ },
737
+ {
738
+ regex: /generate-greeting\.js/,
739
+ priority: 1,
740
+ desc: 'do **`generate-greeting.js`**',
741
+ category: 'script',
742
+ },
743
+ {
744
+ regex: /session-context-loader\.js/,
745
+ priority: 1,
746
+ desc: 'do **`session-context-loader.js`**',
747
+ category: 'script',
748
+ },
749
+ {
750
+ regex: /agents\/.*\.md/,
751
+ priority: 1,
752
+ desc: 'das definições de agentes',
753
+ category: 'agent',
754
+ },
755
+ { regex: /\.md$/, priority: 2, desc: 'dos arquivos de documentação', category: 'doc' },
756
+ ];
757
+
758
+ // Find matching key files (avoid duplicates)
759
+ const seenCategories = new Set();
760
+ for (const file of modifiedFiles.slice(0, 5)) {
761
+ // Check first 5 files
762
+ for (const pattern of patterns) {
763
+ if (pattern.regex.test(file) && !seenCategories.has(pattern.category)) {
764
+ keyFiles.push({
765
+ file,
766
+ desc: pattern.desc,
767
+ priority: pattern.priority,
768
+ category: pattern.category,
769
+ });
770
+ seenCategories.add(pattern.category);
771
+ break;
772
+ }
773
+ }
774
+ }
775
+
776
+ // Sort by priority and take top 2
777
+ keyFiles.sort((a, b) => a.priority - b.priority);
778
+ const topFiles = keyFiles.slice(0, 2);
779
+
780
+ if (topFiles.length === 0) {
781
+ return { keyFiles: [], summary: 'dos arquivos do projeto' };
782
+ }
783
+
784
+ if (topFiles.length === 1) {
785
+ return { keyFiles: topFiles, summary: topFiles[0].desc };
786
+ }
787
+
788
+ return {
789
+ keyFiles: topFiles,
790
+ summary: `${topFiles[0].desc} e ${topFiles[1].desc}`,
791
+ };
792
+ }
793
+
794
+ _getAgentAction(agentId, _storyContext) {
795
+ const actions = {
796
+ qa: 'revisar a qualidade dessa implementação',
797
+ dev: 'implementar as funcionalidades',
798
+ pm: 'sincronizar o progresso',
799
+ po: 'validar os requisitos',
800
+ sm: 'coordenar o desenvolvimento',
801
+ };
802
+
803
+ return actions[agentId] || 'continuar o trabalho';
804
+ }
805
+
806
+ _suggestCommand(agentId, prevAgentId, storyContext) {
807
+ // Agent transition commands
808
+ if (prevAgentId === 'dev' && agentId === 'qa') {
809
+ return storyContext.storyFile ? `*review ${storyContext.storyFile}` : '*review';
810
+ }
811
+
812
+ if (prevAgentId === 'qa' && agentId === 'dev') {
813
+ return '*apply-qa-fixes';
814
+ }
815
+
816
+ if (prevAgentId === 'po' && agentId === 'dev') {
817
+ return '*develop-yolo';
818
+ }
819
+
820
+ // Role-based commands when no previous agent
821
+ if (agentId === 'qa' && storyContext.storyFile) {
822
+ return `*review ${storyContext.storyFile}`;
823
+ }
824
+
825
+ if (agentId === 'dev' && storyContext.hasStory) {
826
+ return '*develop-yolo docs/stories/[story-path].md';
827
+ }
828
+
829
+ if (agentId === 'pm' && storyContext.storyId) {
830
+ return `*sync-story ${storyContext.storyId}`;
831
+ }
832
+
833
+ return null;
834
+ }
835
+
836
+ /**
837
+ * Build current context section (legacy - kept for compatibility)
838
+ * @param {Object} context - Session context
839
+ * @param {string} sessionType - Session type
840
+ * @param {Object} projectStatus - Project status
841
+ * @returns {string} Context description
842
+ */
843
+ buildCurrentContext(context, sessionType, projectStatus) {
844
+ if (sessionType === 'workflow' && projectStatus?.currentStory) {
845
+ return `📌 **Context:** Working on ${projectStatus.currentStory}`;
846
+ }
847
+
848
+ if (context.lastCommand) {
849
+ return `📌 **Last Action:** ${context.lastCommand}`;
850
+ }
851
+
852
+ return '';
853
+ }
854
+
855
+ /**
856
+ * Build workflow suggestions section
857
+ * Story ACT-5: Enhanced with SessionState integration for cross-terminal
858
+ * workflow continuity and SurfaceChecker for proactive suggestions.
859
+ *
860
+ * Detection priority:
861
+ * 1. SessionState (cross-terminal persistence from Epic 11 Story 11.5)
862
+ * 2. Command history (pattern-based detection from workflow-patterns.yaml)
863
+ *
864
+ * @param {Object} context - Session context
865
+ * @returns {string|null} Workflow suggestions or null
866
+ */
867
+ buildWorkflowSuggestions(context) {
868
+ try {
869
+ // Story ACT-5 (AC: 3, 6): Check SessionState first for cross-terminal continuity
870
+ const sessionStateResult = this._detectWorkflowFromSessionState();
871
+ if (sessionStateResult) {
872
+ return sessionStateResult;
873
+ }
874
+
875
+ // Fallback: Pattern-based detection from command history
876
+ const commandHistory = context.commandHistory || context.lastCommands || [];
877
+ const workflowState = this.workflowNavigator.detectWorkflowState(commandHistory, context);
878
+
879
+ if (!workflowState) {
880
+ return null;
881
+ }
882
+
883
+ const suggestions = this.workflowNavigator.suggestNextCommands(workflowState);
884
+ if (!suggestions || suggestions.length === 0) {
885
+ return null;
886
+ }
887
+
888
+ // Story ACT-5 (AC: 4): Enhance suggestions with SurfaceChecker proactive triggers
889
+ const enhancedSuggestions = this._enhanceSuggestionsWithSurface(suggestions, context);
890
+
891
+ const greetingMessage = this.workflowNavigator.getGreetingMessage(workflowState);
892
+ const header = greetingMessage || 'Next steps:';
893
+
894
+ return this.workflowNavigator.formatSuggestions(enhancedSuggestions, header);
895
+ } catch (error) {
896
+ console.warn('[GreetingBuilder] Workflow suggestions failed:', error.message);
897
+ return null;
898
+ }
899
+ }
900
+
901
+ /**
902
+ * Detect workflow state from SessionState for cross-terminal continuity.
903
+ * Story ACT-5 (AC: 3, 6): Reads persisted session state to detect
904
+ * active workflows that span terminal sessions.
905
+ * @private
906
+ * @returns {string|null} Formatted workflow section or null
907
+ */
908
+ _detectWorkflowFromSessionState() {
909
+ try {
910
+ const projectRoot = process.cwd();
911
+ const sessionState = new SessionState(projectRoot);
912
+
913
+ // Use synchronous existence check to stay within perf budget
914
+ const stateFilePath = sessionState.getStateFilePath();
915
+ if (!fs.existsSync(stateFilePath)) {
916
+ return null;
917
+ }
918
+
919
+ // Read and parse state file synchronously (fast, local file)
920
+ const content = fs.readFileSync(stateFilePath, 'utf8');
921
+ const stateData = yaml.load(content);
922
+
923
+ if (!stateData?.session_state) {
924
+ return null;
925
+ }
926
+
927
+ const ss = stateData.session_state;
928
+
929
+ // Only show if there is an active workflow with a current story
930
+ if (!ss.progress?.current_story || !ss.workflow?.current_phase) {
931
+ return null;
932
+ }
933
+
934
+ // Build suggestions from session state
935
+ const suggestions = [];
936
+ const currentStory = ss.progress.current_story;
937
+ const currentPhase = ss.workflow.current_phase;
938
+ const storiesDone = ss.progress.stories_done?.length || 0;
939
+ const totalStories = ss.epic?.total_stories || 0;
940
+
941
+ suggestions.push({
942
+ command: `*develop-yolo ${currentStory}`,
943
+ description: `Continue ${currentStory} (phase: ${currentPhase})`,
944
+ raw_command: 'develop-yolo',
945
+ args: currentStory,
946
+ });
947
+
948
+ if (storiesDone > 0 && totalStories > 0) {
949
+ suggestions.push({
950
+ command: `*build-status ${currentStory}`,
951
+ description: `Check build status (${storiesDone}/${totalStories} stories done)`,
952
+ raw_command: 'build-status',
953
+ args: currentStory,
954
+ });
955
+ }
956
+
957
+ const header = `Workflow in progress: ${ss.epic?.title || 'Active Epic'} (${storiesDone}/${totalStories})`;
958
+ return this.workflowNavigator.formatSuggestions(suggestions, header);
959
+ } catch (error) {
960
+ // Graceful degradation: if SessionState is unavailable, return null
961
+ console.warn('[GreetingBuilder] SessionState workflow detection failed:', error.message);
962
+ return null;
963
+ }
964
+ }
965
+
966
+ /**
967
+ * Enhance workflow suggestions with SurfaceChecker proactive triggers.
968
+ * Story ACT-5 (AC: 4): Uses surface conditions to add relevant
969
+ * proactive suggestions (e.g., cost warnings, risk alerts).
970
+ * @private
971
+ * @param {Array} suggestions - Base suggestions from WorkflowNavigator
972
+ * @param {Object} context - Session context
973
+ * @returns {Array} Enhanced suggestions array
974
+ */
975
+ _enhanceSuggestionsWithSurface(suggestions, context) {
976
+ try {
977
+ const checker = new SurfaceChecker();
978
+ if (!checker.load()) {
979
+ return suggestions; // Graceful: criteria file not found
980
+ }
981
+
982
+ // Build surface context from session data
983
+ const surfaceContext = {
984
+ risk_level: context.riskLevel || 'LOW',
985
+ errors_in_task: context.errorsInTask || 0,
986
+ action_type: context.actionType || null,
987
+ };
988
+
989
+ const result = checker.shouldSurface(surfaceContext);
990
+
991
+ if (result.should_surface && result.message) {
992
+ // Prepend a proactive warning suggestion
993
+ return [
994
+ {
995
+ command: '*help',
996
+ description: `[${result.severity}] ${result.message}`,
997
+ raw_command: 'help',
998
+ args: '',
999
+ },
1000
+ ...suggestions,
1001
+ ];
1002
+ }
1003
+
1004
+ return suggestions;
1005
+ } catch (error) {
1006
+ // Graceful degradation: SurfaceChecker unavailable, return original suggestions
1007
+ console.warn('[GreetingBuilder] SurfaceChecker enhancement failed:', error.message);
1008
+ return suggestions;
1009
+ }
1010
+ }
1011
+
1012
+ /**
1013
+ * Build contextual suggestions based on project state
1014
+ * Analyzes current context and suggests relevant next commands
1015
+ * @param {Object} agent - Agent definition
1016
+ * @param {Object} projectStatus - Project status data
1017
+ * @param {string} sessionType - Session type
1018
+ * @returns {string|null} Contextual suggestions or null
1019
+ */
1020
+ buildContextualSuggestions(agent, projectStatus, _sessionType) {
1021
+ try {
1022
+ const suggestions = [];
1023
+ const agentId = agent.id;
1024
+
1025
+ // Analyze current story status
1026
+ if (projectStatus.currentStory) {
1027
+ const storyMatch = projectStatus.currentStory.match(/(\d+\.\d+\.\d+(\.\d+)?)/);
1028
+ const storyId = storyMatch ? storyMatch[1] : null;
1029
+
1030
+ // QA agent: suggest validation if story is ready
1031
+ if (
1032
+ agentId === 'qa' &&
1033
+ projectStatus.recentCommits &&
1034
+ projectStatus.recentCommits.length > 0
1035
+ ) {
1036
+ const recentCommit = projectStatus.recentCommits[0].message;
1037
+ if (recentCommit.includes('complete') || recentCommit.includes('implement')) {
1038
+ if (storyId) {
1039
+ suggestions.push(`*review ${storyId}`);
1040
+ } else {
1041
+ suggestions.push('*code-review committed');
1042
+ }
1043
+ }
1044
+ }
1045
+
1046
+ // Dev agent: suggest development tasks
1047
+ if (agentId === 'dev' && storyId) {
1048
+ if (projectStatus.modifiedFilesTotalCount > 0) {
1049
+ suggestions.push('*run-tests');
1050
+ }
1051
+ suggestions.push(`*develop-story ${storyId}`);
1052
+ }
1053
+
1054
+ // PM/PO: suggest story/epic management
1055
+ if ((agentId === 'pm' || agentId === 'po') && storyId) {
1056
+ suggestions.push(`*validate-story-draft ${storyId}`);
1057
+ }
1058
+ }
1059
+
1060
+ // Analyze modified files
1061
+ if (projectStatus.modifiedFilesTotalCount > 0) {
1062
+ if (agentId === 'qa') {
1063
+ suggestions.push('*code-review uncommitted');
1064
+ }
1065
+ if (agentId === 'dev' && projectStatus.modifiedFilesTotalCount > 5) {
1066
+ suggestions.push('*commit-changes');
1067
+ }
1068
+ }
1069
+
1070
+ // Analyze recent work
1071
+ if (projectStatus.recentCommits && projectStatus.recentCommits.length > 0) {
1072
+ const lastCommit = projectStatus.recentCommits[0].message;
1073
+
1074
+ // If last commit was a test, suggest review
1075
+ if (lastCommit.includes('test') && agentId === 'qa') {
1076
+ suggestions.push('*run-tests');
1077
+ }
1078
+
1079
+ // If last commit was a feature, suggest QA
1080
+ if ((lastCommit.includes('feat:') || lastCommit.includes('feature')) && agentId === 'qa') {
1081
+ suggestions.push('*code-review committed');
1082
+ }
1083
+ }
1084
+
1085
+ // No suggestions found
1086
+ if (suggestions.length === 0) {
1087
+ return null;
1088
+ }
1089
+
1090
+ // Build suggestion message
1091
+ const contextSummary = this._buildContextSummary(projectStatus);
1092
+ const commandsList = suggestions
1093
+ .slice(0, 2) // Limit to 2 suggestions
1094
+ .map((cmd) => ` - \`${cmd}\``)
1095
+ .join('\n');
1096
+
1097
+ return `💡 **Context:** ${contextSummary}\n\n**Suggested Next Steps:**\n${commandsList}`;
1098
+ } catch (error) {
1099
+ console.warn('[GreetingBuilder] Contextual suggestions failed:', error.message);
1100
+ return null;
1101
+ }
1102
+ }
1103
+
1104
+ /**
1105
+ * Build context summary based on project status
1106
+ * @private
1107
+ * @param {Object} projectStatus - Project status data
1108
+ * @returns {string} Context summary
1109
+ */
1110
+ _buildContextSummary(projectStatus) {
1111
+ const parts = [];
1112
+
1113
+ if (projectStatus.currentStory) {
1114
+ parts.push(`Working on ${projectStatus.currentStory}`);
1115
+ }
1116
+
1117
+ if (projectStatus.modifiedFilesTotalCount > 0) {
1118
+ parts.push(`${projectStatus.modifiedFilesTotalCount} files modified`);
1119
+ }
1120
+
1121
+ if (projectStatus.recentCommits && projectStatus.recentCommits.length > 0) {
1122
+ const lastCommit = projectStatus.recentCommits[0].message;
1123
+ const shortMsg = lastCommit.length > 50 ? lastCommit.substring(0, 47) + '...' : lastCommit;
1124
+ parts.push(`Last: "${shortMsg}"`);
1125
+ }
1126
+
1127
+ return parts.join(', ') || 'Ready to start';
1128
+ }
1129
+
1130
+ /**
1131
+ * Build commands section
1132
+ * @param {Array} commands - Filtered commands
1133
+ * @param {string} sessionType - Session type
1134
+ * @returns {string} Commands list
1135
+ */
1136
+ buildCommands(commands, sessionType) {
1137
+ if (!commands || commands.length === 0) {
1138
+ return '**Commands:** Type `*help` for available commands';
1139
+ }
1140
+
1141
+ const header = this._getCommandsHeader(sessionType);
1142
+ const commandList = commands
1143
+ .slice(0, 12) // Max 12 commands
1144
+ .map((cmd) => {
1145
+ // Handle both object format and string format
1146
+ if (typeof cmd === 'string') {
1147
+ return ` - \`*${cmd}\``;
1148
+ }
1149
+ if (typeof cmd === 'object' && cmd !== null) {
1150
+ const name = cmd.name || cmd.command || String(cmd);
1151
+ const description = cmd.description || '';
1152
+ return description ? ` - \`*${name}\`: ${description}` : ` - \`*${name}\``;
1153
+ }
1154
+ // Fallback for unexpected formats
1155
+ return ` - \`*${String(cmd)}\``;
1156
+ })
1157
+ .filter((cmd) => !cmd.includes('[object Object]')) // Filter out malformed commands
1158
+ .join('\n');
1159
+
1160
+ return `**${header}:**\n${commandList}`;
1161
+ }
1162
+
1163
+ /**
1164
+ * Get commands header based on session type
1165
+ * @private
1166
+ * @param {string} sessionType - Session type
1167
+ * @returns {string} Header text
1168
+ */
1169
+ _getCommandsHeader(sessionType) {
1170
+ switch (sessionType) {
1171
+ case 'new':
1172
+ return 'Available Commands';
1173
+ case 'existing':
1174
+ return 'Quick Commands';
1175
+ case 'workflow':
1176
+ return 'Key Commands';
1177
+ default:
1178
+ return 'Commands';
1179
+ }
1180
+ }
1181
+
1182
+ /**
1183
+ * Build bob mode redirect message for non-PM agents
1184
+ * Story 10.3 - AC4: Show informative message redirecting to Bob
1185
+ * @param {Object} agent - Agent definition (used for personalization)
1186
+ * @returns {string} Redirect message
1187
+ */
1188
+ buildBobModeRedirect(agent) {
1189
+ const agentName = agent?.name || 'Este agente';
1190
+ return `💡 **Você está no Modo Assistido.**
1191
+
1192
+ ${agentName} não está disponível diretamente no Modo Assistido.
1193
+ Use \`@pm\` (Bob) para todas as interações. Bob vai orquestrar os outros agentes internamente para você.
1194
+
1195
+ **Para interagir com Bob:**
1196
+ - Digite \`@pm\` ou \`/grimoire:agents:pm\`
1197
+ - Use \`*help\` após ativar Bob para ver comandos disponíveis`;
1198
+ }
1199
+
1200
+ /**
1201
+ * Build footer section
1202
+ * Story ACT-7 AC6: Footer varies by session context.
1203
+ * - new session: full guide prompt + signature
1204
+ * - existing session: brief tip + signature
1205
+ * - workflow session: progress note + signature
1206
+ * @param {Object} agent - Agent definition
1207
+ * @param {Object} [sectionContext] - Enriched section context (Story ACT-7)
1208
+ * @returns {string} Footer text with signature
1209
+ */
1210
+ buildFooter(agent, sectionContext = null) {
1211
+ const parts = [];
1212
+
1213
+ // Story ACT-7 AC6: Vary footer content by session context
1214
+ // ACT-12: Language delegated to Claude Code settings.json — hardcoded English phrases
1215
+ const sessionType = sectionContext?.sessionType || 'new';
1216
+
1217
+ if (sessionType === 'workflow') {
1218
+ // Workflow: progress note
1219
+ const storyRef = sectionContext?.sessionStory || sectionContext?.projectStatus?.currentStory;
1220
+ if (storyRef) {
1221
+ parts.push(`Focused on **${storyRef}**. Type \`*help\` to see available commands.`);
1222
+ } else {
1223
+ parts.push('Workflow active. Type `*help` to see available commands.');
1224
+ }
1225
+ } else if (sessionType === 'existing') {
1226
+ // Existing session: brief tip with session-info reference
1227
+ parts.push('Type `*help` for commands or `*session-info` for session details.');
1228
+ } else {
1229
+ // New session: full guide prompt
1230
+ parts.push('Type `*guide` for comprehensive usage instructions.');
1231
+ }
1232
+
1233
+ // Add agent signature if available
1234
+ if (
1235
+ agent &&
1236
+ agent.persona_profile &&
1237
+ agent.persona_profile.communication &&
1238
+ agent.persona_profile.communication.signature_closing
1239
+ ) {
1240
+ parts.push('');
1241
+ parts.push(agent.persona_profile.communication.signature_closing);
1242
+ }
1243
+
1244
+ return parts.join('\n');
1245
+ }
1246
+
1247
+ /**
1248
+ * Build git warning section
1249
+ * @returns {string} Git warning message
1250
+ */
1251
+ buildGitWarning() {
1252
+ return GIT_WARNING_TEMPLATE.trim();
1253
+ }
1254
+
1255
+ /**
1256
+ * Filter commands by visibility metadata and user profile
1257
+ * Story 10.3 - AC1, AC2, AC3: Profile-aware command filtering
1258
+ * @param {Object} agent - Agent definition
1259
+ * @param {string} sessionType - Session type
1260
+ * @param {string} userProfile - User profile ('bob' | 'advanced')
1261
+ * @returns {Array} Filtered commands
1262
+ */
1263
+ filterCommandsByVisibility(agent, sessionType, userProfile = DEFAULT_USER_PROFILE) {
1264
+ if (!agent.commands || agent.commands.length === 0) {
1265
+ return [];
1266
+ }
1267
+
1268
+ // Story 10.3 - AC1, AC2: Profile-based filtering
1269
+ // If bob mode AND not PM agent: return empty (will show redirect message instead)
1270
+ if (userProfile === 'bob' && agent.id !== 'pm') {
1271
+ return [];
1272
+ }
1273
+
1274
+ // Story 10.3 - AC5: PM agent shows all commands in bob mode
1275
+ // Story 10.3 - AC2: Advanced mode shows commands normally (current behavior)
1276
+ const visibilityFilter = this._getVisibilityFilter(sessionType);
1277
+
1278
+ // Filter commands with visibility metadata
1279
+ const commandsWithMetadata = agent.commands.filter((cmd) => {
1280
+ if (!cmd.visibility || !Array.isArray(cmd.visibility)) {
1281
+ return false; // No metadata, exclude from filtered list
1282
+ }
1283
+
1284
+ return cmd.visibility.includes(visibilityFilter);
1285
+ });
1286
+
1287
+ // If we have metadata-based commands, use them
1288
+ if (commandsWithMetadata.length > 0) {
1289
+ return commandsWithMetadata;
1290
+ }
1291
+
1292
+ // Backwards compatibility: No metadata found, show first 12 commands
1293
+ return agent.commands.slice(0, 12);
1294
+ }
1295
+
1296
+ /**
1297
+ * Get visibility filter for session type
1298
+ * @private
1299
+ * @param {string} sessionType - Session type
1300
+ * @returns {string} Visibility level ('full', 'quick', 'key')
1301
+ */
1302
+ _getVisibilityFilter(sessionType) {
1303
+ switch (sessionType) {
1304
+ case 'new':
1305
+ return 'full';
1306
+ case 'existing':
1307
+ return 'quick';
1308
+ case 'workflow':
1309
+ return 'key';
1310
+ default:
1311
+ return 'full';
1312
+ }
1313
+ }
1314
+
1315
+ /**
1316
+ * Safe session type detection with fallback
1317
+ * @private
1318
+ * @param {Object} context - Session context
1319
+ * @returns {Promise<string>} Session type
1320
+ */
1321
+ async _safeDetectSessionType(context) {
1322
+ try {
1323
+ const conversationHistory = context.conversationHistory || [];
1324
+ return this.contextDetector.detectSessionType(conversationHistory);
1325
+ } catch (error) {
1326
+ console.warn('[GreetingBuilder] Session detection failed:', error.message);
1327
+ return 'new'; // Conservative default
1328
+ }
1329
+ }
1330
+
1331
+ /**
1332
+ * Safe git config check with fallback
1333
+ * @private
1334
+ * @returns {Promise<Object>} Git config result
1335
+ */
1336
+ async _safeCheckGitConfig() {
1337
+ try {
1338
+ return this.gitConfigDetector.get();
1339
+ } catch (error) {
1340
+ console.warn('[GreetingBuilder] Git config check failed:', error.message);
1341
+ return { configured: false, type: null, branch: null };
1342
+ }
1343
+ }
1344
+
1345
+ /**
1346
+ * Safe project status load with fallback
1347
+ * @private
1348
+ * @returns {Promise<Object|null>} Project status or null
1349
+ */
1350
+ async _safeLoadProjectStatus() {
1351
+ try {
1352
+ return await loadProjectStatus();
1353
+ } catch (error) {
1354
+ console.warn('[GreetingBuilder] Project status load failed:', error.message);
1355
+ return null;
1356
+ }
1357
+ }
1358
+
1359
+ /**
1360
+ * Safe permission badge retrieval with fallback
1361
+ * @private
1362
+ * @returns {Promise<string>} Permission mode badge or empty string
1363
+ */
1364
+ async _safeGetPermissionBadge() {
1365
+ try {
1366
+ const mode = new PermissionMode();
1367
+ await mode.load();
1368
+ return mode.getBadge();
1369
+ } catch (error) {
1370
+ console.warn('[GreetingBuilder] Permission mode load failed:', error.message);
1371
+ return '';
1372
+ }
1373
+ }
1374
+
1375
+ /**
1376
+ * Check if git warning should be shown
1377
+ * @private
1378
+ * @returns {boolean} True if should show warning
1379
+ */
1380
+ _shouldShowGitWarning() {
1381
+ if (!this.config || !this.config.git) {
1382
+ return true; // Default: show warning
1383
+ }
1384
+
1385
+ return this.config.git.showConfigWarning !== false;
1386
+ }
1387
+
1388
+ /**
1389
+ * Load core configuration
1390
+ * @private
1391
+ * @returns {Object|null} Configuration or null
1392
+ */
1393
+ _loadConfig() {
1394
+ try {
1395
+ const configPath = path.join(process.cwd(), '.grimoire', 'core-config.yaml');
1396
+ const content = fs.readFileSync(configPath, 'utf8');
1397
+ return yaml.load(content);
1398
+ } catch (_error) {
1399
+ return null;
1400
+ }
1401
+ }
1402
+ }
1403
+
1404
+ module.exports = GreetingBuilder;
1405
+
1406
+