@jaimevalasek/aioson 1.3.0 → 1.4.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 (213) hide show
  1. package/README.md +19 -2
  2. package/docs/pt/README.md +62 -2
  3. package/docs/pt/advisor-spec.md +5 -5
  4. package/docs/pt/agentes-customizados.md +670 -0
  5. package/docs/pt/agentes.md +111 -13
  6. package/docs/pt/automacao-squads.md +407 -0
  7. package/docs/pt/cenarios.md +3 -3
  8. package/docs/pt/clientes-ai.md +62 -0
  9. package/docs/pt/comandos-cli.md +167 -17
  10. package/docs/pt/deyvin.md +115 -0
  11. package/docs/pt/genome-3.0-spec.md +11 -11
  12. package/docs/pt/inicio-rapido.md +45 -0
  13. package/docs/pt/memoria-contexto.md +255 -0
  14. package/docs/pt/output-strategy-delivery.md +655 -0
  15. package/docs/pt/profiler-system.md +17 -17
  16. package/docs/pt/runtime-observability.md +5 -1
  17. package/docs/pt/skills.md +175 -0
  18. package/docs/pt/{squad-genoma.md → squad-genome.md} +81 -75
  19. package/docs/testing/genome-2.0-rollout.md +1 -1
  20. package/package.json +3 -3
  21. package/src/agents.js +21 -5
  22. package/src/backup-provider.js +303 -0
  23. package/src/cli.js +178 -2
  24. package/src/commands/agents.js +22 -4
  25. package/src/commands/backup.js +533 -0
  26. package/src/commands/cloud.js +17 -17
  27. package/src/commands/context-pack.js +45 -0
  28. package/src/commands/implementation-plan.js +340 -0
  29. package/src/commands/learning.js +134 -0
  30. package/src/commands/live.js +1583 -0
  31. package/src/commands/runtime.js +833 -2
  32. package/src/commands/scan-project.js +288 -24
  33. package/src/commands/setup-context.js +23 -0
  34. package/src/commands/skill.js +558 -0
  35. package/src/commands/squad-agent-create.js +788 -0
  36. package/src/commands/squad-doctor.js +51 -1
  37. package/src/commands/squad-investigate.js +261 -0
  38. package/src/commands/squad-learning.js +209 -0
  39. package/src/commands/squad-pipeline.js +247 -1
  40. package/src/commands/squad-plan.js +329 -0
  41. package/src/commands/squad-status.js +1 -1
  42. package/src/commands/squad-validate.js +57 -1
  43. package/src/commands/test-agents.js +6 -1
  44. package/src/commands/workflow-next.js +8 -1
  45. package/src/commands/workflow-status.js +250 -0
  46. package/src/constants.js +80 -16
  47. package/src/context-memory.js +837 -0
  48. package/src/context-writer.js +2 -0
  49. package/src/delivery-runner.js +319 -0
  50. package/src/genome-files.js +1 -1
  51. package/src/genome-format.js +1 -1
  52. package/src/i18n/messages/en.js +206 -7
  53. package/src/i18n/messages/es.js +123 -6
  54. package/src/i18n/messages/fr.js +122 -5
  55. package/src/i18n/messages/pt-BR.js +205 -12
  56. package/src/installer.js +30 -2
  57. package/src/lib/genomes/compat.js +1 -1
  58. package/src/runtime-store.js +780 -42
  59. package/src/session-handoff.js +77 -0
  60. package/template/.aioson/agents/analyst.md +36 -9
  61. package/template/.aioson/agents/architect.md +20 -5
  62. package/template/.aioson/agents/dev.md +135 -15
  63. package/template/.aioson/agents/deyvin.md +166 -0
  64. package/template/.aioson/agents/discovery-design-doc.md +25 -1
  65. package/template/.aioson/agents/{genoma.md → genome.md} +20 -20
  66. package/template/.aioson/agents/orache.md +371 -0
  67. package/template/.aioson/agents/orchestrator.md +37 -2
  68. package/template/.aioson/agents/pair.md +5 -0
  69. package/template/.aioson/agents/pm.md +17 -5
  70. package/template/.aioson/agents/product.md +58 -22
  71. package/template/.aioson/agents/profiler-enricher.md +1 -1
  72. package/template/.aioson/agents/profiler-forge.md +9 -9
  73. package/template/.aioson/agents/profiler-researcher.md +1 -1
  74. package/template/.aioson/agents/qa.md +17 -5
  75. package/template/.aioson/agents/setup.md +81 -5
  76. package/template/.aioson/agents/squad.md +675 -28
  77. package/template/.aioson/agents/ux-ui.md +277 -34
  78. package/template/.aioson/config.md +175 -0
  79. package/template/.aioson/context/spec.md.template +17 -0
  80. package/template/.aioson/genomes/.gitkeep +0 -0
  81. package/template/.aioson/installed-skills/.gitkeep +0 -0
  82. package/template/.aioson/locales/en/agents/analyst.md +26 -4
  83. package/template/.aioson/locales/en/agents/architect.md +10 -0
  84. package/template/.aioson/locales/en/agents/dev.md +89 -4
  85. package/template/.aioson/locales/en/agents/deyvin.md +129 -0
  86. package/template/.aioson/locales/en/agents/{genoma.md → genome.md} +14 -14
  87. package/template/.aioson/locales/en/agents/orchestrator.md +36 -2
  88. package/template/.aioson/locales/en/agents/pair.md +5 -0
  89. package/template/.aioson/locales/en/agents/pm.md +7 -0
  90. package/template/.aioson/locales/en/agents/product.md +35 -17
  91. package/template/.aioson/locales/en/agents/qa.md +7 -0
  92. package/template/.aioson/locales/en/agents/setup.md +51 -5
  93. package/template/.aioson/locales/en/agents/squad.md +203 -15
  94. package/template/.aioson/locales/en/agents/ux-ui.md +375 -35
  95. package/template/.aioson/locales/es/agents/analyst.md +16 -4
  96. package/template/.aioson/locales/es/agents/architect.md +10 -0
  97. package/template/.aioson/locales/es/agents/dev.md +70 -2
  98. package/template/.aioson/locales/es/agents/deyvin.md +89 -0
  99. package/template/.aioson/locales/es/agents/{genoma.md → genome.md} +13 -13
  100. package/template/.aioson/locales/es/agents/orache.md +103 -0
  101. package/template/.aioson/locales/es/agents/orchestrator.md +36 -2
  102. package/template/.aioson/locales/es/agents/pair.md +5 -0
  103. package/template/.aioson/locales/es/agents/pm.md +7 -0
  104. package/template/.aioson/locales/es/agents/product.md +13 -3
  105. package/template/.aioson/locales/es/agents/qa.md +7 -0
  106. package/template/.aioson/locales/es/agents/setup.md +28 -5
  107. package/template/.aioson/locales/es/agents/squad.md +221 -15
  108. package/template/.aioson/locales/es/agents/ux-ui.md +26 -25
  109. package/template/.aioson/locales/fr/agents/analyst.md +16 -4
  110. package/template/.aioson/locales/fr/agents/architect.md +10 -0
  111. package/template/.aioson/locales/fr/agents/dev.md +70 -2
  112. package/template/.aioson/locales/fr/agents/deyvin.md +89 -0
  113. package/template/.aioson/locales/fr/agents/{genoma.md → genome.md} +7 -7
  114. package/template/.aioson/locales/fr/agents/orache.md +104 -0
  115. package/template/.aioson/locales/fr/agents/orchestrator.md +36 -2
  116. package/template/.aioson/locales/fr/agents/pair.md +5 -0
  117. package/template/.aioson/locales/fr/agents/pm.md +7 -0
  118. package/template/.aioson/locales/fr/agents/product.md +13 -3
  119. package/template/.aioson/locales/fr/agents/qa.md +7 -0
  120. package/template/.aioson/locales/fr/agents/setup.md +28 -5
  121. package/template/.aioson/locales/fr/agents/squad.md +216 -10
  122. package/template/.aioson/locales/fr/agents/ux-ui.md +26 -25
  123. package/template/.aioson/locales/pt-BR/agents/analyst.md +26 -4
  124. package/template/.aioson/locales/pt-BR/agents/architect.md +10 -0
  125. package/template/.aioson/locales/pt-BR/agents/dev.md +93 -4
  126. package/template/.aioson/locales/pt-BR/agents/deyvin.md +129 -0
  127. package/template/.aioson/locales/pt-BR/agents/{genoma.md → genome.md} +49 -49
  128. package/template/.aioson/locales/pt-BR/agents/orache.md +137 -0
  129. package/template/.aioson/locales/pt-BR/agents/orchestrator.md +36 -2
  130. package/template/.aioson/locales/pt-BR/agents/pair.md +5 -0
  131. package/template/.aioson/locales/pt-BR/agents/pm.md +7 -0
  132. package/template/.aioson/locales/pt-BR/agents/product.md +35 -17
  133. package/template/.aioson/locales/pt-BR/agents/qa.md +7 -0
  134. package/template/.aioson/locales/pt-BR/agents/setup.md +51 -5
  135. package/template/.aioson/locales/pt-BR/agents/squad.md +486 -47
  136. package/template/.aioson/locales/pt-BR/agents/ux-ui.md +361 -22
  137. package/template/.aioson/my-agents/.gitkeep +0 -0
  138. package/template/.aioson/rules/.gitkeep +0 -0
  139. package/template/.aioson/rules/squad/.gitkeep +0 -0
  140. package/template/.aioson/rules/squad/README.md +50 -0
  141. package/template/.aioson/schemas/genome-meta.schema.json +1 -1
  142. package/template/.aioson/schemas/genome.schema.json +1 -1
  143. package/template/.aioson/schemas/squad-blueprint.schema.json +11 -0
  144. package/template/.aioson/schemas/squad-manifest.schema.json +257 -1
  145. package/template/.aioson/skills/design/cognitive-core-ui/SKILL.md +157 -0
  146. package/template/.aioson/skills/design/cognitive-core-ui/references/components.md +407 -0
  147. package/template/.aioson/skills/design/cognitive-core-ui/references/dashboards.md +172 -0
  148. package/template/.aioson/skills/design/cognitive-core-ui/references/design-tokens.md +490 -0
  149. package/template/.aioson/skills/design/cognitive-core-ui/references/motion.md +237 -0
  150. package/template/.aioson/skills/design/cognitive-core-ui/references/patterns.md +289 -0
  151. package/template/.aioson/skills/design/cognitive-core-ui/references/websites.md +350 -0
  152. package/template/.aioson/skills/design/interface-design/SKILL.md +47 -0
  153. package/template/.aioson/skills/design/interface-design/references/components-and-states.md +105 -0
  154. package/template/.aioson/skills/design/interface-design/references/design-directions.md +101 -0
  155. package/template/.aioson/skills/design/interface-design/references/handoff-and-quality.md +71 -0
  156. package/template/.aioson/skills/design/interface-design/references/intent-and-domain.md +74 -0
  157. package/template/.aioson/skills/design/interface-design/references/tokens-and-depth.md +173 -0
  158. package/template/.aioson/skills/design/premium-command-center-ui/SKILL.md +62 -0
  159. package/template/.aioson/skills/design/premium-command-center-ui/references/operations.md +74 -0
  160. package/template/.aioson/skills/design/premium-command-center-ui/references/patterns.md +116 -0
  161. package/template/.aioson/skills/design/premium-command-center-ui/references/validation.md +47 -0
  162. package/template/.aioson/skills/design/premium-command-center-ui/references/visual-system.md +215 -0
  163. package/template/.aioson/skills/design-system/SKILL.md +92 -0
  164. package/template/.aioson/skills/design-system/cognitive-core-ui.skill +0 -0
  165. package/template/.aioson/skills/design-system/components/SKILL.md +274 -0
  166. package/template/.aioson/skills/design-system/components/SKILL.md:Zone.Identifier +0 -0
  167. package/template/.aioson/skills/design-system/dashboards/SKILL.md +184 -0
  168. package/template/.aioson/skills/design-system/dashboards/SKILL.md:Zone.Identifier +0 -0
  169. package/template/.aioson/skills/design-system/foundations/SKILL.md +250 -0
  170. package/template/.aioson/skills/design-system/foundations/SKILL.md:Zone.Identifier +0 -0
  171. package/template/.aioson/skills/design-system/motion/SKILL.md +197 -0
  172. package/template/.aioson/skills/design-system/motion/SKILL.md:Zone.Identifier +0 -0
  173. package/template/.aioson/skills/design-system/patterns/SKILL.md +231 -0
  174. package/template/.aioson/skills/design-system/patterns/SKILL.md:Zone.Identifier +0 -0
  175. package/template/.aioson/skills/squad/SKILL.md +58 -0
  176. package/template/.aioson/skills/squad/domains/.gitkeep +0 -0
  177. package/template/.aioson/skills/squad/formats/.gitkeep +0 -0
  178. package/template/.aioson/skills/squad/patterns/.gitkeep +0 -0
  179. package/template/.aioson/skills/squad/references/.gitkeep +0 -0
  180. package/template/.aioson/tasks/implementation-plan.md +288 -0
  181. package/template/.aioson/tasks/squad-create.md +1 -1
  182. package/template/.aioson/tasks/squad-execution-plan.md +279 -0
  183. package/template/.aioson/tasks/squad-export.md +1 -1
  184. package/template/.aioson/tasks/squad-investigate.md +44 -0
  185. package/template/.aioson/tasks/squad-learning-review.md +44 -0
  186. package/template/.aioson/tasks/squad-output-config.md +177 -0
  187. package/template/.aioson/tasks/squad-validate.md +1 -1
  188. package/template/.claude/commands/aioson/agent/deyvin.md +5 -0
  189. package/template/.claude/commands/aioson/agent/discovery-design-doc.md +5 -0
  190. package/template/.claude/commands/aioson/agent/genome.md +5 -0
  191. package/template/.claude/commands/aioson/agent/product.md +5 -0
  192. package/template/.claude/commands/aioson/agent/profiler-enricher.md +5 -0
  193. package/template/.claude/commands/aioson/agent/profiler-forge.md +5 -0
  194. package/template/.claude/commands/aioson/agent/profiler-researcher.md +5 -0
  195. package/template/.claude/commands/aioson/agent/squad.md +5 -0
  196. package/template/.gemini/GEMINI.md +2 -0
  197. package/template/.gemini/commands/aios-deyvin.toml +6 -0
  198. package/template/.gemini/commands/aios-pair.toml +6 -0
  199. package/template/AGENTS.md +34 -6
  200. package/template/CLAUDE.md +31 -4
  201. package/template/OPENCODE.md +6 -2
  202. package/template/squad-searches/.gitkeep +0 -0
  203. package/template/.aioson/skills/static/interface-design.md +0 -372
  204. package/template/.aioson/skills/static/premium-command-center-ui.md +0 -190
  205. /package/template/.aioson/{genomas → docs}/.gitkeep +0 -0
  206. /package/template/.claude/commands/aioson/{analyst.md → agent/analyst.md} +0 -0
  207. /package/template/.claude/commands/aioson/{architect.md → agent/architect.md} +0 -0
  208. /package/template/.claude/commands/aioson/{dev.md → agent/dev.md} +0 -0
  209. /package/template/.claude/commands/aioson/{orchestrator.md → agent/orchestrator.md} +0 -0
  210. /package/template/.claude/commands/aioson/{pm.md → agent/pm.md} +0 -0
  211. /package/template/.claude/commands/aioson/{qa.md → agent/qa.md} +0 -0
  212. /package/template/.claude/commands/aioson/{setup.md → agent/setup.md} +0 -0
  213. /package/template/.claude/commands/aioson/{ux-ui.md → agent/ux-ui.md} +0 -0
