sinapse-ai 1.12.2 → 1.14.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 (244) hide show
  1. package/.claude/CLAUDE.md +2 -2
  2. package/.claude/rules/agent-memory-imports.md +4 -0
  3. package/.sinapse-ai/cli/commands/pro/index.js +8 -48
  4. package/.sinapse-ai/constitution.md +6 -2
  5. package/.sinapse-ai/data/entity-registry.yaml +63 -429
  6. package/.sinapse-ai/development/agents/analyst/MEMORY.md +19 -0
  7. package/.sinapse-ai/development/agents/architect/MEMORY.md +52 -0
  8. package/.sinapse-ai/development/agents/data-engineer/MEMORY.md +55 -0
  9. package/.sinapse-ai/development/agents/developer/MEMORY.md +53 -0
  10. package/.sinapse-ai/development/agents/devops/MEMORY.md +56 -0
  11. package/.sinapse-ai/development/agents/product-lead/MEMORY.md +53 -0
  12. package/.sinapse-ai/development/agents/project-lead/MEMORY.md +53 -0
  13. package/.sinapse-ai/development/agents/quality-gate/MEMORY.md +52 -0
  14. package/.sinapse-ai/development/agents/snps-orqx.md +15 -0
  15. package/.sinapse-ai/development/agents/sprint-lead/MEMORY.md +53 -0
  16. package/.sinapse-ai/development/agents/squad-creator.md +15 -0
  17. package/.sinapse-ai/development/agents/ux/MEMORY.md +21 -0
  18. package/.sinapse-ai/development/templates/chrome-brain/knowledge-base/chrome-brain.md +2 -2
  19. package/.sinapse-ai/infrastructure/scripts/ide-sync/index.js +15 -0
  20. package/.sinapse-ai/infrastructure/scripts/validate-agents.js +159 -8
  21. package/.sinapse-ai/install-manifest.yaml +16 -152
  22. package/AGENTS.md +13 -2
  23. package/CHANGELOG.md +135 -3
  24. package/README.en.md +1 -1
  25. package/README.md +6 -26
  26. package/bin/cli.js +2 -7
  27. package/bin/commands/install.js +19 -257
  28. package/bin/commands/update.js +18 -78
  29. package/bin/lib/command-generator.js +261 -0
  30. package/bin/lib/prompts.js +2 -65
  31. package/bin/modules/chrome-brain-installer.js +2 -1
  32. package/bin/postinstall.js +6 -6
  33. package/docs/getting-started.md +0 -1
  34. package/docs/pt/getting-started.md +1 -1
  35. package/docs/security/dependabot-triage.md +17 -17
  36. package/package.json +6 -3
  37. package/packages/installer/src/wizard/i18n.js +3 -204
  38. package/packages/installer/src/wizard/index.js +1 -1
  39. package/packages/installer/src/wizard/questions.js +5 -368
  40. package/packages/installer/src/wizard/wizard.js +0 -9
  41. package/scripts/generate-install-manifest.js +6 -0
  42. package/scripts/validate-changelog-tags.js +97 -0
  43. package/scripts/validate-no-personal-leaks.js +184 -28
  44. package/scripts/validate-schemas.js +55 -10
  45. package/scripts/validate-story-meta.js +25 -12
  46. package/squads/claude-code-mastery/agents/claude-mastery-chief.md +15 -1
  47. package/squads/claude-code-mastery/agents/config-engineer.md +15 -0
  48. package/squads/claude-code-mastery/agents/hooks-architect.md +27 -20
  49. package/squads/claude-code-mastery/agents/mcp-integrator.md +15 -0
  50. package/squads/claude-code-mastery/agents/project-integrator.md +15 -0
  51. package/squads/claude-code-mastery/agents/roadmap-sentinel.md +15 -0
  52. package/squads/claude-code-mastery/agents/skill-craftsman.md +15 -0
  53. package/squads/claude-code-mastery/agents/swarm-orqx.md +15 -0
  54. package/squads/claude-code-mastery/tasks/audit-setup.md +1 -1
  55. package/squads/squad-animations/agents/animation-interpreter.md +15 -0
  56. package/squads/squad-animations/agents/animation-performance-engineer.md +15 -0
  57. package/squads/squad-animations/agents/animations-orqx.md +13 -0
  58. package/squads/squad-animations/agents/css-motion-artist.md +15 -0
  59. package/squads/squad-animations/agents/generative-particle-engineer.md +15 -0
  60. package/squads/squad-animations/agents/motion-choreographer.md +15 -0
  61. package/squads/squad-animations/agents/scroll-narrative-engineer.md +15 -0
  62. package/squads/squad-animations/agents/shader-artist.md +15 -0
  63. package/squads/squad-animations/agents/threejs-architect.md +15 -0
  64. package/squads/squad-brand/agents/brand-archetype-strategist.md +13 -0
  65. package/squads/squad-brand/agents/brand-auditor.md +15 -0
  66. package/squads/squad-brand/agents/brand-collateral-designer.md +15 -0
  67. package/squads/squad-brand/agents/brand-compiler.md +13 -0
  68. package/squads/squad-brand/agents/brand-creative-engineer.md +15 -0
  69. package/squads/squad-brand/agents/brand-culture-architect.md +15 -0
  70. package/squads/squad-brand/agents/brand-growth-strategist.md +15 -0
  71. package/squads/squad-brand/agents/brand-identity-designer.md +15 -0
  72. package/squads/squad-brand/agents/brand-motion-vfx.md +15 -0
  73. package/squads/squad-brand/agents/brand-naming-specialist.md +15 -0
  74. package/squads/squad-brand/agents/brand-orqx.md +13 -0
  75. package/squads/squad-brand/agents/brand-positioning-strategist.md +15 -0
  76. package/squads/squad-brand/agents/brand-sonic-designer.md +15 -0
  77. package/squads/squad-brand/agents/brand-strategist.md +15 -0
  78. package/squads/squad-brand/agents/brand-system-architect.md +15 -0
  79. package/squads/squad-cloning/agents/agent-forger.md +15 -0
  80. package/squads/squad-cloning/agents/cloning-orqx.md +15 -0
  81. package/squads/squad-cloning/agents/cognitive-extractor.md +15 -0
  82. package/squads/squad-cloning/agents/content-capturer.md +15 -0
  83. package/squads/squad-cloning/agents/kb-architect.md +15 -0
  84. package/squads/squad-cloning/agents/mind-synthesizer.md +15 -0
  85. package/squads/squad-cloning/agents/sop-extractor.md +15 -0
  86. package/squads/squad-cloning/agents/source-hunter.md +13 -0
  87. package/squads/squad-cloning/agents/squad-assembler.md +15 -0
  88. package/squads/squad-commercial/agents/commercial-orqx.md +13 -0
  89. package/squads/squad-commercial/agents/cs-business-auditor.md +15 -0
  90. package/squads/squad-commercial/agents/cs-client-success.md +15 -0
  91. package/squads/squad-commercial/agents/cs-crm-specialist.md +15 -0
  92. package/squads/squad-commercial/agents/cs-funnel-architect.md +15 -0
  93. package/squads/squad-commercial/agents/cs-lead-generation-strategist.md +15 -0
  94. package/squads/squad-commercial/agents/cs-offer-designer.md +15 -0
  95. package/squads/squad-commercial/agents/cs-revops-analyst.md +15 -0
  96. package/squads/squad-commercial/agents/cs-sales-closer.md +13 -0
  97. package/squads/squad-commercial/agents/cs-sales-enablement.md +15 -0
  98. package/squads/squad-content/agents/content-analyst.md +13 -0
  99. package/squads/squad-content/agents/content-engineer.md +15 -0
  100. package/squads/squad-content/agents/content-governor.md +13 -0
  101. package/squads/squad-content/agents/content-orqx.md +13 -0
  102. package/squads/squad-content/agents/editorial-strategist.md +15 -0
  103. package/squads/squad-content/agents/platform-specialist.md +15 -0
  104. package/squads/squad-content/agents/signal-intelligence.md +13 -0
  105. package/squads/squad-copy/agents/ad-copywriter.md +13 -0
  106. package/squads/squad-copy/agents/brand-voice-writer.md +15 -0
  107. package/squads/squad-copy/agents/conversion-writer.md +13 -0
  108. package/squads/squad-copy/agents/copy-editor.md +15 -0
  109. package/squads/squad-copy/agents/copy-orqx.md +13 -0
  110. package/squads/squad-copy/agents/copy-strategist.md +15 -0
  111. package/squads/squad-copy/agents/direct-response-writer.md +15 -0
  112. package/squads/squad-copy/agents/email-sequence-strategist.md +15 -0
  113. package/squads/squad-copy/agents/funnel-copywriter.md +15 -0
  114. package/squads/squad-copy/agents/headline-specialist.md +13 -0
  115. package/squads/squad-copy/agents/long-form-writer.md +15 -0
  116. package/squads/squad-copy/agents/persuasion-psychologist.md +15 -0
  117. package/squads/squad-copy/agents/proof-architect.md +15 -0
  118. package/squads/squad-council/agents/brene-brown.md +13 -0
  119. package/squads/squad-council/agents/charlie-munger.md +13 -0
  120. package/squads/squad-council/agents/council-orqx.md +13 -0
  121. package/squads/squad-council/agents/derek-sivers.md +13 -0
  122. package/squads/squad-council/agents/naval-ravikant.md +13 -0
  123. package/squads/squad-council/agents/patrick-lencioni.md +15 -0
  124. package/squads/squad-council/agents/peter-thiel.md +13 -0
  125. package/squads/squad-council/agents/ray-dalio.md +13 -0
  126. package/squads/squad-council/agents/reid-hoffman.md +13 -0
  127. package/squads/squad-council/agents/simon-sinek.md +15 -0
  128. package/squads/squad-council/agents/yvon-chouinard.md +13 -0
  129. package/squads/squad-courses/agents/assessment-creator.md +15 -0
  130. package/squads/squad-courses/agents/content-writer.md +15 -0
  131. package/squads/squad-courses/agents/courses-orqx.md +15 -0
  132. package/squads/squad-courses/agents/curriculum-designer.md +15 -0
  133. package/squads/squad-courses/agents/launch-strategist.md +15 -0
  134. package/squads/squad-courses/agents/lesson-architect.md +15 -0
  135. package/squads/squad-courses/agents/production-director.md +13 -0
  136. package/squads/squad-courses/agents/slide-designer.md +15 -0
  137. package/squads/squad-cybersecurity/agents/cloud-security-engineer.md +15 -0
  138. package/squads/squad-cybersecurity/agents/compliance-officer.md +15 -0
  139. package/squads/squad-cybersecurity/agents/cyber-orqx.md +15 -0
  140. package/squads/squad-cybersecurity/agents/incident-responder.md +15 -0
  141. package/squads/squad-cybersecurity/agents/network-security-engineer.md +15 -0
  142. package/squads/squad-cybersecurity/agents/penetration-tester.md +15 -0
  143. package/squads/squad-cybersecurity/agents/soc-analyst.md +15 -0
  144. package/squads/squad-cybersecurity/agents/threat-analyst.md +15 -0
  145. package/squads/squad-design/agents/cro-persuasion.md +15 -0
  146. package/squads/squad-design/agents/design-orqx.md +13 -0
  147. package/squads/squad-design/agents/design-system.md +15 -0
  148. package/squads/squad-design/agents/dx-accessibility-specialist.md +15 -0
  149. package/squads/squad-design/agents/dx-design-system-architect.md +15 -0
  150. package/squads/squad-design/agents/dx-frontend-engineer.md +15 -0
  151. package/squads/squad-design/agents/dx-interaction-designer.md +15 -0
  152. package/squads/squad-design/agents/dx-performance-engineer.md +15 -0
  153. package/squads/squad-design/agents/dx-ui-designer.md +15 -0
  154. package/squads/squad-design/agents/dx-ux-strategist.md +15 -0
  155. package/squads/squad-design/agents/platform-aesthetic-director.md +15 -0
  156. package/squads/squad-design/agents/premium-packaging-strategist.md +15 -0
  157. package/squads/squad-design/agents/product-surface-director.md +15 -0
  158. package/squads/squad-design/agents/ux-designer.md +15 -0
  159. package/squads/squad-finance/agents/budget-controller.md +15 -0
  160. package/squads/squad-finance/agents/cost-optimizer.md +15 -0
  161. package/squads/squad-finance/agents/finance-orqx.md +15 -0
  162. package/squads/squad-finance/agents/fiscal-compliance-br.md +15 -0
  163. package/squads/squad-finance/agents/forecast-strategist.md +15 -0
  164. package/squads/squad-finance/agents/pricing-strategist.md +15 -0
  165. package/squads/squad-finance/agents/profitability-analyst.md +15 -0
  166. package/squads/squad-finance/agents/revenue-analyst.md +15 -0
  167. package/squads/squad-growth/agents/ga-analytics-engineer.md +15 -0
  168. package/squads/squad-growth/agents/ga-campaign-analyst.md +15 -0
  169. package/squads/squad-growth/agents/ga-cro-specialist.md +15 -0
  170. package/squads/squad-growth/agents/ga-data-analyst.md +13 -0
  171. package/squads/squad-growth/agents/ga-growth-hacker.md +15 -0
  172. package/squads/squad-growth/agents/ga-seo-strategist.md +15 -0
  173. package/squads/squad-growth/agents/growth-orqx.md +15 -0
  174. package/squads/squad-paidmedia/agents/campaign-analyst.md +15 -0
  175. package/squads/squad-paidmedia/agents/creative-strategist.md +15 -0
  176. package/squads/squad-paidmedia/agents/cro-specialist.md +15 -0
  177. package/squads/squad-paidmedia/agents/google-ads-specialist.md +15 -0
  178. package/squads/squad-paidmedia/agents/meta-ads-specialist.md +15 -0
  179. package/squads/squad-paidmedia/agents/paidmedia-orqx.md +15 -0
  180. package/squads/squad-paidmedia/agents/performance-engineer.md +15 -0
  181. package/squads/squad-paidmedia/agents/pm-creative-performance-analyst.md +15 -0
  182. package/squads/squad-paidmedia/agents/pm-youtube-ads-specialist.md +15 -0
  183. package/squads/squad-product/agents/product-orqx.md +13 -1
  184. package/squads/squad-product/agents/ps-client-product-manager.md +13 -1
  185. package/squads/squad-product/agents/ps-delivery-manager.md +13 -1
  186. package/squads/squad-product/agents/ps-discovery-lead.md +15 -1
  187. package/squads/squad-product/agents/ps-product-analyst.md +15 -1
  188. package/squads/squad-product/agents/ps-product-ops-specialist.md +15 -1
  189. package/squads/squad-product/agents/ps-product-strategist.md +15 -1
  190. package/squads/squad-research/agents/audience-intelligence.md +15 -0
  191. package/squads/squad-research/agents/competitive-intelligence.md +15 -0
  192. package/squads/squad-research/agents/data-synthesizer.md +15 -0
  193. package/squads/squad-research/agents/deep-researcher.md +15 -0
  194. package/squads/squad-research/agents/market-analyst.md +15 -0
  195. package/squads/squad-research/agents/research-orqx.md +15 -0
  196. package/squads/squad-research/agents/trend-forecaster.md +15 -0
  197. package/squads/squad-storytelling/agents/blake-snyder.md +13 -0
  198. package/squads/squad-storytelling/agents/dan-harmon.md +13 -0
  199. package/squads/squad-storytelling/agents/joseph-campbell.md +13 -0
  200. package/squads/squad-storytelling/agents/keith-johnstone.md +13 -0
  201. package/squads/squad-storytelling/agents/kindra-hall.md +15 -0
  202. package/squads/squad-storytelling/agents/marshall-ganz.md +15 -0
  203. package/squads/squad-storytelling/agents/nancy-duarte.md +15 -0
  204. package/squads/squad-storytelling/agents/oren-klaff.md +15 -0
  205. package/squads/squad-storytelling/agents/park-howell.md +13 -0
  206. package/squads/squad-storytelling/agents/storytelling-orqx.md +13 -0
  207. package/.sinapse-ai/core/grounding/README.md +0 -83
  208. package/.sinapse-ai/core/grounding/brand.cjs +0 -29
  209. package/.sinapse-ai/core/grounding/config-loader.cjs +0 -52
  210. package/.sinapse-ai/core/grounding/design-system.cjs +0 -29
  211. package/.sinapse-ai/core/grounding/vault.cjs +0 -36
  212. package/.sinapse-ai/development/scripts/approval-workflow.js +0 -643
  213. package/.sinapse-ai/development/scripts/backup-manager.js +0 -607
  214. package/.sinapse-ai/development/scripts/branch-manager.js +0 -390
  215. package/.sinapse-ai/development/scripts/code-quality-improver.js +0 -1329
  216. package/.sinapse-ai/development/scripts/commit-message-generator.js +0 -850
  217. package/.sinapse-ai/development/scripts/conflict-resolver.js +0 -675
  218. package/.sinapse-ai/development/scripts/dependency-analyzer.js +0 -638
  219. package/.sinapse-ai/development/scripts/diff-generator.js +0 -352
  220. package/.sinapse-ai/development/scripts/git-wrapper.js +0 -462
  221. package/.sinapse-ai/development/scripts/modification-validator.js +0 -555
  222. package/.sinapse-ai/development/scripts/performance-analyzer.js +0 -758
  223. package/.sinapse-ai/development/scripts/refactoring-suggester.js +0 -1148
  224. package/.sinapse-ai/development/scripts/rollback-handler.js +0 -531
  225. package/.sinapse-ai/development/scripts/security-checker.js +0 -359
  226. package/.sinapse-ai/development/scripts/template-engine.js +0 -240
  227. package/.sinapse-ai/development/scripts/template-validator.js +0 -279
  228. package/.sinapse-ai/development/scripts/test-generator.js +0 -844
  229. package/.sinapse-ai/development/scripts/transaction-manager.js +0 -590
  230. package/.sinapse-ai/development/scripts/yaml-validator.js +0 -397
  231. package/.sinapse-ai/hooks/sinapse-brand-grounding.cjs +0 -162
  232. package/.sinapse-ai/hooks/sinapse-ds-grounding.cjs +0 -211
  233. package/.sinapse-ai/hooks/sinapse-vault-grounding.cjs +0 -194
  234. package/bin/lib/register-grounding-hooks.js +0 -145
  235. package/docs/guides/agents/traces/execution-traces.zip +0 -0
  236. package/docs/guides/grounding-setup.md +0 -154
  237. package/docs/guides/workflows/SINAPSE-WORKFLOWS.zip +0 -0
  238. package/packages/installer/src/pro/pro-scaffolder.js +0 -449
  239. package/packages/installer/src/wizard/grounding-config.js +0 -131
  240. package/packages/installer/src/wizard/pro-setup.js +0 -1439
  241. package/packages/installer/templates/README.md +0 -16
  242. package/packages/installer/templates/brand-routing.example.json +0 -12
  243. package/packages/installer/templates/ds-routing.example.json +0 -12
  244. package/packages/installer/templates/vault-routing.example.json +0 -12
