aios-core 2.1.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 (607) hide show
  1. package/.aios-core/.session/current-session.json +14 -0
  2. package/.aios-core/cli/commands/generate/index.js +222 -0
  3. package/.aios-core/cli/commands/manifest/index.js +46 -0
  4. package/.aios-core/cli/commands/manifest/regenerate.js +96 -0
  5. package/.aios-core/cli/commands/manifest/validate.js +66 -0
  6. package/.aios-core/cli/commands/mcp/add.js +234 -0
  7. package/.aios-core/cli/commands/mcp/index.js +76 -0
  8. package/.aios-core/cli/commands/mcp/link.js +217 -0
  9. package/.aios-core/cli/commands/mcp/setup.js +164 -0
  10. package/.aios-core/cli/commands/mcp/status.js +183 -0
  11. package/.aios-core/cli/commands/metrics/cleanup.js +91 -0
  12. package/.aios-core/cli/commands/metrics/index.js +65 -0
  13. package/.aios-core/cli/commands/metrics/record.js +154 -0
  14. package/.aios-core/cli/commands/metrics/seed.js +126 -0
  15. package/.aios-core/cli/commands/metrics/show.js +209 -0
  16. package/.aios-core/cli/commands/migrate/analyze.js +353 -0
  17. package/.aios-core/cli/commands/migrate/backup.js +352 -0
  18. package/.aios-core/cli/commands/migrate/execute.js +292 -0
  19. package/.aios-core/cli/commands/migrate/index.js +441 -0
  20. package/.aios-core/cli/commands/migrate/rollback.js +323 -0
  21. package/.aios-core/cli/commands/migrate/update-imports.js +396 -0
  22. package/.aios-core/cli/commands/migrate/validate.js +452 -0
  23. package/.aios-core/cli/commands/qa/index.js +56 -0
  24. package/.aios-core/cli/commands/qa/run.js +163 -0
  25. package/.aios-core/cli/commands/qa/status.js +195 -0
  26. package/.aios-core/cli/commands/workers/formatters/info-formatter.js +274 -0
  27. package/.aios-core/cli/commands/workers/formatters/list-table.js +265 -0
  28. package/.aios-core/cli/commands/workers/formatters/list-tree.js +159 -0
  29. package/.aios-core/cli/commands/workers/index.js +56 -0
  30. package/.aios-core/cli/commands/workers/info.js +194 -0
  31. package/.aios-core/cli/commands/workers/list.js +214 -0
  32. package/.aios-core/cli/commands/workers/search-filters.js +185 -0
  33. package/.aios-core/cli/commands/workers/search-keyword.js +310 -0
  34. package/.aios-core/cli/commands/workers/search-semantic.js +293 -0
  35. package/.aios-core/cli/commands/workers/search.js +154 -0
  36. package/.aios-core/cli/commands/workers/utils/pagination.js +102 -0
  37. package/.aios-core/cli/index.js +128 -0
  38. package/.aios-core/cli/utils/output-formatter-cli.js +232 -0
  39. package/.aios-core/cli/utils/score-calculator.js +221 -0
  40. package/.aios-core/core/README.md +229 -0
  41. package/.aios-core/core/config/config-cache.js +233 -0
  42. package/.aios-core/core/config/config-loader.js +277 -0
  43. package/.aios-core/core/data/agent-config-requirements.yaml +368 -0
  44. package/.aios-core/core/data/aios-kb.md +924 -0
  45. package/.aios-core/core/data/workflow-patterns.yaml +267 -0
  46. package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -0
  47. package/.aios-core/core/docs/component-creation-guide.md +458 -0
  48. package/.aios-core/core/docs/session-update-pattern.md +307 -0
  49. package/.aios-core/core/docs/template-syntax.md +267 -0
  50. package/.aios-core/core/docs/troubleshooting-guide.md +625 -0
  51. package/.aios-core/core/elicitation/agent-elicitation.js +272 -0
  52. package/.aios-core/core/elicitation/elicitation-engine.js +479 -0
  53. package/.aios-core/core/elicitation/session-manager.js +320 -0
  54. package/.aios-core/core/elicitation/task-elicitation.js +281 -0
  55. package/.aios-core/core/elicitation/workflow-elicitation.js +315 -0
  56. package/.aios-core/core/index.esm.js +42 -0
  57. package/.aios-core/core/index.js +76 -0
  58. package/.aios-core/core/manifest/manifest-generator.js +386 -0
  59. package/.aios-core/core/manifest/manifest-validator.js +429 -0
  60. package/.aios-core/core/mcp/config-migrator.js +340 -0
  61. package/.aios-core/core/mcp/global-config-manager.js +369 -0
  62. package/.aios-core/core/mcp/index.js +34 -0
  63. package/.aios-core/core/mcp/os-detector.js +188 -0
  64. package/.aios-core/core/mcp/symlink-manager.js +413 -0
  65. package/.aios-core/core/migration/migration-config.yaml +83 -0
  66. package/.aios-core/core/migration/module-mapping.yaml +89 -0
  67. package/.aios-core/core/quality-gates/base-layer.js +134 -0
  68. package/.aios-core/core/quality-gates/checklist-generator.js +329 -0
  69. package/.aios-core/core/quality-gates/focus-area-recommender.js +359 -0
  70. package/.aios-core/core/quality-gates/human-review-orchestrator.js +529 -0
  71. package/.aios-core/core/quality-gates/layer1-precommit.js +336 -0
  72. package/.aios-core/core/quality-gates/layer2-pr-automation.js +324 -0
  73. package/.aios-core/core/quality-gates/layer3-human-review.js +348 -0
  74. package/.aios-core/core/quality-gates/notification-manager.js +550 -0
  75. package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -0
  76. package/.aios-core/core/quality-gates/quality-gate-manager.js +601 -0
  77. package/.aios-core/core/registry/README.md +179 -0
  78. package/.aios-core/core/registry/build-registry.js +452 -0
  79. package/.aios-core/core/registry/registry-loader.js +330 -0
  80. package/.aios-core/core/registry/registry-schema.json +166 -0
  81. package/.aios-core/core/registry/service-registry.json +6586 -0
  82. package/.aios-core/core/registry/validate-registry.js +340 -0
  83. package/.aios-core/core/session/context-detector.js +229 -0
  84. package/.aios-core/core/session/context-loader.js +288 -0
  85. package/.aios-core/core/utils/output-formatter.js +298 -0
  86. package/.aios-core/core/utils/security-utils.js +333 -0
  87. package/.aios-core/core/utils/yaml-validator.js +419 -0
  88. package/.aios-core/core-config.yaml +382 -0
  89. package/.aios-core/data/agent-config-requirements.yaml +368 -0
  90. package/.aios-core/data/aios-kb.md +924 -0
  91. package/.aios-core/data/technical-preferences.md +4 -0
  92. package/.aios-core/data/workflow-patterns.yaml +267 -0
  93. package/.aios-core/development/README.md +142 -0
  94. package/.aios-core/development/agent-teams/team-all.yaml +15 -0
  95. package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -0
  96. package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -0
  97. package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -0
  98. package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -0
  99. package/.aios-core/development/agents/aios-master.md +339 -0
  100. package/.aios-core/development/agents/analyst.md +195 -0
  101. package/.aios-core/development/agents/architect.md +359 -0
  102. package/.aios-core/development/agents/data-engineer.md +468 -0
  103. package/.aios-core/development/agents/dev.md +390 -0
  104. package/.aios-core/development/agents/devops.md +398 -0
  105. package/.aios-core/development/agents/pm.md +198 -0
  106. package/.aios-core/development/agents/po.md +256 -0
  107. package/.aios-core/development/agents/qa.md +312 -0
  108. package/.aios-core/development/agents/sm.md +220 -0
  109. package/.aios-core/development/agents/ux-design-expert.md +451 -0
  110. package/.aios-core/development/scripts/agent-assignment-resolver.js +231 -0
  111. package/.aios-core/development/scripts/agent-config-loader.js +624 -0
  112. package/.aios-core/development/scripts/agent-exit-hooks.js +96 -0
  113. package/.aios-core/development/scripts/apply-inline-greeting-all-agents.js +146 -0
  114. package/.aios-core/development/scripts/audit-agent-config.js +380 -0
  115. package/.aios-core/development/scripts/backlog-manager.js +404 -0
  116. package/.aios-core/development/scripts/batch-update-agents-session-context.js +95 -0
  117. package/.aios-core/development/scripts/decision-context.js +228 -0
  118. package/.aios-core/development/scripts/decision-log-generator.js +293 -0
  119. package/.aios-core/development/scripts/decision-log-indexer.js +284 -0
  120. package/.aios-core/development/scripts/decision-recorder.js +168 -0
  121. package/.aios-core/development/scripts/dev-context-loader.js +297 -0
  122. package/.aios-core/development/scripts/generate-greeting.js +160 -0
  123. package/.aios-core/development/scripts/greeting-builder.js +866 -0
  124. package/.aios-core/development/scripts/greeting-config-cli.js +85 -0
  125. package/.aios-core/development/scripts/greeting-preference-manager.js +145 -0
  126. package/.aios-core/development/scripts/migrate-task-to-v2.js +377 -0
  127. package/.aios-core/development/scripts/story-index-generator.js +337 -0
  128. package/.aios-core/development/scripts/story-manager.js +375 -0
  129. package/.aios-core/development/scripts/story-update-hook.js +259 -0
  130. package/.aios-core/development/scripts/task-identifier-resolver.js +145 -0
  131. package/.aios-core/development/scripts/test-greeting-system.js +142 -0
  132. package/.aios-core/development/scripts/validate-task-v2.js +319 -0
  133. package/.aios-core/development/scripts/workflow-navigator.js +214 -0
  134. package/.aios-core/development/tasks/add-mcp.md +319 -0
  135. package/.aios-core/development/tasks/advanced-elicitation.md +319 -0
  136. package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +342 -0
  137. package/.aios-core/development/tasks/analyze-framework.md +697 -0
  138. package/.aios-core/development/tasks/analyze-performance.md +637 -0
  139. package/.aios-core/development/tasks/apply-qa-fixes.md +340 -0
  140. package/.aios-core/development/tasks/architect-analyze-impact.md +827 -0
  141. package/.aios-core/development/tasks/audit-codebase.md +429 -0
  142. package/.aios-core/development/tasks/audit-tailwind-config.md +270 -0
  143. package/.aios-core/development/tasks/audit-utilities.md +358 -0
  144. package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -0
  145. package/.aios-core/development/tasks/brownfield-create-epic.md +486 -0
  146. package/.aios-core/development/tasks/brownfield-create-story.md +357 -0
  147. package/.aios-core/development/tasks/build-component.md +478 -0
  148. package/.aios-core/development/tasks/calculate-roi.md +455 -0
  149. package/.aios-core/development/tasks/ci-cd-configuration.md +764 -0
  150. package/.aios-core/development/tasks/cleanup-utilities.md +670 -0
  151. package/.aios-core/development/tasks/collaborative-edit.md +1109 -0
  152. package/.aios-core/development/tasks/compose-molecule.md +284 -0
  153. package/.aios-core/development/tasks/consolidate-patterns.md +414 -0
  154. package/.aios-core/development/tasks/correct-course.md +280 -0
  155. package/.aios-core/development/tasks/create-agent.md +322 -0
  156. package/.aios-core/development/tasks/create-brownfield-story.md +727 -0
  157. package/.aios-core/development/tasks/create-deep-research-prompt.md +499 -0
  158. package/.aios-core/development/tasks/create-doc.md +316 -0
  159. package/.aios-core/development/tasks/create-next-story.md +774 -0
  160. package/.aios-core/development/tasks/create-suite.md +284 -0
  161. package/.aios-core/development/tasks/create-task.md +372 -0
  162. package/.aios-core/development/tasks/create-workflow.md +371 -0
  163. package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -0
  164. package/.aios-core/development/tasks/db-apply-migration.md +381 -0
  165. package/.aios-core/development/tasks/db-bootstrap.md +642 -0
  166. package/.aios-core/development/tasks/db-domain-modeling.md +693 -0
  167. package/.aios-core/development/tasks/db-dry-run.md +293 -0
  168. package/.aios-core/development/tasks/db-env-check.md +260 -0
  169. package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -0
  170. package/.aios-core/development/tasks/db-explain.md +631 -0
  171. package/.aios-core/development/tasks/db-impersonate.md +495 -0
  172. package/.aios-core/development/tasks/db-load-csv.md +593 -0
  173. package/.aios-core/development/tasks/db-policy-apply.md +653 -0
  174. package/.aios-core/development/tasks/db-rls-audit.md +411 -0
  175. package/.aios-core/development/tasks/db-rollback.md +739 -0
  176. package/.aios-core/development/tasks/db-run-sql.md +613 -0
  177. package/.aios-core/development/tasks/db-schema-audit.md +1011 -0
  178. package/.aios-core/development/tasks/db-seed.md +390 -0
  179. package/.aios-core/development/tasks/db-smoke-test.md +351 -0
  180. package/.aios-core/development/tasks/db-snapshot.md +569 -0
  181. package/.aios-core/development/tasks/db-supabase-setup.md +712 -0
  182. package/.aios-core/development/tasks/db-verify-order.md +515 -0
  183. package/.aios-core/development/tasks/deprecate-component.md +957 -0
  184. package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -0
  185. package/.aios-core/development/tasks/dev-backlog-debt.md +469 -0
  186. package/.aios-core/development/tasks/dev-develop-story.md +846 -0
  187. package/.aios-core/development/tasks/dev-improve-code-quality.md +873 -0
  188. package/.aios-core/development/tasks/dev-optimize-performance.md +1034 -0
  189. package/.aios-core/development/tasks/dev-suggest-refactoring.md +871 -0
  190. package/.aios-core/development/tasks/dev-validate-next-story.md +349 -0
  191. package/.aios-core/development/tasks/document-project.md +553 -0
  192. package/.aios-core/development/tasks/environment-bootstrap.md +1311 -0
  193. package/.aios-core/development/tasks/execute-checklist.md +301 -0
  194. package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -0
  195. package/.aios-core/development/tasks/extend-pattern.md +269 -0
  196. package/.aios-core/development/tasks/extract-tokens.md +467 -0
  197. package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -0
  198. package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +261 -0
  199. package/.aios-core/development/tasks/generate-documentation.md +284 -0
  200. package/.aios-core/development/tasks/generate-migration-strategy.md +522 -0
  201. package/.aios-core/development/tasks/generate-shock-report.md +501 -0
  202. package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -0
  203. package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -0
  204. package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -0
  205. package/.aios-core/development/tasks/github-devops-version-management.md +483 -0
  206. package/.aios-core/development/tasks/improve-self.md +823 -0
  207. package/.aios-core/development/tasks/index-docs.md +388 -0
  208. package/.aios-core/development/tasks/init-project-status.md +506 -0
  209. package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -0
  210. package/.aios-core/development/tasks/kb-mode-interaction.md +284 -0
  211. package/.aios-core/development/tasks/learn-patterns.md +901 -0
  212. package/.aios-core/development/tasks/mcp-workflow.md +437 -0
  213. package/.aios-core/development/tasks/modify-agent.md +382 -0
  214. package/.aios-core/development/tasks/modify-task.md +425 -0
  215. package/.aios-core/development/tasks/modify-workflow.md +466 -0
  216. package/.aios-core/development/tasks/po-backlog-add.md +370 -0
  217. package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -0
  218. package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -0
  219. package/.aios-core/development/tasks/po-pull-story.md +316 -0
  220. package/.aios-core/development/tasks/po-stories-index.md +351 -0
  221. package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -0
  222. package/.aios-core/development/tasks/po-sync-story.md +303 -0
  223. package/.aios-core/development/tasks/pr-automation.md +701 -0
  224. package/.aios-core/development/tasks/propose-modification.md +843 -0
  225. package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -0
  226. package/.aios-core/development/tasks/qa-gate.md +374 -0
  227. package/.aios-core/development/tasks/qa-generate-tests.md +1175 -0
  228. package/.aios-core/development/tasks/qa-nfr-assess.md +558 -0
  229. package/.aios-core/development/tasks/qa-review-proposal.md +1158 -0
  230. package/.aios-core/development/tasks/qa-review-story.md +683 -0
  231. package/.aios-core/development/tasks/qa-risk-profile.md +567 -0
  232. package/.aios-core/development/tasks/qa-run-tests.md +277 -0
  233. package/.aios-core/development/tasks/qa-test-design.md +388 -0
  234. package/.aios-core/development/tasks/qa-trace-requirements.md +477 -0
  235. package/.aios-core/development/tasks/release-management.md +723 -0
  236. package/.aios-core/development/tasks/security-audit.md +554 -0
  237. package/.aios-core/development/tasks/security-scan.md +790 -0
  238. package/.aios-core/development/tasks/setup-database.md +741 -0
  239. package/.aios-core/development/tasks/setup-design-system.md +462 -0
  240. package/.aios-core/development/tasks/setup-github.md +874 -0
  241. package/.aios-core/development/tasks/setup-llm-routing.md +229 -0
  242. package/.aios-core/development/tasks/setup-mcp-docker.md +584 -0
  243. package/.aios-core/development/tasks/shard-doc.md +538 -0
  244. package/.aios-core/development/tasks/sm-create-next-story.md +480 -0
  245. package/.aios-core/development/tasks/sync-documentation.md +865 -0
  246. package/.aios-core/development/tasks/tailwind-upgrade.md +294 -0
  247. package/.aios-core/development/tasks/test-as-user.md +621 -0
  248. package/.aios-core/development/tasks/test-validation-task.md +171 -0
  249. package/.aios-core/development/tasks/undo-last.md +347 -0
  250. package/.aios-core/development/tasks/update-manifest.md +410 -0
  251. package/.aios-core/development/tasks/ux-create-wireframe.md +617 -0
  252. package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -0
  253. package/.aios-core/development/tasks/ux-user-research.md +559 -0
  254. package/.aios-core/development/tasks/validate-next-story.md +423 -0
  255. package/.aios-core/development/tasks/validate-structure.md +243 -0
  256. package/.aios-core/development/workflows/README.md +84 -0
  257. package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -0
  258. package/.aios-core/development/workflows/brownfield-service.yaml +187 -0
  259. package/.aios-core/development/workflows/brownfield-ui.yaml +197 -0
  260. package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -0
  261. package/.aios-core/development/workflows/greenfield-service.yaml +206 -0
  262. package/.aios-core/development/workflows/greenfield-ui.yaml +235 -0
  263. package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -0
  264. package/.aios-core/docs/component-creation-guide.md +458 -0
  265. package/.aios-core/docs/session-update-pattern.md +307 -0
  266. package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -0
  267. package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -0
  268. package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -0
  269. package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -0
  270. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -0
  271. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -0
  272. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -0
  273. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -0
  274. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -0
  275. package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -0
  276. package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -0
  277. package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -0
  278. package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -0
  279. package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -0
  280. package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -0
  281. package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -0
  282. package/.aios-core/docs/template-syntax.md +267 -0
  283. package/.aios-core/docs/troubleshooting-guide.md +625 -0
  284. package/.aios-core/elicitation/agent-elicitation.js +272 -0
  285. package/.aios-core/elicitation/task-elicitation.js +281 -0
  286. package/.aios-core/elicitation/workflow-elicitation.js +315 -0
  287. package/.aios-core/index.d.ts +8 -0
  288. package/.aios-core/index.esm.js +16 -0
  289. package/.aios-core/index.js +16 -0
  290. package/.aios-core/infrastructure/README.md +126 -0
  291. package/.aios-core/infrastructure/index.js +199 -0
  292. package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -0
  293. package/.aios-core/infrastructure/integrations/pm-adapters/clickup-adapter.js +345 -0
  294. package/.aios-core/infrastructure/integrations/pm-adapters/github-adapter.js +392 -0
  295. package/.aios-core/infrastructure/integrations/pm-adapters/jira-adapter.js +448 -0
  296. package/.aios-core/infrastructure/integrations/pm-adapters/local-adapter.js +175 -0
  297. package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +122 -0
  298. package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +89 -0
  299. package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +780 -0
  300. package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +950 -0
  301. package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +425 -0
  302. package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +132 -0
  303. package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +381 -0
  304. package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +203 -0
  305. package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +24 -0
  306. package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +51 -0
  307. package/.aios-core/infrastructure/scripts/aios-validator.js +294 -0
  308. package/.aios-core/infrastructure/scripts/approval-workflow.js +643 -0
  309. package/.aios-core/infrastructure/scripts/atomic-layer-classifier.js +308 -0
  310. package/.aios-core/infrastructure/scripts/backup-manager.js +607 -0
  311. package/.aios-core/infrastructure/scripts/batch-creator.js +608 -0
  312. package/.aios-core/infrastructure/scripts/branch-manager.js +391 -0
  313. package/.aios-core/infrastructure/scripts/capability-analyzer.js +535 -0
  314. package/.aios-core/infrastructure/scripts/clickup-helpers.js +226 -0
  315. package/.aios-core/infrastructure/scripts/code-quality-improver.js +1312 -0
  316. package/.aios-core/infrastructure/scripts/commit-message-generator.js +850 -0
  317. package/.aios-core/infrastructure/scripts/component-generator.js +738 -0
  318. package/.aios-core/infrastructure/scripts/component-metadata.js +627 -0
  319. package/.aios-core/infrastructure/scripts/component-search.js +277 -0
  320. package/.aios-core/infrastructure/scripts/config-cache.js +322 -0
  321. package/.aios-core/infrastructure/scripts/config-loader.js +349 -0
  322. package/.aios-core/infrastructure/scripts/conflict-resolver.js +675 -0
  323. package/.aios-core/infrastructure/scripts/coverage-analyzer.js +882 -0
  324. package/.aios-core/infrastructure/scripts/dependency-analyzer.js +638 -0
  325. package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +703 -0
  326. package/.aios-core/infrastructure/scripts/diff-generator.js +129 -0
  327. package/.aios-core/infrastructure/scripts/documentation-integrity/brownfield-analyzer.js +501 -0
  328. package/.aios-core/infrastructure/scripts/documentation-integrity/config-generator.js +329 -0
  329. package/.aios-core/infrastructure/scripts/documentation-integrity/deployment-config-loader.js +282 -0
  330. package/.aios-core/infrastructure/scripts/documentation-integrity/doc-generator.js +331 -0
  331. package/.aios-core/infrastructure/scripts/documentation-integrity/gitignore-generator.js +313 -0
  332. package/.aios-core/infrastructure/scripts/documentation-integrity/index.js +74 -0
  333. package/.aios-core/infrastructure/scripts/documentation-integrity/mode-detector.js +358 -0
  334. package/.aios-core/infrastructure/scripts/documentation-synchronizer.js +1432 -0
  335. package/.aios-core/infrastructure/scripts/framework-analyzer.js +746 -0
  336. package/.aios-core/infrastructure/scripts/git-config-detector.js +293 -0
  337. package/.aios-core/infrastructure/scripts/git-wrapper.js +443 -0
  338. package/.aios-core/infrastructure/scripts/improvement-engine.js +758 -0
  339. package/.aios-core/infrastructure/scripts/improvement-validator.js +710 -0
  340. package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +267 -0
  341. package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free.cmd +80 -0
  342. package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free.sh +62 -0
  343. package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-max.cmd +26 -0
  344. package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-max.sh +18 -0
  345. package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +970 -0
  346. package/.aios-core/infrastructure/scripts/modification-validator.js +555 -0
  347. package/.aios-core/infrastructure/scripts/output-formatter.js +297 -0
  348. package/.aios-core/infrastructure/scripts/performance-analyzer.js +758 -0
  349. package/.aios-core/infrastructure/scripts/performance-and-error-resolver.js +258 -0
  350. package/.aios-core/infrastructure/scripts/performance-optimizer.js +1902 -0
  351. package/.aios-core/infrastructure/scripts/performance-tracker.js +452 -0
  352. package/.aios-core/infrastructure/scripts/pm-adapter-factory.js +181 -0
  353. package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -0
  354. package/.aios-core/infrastructure/scripts/project-status-loader.js +445 -0
  355. package/.aios-core/infrastructure/scripts/refactoring-suggester.js +1139 -0
  356. package/.aios-core/infrastructure/scripts/repository-detector.js +64 -0
  357. package/.aios-core/infrastructure/scripts/sandbox-tester.js +618 -0
  358. package/.aios-core/infrastructure/scripts/security-checker.js +359 -0
  359. package/.aios-core/infrastructure/scripts/source-tree-guardian/index.js +375 -0
  360. package/.aios-core/infrastructure/scripts/source-tree-guardian/manifest-generator.js +410 -0
  361. package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/naming-rules.yaml +285 -0
  362. package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/placement-rules.yaml +262 -0
  363. package/.aios-core/infrastructure/scripts/source-tree-guardian/validator.js +468 -0
  364. package/.aios-core/infrastructure/scripts/spot-check-validator.js +149 -0
  365. package/.aios-core/infrastructure/scripts/status-mapper.js +115 -0
  366. package/.aios-core/infrastructure/scripts/template-engine.js +240 -0
  367. package/.aios-core/infrastructure/scripts/template-validator.js +279 -0
  368. package/.aios-core/infrastructure/scripts/test-generator.js +844 -0
  369. package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1081 -0
  370. package/.aios-core/infrastructure/scripts/test-utilities-fast.js +126 -0
  371. package/.aios-core/infrastructure/scripts/test-utilities.js +200 -0
  372. package/.aios-core/infrastructure/scripts/tool-resolver.js +360 -0
  373. package/.aios-core/infrastructure/scripts/transaction-manager.js +590 -0
  374. package/.aios-core/infrastructure/scripts/usage-analytics.js +634 -0
  375. package/.aios-core/infrastructure/scripts/validate-output-pattern.js +213 -0
  376. package/.aios-core/infrastructure/scripts/visual-impact-generator.js +1056 -0
  377. package/.aios-core/infrastructure/scripts/yaml-validator.js +397 -0
  378. package/.aios-core/infrastructure/templates/coderabbit.yaml.template +279 -0
  379. package/.aios-core/infrastructure/templates/core-config/core-config-brownfield.tmpl.yaml +182 -0
  380. package/.aios-core/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +127 -0
  381. package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -0
  382. package/.aios-core/infrastructure/templates/github-workflows/ci.yml.template +169 -0
  383. package/.aios-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -0
  384. package/.aios-core/infrastructure/templates/github-workflows/release.yml.template +196 -0
  385. package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -0
  386. package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -0
  387. package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -0
  388. package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -0
  389. package/.aios-core/infrastructure/templates/project-docs/coding-standards-tmpl.md +346 -0
  390. package/.aios-core/infrastructure/templates/project-docs/source-tree-tmpl.md +177 -0
  391. package/.aios-core/infrastructure/templates/project-docs/tech-stack-tmpl.md +267 -0
  392. package/.aios-core/infrastructure/tests/project-status-loader.test.js +394 -0
  393. package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -0
  394. package/.aios-core/infrastructure/tests/utilities-audit-results.json +501 -0
  395. package/.aios-core/infrastructure/tests/validate-module.js +97 -0
  396. package/.aios-core/infrastructure/tools/README.md +222 -0
  397. package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -0
  398. package/.aios-core/infrastructure/tools/cli/llm-routing.yaml +126 -0
  399. package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -0
  400. package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -0
  401. package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -0
  402. package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -0
  403. package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -0
  404. package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -0
  405. package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -0
  406. package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -0
  407. package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -0
  408. package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -0
  409. package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -0
  410. package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -0
  411. package/.aios-core/install-manifest.yaml +347 -0
  412. package/.aios-core/manifests/agents.csv +1 -0
  413. package/.aios-core/manifests/schema/manifest-schema.json +190 -0
  414. package/.aios-core/manifests/tasks.csv +121 -0
  415. package/.aios-core/manifests/workers.csv +204 -0
  416. package/.aios-core/package.json +103 -0
  417. package/.aios-core/product/README.md +56 -0
  418. package/.aios-core/product/checklists/architect-checklist.md +444 -0
  419. package/.aios-core/product/checklists/change-checklist.md +183 -0
  420. package/.aios-core/product/checklists/database-design-checklist.md +119 -0
  421. package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -0
  422. package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -0
  423. package/.aios-core/product/checklists/pm-checklist.md +376 -0
  424. package/.aios-core/product/checklists/po-master-checklist.md +442 -0
  425. package/.aios-core/product/checklists/pre-push-checklist.md +108 -0
  426. package/.aios-core/product/checklists/release-checklist.md +122 -0
  427. package/.aios-core/product/checklists/story-dod-checklist.md +102 -0
  428. package/.aios-core/product/checklists/story-draft-checklist.md +216 -0
  429. package/.aios-core/product/data/brainstorming-techniques.md +37 -0
  430. package/.aios-core/product/data/elicitation-methods.md +135 -0
  431. package/.aios-core/product/data/mode-selection-best-practices.md +471 -0
  432. package/.aios-core/product/data/test-levels-framework.md +149 -0
  433. package/.aios-core/product/data/test-priorities-matrix.md +175 -0
  434. package/.aios-core/product/templates/1mcp-config.yaml +225 -0
  435. package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -0
  436. package/.aios-core/product/templates/activation-instructions-template.md +258 -0
  437. package/.aios-core/product/templates/adr.hbs +125 -0
  438. package/.aios-core/product/templates/agent-template.yaml +121 -0
  439. package/.aios-core/product/templates/architecture-tmpl.yaml +651 -0
  440. package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +156 -0
  441. package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +476 -0
  442. package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +280 -0
  443. package/.aios-core/product/templates/changelog-template.md +134 -0
  444. package/.aios-core/product/templates/command-rationalization-matrix.md +152 -0
  445. package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +293 -0
  446. package/.aios-core/product/templates/component-react-tmpl.tsx +98 -0
  447. package/.aios-core/product/templates/dbdr.hbs +241 -0
  448. package/.aios-core/product/templates/design-story-tmpl.yaml +587 -0
  449. package/.aios-core/product/templates/ds-artifact-analysis.md +70 -0
  450. package/.aios-core/product/templates/engine/elicitation.js +298 -0
  451. package/.aios-core/product/templates/engine/index.js +308 -0
  452. package/.aios-core/product/templates/engine/loader.js +231 -0
  453. package/.aios-core/product/templates/engine/renderer.js +343 -0
  454. package/.aios-core/product/templates/engine/schemas/adr.schema.json +102 -0
  455. package/.aios-core/product/templates/engine/schemas/dbdr.schema.json +205 -0
  456. package/.aios-core/product/templates/engine/schemas/epic.schema.json +175 -0
  457. package/.aios-core/product/templates/engine/schemas/pmdr.schema.json +175 -0
  458. package/.aios-core/product/templates/engine/schemas/prd-v2.schema.json +300 -0
  459. package/.aios-core/product/templates/engine/schemas/prd.schema.json +152 -0
  460. package/.aios-core/product/templates/engine/schemas/story.schema.json +222 -0
  461. package/.aios-core/product/templates/engine/schemas/task.schema.json +154 -0
  462. package/.aios-core/product/templates/engine/validator.js +294 -0
  463. package/.aios-core/product/templates/epic.hbs +212 -0
  464. package/.aios-core/product/templates/eslintrc-security.json +32 -0
  465. package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +206 -0
  466. package/.aios-core/product/templates/front-end-spec-tmpl.yaml +349 -0
  467. package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +805 -0
  468. package/.aios-core/product/templates/github-actions-cd.yml +212 -0
  469. package/.aios-core/product/templates/github-actions-ci.yml +172 -0
  470. package/.aios-core/product/templates/github-pr-template.md +67 -0
  471. package/.aios-core/product/templates/gordon-mcp.yaml +140 -0
  472. package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -0
  473. package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -0
  474. package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -0
  475. package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -0
  476. package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -0
  477. package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -0
  478. package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -0
  479. package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -0
  480. package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -0
  481. package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -0
  482. package/.aios-core/product/templates/market-research-tmpl.yaml +252 -0
  483. package/.aios-core/product/templates/mcp-workflow.js +271 -0
  484. package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -0
  485. package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -0
  486. package/.aios-core/product/templates/personalized-agent-template.md +258 -0
  487. package/.aios-core/product/templates/personalized-checklist-template.md +340 -0
  488. package/.aios-core/product/templates/personalized-task-template-v2.md +905 -0
  489. package/.aios-core/product/templates/personalized-task-template.md +344 -0
  490. package/.aios-core/product/templates/personalized-template-file.yaml +322 -0
  491. package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -0
  492. package/.aios-core/product/templates/pmdr.hbs +186 -0
  493. package/.aios-core/product/templates/prd-tmpl.yaml +202 -0
  494. package/.aios-core/product/templates/prd-v2.0.hbs +216 -0
  495. package/.aios-core/product/templates/prd.hbs +201 -0
  496. package/.aios-core/product/templates/project-brief-tmpl.yaml +221 -0
  497. package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -0
  498. package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -0
  499. package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -0
  500. package/.aios-core/product/templates/shock-report-tmpl.html +502 -0
  501. package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -0
  502. package/.aios-core/product/templates/story-tmpl.yaml +332 -0
  503. package/.aios-core/product/templates/story.hbs +263 -0
  504. package/.aios-core/product/templates/task-execution-report.md +495 -0
  505. package/.aios-core/product/templates/task-template.md +123 -0
  506. package/.aios-core/product/templates/task.hbs +170 -0
  507. package/.aios-core/product/templates/tmpl-comment-on-examples.sql +158 -0
  508. package/.aios-core/product/templates/tmpl-migration-script.sql +91 -0
  509. package/.aios-core/product/templates/tmpl-rls-granular-policies.sql +104 -0
  510. package/.aios-core/product/templates/tmpl-rls-kiss-policy.sql +10 -0
  511. package/.aios-core/product/templates/tmpl-rls-roles.sql +135 -0
  512. package/.aios-core/product/templates/tmpl-rls-simple.sql +77 -0
  513. package/.aios-core/product/templates/tmpl-rls-tenant.sql +152 -0
  514. package/.aios-core/product/templates/tmpl-rollback-script.sql +77 -0
  515. package/.aios-core/product/templates/tmpl-seed-data.sql +140 -0
  516. package/.aios-core/product/templates/tmpl-smoke-test.sql +16 -0
  517. package/.aios-core/product/templates/tmpl-staging-copy-merge.sql +139 -0
  518. package/.aios-core/product/templates/tmpl-stored-proc.sql +140 -0
  519. package/.aios-core/product/templates/tmpl-trigger.sql +152 -0
  520. package/.aios-core/product/templates/tmpl-view-materialized.sql +133 -0
  521. package/.aios-core/product/templates/tmpl-view.sql +177 -0
  522. package/.aios-core/product/templates/token-exports-css-tmpl.css +240 -0
  523. package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -0
  524. package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -0
  525. package/.aios-core/product/templates/workflow-template.yaml +134 -0
  526. package/.aios-core/quality/metrics-collector.js +572 -0
  527. package/.aios-core/quality/metrics-hook.js +260 -0
  528. package/.aios-core/quality/schemas/quality-metrics.schema.json +233 -0
  529. package/.aios-core/quality/seed-metrics.js +336 -0
  530. package/.aios-core/scripts/README.md +354 -0
  531. package/.aios-core/scripts/aios-doc-template.md +325 -0
  532. package/.aios-core/scripts/batch-migrate-phase1.ps1 +36 -0
  533. package/.aios-core/scripts/batch-migrate-phase2.ps1 +88 -0
  534. package/.aios-core/scripts/batch-migrate-phase3.ps1 +45 -0
  535. package/.aios-core/scripts/command-execution-hook.js +201 -0
  536. package/.aios-core/scripts/context-detector.js +226 -0
  537. package/.aios-core/scripts/elicitation-engine.js +385 -0
  538. package/.aios-core/scripts/elicitation-session-manager.js +300 -0
  539. package/.aios-core/scripts/migrate-framework-docs.sh +300 -0
  540. package/.aios-core/scripts/session-context-loader.js +286 -0
  541. package/.aios-core/scripts/test-template-system.js +941 -0
  542. package/.aios-core/scripts/validate-phase1.ps1 +35 -0
  543. package/.aios-core/scripts/workflow-management.md +69 -0
  544. package/.aios-core/tasks/find-component.md.legacy +391 -0
  545. package/.aios-core/tasks/generate-commit-message.md.legacy +426 -0
  546. package/.aios-core/tasks/generate-migration.md.legacy +382 -0
  547. package/.aios-core/tasks/rollback-modification.md.legacy +307 -0
  548. package/.aios-core/tasks/update-tests.md.legacy +283 -0
  549. package/.aios-core/user-guide.md +1413 -0
  550. package/.aios-core/working-in-the-brownfield.md +361 -0
  551. package/.claude/CLAUDE.md +221 -0
  552. package/LICENSE +48 -0
  553. package/README.md +703 -0
  554. package/bin/aios-init-old.js +532 -0
  555. package/bin/aios-init-v4.js +390 -0
  556. package/bin/aios-init.backup-v1.1.4.js +352 -0
  557. package/bin/aios-init.js +736 -0
  558. package/bin/aios-minimal.js +26 -0
  559. package/bin/aios.js +279 -0
  560. package/bin/migrate-pm-config.js +219 -0
  561. package/bin/modules/env-config.js +436 -0
  562. package/bin/modules/mcp-installer.js +383 -0
  563. package/bin/utils/install-errors.js +339 -0
  564. package/bin/utils/install-transaction.js +445 -0
  565. package/index.d.ts +19 -0
  566. package/index.esm.js +21 -0
  567. package/index.js +94 -0
  568. package/package.json +161 -0
  569. package/packages/installer/package.json +39 -0
  570. package/packages/installer/src/config/configure-environment.js +312 -0
  571. package/packages/installer/src/config/templates/core-config-template.js +183 -0
  572. package/packages/installer/src/config/templates/env-template.js +127 -0
  573. package/packages/installer/src/config/validation/config-validator.js +243 -0
  574. package/packages/installer/src/detection/detect-project-type.js +81 -0
  575. package/packages/installer/src/wizard/wizard.js +244 -0
  576. package/packages/installer/tests/integration/environment-configuration.test.js +328 -0
  577. package/packages/installer/tests/integration/wizard-detection.test.js +349 -0
  578. package/packages/installer/tests/unit/config-validator.test.js +315 -0
  579. package/packages/installer/tests/unit/detection/detect-project-type.test.js +401 -0
  580. package/packages/installer/tests/unit/env-template.test.js +185 -0
  581. package/src/config/ide-configs.js +189 -0
  582. package/src/installer/aios-core-installer.js +319 -0
  583. package/src/installer/dependency-installer.js +335 -0
  584. package/src/utils/aios-colors.js +234 -0
  585. package/src/wizard/feedback.js +218 -0
  586. package/src/wizard/ide-config-generator.js +488 -0
  587. package/src/wizard/ide-selector.js +84 -0
  588. package/src/wizard/index.js +589 -0
  589. package/src/wizard/questions.js +249 -0
  590. package/src/wizard/validation/index.js +120 -0
  591. package/src/wizard/validation/report-generator.js +269 -0
  592. package/src/wizard/validation/troubleshooting-system.js +346 -0
  593. package/src/wizard/validation/validators/config-validator.js +362 -0
  594. package/src/wizard/validation/validators/dependency-validator.js +333 -0
  595. package/src/wizard/validation/validators/file-structure-validator.js +181 -0
  596. package/src/wizard/validation/validators/mcp-health-checker.js +310 -0
  597. package/src/wizard/validators.js +274 -0
  598. package/templates/squad/LICENSE +21 -0
  599. package/templates/squad/README.md +37 -0
  600. package/templates/squad/agents/example-agent.yaml +36 -0
  601. package/templates/squad/package.json +19 -0
  602. package/templates/squad/squad.yaml +25 -0
  603. package/templates/squad/tasks/example-task.yaml +46 -0
  604. package/templates/squad/templates/example-template.md +24 -0
  605. package/templates/squad/tests/example-agent.test.js +53 -0
  606. package/templates/squad/workflows/example-workflow.yaml +54 -0
  607. package/tools/package-builder.js +35 -0