@@ -7,6 +7,7 @@ const { resolveAgentLocale } = require('../locales');
7
7
  const { validateProjectContextFile } = require('../context');
8
8
  const { exists, ensureDir } = require('../utils');
9
9
  const { syncWorkflowRuntime } = require('../execution-gateway');
10
+ const { writeHandoff, buildWorkflowHandoff } = require('../session-handoff');
10
11
 
11
12
  const STATE_RELATIVE_PATH = '.aioson/context/workflow.state.json';
12
13
  const CONFIG_RELATIVE_PATH = '.aioson/context/workflow.config.json';
@@ -439,7 +440,7 @@ async function activateStage(targetDir, state, locale, tool, explicitAgent = nul
439
440
  }
440
441
 
441
442
  const instructionPath = await resolveExistingInstructionPath(targetDir, agent, locale);
442
- const prompt = buildAgentPrompt(agent, tool, { instructionPath });
443
+ const prompt = buildAgentPrompt(agent, tool, { instructionPath, targetDir });
443
444
 
444
445
  let nextState = state;
445
446
  if (explicitAgent && stageName !== normalizeAgentName(state.next)) {
@@ -527,6 +528,12 @@ async function runWorkflowNext({ args, options, logger, t }) {
527
528
  completedStage
528
529
  });