@@ -18,19 +18,18 @@ const {
18
18
  NC,
19
19
  } = require('../lib/constants');
20
20
  const { header } = require('../lib/header');
21
- const { getSquads, extractAgentMeta } = require('../lib/squads');
21
+ const { getSquads } = require('../lib/squads');
22
22
  const {
23
23
  rmDirSync,
24
24
  syncDirSync,
25
- toForwardSlash,
26
25
  } = require('../lib/fs-utils');
27
26
  const {
28
27
  detectExistingInstall,
29
28
  detectStaleness,
30
29
  } = require('../lib/detection');
31
30
  const { promptLlmChoice } = require('../lib/prompts');
32
- const { generateCommandMd, generateSquadAwareness } = require('./install');
33
- const { registerGroundingHooks, HOOK_FILENAMES } = require('../lib/register-grounding-hooks');
31
+ const { generateSquadAwareness } = require('./install');
32
+ const { regenerateAgentCommands } = require('../lib/command-generator');
34
33
  const { execSync } = require('child_process');
35
34
 
36
35
  // Query the latest version published to npm. Returns null when npm is unreachable.
@@ -99,7 +98,7 @@ async function cmdUpdateGlobal() {
99
98
 
100
99
  // Welcome back screen
101
100
  logger.always(`${BOLD} Que bom que voce voltou!${NC}`);
102
- logger.always(`${DIM} Atualizando SNPS AI: v${prevVer} -> v${VERSION}${NC}`);
101
+ logger.always(`${DIM} Atualizando SINAPSE AI: v${prevVer} -> v${VERSION}${NC}`);
103
102
  logger.always('');
104
103
 
105
104
  // Story 10.40 — Staleness warning (installed vs executing version)
@@ -117,7 +116,7 @@ async function cmdUpdateGlobal() {
117
116
  const llmChoice = existing.llm || await promptLlmChoice();
118
117
 
119
118
  logger.always('');
120
- logger.always(`${BOLD}Atualizando SNPS AI...${NC}\n`);
119
+ logger.always(`${BOLD}Atualizando SINAPSE AI...${NC}\n`);
121
120
 
122
121
  const squadsDir = path.join(ROOT, 'squads');
123
122
  const squadsSrcBase = fs.existsSync(squadsDir) ? squadsDir : ROOT;
@@ -147,53 +146,24 @@ async function cmdUpdateGlobal() {
147
146
  logger.always(` ${GREEN}OK${NC} sinapse (orqx)`);
148
147
  }
149
148
 
150
- // Phase 2: Regenerate commands (reuse install logic)
149
+ // Phase 2: Regenerate commands shared with `install` so `update` produces the
150
+ // SAME complete set (every specialist command + the rich master Imperator stubs),
151
+ // not just the `-orqx` subset it used to write.
151
152
  logger.always(`\n${CYAN}Phase 2:${NC} Regenerating commands`);
152
- // Clear and regenerate
153
153
  rmDirSync(CLAUDE_COMMANDS_DIR);
154
- fs.mkdirSync(CLAUDE_COMMANDS_DIR, { recursive: true });
155
-
156
- const sinapseBase = toForwardSlash(SINAPSE_HOME);
157
- const writtenAgents = new Set();
158
-
159
- // Generate commands for orqx agents from squads (dynamic paths)
160
- let totalAgents = 0;
161
- for (const squad of squads) {
162
- const agentsDir = path.join(SINAPSE_HOME, squad.name, 'agents');
163
- if (!fs.existsSync(agentsDir)) continue;
164
- const allAgents = fs.readdirSync(agentsDir).filter(f => f.endsWith('.md'));
165
- totalAgents += allAgents.length;
166
- const orqxAgents = allAgents.filter(f => f.includes('-orqx'));
167
- for (const file of orqxAgents) {
168
- const agentId = file.replace('.md', '');
169
- const meta = extractAgentMeta(path.join(agentsDir, file));
170
- const squadPath = `${sinapseBase}/${squad.name}`;
171
- fs.writeFileSync(path.join(CLAUDE_COMMANDS_DIR, file), generateCommandMd(agentId, meta.name, meta.icon, squad.name, squadPath, file));
172
- writtenAgents.add(file);
173
- }
174
- }
175
-
176
- // Generate commands for sinapse/ orqx squad agents
177
- const sinapseAgentsDir = path.join(SINAPSE_HOME, 'sinapse', 'agents');
178
- if (fs.existsSync(sinapseAgentsDir)) {
179
- const masterAgents = fs.readdirSync(sinapseAgentsDir).filter(f => f.endsWith('.md'));
180
- totalAgents += masterAgents.length;
181
- for (const file of masterAgents) {
182
- if (writtenAgents.has(file)) continue;
183
- const agentId = file.replace('.md', '');
184
- const meta = extractAgentMeta(path.join(sinapseAgentsDir, file));
185
- const squadPath = `${sinapseBase}/sinapse`;
186
- fs.writeFileSync(path.join(CLAUDE_COMMANDS_DIR, file), generateCommandMd(agentId, meta.name, meta.icon, 'sinapse', squadPath, file));
187
- writtenAgents.add(file);
188
- }
189
- }
154
+ const { writtenAgents, totalAgents } = regenerateAgentCommands({
155
+ sinapseHome: SINAPSE_HOME,
156
+ commandsDir: CLAUDE_COMMANDS_DIR,
157
+ squads,
158
+ sinapseMasterDest: path.join(SINAPSE_HOME, 'sinapse'),
159
+ });
190
160
  logger.always(` ${GREEN}OK${NC} ${writtenAgents.size} command files (${totalAgents} agents total)`);
191
161
 
192
162
  // Phase 2b: Install global agents based on LLM choice
193
163
  if (llmChoice === 'claude-code' || llmChoice === 'both') {
194
164
  const globalAgentsDir = path.join(HOME, '.claude', 'agents');
195
165
  fs.mkdirSync(globalAgentsDir, { recursive: true });
196
- // Copy orqx commands as global agents
166
+ // Copy all generated agent commands as global agents
197
167
  for (const f of fs.readdirSync(CLAUDE_COMMANDS_DIR).filter(f => f.endsWith('.md'))) {
198
168
  fs.copyFileSync(path.join(CLAUDE_COMMANDS_DIR, f), path.join(globalAgentsDir, f));
199
169
  }
@@ -203,7 +173,7 @@ async function cmdUpdateGlobal() {
203
173
  if (llmChoice === 'codex' || llmChoice === 'both') {
204
174
  const codexAgentsDir = path.join(HOME, '.codex', 'agents');
205
175
  fs.mkdirSync(codexAgentsDir, { recursive: true });
206
- // Generate orqx agents for Codex
176
+ // Copy all generated agent commands for Codex
207
177
  for (const f of fs.readdirSync(CLAUDE_COMMANDS_DIR).filter(f => f.endsWith('.md'))) {
208
178
  fs.copyFileSync(path.join(CLAUDE_COMMANDS_DIR, f), path.join(codexAgentsDir, f));
209
179
  }
@@ -235,36 +205,6 @@ async function cmdUpdateGlobal() {
235
205
  logger.always(` ${CYAN}First installed:${NC} ${meta.installedAt}`);
236
206
  logger.always(` ${CYAN}Last updated:${NC} ${meta.updatedAt}`);
237
207
 
238
- // Phase 3b — Story GA-1.6: ensure grounding hooks are present + registered.
239
- if (llmChoice === 'claude-code' || llmChoice === 'both') {
240
- try {
241
- logger.always(`\n${CYAN}Phase 3b:${NC} Refreshing grounding hooks`);
242
- const srcHooksDir = path.join(ROOT, '.sinapse-ai', 'hooks');
243
- const destHooksDir = path.join(SINAPSE_HOME, 'hooks');
244
- fs.mkdirSync(destHooksDir, { recursive: true });
245
- let copied = 0;
246
- for (const hookName of HOOK_FILENAMES) {
247
- const src = path.join(srcHooksDir, hookName);
248
- if (!fs.existsSync(src)) continue;
249
- fs.copyFileSync(src, path.join(destHooksDir, hookName));
250
- copied++;
251
- }
252
- const settingsPath = path.join(HOME, '.claude', 'settings.json');
253
- const result = registerGroundingHooks({
254
- settingsPath,
255
- hooksDir: destHooksDir,
256
- notify: (msg) => logger.always(` ${DIM}${msg}${NC}`),
257
- });
258
- const summary = `${result.added.length} added, ${result.skipped.length} already present`;
259
- logger.always(` ${GREEN}OK${NC} ${copied} hook files refreshed — ${summary}`);
260
- if (result.errors.length > 0) {
261
- for (const err of result.errors) logger.always(` ${YELLOW}WARN${NC} ${err}`);
262
- }
263
- } catch (error) {
264
- logger.always(` ${YELLOW}SKIP${NC} Grounding hooks: ${error.message}`);
265
- }
266
- }
267
-
268
208
  // Phase 4: Update project-local files (.sinapse-ai/, .claude/)
269
209
  logger.always(`\n${CYAN}Phase 4:${NC} Updating project files in current directory`);
270
210
  try {
@@ -292,10 +232,10 @@ async function cmdUpdateGlobal() {
292
232
 
293
233
  logger.always('');
294
234
  logger.always(`${GREEN}══════════════════════════════════════════════════════════════${NC}`);
295
- logger.always(`${GREEN} SNPS AI atualizado para v${VERSION}!${NC}`);
235
+ logger.always(`${GREEN} SINAPSE AI atualizado para v${VERSION}!${NC}`);
296
236
  logger.always(`${GREEN}══════════════════════════════════════════════════════════════${NC}`);
297
237
  logger.always('');
298
- logger.always(` ${BOLD}${squads.length} squads${NC} | ${BOLD}${totalAgents} agents${NC} | ${BOLD}${writtenAgents.size} orqx commands${NC}`);
238
+ logger.always(` ${BOLD}${squads.length} squads${NC} | ${BOLD}${totalAgents} agents${NC} | ${BOLD}${writtenAgents.size} command files${NC}`);
299
239
  logger.always(` ${startCmd}`);
300
240
  logger.always('');
301
241
  }
@@ -0,0 +1,261 @@
1
+ // bin/lib/command-generator.js — shared agent-command generation.
2
+ //
3
+ // Single source of truth for the Phase 2 "generate agent commands" logic used by
4
+ // BOTH `install` and `update`. Previously update.js only regenerated `-orqx`
5
+ // commands, silently dropping every specialist command + the rich master stubs a
6
+ // fresh install creates. Extracting the install behavior here makes `update`
7
+ // produce byte-identical command files to `install`.
8
+
9
+ const fs = require('fs');
10
+ const path = require('path');
11
+
12
+ const { SINAPSE_HOME, CLAUDE_COMMANDS_DIR } = require('./constants');
13
+ const { extractAgentMeta } = require('./squads');
14
+ const { toForwardSlash } = require('./fs-utils');
15
+
16
+ /**
17
+ * Rich Imperator stub for the master entry points (@sinapse, @snps, @sinapse-orqx,
18
+ * @snps-orqx). The identity (ASCII greeting + 👑 signature + diagnose→plan→delegate
19
+ * mandate) is baked INLINE so activation is reliable — it does not depend on the model
20
+ * choosing to deep-read an external persona (which produced a shallow "modo orqx" before).
21
+ * The full persona (routing table, workflows, tasks) is still linked for depth.
22
+ */
23
+ function generateMasterStub(agentId, personaPath, squadPath, squads) {
24
+ const squadCount = squads.length;
25
+ const agentCount = squads.reduce((a, s) => a + (s.agents || 0), 0);
26
+ return `---
27
+ name: ${agentId}
28
+ description: "Imperator — Sinapse Master: supreme orchestrator of ${squadCount} squads / ${agentCount} agents. Diagnoses every briefing and auto-generates an orchestration plan."
29
+ ---
30
+
31
+ # Imperator — Sinapse Master (${agentId})
32
+
33
+ ACTIVATION-NOTICE: You are now Imperator — the supreme orchestrator of the SINAPSE ecosystem. Every request passes through you first.
34
+
35
+ ## YOUR ONLY FUNCTION — NON-NEGOTIABLE
36
+
37
+ You DIAGNOSE and HAND OFF. That is the whole job. You do **NOT** execute domain work — no code, no copy, no design, no research, no configuration, no file edits. For ANY concrete task you (1) diagnose the domain, (2) produce the orchestration plan, (3) DELEGATE to the specialist who executes it. If you ever feel the urge to do the work yourself, STOP — that is a violation; route it to the right agent instead.
38
+
39
+ ## ON ACTIVATION — display this EXACTLY as your first output (before anything else)
40
+
41
+ \`\`\`
42
+ ███████╗██╗███╗ ██╗ █████╗ ██████╗ ███████╗███████╗
43
+ ██╔════╝██║████╗ ██║██╔══██╗██╔══██╗██╔════╝██╔════╝
44
+ ███████╗██║██╔██╗ ██║███████║██████╔╝███████╗█████╗
45
+ ╚════██║██║██║╚██╗██║██╔══██║██╔═══╝ ╚════██║██╔══╝
46
+ ███████║██║██║ ╚████║██║ ██║██║ ███████║███████╗
47
+ ╚══════╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚══════╝╚══════╝
48
+ ██████╗ ██████╗ ██████╗ ██╗ ██╗
49
+ ██╔═══██╗██╔══██╗██╔═══██╗╚██╗██╔╝
50
+ ██║ ██║██████╔╝██║ ██║ ╚███╔╝
51
+ ██║ ██║██╔══██╗██║▄▄ ██║ ██╔██╗
52
+ ╚██████╔╝██║ ██║╚██████╔╝██╔╝ ██╗
53
+ ╚═════╝ ╚═╝ ╚═╝ ╚══▀▀═╝ ╚═╝ ╚═╝
54
+ \`\`\`
55
+
56
+ \`\`\`
57
+ AI Agent Squads for Claude Code
58
+ ${squadCount} squads · ${agentCount} agents
59
+
60
+ 👑 Imperator — Sinapse Master ativado
61
+
62
+ Descreva seu objetivo que eu diagnostico o domínio
63
+ e roteio para o agente certo.
64
+
65
+ Comandos principais:
66
+ *route {pedido} — Diagnostica e roteia para a squad certa
67
+ *plan {iniciativa} — Desenha um plano de execução multi-squad
68
+ *status — Reporta todas as squads e capacidades
69
+ *onboard — Tour guiado do ecossistema SINAPSE
70
+ *help — Mostra todos os comandos
71
+ \`\`\`
72
+
73
+ ## AFTER THE GREETING — NON-NEGOTIABLE (Imperator's core function)
74
+
75
+ Check if the user provided a briefing with the activation:
76
+ - **Briefing provided** → proceed IMMEDIATELY: run the Initial State Audit → classify the request → produce an ORCHESTRATION PLAN (phases + squads + specific agents assigned + handoffs) → delegate to the specialists. NEVER ask "do you want me to plan?" — for Imperator the answer is always YES.
77
+ - **Bare activation** → await the briefing, then apply the same flow automatically on receipt.
78
+
79
+ You diagnose and DELEGATE — never execute domain work yourself. Route simple, well-defined requests directly to @specialist; complex ones to @{domain}-orqx; cross-domain ones by coordinating multiple orchestrators.
80
+
81
+ ## FULL OPERATING PARAMETERS
82
+
83
+ For your complete persona — the routing table of all squads, the Initial State Audit, the Documentation-First gate, NSN enforcement, and every workflow and task — read and ADOPT:
84
+ \`${personaPath}\`
85
+ Tasks: \`${squadPath}/tasks/\` · Workflows: \`${squadPath}/workflows/\` · Manifest: \`${squadPath}/squad.yaml\`
86
+
87
+ — Imperator, orchestrating SINAPSE
88
+ `;
89
+ }
90
+
91
+ function generateCommandMd(agentId, agentName, agentIcon, squadName, squadPath, agentFile) {
92
+ // Detecta se é orquestrador: id termina em -orqx OU é Imperator (snps-orqx/sinapse-orqx)
93
+ // ou um dos apelidos curtos do master (sinapse/snps).
94
+ const isOrchestrator = /-orqx$/.test(agentId) || agentId === 'snps-orqx' || agentId === 'sinapse-orqx' || agentId === 'sinapse' || agentId === 'snps';
95
+
96
+ const step4 = isOrchestrator
97
+ ? `4. Briefing-on-activation check (this agent is an ORCHESTRATOR):
98
+ - If user provided briefing/context with the activation → proceed IMMEDIATELY: absorb → diagnose → plan with phases + agents + handoffs → execute (YOLO). NEVER ask "do you want me to plan?".
99
+ - If bare activation only → await briefing. On receipt, apply same flow automatically.`
100
+ : '4. HALT and await user input';
101
+
102
+ const step6 = isOrchestrator
103
+ ? `6. Briefing-on-activation check (ORCHESTRATOR):
104
+ - If user provided briefing → proceed IMMEDIATELY: absorb → diagnose → plan → execute
105
+ - If bare activation → await briefing, then plan automatically. NEVER ask "do you want me to plan?".`
106
+ : '6. HALT and await user input';
107
+
108
+ // Frontmatter (name + description) is REQUIRED so the file resolves as a Claude Code
109
+ // subagent (@id) — without it, @id matches nothing. The same file doubles as a slash
110
+ // command (/SINAPSE:agents:id); extra frontmatter is harmless there.
111
+ const fmDesc = (isOrchestrator
112
+ ? `${agentName || agentId} — orchestrator for ${squadName}; diagnoses, routes to specialists and auto-generates an orchestration plan`
113
+ : `${agentName || agentId} — ${squadName} specialist`).replace(/["\n\r]/g, ' ').trim();
114
+
115
+ return `---
116
+ name: ${agentId}
117
+ description: "${fmDesc}"
118
+ ---
119
+
120
+ # ${agentId}
121
+
122
+ ACTIVATION-NOTICE: This command activates an agent from ${squadName}.
123
+
124
+ CRITICAL: Read the agent definition file at \`${squadPath}/agents/${agentFile}\` to understand your full operating parameters. Then:
125
+ 1. Adopt the persona defined in that file (name: ${agentName}, icon: ${agentIcon})
126
+ 2. Load the squad manifest at \`${squadPath}/squad.yaml\` for context
127
+ 3. Display a greeting showing your agent name, role, and available commands
128
+ ${step4}
129
+
130
+ ## Agent Reference
131
+ - **Agent ID:** ${agentId}
132
+ - **Squad:** ${squadName}
133
+ - **Definition:** \`${squadPath}/agents/${agentFile}\`
134
+ - **Squad Manifest:** \`${squadPath}/squad.yaml\`
135
+ - **Tasks:** \`${squadPath}/tasks/\`
136
+ - **Knowledge Bases:** \`${squadPath}/knowledge-base/\`
137
+ - **Workflows:** \`${squadPath}/workflows/\`
138
+
139
+ ## Activation Instructions
140
+ 1. Read the full agent definition: \`${squadPath}/agents/${agentFile}\`
141
+ 2. Adopt the persona (name, icon, communication style, principles)
142
+ 3. Show greeting: "{icon} {name} — {role} ativado"
143
+ 4. Show: "Squad: ${squadName} | Invoke: /SINAPSE:agents:${agentId}"
144
+ 5. List your key tasks from the agent definition
145
+ ${step6}
146
+
147
+ ## How to Execute Tasks
148
+ When the user requests a task:
149
+ 1. Find the matching task in \`${squadPath}/tasks/\`
150
+ 2. Read the task file completely
151
+ 3. Execute following the task checklist step by step
152
+ 4. Consult knowledge bases in \`${squadPath}/knowledge-base/\` as needed
153
+
154
+ ## Cross-Squad Handoff
155
+ If the task requires expertise outside this squad:
156
+ 1. Identify which squad covers the needed domain
157
+ 2. Recommend: /SINAPSE:agents:{appropriate-agent}
158
+ 3. Provide handoff context
159
+ `;
160
+ }
161
+
162
+ /**
163
+ * Regenerate ALL agent command files into `commandsDir`. This is the exact Phase 2
164
+ * behavior of a fresh install, shared so `update` produces an identical set:
165
+ * 1. Clear commandsDir.
166
+ * 2. Write a command for EVERY agent of every squad (not only -orqx).
167
+ * 3. Write commands for the sinapse master squad agents.
168
+ * 4. Overwrite the four master entry points (sinapse-orqx, snps-orqx, sinapse,
169
+ * snps) with the rich Imperator stub.
170
+ *
171
+ * @param {Object} [deps] - Injectable dependencies (defaults bind to real fs/paths).
172
+ * @param {string} [deps.sinapseHome] - Root of installed squads (~/.sinapse).
173
+ * @param {string} [deps.commandsDir] - Target commands dir.
174
+ * @param {Array} deps.squads - Squad descriptors ({ name, agents, ... }).
175
+ * @param {string} [deps.sinapseMasterDest] - Path to the installed sinapse/ master squad.
176
+ * @returns {{ writtenAgents: Set<string>, totalAgents: number }}
177
+ */
178
+ function regenerateAgentCommands(deps = {}) {
179
+ const {
180
+ sinapseHome = SINAPSE_HOME,
181
+ commandsDir = CLAUDE_COMMANDS_DIR,
182
+ squads,
183
+ sinapseMasterDest = path.join(sinapseHome, 'sinapse'),
184
+ } = deps;
185
+
186
+ if (!Array.isArray(squads)) {
187
+ throw new Error('regenerateAgentCommands: `squads` array is required');
188
+ }
189
+
190
+ fs.mkdirSync(commandsDir, { recursive: true });
191
+
192
+ // Clear old commands (dir may not exist on a fresh install — guarded).
193
+ try {
194
+ for (const f of fs.readdirSync(commandsDir)) {
195
+ fs.unlinkSync(path.join(commandsDir, f));
196
+ }
197
+ } catch { /* dir may not exist yet */ }
198
+
199
+ const sinapseBase = toForwardSlash(sinapseHome);
200
+ const writtenAgents = new Set();
201
+
202
+ // 1. A command/subagent for EVERY agent (not only -orqx), so every specialist
203
+ // is invokable via @agent and /SINAPSE:agents:agent.
204
+ for (const squad of squads) {
205
+ const squadPath = `${sinapseBase}/${squad.name}`;
206
+ const agentsDir = path.join(sinapseHome, squad.name, 'agents');
207
+ if (!fs.existsSync(agentsDir)) continue;
208
+
209
+ const squadAgents = fs.readdirSync(agentsDir).filter(f => f.endsWith('.md'));
210
+ for (const file of squadAgents) {
211
+ const agentId = file.replace('.md', '');
212
+ const meta = extractAgentMeta(path.join(agentsDir, file));
213
+ const cmdContent = generateCommandMd(agentId, meta.name, meta.icon, squad.name, squadPath, file);
214
+ fs.writeFileSync(path.join(commandsDir, `${agentId}.md`), cmdContent);
215
+ writtenAgents.add(file);
216
+ }
217
+ }
218
+
219
+ // 2. Commands for sinapse/ master squad agents.
220
+ if (fs.existsSync(sinapseMasterDest)) {
221
+ const masterAgentsDir = path.join(sinapseMasterDest, 'agents');
222
+ if (fs.existsSync(masterAgentsDir)) {
223
+ for (const file of fs.readdirSync(masterAgentsDir).filter(f => f.endsWith('.md'))) {
224
+ if (writtenAgents.has(file)) continue;
225
+ const agentId = file.replace('.md', '');
226
+ const meta = extractAgentMeta(path.join(masterAgentsDir, file));
227
+ const squadPath = `${sinapseBase}/sinapse`;
228
+ const cmdContent = generateCommandMd(agentId, meta.name, meta.icon, 'sinapse', squadPath, file);
229
+ fs.writeFileSync(path.join(commandsDir, `${agentId}.md`), cmdContent);
230
+ writtenAgents.add(file);
231
+ }
232
+ }
233
+ }
234
+
235
+ // 3. Master entry points (@sinapse, @snps, @sinapse-orqx, @snps-orqx) → rich
236
+ // Imperator stub. Overwrites the generic command file for the orqx names and
237
+ // adds the short aliases the user actually types.
238
+ if (fs.existsSync(sinapseMasterDest)) {
239
+ const masterSquadPath = `${sinapseBase}/sinapse`;
240
+ const masterEntryPoints = [
241
+ ['sinapse-orqx', 'sinapse-orqx.md'],
242
+ ['snps-orqx', 'snps-orqx.md'],
243
+ ['sinapse', 'sinapse-orqx.md'],
244
+ ['snps', 'snps-orqx.md'],
245
+ ];
246
+ for (const [id, personaFile] of masterEntryPoints) {
247
+ const personaPath = `${masterSquadPath}/agents/${personaFile}`;
248
+ const stub = generateMasterStub(id, personaPath, masterSquadPath, squads);
249
+ fs.writeFileSync(path.join(commandsDir, `${id}.md`), stub);
250
+ writtenAgents.add(`${id}.md`);
251
+ }
252
+ }
253
+
254
+ return { writtenAgents, totalAgents: writtenAgents.size };
255
+ }
256
+
257
+ module.exports = {
258
+ generateCommandMd,
259
+ generateMasterStub,
260
+ regenerateAgentCommands,
261
+ };
@@ -1,9 +1,8 @@
1
- // bin/lib/prompts.js — interactive prompts (LLM, grounding, uninstall).
1
+ // bin/lib/prompts.js — interactive prompts (LLM, uninstall).
2
2
  // Story GA-1.2 — extracted from bin/cli.js.
3
3
 
4
- const path = require('path');
5
4
  const { getLogger } = require('../../.sinapse-ai/core/logger');
6
- const { ROOT, CYAN, GREEN, BOLD, DIM, YELLOW, NC } = require('./constants');
5
+ const { CYAN, GREEN, BOLD, DIM, YELLOW, NC } = require('./constants');
7
6
  const { detectInteractiveMode, warnNonInteractive } = require('./detection');
8
7
 
9
8
  /**
@@ -53,67 +52,6 @@ async function promptLlmChoice() {
53
52
  }
54
53
  }
55
54
 
56
- // Story 10.47 — collect optional grounding paths (vault / design system /
57
- // brand). Empty answers leave the section disabled and the shipped hook
58
- // stays a no-op. Reuses the multi-signal interactive detector from Story
59
- // 10.46 so CI / non-TTY runs skip silently with the consolidated warning
60
- // already emitted by lang/LLM helpers.
61
- async function promptGroundingSections({ isUpsert = false, reconfigure = false } = {}) {
62
- const logger = getLogger();
63
- const groundingConfig = require(path.join(
64
- ROOT, 'packages', 'installer', 'src', 'wizard', 'grounding-config',
65
- ));
66
- const existing = groundingConfig.readGroundingConfig();
67
- const pending = isUpsert && !reconfigure
68
- ? groundingConfig.pendingGroundingSections(existing)
69
- : { askVault: true, askDesignSystem: true, askBrand: true };
70
-
71
- if (!pending.askVault && !pending.askDesignSystem && !pending.askBrand) {
72
- return existing;
73
- }
74
-
75
- if (!detectInteractiveMode()) {
76
- warnNonInteractive();
77
- // Persist defaults so the file exists with a documented schema even on
78
- // headless installs (helps users discover it later via `--reconfigure`).
79
- const merged = groundingConfig.buildGroundingFromAnswers({}, existing);
80
- groundingConfig.writeGroundingConfig(merged);
81
- return merged;
82
- }
83
-
84
- const questions = require(path.join(
85
- ROOT, 'packages', 'installer', 'src', 'wizard', 'questions',
86
- ));
87
- const inquirer = require('inquirer');
88
-
89
- const ask = [];
90
- if (pending.askVault) ask.push(questions.getVaultGroundingQuestion());
91
- if (pending.askDesignSystem) ask.push(questions.getDesignSystemGroundingQuestion());
92
- if (pending.askBrand) ask.push(questions.getBrandGroundingQuestion());
93
-
94
- logger.always('');
95
- logger.always(`${CYAN}Grounding semantico (opt-in):${NC}`);
96
- logger.always(`${DIM} Pular qualquer pergunta ativa o fallback generico do framework.${NC}`);
97
-
98
- let answers = {};
99
- try {
100
- answers = await inquirer.prompt(ask);
101
- } catch {
102
- // Fallback: minimal readline loop if inquirer fails (e.g. exotic shells).
103
- const readline = require('readline');
104
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
105
- const askLine = (msg) => new Promise((resolve) => rl.question(msg, resolve));
106
- if (pending.askVault) answers.vaultPath = (await askLine(' Vault path (Enter pra pular): ')).trim();
107
- if (pending.askDesignSystem) answers.designSystemPath = (await askLine(' Design system path (Enter pra pular): ')).trim();
108
- if (pending.askBrand) answers.brandbookPath = (await askLine(' Brandbook path (Enter pra pular): ')).trim();
109
- rl.close();
110
- }
111
-
112
- const merged = groundingConfig.buildGroundingFromAnswers(answers, existing);
113
- groundingConfig.writeGroundingConfig(merged);
114
- return merged;
115
- }
116
-
117
55
  // Story 10.40 — Confirmation prompt for destructive uninstall.
118
56
  // Returns true if user confirmed, false otherwise.
119
57
  async function confirmUninstall() {
@@ -130,6 +68,5 @@ async function confirmUninstall() {
130
68
 
131
69
  module.exports = {
132
70
  promptLlmChoice,
133
- promptGroundingSections,
134
71
  confirmUninstall,
135
72
  };
@@ -140,7 +140,8 @@ function mergeHooks(settingsPath, hookDefs) {
140
140
  const existing = settings.hooks[hookType] || [];
141
141
  const newKeys = new Set(hookList.map(h => hookKey(h.matcher, h)));
142
142
  // Dedupe by (matcher + command) so SessionStart matcher="" doesn't
143
- // collide with other modules' SessionStart hooks (e.g. vault-grounding).
143
+ // collide with other modules' SessionStart hooks (e.g. another
144
+ // session-start grounding hook).
144
145
  const filtered = existing.filter(e => !newKeys.has(hookKey(e.matcher, e)));
145
146
  filtered.push(...hookList);
146
147
  settings.hooks[hookType] = filtered;
@@ -340,7 +340,7 @@ function stepCreateRuntimeDirs() {
340
340
  fs.mkdirSync(dir, { recursive: true });
341
341
  } catch (err) {
342
342
  if (err.code === 'EACCES' || err.code === 'EPERM') {
343
- warn(`Sem permissão para criar ${path.relative(PROJECT_ROOT, dir)} — SNPS AI vai tentar criar no primeiro uso.`);
343
+ warn(`Sem permissão para criar ${path.relative(PROJECT_ROOT, dir)} — SINAPSE AI vai tentar criar no primeiro uso.`);
344
344
  softFailures += 1;
345
345
  continue;
346
346
  }
@@ -439,7 +439,7 @@ function stepDoctor() {
439
439
  * Teste: sinapse doctor
440
440
  * Começar: @sinapse no Claude Code
441
441
  *
442
- * Docs: https://sinapse.club
442
+ * Docs: https://github.com/caioimori/sinapse-ai#readme
443
443
  *
444
444
  * In --verbose mode the caller has already printed detailed step output, so we
445
445
  * still render the minimal summary at the end as a recap.
@@ -477,9 +477,9 @@ function renderFinalSummary(opts = {}) {
477
477
  const isGlobal = isGlobalInstall();
478
478
  const lines = [];
479
479
  if (firstRun) {
480
- lines.push(`${c.bold}Bem-vindo ao SNPS AI!${c.reset} 🎉`);
480
+ lines.push(`${c.bold}Bem-vindo ao SINAPSE AI!${c.reset} 🎉`);
481
481
  }
482
- lines.push(`${c.bold}SNPS AI ${version}${c.reset} instalado ${c.green}✓${c.reset}`);
482
+ lines.push(`${c.bold}SINAPSE AI ${version}${c.reset} instalado ${c.green}✓${c.reset}`);
483
483
  if (!isGlobal) {
484
484
  lines.push(`${c.dim}${agents} ${agentsWord} · ${squads} ${squadsWord} ${prontosWord}${c.reset}`);
485
485
  }
@@ -493,7 +493,7 @@ function renderFinalSummary(opts = {}) {
493
493
  lines.push(`Começar: ${c.cyan}@sinapse${c.reset} no Claude Code`);
494
494
  }
495
495
  lines.push('');
496
- lines.push(`Docs: ${c.dim}https://sinapse.club${c.reset}`);
496
+ lines.push(`Docs: ${c.dim}https://github.com/caioimori/sinapse-ai#readme${c.reset}`);
497
497
 
498
498
  for (const line of lines) {
499
499
  process.stdout.write(`${line}\n`);
@@ -567,7 +567,7 @@ function main(argvOverride) {
567
567
  return 0;
568
568
  }
569
569
 
570
- verboseLog(`${c.dim}SNPS AI postinstall — configurando ambiente...${c.reset}`);
570
+ verboseLog(`${c.dim}SINAPSE AI postinstall — configurando ambiente...${c.reset}`);
571
571
 
572
572
  const syncIde = stepSyncIde();
573
573
  if (syncIde.critical) {
@@ -42,7 +42,6 @@ No prompt do Claude Code ou Codex:
42
42
  |---|---|
43
43
  | Entender filosofia do framework | [`README.md`](../README.md) |
44
44
  | Ver lista completa de agentes | [Agent Reference Guide](agent-reference-guide.md) |
45
- | Configurar grounding (vault, DS, brand) | [Grounding Setup](guides/grounding-setup.md) |
46
45
  | Resolver problema na instalação | [Troubleshooting](troubleshooting.md) |
47
46
  | Ver workflow de desenvolvimento | [`docs/sinapse-workflows/`](sinapse-workflows/) |
48
47
  | Contribuir | [`CONTRIBUTING.md`](../CONTRIBUTING.md) |
@@ -337,7 +337,7 @@ steps:
337
337
 
338
338
  ## Conceitos Básicos da Camada de Memória
339
339
 
340
- A camada de memória da SINAPSE (Chrome Brain v3) fornece gerenciamento inteligente de contexto com grounding do Second Brain e recuperação semântica nativa.
340
+ A camada de memória da SINAPSE (Chrome Brain v3) fornece gerenciamento inteligente de contexto com grounding contra seu vault de notas (opcional) e recuperação semântica nativa.
341
341
 
342
342
  ### Como a Memória Funciona
343
343