@@ -0,0 +1,866 @@
1
+ /**
2
+ * Greeting Builder - Contextual Agent Greeting System
3
+ *
4
+ * Builds intelligent greetings based on:
5
+ * - Session type (new/existing/workflow)
6
+ * - Git configuration status
7
+ * - Project status
8
+ * - Command visibility metadata
9
+ *
10
+ * Performance: <150ms (hard limit with timeout protection)
11
+ * Fallback: Simple greeting on any error
12
+ */
13
+
14
+ const ContextDetector = require('../../core/session/context-detector');
15
+ const GitConfigDetector = require('../../infrastructure/scripts/git-config-detector');
16
+ const WorkflowNavigator = require('./workflow-navigator');
17
+ const GreetingPreferenceManager = require('./greeting-preference-manager');
18
+ const { loadProjectStatus, formatStatusDisplay } = require('../../infrastructure/scripts/project-status-loader');
19
+ const fs = require('fs');
20
+ const path = require('path');
21
+ const yaml = require('js-yaml');
22
+
23
+ const GREETING_TIMEOUT = 150; // 150ms hard limit
24
+ const GIT_WARNING_TEMPLATE = `
25
+ ⚠️ **Git Configuration Needed**
26
+ Your project is not connected to a git repository.
27
+ Run \`git init\` and \`git remote add origin <url>\` to enable version control.
28
+ `;
29
+
30
+ class GreetingBuilder {
31
+ constructor() {
32
+ this.contextDetector = new ContextDetector();
33
+ this.gitConfigDetector = new GitConfigDetector();
34
+ this.workflowNavigator = new WorkflowNavigator();
35
+ this.preferenceManager = new GreetingPreferenceManager();
36
+ this.config = this._loadConfig();
37
+ }
38
+
39
+ /**
40
+ * Build contextual greeting for agent
41
+ * @param {Object} agent - Agent definition
42
+ * @param {Object} context - Session context
43
+ * @returns {Promise<string>} Formatted greeting
44
+ */
45
+ async buildGreeting(agent, context = {}) {
46
+ const fallbackGreeting = this.buildSimpleGreeting(agent);
47
+
48
+ try {
49
+ // Check user preference (Story 6.1.4)
50
+ const preference = this.preferenceManager.getPreference();
51
+
52
+ if (preference !== 'auto') {
53
+ // Override with fixed level
54
+ return this.buildFixedLevelGreeting(agent, preference);
55
+ }
56
+
57
+ // Use session-aware logic (Story 6.1.2.5)
58
+ const greetingPromise = this._buildContextualGreeting(agent, context);
59
+ const timeoutPromise = new Promise((_, reject) =>
60
+ setTimeout(() => reject(new Error('Greeting timeout')), GREETING_TIMEOUT),
61
+ );
62
+
63
+ return await Promise.race([greetingPromise, timeoutPromise]);
64
+ } catch (error) {
65
+ console.warn('[GreetingBuilder] Fallback to simple greeting:', error.message);
66
+ return fallbackGreeting;
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Build contextual greeting (internal implementation)
72
+ * @private
73
+ * @param {Object} agent - Agent definition
74
+ * @param {Object} context - Session context (may contain pre-loaded values)
75
+ * @returns {Promise<string>} Contextual greeting
76
+ */
77
+ async _buildContextualGreeting(agent, context) {
78
+ // Use pre-loaded values if available, otherwise load
79
+ const sessionType = context.sessionType ||
80
+ await this._safeDetectSessionType(context);
81
+
82
+ const projectStatus = context.projectStatus ||
83
+ await this._safeLoadProjectStatus();
84
+
85
+ // gitConfig always loads (fast, cached)
86
+ const gitConfig = await this._safeCheckGitConfig();
87
+
88
+ // Build greeting sections based on session type
89
+ const sections = [];
90
+
91
+ // 1. Presentation (always)
92
+ sections.push(this.buildPresentation(agent, sessionType));
93
+
94
+ // 2. Role description (new session only)
95
+ if (sessionType === 'new') {
96
+ sections.push(this.buildRoleDescription(agent));
97
+ }
98
+
99
+ // 3. Project status (if git configured)
100
+ if (gitConfig.configured && projectStatus) {
101
+ sections.push(this.buildProjectStatus(projectStatus, sessionType));
102
+ }
103
+
104
+ // 4. Context section (intelligent contextualization + recommendations)
105
+ const contextSection = this.buildContextSection(agent, context, sessionType, projectStatus);
106
+ if (contextSection) {
107
+ sections.push(contextSection);
108
+ }
109
+
110
+ // 5. Workflow suggestions (if workflow session and no context section)
111
+ if (sessionType === 'workflow' && context.lastCommands && !contextSection) {
112
+ const suggestions = this.workflowNavigator.getNextSteps(
113
+ context.lastCommands,
114
+ { agentId: agent.id },
115
+ );
116
+ if (suggestions && suggestions.length > 0) {
117
+ sections.push(this.buildWorkflowSuggestions(suggestions));
118
+ }
119
+ }
120
+
121
+ // 7. Commands (filtered by visibility)
122
+ const commands = this.filterCommandsByVisibility(agent, sessionType);
123
+ sections.push(this.buildCommands(commands, sessionType));
124
+
125
+ // 8. Footer with signature
126
+ sections.push(this.buildFooter(agent));
127
+
128
+ return sections.filter(Boolean).join('\n\n');
129
+ }
130
+
131
+ /**
132
+ * Build fixed-level greeting (Story 6.1.4)
133
+ * @param {Object} agent - Agent definition
134
+ * @param {string} level - Preference level (minimal|named|archetypal)
135
+ * @returns {string} Fixed-level greeting
136
+ */
137
+ buildFixedLevelGreeting(agent, level) {
138
+ const profile = agent.persona_profile;
139
+
140
+ if (!profile || !profile.greeting_levels) {
141
+ return this.buildSimpleGreeting(agent);
142
+ }
143
+
144
+ // Select greeting based on preference
145
+ let greetingText;
146
+ switch (level) {
147
+ case 'minimal':
148
+ greetingText = profile.greeting_levels.minimal || `${agent.icon} ${agent.id} Agent ready`;
149
+ break;
150
+ case 'named':
151
+ greetingText = profile.greeting_levels.named || `${agent.icon} ${agent.name} ready`;
152
+ break;
153
+ case 'archetypal':
154
+ greetingText = profile.greeting_levels.archetypal || `${agent.icon} ${agent.name} the ${profile.archetype} ready`;
155
+ break;
156
+ default:
157
+ greetingText = profile.greeting_levels.named || `${agent.icon} ${agent.name} ready`;
158
+ }
159
+
160
+ return `${greetingText}\n\nType \`*help\` to see available commands.`;
161
+ }
162
+
163
+ /**
164
+ * Build simple greeting (fallback)
165
+ * @param {Object} agent - Agent definition
166
+ * @returns {string} Simple greeting
167
+ */
168
+ buildSimpleGreeting(agent) {
169
+ const greetingLevels = agent.persona_profile?.communication?.greeting_levels || agent.persona_profile?.greeting_levels;
170
+ const greeting = greetingLevels?.named || `${agent.icon} ${agent.name} ready`;
171
+ return `${greeting}\n\nType \`*help\` to see available commands.`;
172
+ }
173
+
174
+ /**
175
+ * Build presentation section
176
+ * @param {Object} agent - Agent definition
177
+ * @param {string} sessionType - Session type
178
+ * @returns {string} Presentation text
179
+ */
180
+ buildPresentation(agent, sessionType) {
181
+ const profile = agent.persona_profile;
182
+
183
+ // Try greeting_levels from communication first, then fall back to top level
184
+ const greetingLevels = profile?.communication?.greeting_levels || profile?.greeting_levels;
185
+
186
+ if (!greetingLevels) {
187
+ return `${agent.icon} ${agent.name} ready`;
188
+ }
189
+
190
+ // Always use archetypal greeting for richer presentation
191
+ const archetypeGreeting = greetingLevels.archetypal ||
192
+ greetingLevels.named ||
193
+ `${agent.icon} ${agent.name} ready`;
194
+
195
+ return archetypeGreeting;
196
+ }
197
+
198
+ /**
199
+ * Build role description section
200
+ * @param {Object} agent - Agent definition
201
+ * @returns {string} Role description
202
+ */
203
+ buildRoleDescription(agent) {
204
+ if (!agent.persona || !agent.persona.role) {
205
+ return '';
206
+ }
207
+
208
+ return `**Role:** ${agent.persona.role}`;
209
+ }
210
+
211
+ /**
212
+ * Build project status section
213
+ * @param {Object} projectStatus - Project status data
214
+ * @param {string} sessionType - Session type
215
+ * @returns {string} Formatted project status
216
+ */
217
+ buildProjectStatus(projectStatus, sessionType = 'full') {
218
+ if (!projectStatus) {
219
+ return '';
220
+ }
221
+
222
+ const format = sessionType === 'workflow' ? 'condensed' : 'full';
223
+ return this._formatProjectStatus(projectStatus, format);
224
+ }
225
+
226
+ /**
227
+ * Format project status
228
+ * @private
229
+ * @param {Object} status - Project status
230
+ * @param {string} format - 'full' | 'condensed'
231
+ * @returns {string} Formatted status
232
+ */
233
+ _formatProjectStatus(status, format) {
234
+ if (format === 'condensed') {
235
+ const parts = [];
236
+
237
+ if (status.branch) {
238
+ parts.push(`🌿 ${status.branch}`);
239
+ }
240
+
241
+ if (status.modifiedFilesTotalCount > 0) {
242
+ parts.push(`📝 ${status.modifiedFilesTotalCount} modified`);
243
+ }
244
+
245
+ if (status.currentStory) {
246
+ parts.push(`📖 ${status.currentStory}`);
247
+ }
248
+
249
+ return parts.length > 0 ? `📊 ${parts.join(' | ')}` : '';
250
+ }
251
+
252
+ // Full format with emojis
253
+ const lines = [];
254
+
255
+ if (status.branch) {
256
+ lines.push(`🌿 **Branch:** ${status.branch}`);
257
+ }
258
+
259
+ if (status.modifiedFiles && status.modifiedFiles.length > 0) {
260
+ let filesDisplay = status.modifiedFiles.join(', ');
261
+ const totalCount = status.modifiedFilesTotalCount || status.modifiedFiles.length;
262
+ if (totalCount > status.modifiedFiles.length) {
263
+ const remaining = totalCount - status.modifiedFiles.length;
264
+ filesDisplay += ` ...and ${remaining} more`;
265
+ }
266
+ lines.push(`📝 **Modified:** ${filesDisplay}`);
267
+ }
268
+
269
+ if (status.recentCommits && status.recentCommits.length > 0) {
270
+ lines.push(`📖 **Recent:** ${status.recentCommits.join(', ')}`);
271
+ }
272
+
273
+ if (status.currentStory) {
274
+ lines.push(`📌 **Story:** ${status.currentStory}`);
275
+ }
276
+
277
+ if (lines.length === 0) {
278
+ return '';
279
+ }
280
+
281
+ return `📊 **Project Status:**\n - ${lines.join('\n - ')}`;
282
+ }
283
+
284
+ /**
285
+ * Build intelligent context section with recommendations
286
+ * @param {Object} agent - Agent definition
287
+ * @param {Object} context - Session context
288
+ * @param {string} sessionType - Session type
289
+ * @param {Object} projectStatus - Project status
290
+ * @returns {string|null} Context section with recommendations
291
+ */
292
+ buildContextSection(agent, context, sessionType, projectStatus) {
293
+ // Skip for new sessions
294
+ if (sessionType === 'new') {
295
+ return null;
296
+ }
297
+
298
+ const parts = [];
299
+
300
+ // Build intelligent context narrative
301
+ const contextNarrative = this._buildContextNarrative(agent, context, projectStatus);
302
+
303
+ if (contextNarrative.description) {
304
+ parts.push(`💡 **Context:** ${contextNarrative.description}`);
305
+ }
306
+
307
+ if (contextNarrative.recommendedCommand) {
308
+ parts.push(` **Recommended:** Use \`${contextNarrative.recommendedCommand}\` to continue`);
309
+ }
310
+
311
+ return parts.length > 0 ? parts.join('\n') : null;
312
+ }
313
+
314
+ /**
315
+ * Build intelligent context narrative based on previous work
316
+ * Analyzes files, story, and previous agent to create rich context
317
+ * @private
318
+ */
319
+ _buildContextNarrative(agent, context, projectStatus) {
320
+ const prevAgentId = this._getPreviousAgentId(context);
321
+ const prevAgentName = this._getPreviousAgentName(context);
322
+
323
+ // Priority 1: Agent transition + Story + Modified files (richest context)
324
+ if (prevAgentId && projectStatus?.modifiedFiles) {
325
+ // Use session story if available (more accurate), otherwise use git story
326
+ const sessionStory = context.sessionStory || projectStatus.currentStory;
327
+ const storyContext = this._analyzeStoryContext({ ...projectStatus, currentStory: sessionStory });
328
+ const fileContext = this._analyzeModifiedFiles(projectStatus.modifiedFiles, sessionStory);
329
+
330
+ let description = `Vejo que @${prevAgentName} finalizou os ajustes`;
331
+
332
+ if (fileContext.keyFiles.length > 0) {
333
+ description += ` ${fileContext.summary}`;
334
+ }
335
+
336
+ if (storyContext.storyFile) {
337
+ description += ` no **\`${storyContext.storyFile}\`**`;
338
+ }
339
+
340
+ description += `. Agora podemos ${this._getAgentAction(agent.id, storyContext)}`;
341
+
342
+ const recommendedCommand = this._suggestCommand(agent.id, prevAgentId, storyContext);
343
+
344
+ return { description, recommendedCommand };
345
+ }
346
+
347
+ // Priority 2: Agent transition + Story (no file details)
348
+ if (prevAgentId && projectStatus?.currentStory && projectStatus.currentStory !== 'EPIC-SPLIT-IMPLEMENTATION-COMPLETE') {
349
+ const storyContext = this._analyzeStoryContext(projectStatus);
350
+ const description = `Continuando do trabalho de @${prevAgentName} em ${projectStatus.currentStory}. ${this._getAgentAction(agent.id, storyContext)}`;
351
+ const recommendedCommand = this._suggestCommand(agent.id, prevAgentId, storyContext);
352
+
353
+ return { description, recommendedCommand };
354
+ }
355
+
356
+ // Priority 3: Just agent transition
357
+ if (prevAgentId) {
358
+ const description = `Continuing from @${prevAgentName}`;
359
+ const recommendedCommand = this._suggestCommand(agent.id, prevAgentId, {});
360
+
361
+ return { description, recommendedCommand };
362
+ }
363
+
364
+ // Priority 4: Story-based context
365
+ if (projectStatus?.currentStory && projectStatus.currentStory !== 'EPIC-SPLIT-IMPLEMENTATION-COMPLETE') {
366
+ const storyContext = this._analyzeStoryContext(projectStatus);
367
+ const description = `Working on ${projectStatus.currentStory}`;
368
+ const recommendedCommand = this._suggestCommand(agent.id, null, storyContext);
369
+
370
+ return { description, recommendedCommand };
371
+ }
372
+
373
+ // Priority 5: Last command context
374
+ if (context.lastCommands && context.lastCommands.length > 0) {
375
+ const lastCmd = context.lastCommands[context.lastCommands.length - 1];
376
+ const cmdName = typeof lastCmd === 'object' ? lastCmd.command : lastCmd;
377
+ const description = `Last action: *${cmdName}`;
378
+
379
+ return { description, recommendedCommand: null };
380
+ }
381
+
382
+ // Priority 6: Session message
383
+ if (context.sessionMessage) {
384
+ return { description: context.sessionMessage, recommendedCommand: null };
385
+ }
386
+
387
+ return { description: null, recommendedCommand: null };
388
+ }
389
+
390
+ _getPreviousAgentId(context) {
391
+ if (!context.previousAgent) return null;
392
+ return typeof context.previousAgent === 'string'
393
+ ? context.previousAgent
394
+ : context.previousAgent.agentId;
395
+ }
396
+
397
+ _getPreviousAgentName(context) {
398
+ if (!context.previousAgent) return null;
399
+ return typeof context.previousAgent === 'string'
400
+ ? context.previousAgent
401
+ : (context.previousAgent.agentName || context.previousAgent.agentId);
402
+ }
403
+
404
+ _analyzeStoryContext(projectStatus) {
405
+ const currentStory = projectStatus.currentStory || '';
406
+ const storyFile = currentStory ? `${currentStory}.md` : null;
407
+
408
+ return {
409
+ storyId: currentStory,
410
+ storyFile: storyFile,
411
+ hasStory: !!currentStory && currentStory !== 'EPIC-SPLIT-IMPLEMENTATION-COMPLETE',
412
+ };
413
+ }
414
+
415
+ _analyzeModifiedFiles(modifiedFiles, currentStory) {
416
+ if (!modifiedFiles || modifiedFiles.length === 0) {
417
+ return { keyFiles: [], summary: '' };
418
+ }
419
+
420
+ const keyFiles = [];
421
+ const patterns = [
422
+ { regex: /greeting-builder\.js/, priority: 1, desc: 'do **`.aios-core/scripts/greeting-builder.js`**', category: 'script' },
423
+ { regex: /agent-config-loader\.js/, priority: 1, desc: 'do **`agent-config-loader.js`**', category: 'script' },
424
+ { regex: /generate-greeting\.js/, priority: 1, desc: 'do **`generate-greeting.js`**', category: 'script' },
425
+ { regex: /session-context-loader\.js/, priority: 1, desc: 'do **`session-context-loader.js`**', category: 'script' },
426
+ { regex: /agents\/.*\.md/, priority: 1, desc: 'das definições de agentes', category: 'agent' },
427
+ { regex: /\.md$/, priority: 2, desc: 'dos arquivos de documentação', category: 'doc' },
428
+ ];
429
+
430
+ // Find matching key files (avoid duplicates)
431
+ const seenCategories = new Set();
432
+ for (const file of modifiedFiles.slice(0, 5)) { // Check first 5 files
433
+ for (const pattern of patterns) {
434
+ if (pattern.regex.test(file) && !seenCategories.has(pattern.category)) {
435
+ keyFiles.push({ file, desc: pattern.desc, priority: pattern.priority, category: pattern.category });
436
+ seenCategories.add(pattern.category);
437
+ break;
438
+ }
439
+ }
440
+ }
441
+
442
+ // Sort by priority and take top 2
443
+ keyFiles.sort((a, b) => a.priority - b.priority);
444
+ const topFiles = keyFiles.slice(0, 2);
445
+
446
+ if (topFiles.length === 0) {
447
+ return { keyFiles: [], summary: 'dos arquivos do projeto' };
448
+ }
449
+
450
+ if (topFiles.length === 1) {
451
+ return { keyFiles: topFiles, summary: topFiles[0].desc };
452
+ }
453
+
454
+ return {
455
+ keyFiles: topFiles,
456
+ summary: `${topFiles[0].desc} e ${topFiles[1].desc}`,
457
+ };
458
+ }
459
+
460
+ _getAgentAction(agentId, storyContext) {
461
+ const actions = {
462
+ 'qa': 'revisar a qualidade dessa implementação',
463
+ 'dev': 'implementar as funcionalidades',
464
+ 'pm': 'sincronizar o progresso',
465
+ 'po': 'validar os requisitos',
466
+ 'sm': 'coordenar o desenvolvimento',
467
+ };
468
+
469
+ return actions[agentId] || 'continuar o trabalho';
470
+ }
471
+
472
+ _suggestCommand(agentId, prevAgentId, storyContext) {
473
+ // Agent transition commands
474
+ if (prevAgentId === 'dev' && agentId === 'qa') {
475
+ return storyContext.storyFile ? `*review ${storyContext.storyFile}` : '*review';
476
+ }
477
+
478
+ if (prevAgentId === 'qa' && agentId === 'dev') {
479
+ return '*apply-qa-fixes';
480
+ }
481
+
482
+ if (prevAgentId === 'po' && agentId === 'dev') {
483
+ return '*develop-yolo';
484
+ }
485
+
486
+ // Role-based commands when no previous agent
487
+ if (agentId === 'qa' && storyContext.storyFile) {
488
+ return `*review ${storyContext.storyFile}`;
489
+ }
490
+
491
+ if (agentId === 'dev' && storyContext.hasStory) {
492
+ return '*develop-yolo docs/stories/[story-path].md';
493
+ }
494
+
495
+ if (agentId === 'pm' && storyContext.storyId) {
496
+ return `*sync-story ${storyContext.storyId}`;
497
+ }
498
+
499
+ return null;
500
+ }
501
+
502
+ /**
503
+ * Build current context section (legacy - kept for compatibility)
504
+ * @param {Object} context - Session context
505
+ * @param {string} sessionType - Session type
506
+ * @param {Object} projectStatus - Project status
507
+ * @returns {string} Context description
508
+ */
509
+ buildCurrentContext(context, sessionType, projectStatus) {
510
+ if (sessionType === 'workflow' && projectStatus?.currentStory) {
511
+ return `📌 **Context:** Working on ${projectStatus.currentStory}`;
512
+ }
513
+
514
+ if (context.lastCommand) {
515
+ return `📌 **Last Action:** ${context.lastCommand}`;
516
+ }
517
+
518
+ return '';
519
+ }
520
+
521
+ /**
522
+ * Build workflow suggestions section
523
+ * @param {Object} context - Session context
524
+ * @returns {string|null} Workflow suggestions or null
525
+ */
526
+ buildWorkflowSuggestions(context) {
527
+ try {
528
+ const commandHistory = context.commandHistory || context.lastCommands || [];
529
+ const workflowState = this.workflowNavigator.detectWorkflowState(commandHistory, context);
530
+
531
+ if (!workflowState) {
532
+ return null;
533
+ }
534
+
535
+ const suggestions = this.workflowNavigator.suggestNextCommands(workflowState);
536
+ if (!suggestions || suggestions.length === 0) {
537
+ return null;
538
+ }
539
+
540
+ const greetingMessage = this.workflowNavigator.getGreetingMessage(workflowState);
541
+ const header = greetingMessage || 'Next steps:';
542
+
543
+ return this.workflowNavigator.formatSuggestions(suggestions, header);
544
+ } catch (error) {
545
+ console.warn('[GreetingBuilder] Workflow suggestions failed:', error.message);
546
+ return null;
547
+ }
548
+ }
549
+
550
+ /**
551
+ * Build contextual suggestions based on project state
552
+ * Analyzes current context and suggests relevant next commands
553
+ * @param {Object} agent - Agent definition
554
+ * @param {Object} projectStatus - Project status data
555
+ * @param {string} sessionType - Session type
556
+ * @returns {string|null} Contextual suggestions or null
557
+ */
558
+ buildContextualSuggestions(agent, projectStatus, sessionType) {
559
+ try {
560
+ const suggestions = [];
561
+ const agentId = agent.id;
562
+
563
+ // Analyze current story status
564
+ if (projectStatus.currentStory) {
565
+ const storyMatch = projectStatus.currentStory.match(/(\d+\.\d+\.\d+(\.\d+)?)/);
566
+ const storyId = storyMatch ? storyMatch[1] : null;
567
+
568
+ // QA agent: suggest validation if story is ready
569
+ if (agentId === 'qa' && projectStatus.recentCommits && projectStatus.recentCommits.length > 0) {
570
+ const recentCommit = projectStatus.recentCommits[0].message;
571
+ if (recentCommit.includes('complete') || recentCommit.includes('implement')) {
572
+ if (storyId) {
573
+ suggestions.push(`*review ${storyId}`);
574
+ } else {
575
+ suggestions.push('*code-review committed');
576
+ }
577
+ }
578
+ }
579
+
580
+ // Dev agent: suggest development tasks
581
+ if (agentId === 'dev' && storyId) {
582
+ if (projectStatus.modifiedFilesTotalCount > 0) {
583
+ suggestions.push('*run-tests');
584
+ }
585
+ suggestions.push(`*develop-story ${storyId}`);
586
+ }
587
+
588
+ // PM/PO: suggest story/epic management
589
+ if ((agentId === 'pm' || agentId === 'po') && storyId) {
590
+ suggestions.push(`*validate-story-draft ${storyId}`);
591
+ }
592
+ }
593
+
594
+ // Analyze modified files
595
+ if (projectStatus.modifiedFilesTotalCount > 0) {
596
+ if (agentId === 'qa') {
597
+ suggestions.push('*code-review uncommitted');
598
+ }
599
+ if (agentId === 'dev' && projectStatus.modifiedFilesTotalCount > 5) {
600
+ suggestions.push('*commit-changes');
601
+ }
602
+ }
603
+
604
+ // Analyze recent work
605
+ if (projectStatus.recentCommits && projectStatus.recentCommits.length > 0) {
606
+ const lastCommit = projectStatus.recentCommits[0].message;
607
+
608
+ // If last commit was a test, suggest review
609
+ if (lastCommit.includes('test') && agentId === 'qa') {
610
+ suggestions.push('*run-tests');
611
+ }
612
+
613
+ // If last commit was a feature, suggest QA
614
+ if ((lastCommit.includes('feat:') || lastCommit.includes('feature')) && agentId === 'qa') {
615
+ suggestions.push('*code-review committed');
616
+ }
617
+ }
618
+
619
+ // No suggestions found
620
+ if (suggestions.length === 0) {
621
+ return null;
622
+ }
623
+
624
+ // Build suggestion message
625
+ const contextSummary = this._buildContextSummary(projectStatus);
626
+ const commandsList = suggestions
627
+ .slice(0, 2) // Limit to 2 suggestions
628
+ .map(cmd => ` - \`${cmd}\``)
629
+ .join('\n');
630
+
631
+ return `💡 **Context:** ${contextSummary}\n\n**Suggested Next Steps:**\n${commandsList}`;
632
+
633
+ } catch (error) {
634
+ console.warn('[GreetingBuilder] Contextual suggestions failed:', error.message);
635
+ return null;
636
+ }
637
+ }
638
+
639
+ /**
640
+ * Build context summary based on project status
641
+ * @private
642
+ * @param {Object} projectStatus - Project status data
643
+ * @returns {string} Context summary
644
+ */
645
+ _buildContextSummary(projectStatus) {
646
+ const parts = [];
647
+
648
+ if (projectStatus.currentStory) {
649
+ parts.push(`Working on ${projectStatus.currentStory}`);
650
+ }
651
+
652
+ if (projectStatus.modifiedFilesTotalCount > 0) {
653
+ parts.push(`${projectStatus.modifiedFilesTotalCount} files modified`);
654
+ }
655
+
656
+ if (projectStatus.recentCommits && projectStatus.recentCommits.length > 0) {
657
+ const lastCommit = projectStatus.recentCommits[0].message;
658
+ const shortMsg = lastCommit.length > 50 ? lastCommit.substring(0, 47) + '...' : lastCommit;
659
+ parts.push(`Last: "${shortMsg}"`);
660
+ }
661
+
662
+ return parts.join(', ') || 'Ready to start';
663
+ }
664
+
665
+ /**
666
+ * Build commands section
667
+ * @param {Array} commands - Filtered commands
668
+ * @param {string} sessionType - Session type
669
+ * @returns {string} Commands list
670
+ */
671
+ buildCommands(commands, sessionType) {
672
+ if (!commands || commands.length === 0) {
673
+ return '**Commands:** Type `*help` for available commands';
674
+ }
675
+
676
+ const header = this._getCommandsHeader(sessionType);
677
+ const commandList = commands
678
+ .slice(0, 12) // Max 12 commands
679
+ .map(cmd => {
680
+ // Handle both object format and string format
681
+ if (typeof cmd === 'string') {
682
+ return ` - \`*${cmd}\``;
683
+ }
684
+ if (typeof cmd === 'object' && cmd !== null) {
685
+ const name = cmd.name || cmd.command || String(cmd);
686
+ const description = cmd.description || '';
687
+ return description ? ` - \`*${name}\`: ${description}` : ` - \`*${name}\``;
688
+ }
689
+ // Fallback for unexpected formats
690
+ return ` - \`*${String(cmd)}\``;
691
+ })
692
+ .filter(cmd => !cmd.includes('[object Object]')) // Filter out malformed commands
693
+ .join('\n');
694
+
695
+ return `**${header}:**\n${commandList}`;
696
+ }
697
+
698
+ /**
699
+ * Get commands header based on session type
700
+ * @private
701
+ * @param {string} sessionType - Session type
702
+ * @returns {string} Header text
703
+ */
704
+ _getCommandsHeader(sessionType) {
705
+ switch (sessionType) {
706
+ case 'new':
707
+ return 'Available Commands';
708
+ case 'existing':
709
+ return 'Quick Commands';
710
+ case 'workflow':
711
+ return 'Key Commands';
712
+ default:
713
+ return 'Commands';
714
+ }
715
+ }
716
+
717
+ /**
718
+ * Build footer section
719
+ * @param {Object} agent - Agent definition
720
+ * @returns {string} Footer text with signature
721
+ */
722
+ buildFooter(agent) {
723
+ const parts = ['Type `*guide` for comprehensive usage instructions.'];
724
+
725
+ // Add agent signature if available
726
+ if (agent && agent.persona_profile && agent.persona_profile.communication &&
727
+ agent.persona_profile.communication.signature_closing) {
728
+ parts.push('');
729
+ parts.push(agent.persona_profile.communication.signature_closing);
730
+ }
731
+
732
+ return parts.join('\n');
733
+ }
734
+
735
+ /**
736
+ * Build git warning section
737
+ * @returns {string} Git warning message
738
+ */
739
+ buildGitWarning() {
740
+ return GIT_WARNING_TEMPLATE.trim();
741
+ }
742
+
743
+ /**
744
+ * Filter commands by visibility metadata
745
+ * @param {Object} agent - Agent definition
746
+ * @param {string} sessionType - Session type
747
+ * @returns {Array} Filtered commands
748
+ */
749
+ filterCommandsByVisibility(agent, sessionType) {
750
+ if (!agent.commands || agent.commands.length === 0) {
751
+ return [];
752
+ }
753
+
754
+ const visibilityFilter = this._getVisibilityFilter(sessionType);
755
+
756
+ // Filter commands with visibility metadata
757
+ const commandsWithMetadata = agent.commands.filter(cmd => {
758
+ if (!cmd.visibility || !Array.isArray(cmd.visibility)) {
759
+ return false; // No metadata, exclude from filtered list
760
+ }
761
+
762
+ return cmd.visibility.includes(visibilityFilter);
763
+ });
764
+
765
+ // If we have metadata-based commands, use them
766
+ if (commandsWithMetadata.length > 0) {
767
+ return commandsWithMetadata;
768
+ }
769
+
770
+ // Backwards compatibility: No metadata found, show first 12 commands
771
+ return agent.commands.slice(0, 12);
772
+ }
773
+
774
+ /**
775
+ * Get visibility filter for session type
776
+ * @private
777
+ * @param {string} sessionType - Session type
778
+ * @returns {string} Visibility level ('full', 'quick', 'key')
779
+ */
780
+ _getVisibilityFilter(sessionType) {
781
+ switch (sessionType) {
782
+ case 'new':
783
+ return 'full';
784
+ case 'existing':
785
+ return 'quick';
786
+ case 'workflow':
787
+ return 'key';
788
+ default:
789
+ return 'full';
790
+ }
791
+ }
792
+
793
+ /**
794
+ * Safe session type detection with fallback
795
+ * @private
796
+ * @param {Object} context - Session context
797
+ * @returns {Promise<string>} Session type
798
+ */
799
+ async _safeDetectSessionType(context) {
800
+ try {
801
+ const conversationHistory = context.conversationHistory || [];
802
+ return this.contextDetector.detectSessionType(conversationHistory);
803
+ } catch (error) {
804
+ console.warn('[GreetingBuilder] Session detection failed:', error.message);
805
+ return 'new'; // Conservative default
806
+ }
807
+ }
808
+
809
+ /**
810
+ * Safe git config check with fallback
811
+ * @private
812
+ * @returns {Promise<Object>} Git config result
813
+ */
814
+ async _safeCheckGitConfig() {
815
+ try {
816
+ return this.gitConfigDetector.get();
817
+ } catch (error) {
818
+ console.warn('[GreetingBuilder] Git config check failed:', error.message);
819
+ return { configured: false, type: null, branch: null };
820
+ }
821
+ }
822
+
823
+ /**
824
+ * Safe project status load with fallback
825
+ * @private
826
+ * @returns {Promise<Object|null>} Project status or null
827
+ */
828
+ async _safeLoadProjectStatus() {
829
+ try {
830
+ return await loadProjectStatus();
831
+ } catch (error) {
832
+ console.warn('[GreetingBuilder] Project status load failed:', error.message);
833
+ return null;
834
+ }
835
+ }
836
+
837
+ /**
838
+ * Check if git warning should be shown
839
+ * @private
840
+ * @returns {boolean} True if should show warning
841
+ */
842
+ _shouldShowGitWarning() {
843
+ if (!this.config || !this.config.git) {
844
+ return true; // Default: show warning
845
+ }
846
+
847
+ return this.config.git.showConfigWarning !== false;
848
+ }
849
+
850
+ /**
851
+ * Load core configuration
852
+ * @private
853
+ * @returns {Object|null} Configuration or null
854
+ */
855
+ _loadConfig() {
856
+ try {
857
+ const configPath = path.join(process.cwd(), '.aios-core', 'core-config.yaml');
858
+ const content = fs.readFileSync(configPath, 'utf8');
859
+ return yaml.load(content);
860
+ } catch (error) {
861
+ return null;
862
+ }
863
+ }
864
+ }
865
+
866
+ module.exports = GreetingBuilder;