529
530
 
531
+ // Generate session handoff when a stage completes or workflow finishes
532
+ if (completedStage || !activation.agent) {
533
+ const handoffData = buildWorkflowHandoff(state, completedStage, activation.agent);
534
+ await writeHandoff(targetDir, handoffData);
535
+ }
536
+
530
537
  const payload = {
531
538
  ok: true,
532
539
  targetDir,
@@ -0,0 +1,250 @@
1
+ 'use strict';
2
+
3
+ const fs = require('node:fs/promises');
4
+ const path = require('node:path');
5
+ const { exists } = require('../utils');
6
+ const { validateProjectContextFile } = require('../context');
7
+ const { readHandoff } = require('../session-handoff');
8
+ const { runtimeStoreExists, openRuntimeDb, listPipelines } = require('../runtime-store');
9
+
10
+ const STATE_RELATIVE_PATH = '.aioson/context/workflow.state.json';
11
+
12
+ const ARTIFACT_MAP = {
13
+ setup: { file: '.aioson/context/project.context.md', label: 'project.context.md' },
14
+ product: { file: '.aioson/context/prd.md', label: 'prd.md' },
15
+ analyst: { file: '.aioson/context/discovery.md', label: 'discovery.md' },
16
+ architect: { file: '.aioson/context/architecture.md', label: 'architecture.md' },
17
+ 'ux-ui': { file: '.aioson/context/ui-spec.md', label: 'ui-spec.md' }
18
+ };
19
+
20
+ async function scanSquads(targetDir) {
21
+ const squadsDir = path.join(targetDir, '.aioson/squads');
22
+ if (!(await exists(squadsDir))) return [];
23
+
24
+ try {
25
+ const entries = await fs.readdir(squadsDir, { withFileTypes: true });
26
+ const squads = [];
27
+ for (const entry of entries) {
28
+ if (!entry.isDirectory()) continue;
29
+ const manifestPath = path.join(squadsDir, entry.name, 'squad.manifest.json');
30
+ const agentsDir = path.join(squadsDir, entry.name, 'agents');
31
+ let agentCount = 0;
32
+ try {
33
+ const agents = await fs.readdir(agentsDir);
34
+ agentCount = agents.filter(f => f.endsWith('.md')).length;
35
+ } catch { /* no agents dir */ }
36
+
37
+ let status = 'active';
38
+ try {
39
+ const raw = await fs.readFile(manifestPath, 'utf8');
40
+ const manifest = JSON.parse(raw);
41
+ status = manifest.status || 'active';
42
+ } catch { /* no manifest */ }
43
+
44
+ squads.push({ slug: entry.name, agentCount, status });
45
+ }
46
+ return squads;
47
+ } catch {
48
+ return [];
49
+ }
50
+ }
51
+
52
+ async function scanGenomes(targetDir) {
53
+ const genomesDir = path.join(targetDir, '.aioson/genomes');
54
+ if (!(await exists(genomesDir))) return 0;
55
+ try {
56
+ const entries = await fs.readdir(genomesDir);
57
+ return entries.filter(f => f.endsWith('.md') || f.endsWith('.json')).length;
58
+ } catch {
59
+ return 0;
60
+ }
61
+ }
62
+
63
+ async function getPipelineCount(targetDir) {
64
+ const hasDb = await runtimeStoreExists(targetDir);
65
+ if (!hasDb) return { total: 0, active: 0 };
66
+ const handle = await openRuntimeDb(targetDir, { mustExist: true });
67
+ if (!handle) return { total: 0, active: 0 };
68
+ try {
69
+ const pipelines = listPipelines(handle.db);
70
+ const active = pipelines.filter(p => p.status === 'active').length;
71
+ return { total: pipelines.length, active };
72
+ } finally {
73
+ handle.db.close();
74
+ }
75
+ }
76
+
77
+ async function runWorkflowStatus({ args, options, logger, t }) {
78
+ const targetDir = path.resolve(process.cwd(), args[0] || '.');
79
+
80
+ // Read workflow state
81
+ const statePath = path.join(targetDir, STATE_RELATIVE_PATH);
82
+ let state = null;
83
+ try {
84
+ const raw = await fs.readFile(statePath, 'utf8');
85
+ state = JSON.parse(raw);
86
+ } catch {
87
+ // no state file
88
+ }
89
+
90
+ // Read project context
91
+ const context = await validateProjectContextFile(targetDir);
92
+ const projectName = (context.data && context.data.project_name) || path.basename(targetDir);
93
+ const classification = (state && state.classification)
94
+ || (context.data && context.data.classification)
95
+ || 'unknown';
96
+
97
+ // Read last handoff
98
+ const handoff = await readHandoff(targetDir);
99
+
100
+ // Check artifacts
101
+ const artifacts = {};
102
+ for (const [stage, info] of Object.entries(ARTIFACT_MAP)) {
103
+ const featureSlug = state && state.featureSlug;
104
+ let filePath = path.join(targetDir, info.file);
105
+
106
+ // Feature-scoped artifacts
107
+ if (featureSlug && stage === 'product') {
108
+ const featurePath = path.join(targetDir, `.aioson/context/prd-${featureSlug}.md`);
109
+ if (await exists(featurePath)) {
110
+ artifacts[stage] = { exists: true, label: `prd-${featureSlug}.md` };
111
+ continue;
112
+ }
113
+ }
114
+ if (featureSlug && stage === 'analyst') {
115
+ const reqPath = path.join(targetDir, `.aioson/context/requirements-${featureSlug}.md`);
116
+ if (await exists(reqPath)) {
117
+ artifacts[stage] = { exists: true, label: `requirements-${featureSlug}.md` };
118
+ continue;
119
+ }
120
+ }
121
+
122
+ artifacts[stage] = { exists: await exists(filePath), label: info.label };
123
+ }
124
+
125
+ // Scan squads, genomes, pipelines
126
+ const squads = await scanSquads(targetDir);
127
+ const genomeCount = await scanGenomes(targetDir);
128
+ const pipelines = await getPipelineCount(targetDir);
129
+
130
+ // Build status output
131
+ const mode = (state && state.mode) || 'project';
132
+ const featureSlug = (state && state.featureSlug) || null;
133
+
134
+ logger.log('');
135
+ logger.log(`Project: ${projectName} (${classification})`);
136
+ logger.log(`Mode: ${mode}${featureSlug ? ` — feature: ${featureSlug}` : ''}`);
137
+ logger.log('');
138
+
139
+ // Workflow sequence
140
+ if (state && state.sequence) {
141
+ const completed = new Set(state.completed || []);
142
+ const skipped = new Set(state.skipped || []);
143
+ const current = state.current || state.next;
144
+
145
+ logger.log('Workflow:');
146
+ for (const stage of state.sequence) {
147
+ let marker;
148
+ if (completed.has(stage)) marker = 'done';
149
+ else if (skipped.has(stage)) marker = 'skip';
150
+ else if (stage === current) marker = 'now';
151
+ else marker = ' ';
152
+
153
+ const icon = marker === 'done' ? '[v]'
154
+ : marker === 'skip' ? '[-]'
155
+ : marker === 'now' ? '[>]'
156
+ : '[ ]';
157
+ logger.log(` ${icon} @${stage}`);
158
+ }
159
+
160
+ if (state.detour && state.detour.active) {
161
+ logger.log(` Detour: @${state.detour.agent} (returns to @${state.detour.returnTo})`);
162
+ }
163
+ logger.log('');
164
+ }
165
+
166
+ // Artifacts
167
+ logger.log('Artifacts:');
168
+ for (const [stage, info] of Object.entries(artifacts)) {
169
+ const icon = info.exists ? '[v]' : '[ ]';
170
+ logger.log(` ${icon} ${info.label}`);
171
+ }
172
+ logger.log('');
173
+
174
+ // Squads
175
+ if (squads.length > 0) {
176
+ logger.log(`Squads (${squads.length}):`);
177
+ for (const s of squads) {
178
+ logger.log(` ${s.slug} — ${s.agentCount} agents [${s.status}]`);
179
+ }
180
+ logger.log('');
181
+ }
182
+
183
+ // Genomes
184
+ if (genomeCount > 0) {
185
+ logger.log(`Genomes: ${genomeCount}`);
186
+ logger.log('');
187
+ }
188
+
189
+ // Pipelines
190
+ if (pipelines.total > 0) {
191
+ logger.log(`Pipelines: ${pipelines.total} (${pipelines.active} active)`);
192
+ logger.log('');
193
+ }
194
+
195
+ // Last handoff
196
+ if (handoff) {
197
+ logger.log('Last handoff:');
198
+ if (handoff.last_agent) logger.log(` Agent: ${handoff.last_agent}`);
199
+ if (handoff.what_was_done) logger.log(` Done: ${handoff.what_was_done}`);
200
+ if (handoff.what_comes_next) logger.log(` Next: ${handoff.what_comes_next}`);
201
+ if (handoff.session_ended_at) {
202
+ const elapsed = timeSince(handoff.session_ended_at);
203
+ logger.log(` When: ${elapsed} ago`);
204
+ }
205
+ logger.log('');
206
+ }
207
+
208
+ // Suggestion
209
+ if (state && state.sequence) {
210
+ const current = state.current || state.next;
211
+ if (current) {
212
+ logger.log(`Suggestion: activate @${current}`);
213
+ logger.log(` aioson workflow:next . --tool=claude`);
214
+ } else {
215
+ logger.log('Workflow is complete.');
216
+ }
217
+ } else if (!context.valid) {
218
+ logger.log('Suggestion: run @setup to initialize the project');
219
+ logger.log(' aioson workflow:next . --tool=claude');
220
+ }
221
+
222
+ return {
223
+ ok: true,
224
+ projectName,
225
+ classification,
226
+ mode,
227
+ featureSlug,
228
+ state,
229
+ artifacts,
230
+ squads,
231
+ genomeCount,
232
+ pipelines,
233
+ handoff
234
+ };
235
+ }
236
+
237
+ function timeSince(isoString) {
238
+ const now = Date.now();
239
+ const then = new Date(isoString).getTime();
240
+ const diffMs = now - then;
241
+ const minutes = Math.floor(diffMs / 60000);
242
+ if (minutes < 1) return 'just now';
243
+ if (minutes < 60) return `${minutes}m`;
244
+ const hours = Math.floor(minutes / 60);
245
+ if (hours < 24) return `${hours}h`;
246
+ const days = Math.floor(hours / 24);
247
+ return `${days}d`;
248
+ }
249
+
250
+ module.exports = { runWorkflowStatus };
package/src/constants.js CHANGED
@@ -10,6 +10,9 @@ const MANAGED_FILES = [
10
10
  '.gemini/commands/aios-analyst.toml',
11
11
  '.gemini/commands/aios-architect.toml',
12
12
  '.gemini/commands/aios-ux-ui.toml',
13
+ '.gemini/commands/aios-product.toml',
14
+ '.gemini/commands/aios-deyvin.toml',
15
+ '.gemini/commands/aios-pair.toml',
13
16
  '.gemini/commands/aios-pm.toml',
14
17
  '.gemini/commands/aios-dev.toml',
15
18
  '.gemini/commands/aios-qa.toml',
@@ -21,12 +24,15 @@ const MANAGED_FILES = [
21
24
  '.aioson/agents/architect.md',
22
25
  '.aioson/agents/ux-ui.md',
23
26
  '.aioson/agents/product.md',
27
+ '.aioson/agents/deyvin.md',
28
+ '.aioson/agents/pair.md',
24
29
  '.aioson/agents/pm.md',
25
30
  '.aioson/agents/dev.md',
26
31
  '.aioson/agents/qa.md',
27
32
  '.aioson/agents/orchestrator.md',
28
33
  '.aioson/agents/squad.md',
29
- '.aioson/agents/genoma.md',
34
+ '.aioson/agents/orache.md',
35
+ '.aioson/agents/genome.md',
30
36
  '.aioson/agents/profiler-researcher.md',
31
37
  '.aioson/agents/profiler-enricher.md',
32
38
  '.aioson/agents/profiler-forge.md',
@@ -36,12 +42,15 @@ const MANAGED_FILES = [
36
42
  '.aioson/locales/en/agents/architect.md',
37
43
  '.aioson/locales/en/agents/ux-ui.md',
38
44
  '.aioson/locales/en/agents/product.md',
45
+ '.aioson/locales/en/agents/deyvin.md',
46
+ '.aioson/locales/en/agents/pair.md',
39
47
  '.aioson/locales/en/agents/pm.md',
40
48
  '.aioson/locales/en/agents/dev.md',
41
49
  '.aioson/locales/en/agents/qa.md',
42
50
  '.aioson/locales/en/agents/orchestrator.md',
43
51
  '.aioson/locales/en/agents/squad.md',
44
- '.aioson/locales/en/agents/genoma.md',
52
+ '.aioson/locales/en/agents/orache.md',
53
+ '.aioson/locales/en/agents/genome.md',
45
54
  '.aioson/locales/en/agents/profiler-researcher.md',
46
55
  '.aioson/locales/en/agents/profiler-enricher.md',
47
56
  '.aioson/locales/en/agents/profiler-forge.md',
@@ -51,12 +60,15 @@ const MANAGED_FILES = [
51
60
  '.aioson/locales/pt-BR/agents/architect.md',
52
61
  '.aioson/locales/pt-BR/agents/ux-ui.md',
53
62
  '.aioson/locales/pt-BR/agents/product.md',
63
+ '.aioson/locales/pt-BR/agents/deyvin.md',
64
+ '.aioson/locales/pt-BR/agents/pair.md',
54
65
  '.aioson/locales/pt-BR/agents/pm.md',
55
66
  '.aioson/locales/pt-BR/agents/dev.md',
56
67
  '.aioson/locales/pt-BR/agents/qa.md',
57
68
  '.aioson/locales/pt-BR/agents/orchestrator.md',
58
69
  '.aioson/locales/pt-BR/agents/squad.md',
59
- '.aioson/locales/pt-BR/agents/genoma.md',
70
+ '.aioson/locales/pt-BR/agents/orache.md',
71
+ '.aioson/locales/pt-BR/agents/genome.md',
60
72
  '.aioson/locales/pt-BR/agents/profiler-researcher.md',
61
73
  '.aioson/locales/pt-BR/agents/profiler-enricher.md',
62
74
  '.aioson/locales/pt-BR/agents/profiler-forge.md',
@@ -66,12 +78,15 @@ const MANAGED_FILES = [
66
78
  '.aioson/locales/es/agents/architect.md',
67
79
  '.aioson/locales/es/agents/ux-ui.md',
68
80
  '.aioson/locales/es/agents/product.md',
81
+ '.aioson/locales/es/agents/deyvin.md',
82
+ '.aioson/locales/es/agents/pair.md',
69
83
  '.aioson/locales/es/agents/pm.md',
70
84
  '.aioson/locales/es/agents/dev.md',
71
85
  '.aioson/locales/es/agents/qa.md',
72
86
  '.aioson/locales/es/agents/orchestrator.md',
73
87
  '.aioson/locales/es/agents/squad.md',
74
- '.aioson/locales/es/agents/genoma.md',
88
+ '.aioson/locales/es/agents/orache.md',
89
+ '.aioson/locales/es/agents/genome.md',
75
90
  '.aioson/locales/es/agents/profiler-researcher.md',
76
91
  '.aioson/locales/es/agents/profiler-enricher.md',
77
92
  '.aioson/locales/es/agents/profiler-forge.md',
@@ -81,12 +96,15 @@ const MANAGED_FILES = [
81
96
  '.aioson/locales/fr/agents/architect.md',
82
97
  '.aioson/locales/fr/agents/ux-ui.md',
83
98
  '.aioson/locales/fr/agents/product.md',
99
+ '.aioson/locales/fr/agents/deyvin.md',
100
+ '.aioson/locales/fr/agents/pair.md',
84
101
  '.aioson/locales/fr/agents/pm.md',
85
102
  '.aioson/locales/fr/agents/dev.md',
86
103
  '.aioson/locales/fr/agents/qa.md',
87
104
  '.aioson/locales/fr/agents/orchestrator.md',
88
105
  '.aioson/locales/fr/agents/squad.md',
89
- '.aioson/locales/fr/agents/genoma.md',
106
+ '.aioson/locales/fr/agents/orache.md',
107
+ '.aioson/locales/fr/agents/genome.md',
90
108
  '.aioson/locales/fr/agents/profiler-researcher.md',
91
109
  '.aioson/locales/fr/agents/profiler-enricher.md',
92
110
  '.aioson/locales/fr/agents/profiler-forge.md',
@@ -103,11 +121,24 @@ const MANAGED_FILES = [
103
121
  '.aioson/skills/static/web3-cardano-patterns.md',
104
122
  '.aioson/skills/static/web3-security-checklist.md',
105
123
  '.aioson/skills/static/git-conventions.md',
106
- '.aioson/skills/static/premium-command-center-ui.md',
107
- '.aioson/skills/references/premium-command-center-ui/visual-system-and-component-patterns.md',
108
- '.aioson/skills/references/premium-command-center-ui/operational-ux-playbook.md',
109
- '.aioson/skills/references/premium-command-center-ui/master-application-prompt.md',
110
- '.aioson/skills/references/premium-command-center-ui/quality-validation-checklist.md',
124
+ '.aioson/skills/design/cognitive-core-ui/SKILL.md',
125
+ '.aioson/skills/design/cognitive-core-ui/references/design-tokens.md',
126
+ '.aioson/skills/design/cognitive-core-ui/references/components.md',
127
+ '.aioson/skills/design/cognitive-core-ui/references/patterns.md',
128
+ '.aioson/skills/design/cognitive-core-ui/references/motion.md',
129
+ '.aioson/skills/design/cognitive-core-ui/references/dashboards.md',
130
+ '.aioson/skills/design/cognitive-core-ui/references/websites.md',
131
+ '.aioson/skills/design/premium-command-center-ui/SKILL.md',
132
+ '.aioson/skills/design/premium-command-center-ui/references/visual-system.md',
133
+ '.aioson/skills/design/premium-command-center-ui/references/patterns.md',
134
+ '.aioson/skills/design/premium-command-center-ui/references/operations.md',
135
+ '.aioson/skills/design/premium-command-center-ui/references/validation.md',
136
+ '.aioson/skills/design/interface-design/SKILL.md',
137
+ '.aioson/skills/design/interface-design/references/intent-and-domain.md',
138
+ '.aioson/skills/design/interface-design/references/design-directions.md',
139
+ '.aioson/skills/design/interface-design/references/tokens-and-depth.md',
140
+ '.aioson/skills/design/interface-design/references/components-and-states.md',
141
+ '.aioson/skills/design/interface-design/references/handoff-and-quality.md',
111
142
  '.aioson/skills/dynamic/laravel-docs.md',
112
143
  '.aioson/skills/dynamic/flux-ui-docs.md',
113
144
  '.aioson/skills/dynamic/npm-packages.md',
@@ -131,6 +162,7 @@ const MANAGED_FILES = [
131
162
  '.aioson/tasks/squad-export.md',
132
163
  '.aioson/tasks/squad-repair.md',
133
164
  '.aioson/tasks/squad-pipeline.md',
165
+ '.aioson/tasks/squad-learning-review.md',
134
166
  '.aioson/profiler-reports/.gitkeep',
135
167
  '.aioson/advisors/.gitkeep'
136
168
  ];
@@ -176,6 +208,7 @@ const CONTEXT_ALLOWED_PROFILES = ['developer', 'beginner', 'team'];
176
208
  const AGENT_DEFINITIONS = [
177
209
  {
178
210
  id: 'setup',
211
+ displayName: 'Setup',
179
212
  command: '@setup',
180
213
  path: '.aioson/agents/setup.md',
181
214
  dependsOn: [],
@@ -183,6 +216,7 @@ const AGENT_DEFINITIONS = [
183
216
  },
184
217
  {
185
218
  id: 'discovery-design-doc',
219
+ displayName: 'Discovery/Design Doc',
186
220
  command: '@discovery-design-doc',
187
221
  path: '.aioson/agents/discovery-design-doc.md',
188
222
  dependsOn: ['.aioson/context/project.context.md'],
@@ -190,13 +224,24 @@ const AGENT_DEFINITIONS = [
190
224
  },
191
225
  {
192
226
  id: 'product',
227
+ displayName: 'Product',
193
228
  command: '@product',
194
229
  path: '.aioson/agents/product.md',
195
230
  dependsOn: ['.aioson/context/project.context.md'],
196
231
  output: '.aioson/context/prd.md or .aioson/context/prd-{slug}.md (PRD base)'
197
232
  },
233
+ {
234
+ id: 'deyvin',
235
+ displayName: 'Deyvin',
236
+ command: '@deyvin',
237
+ path: '.aioson/agents/deyvin.md',
238
+ aliases: ['pair'],
239
+ dependsOn: ['.aioson/context/project.context.md'],
240
+ output: 'small code changes + continuity notes in spec.md + runtime logs/tasks'
241
+ },
198
242
  {
199
243
  id: 'analyst',
244
+ displayName: 'Analyst',
200
245
  command: '@analyst',
201
246
  path: '.aioson/agents/analyst.md',
202
247
  dependsOn: ['.aioson/context/project.context.md'],
@@ -204,6 +249,7 @@ const AGENT_DEFINITIONS = [
204
249
  },
205
250
  {
206
251
  id: 'architect',
252
+ displayName: 'Architect',
207
253
  command: '@architect',
208
254
  path: '.aioson/agents/architect.md',
209
255
  dependsOn: [
@@ -214,6 +260,7 @@ const AGENT_DEFINITIONS = [
214
260
  },
215
261
  {
216
262
  id: 'ux-ui',
263
+ displayName: 'UI/UX',
217
264
  command: '@ux-ui',
218
265
  path: '.aioson/agents/ux-ui.md',
219
266
  dependsOn: [
@@ -226,6 +273,7 @@ const AGENT_DEFINITIONS = [
226
273
  },
227
274
  {
228
275
  id: 'pm',
276
+ displayName: 'PM',
229
277
  command: '@pm',
230
278
  path: '.aioson/agents/pm.md',
231
279
  dependsOn: [
@@ -238,6 +286,7 @@ const AGENT_DEFINITIONS = [
238
286
  },
239
287
  {
240
288
  id: 'dev',
289
+ displayName: 'Dev',
241
290
  command: '@dev',
242
291
  path: '.aioson/agents/dev.md',
243
292
  dependsOn: [
@@ -249,6 +298,7 @@ const AGENT_DEFINITIONS = [
249
298
  },
250
299
  {
251
300
  id: 'qa',
301
+ displayName: 'QA',
252
302
  command: '@qa',
253
303
  path: '.aioson/agents/qa.md',
254
304
  dependsOn: ['.aioson/context/discovery.md'],
@@ -256,6 +306,7 @@ const AGENT_DEFINITIONS = [
256
306
  },
257
307
  {
258
308
  id: 'orchestrator',
309
+ displayName: 'Orchestrator',
259
310
  command: '@orchestrator',
260
311
  path: '.aioson/agents/orchestrator.md',
261
312
  dependsOn: [
@@ -267,21 +318,32 @@ const AGENT_DEFINITIONS = [
267
318
  },
268
319
  {
269
320
  id: 'squad',
321
+ displayName: 'Squad',
270
322
  command: '@squad',
271
323
  path: '.aioson/agents/squad.md',
272
324
  dependsOn: [],
273
325
  output:
274
- '.aioson/squads/{slug}/squad.manifest.json + .aioson/squads/{slug}/squad.md + .aioson/squads/{slug}/agents/ + .aioson/squads/{slug}/skills/ + .aioson/squads/{slug}/templates/ + .aioson/squads/{slug}/docs/ + output/{slug}/{session-id}.html + output/{slug}/{content-key}/content.json + output/{slug}/{content-key}/index.html + output/{slug}/latest.html + aios-logs/{slug}/ + media/{slug}/'
326
+ '.aioson/squads/{slug}/squad.manifest.json + .aioson/squads/{slug}/squad.md + .aioson/squads/{slug}/agents/ + .aioson/squads/{slug}/workers/ + .aioson/squads/{slug}/workflows/ + .aioson/squads/{slug}/checklists/ + .aioson/squads/{slug}/skills/ + .aioson/squads/{slug}/templates/ + .aioson/squads/{slug}/docs/ + output/{slug}/{session-id}.html + output/{slug}/{content-key}/content.json + output/{slug}/{content-key}/index.html + output/{slug}/latest.html + aioson-logs/{slug}/ + media/{slug}/'
327
+ },
328
+ {
329
+ id: 'orache',
330
+ displayName: 'Orache',
331
+ command: '@orache',
332
+ path: '.aioson/agents/orache.md',
333
+ dependsOn: [],
334
+ output: 'squad-searches/{squad-slug}/investigation-{date}.md or squad-searches/standalone/{domain-slug}-{date}.md'
275
335
  },
276
336
  {
277
- id: 'genoma',
278
- command: '@genoma',
279
- path: '.aioson/agents/genoma.md',
337
+ id: 'genome',
338
+ displayName: 'Genome',
339
+ command: '@genome',
340
+ path: '.aioson/agents/genome.md',
280
341
  dependsOn: [],
281
- output: '.aioson/genomas/[slug].md + .aioson/genomas/[slug].meta.json + optional binding in .aioson/squads/{slug}/squad.md or .aioson/squads/{slug}/squad.manifest.json'
342
+ output: '.aioson/genomes/[slug].md + .aioson/genomes/[slug].meta.json + optional binding in .aioson/squads/{slug}/squad.md or .aioson/squads/{slug}/squad.manifest.json'
282
343
  },
283
344
  {
284
345
  id: 'profiler-researcher',
346
+ displayName: 'Profiler Researcher',
285
347
  command: '@profiler-researcher',
286
348
  path: '.aioson/agents/profiler-researcher.md',
287
349
  dependsOn: [],
@@ -289,6 +351,7 @@ const AGENT_DEFINITIONS = [
289
351
  },
290
352
  {
291
353
  id: 'profiler-enricher',
354
+ displayName: 'Profiler Enricher',
292
355
  command: '@profiler-enricher',
293
356
  path: '.aioson/agents/profiler-enricher.md',
294
357
  dependsOn: ['.aioson/profiler-reports/{person-slug}/research-report.md'],
@@ -296,10 +359,11 @@ const AGENT_DEFINITIONS = [
296
359
  },
297
360
  {
298
361
  id: 'profiler-forge',
362
+ displayName: 'Profiler Forge',
299
363
  command: '@profiler-forge',
300
364
  path: '.aioson/agents/profiler-forge.md',
301
365
  dependsOn: ['.aioson/profiler-reports/{person-slug}/enriched-profile.md'],
302
- output: '.aioson/genomas/{person-slug}-{domain-slug}.md + .aioson/genomas/{person-slug}-{domain-slug}.meta.json + .aioson/advisors/{person-slug}-advisor.md'
366
+ output: '.aioson/genomes/{person-slug}-{domain-slug}.md + .aioson/genomes/{person-slug}-{domain-slug}.meta.json + .aioson/advisors/{person-slug}-advisor.md'
303
367
  }
304
368
  ];
305
369