@orchestrator-claude/cli 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 (176) hide show
  1. package/README.md +74 -0
  2. package/dist/api-client/OrchestratorAPIClient.d.ts +111 -0
  3. package/dist/api-client/OrchestratorAPIClient.d.ts.map +1 -0
  4. package/dist/api-client/OrchestratorAPIClient.js +176 -0
  5. package/dist/api-client/OrchestratorAPIClient.js.map +1 -0
  6. package/dist/api-client/index.d.ts +11 -0
  7. package/dist/api-client/index.d.ts.map +1 -0
  8. package/dist/api-client/index.js +10 -0
  9. package/dist/api-client/index.js.map +1 -0
  10. package/dist/api-client/retry.d.ts +29 -0
  11. package/dist/api-client/retry.d.ts.map +1 -0
  12. package/dist/api-client/retry.js +85 -0
  13. package/dist/api-client/retry.js.map +1 -0
  14. package/dist/api-client/types.d.ts +148 -0
  15. package/dist/api-client/types.d.ts.map +1 -0
  16. package/dist/api-client/types.js +10 -0
  17. package/dist/api-client/types.js.map +1 -0
  18. package/dist/commands/AgentsCommand.d.ts +74 -0
  19. package/dist/commands/AgentsCommand.d.ts.map +1 -0
  20. package/dist/commands/AgentsCommand.js +170 -0
  21. package/dist/commands/AgentsCommand.js.map +1 -0
  22. package/dist/commands/InitCommand.d.ts +63 -0
  23. package/dist/commands/InitCommand.d.ts.map +1 -0
  24. package/dist/commands/InitCommand.js +150 -0
  25. package/dist/commands/InitCommand.js.map +1 -0
  26. package/dist/commands/MigrateCommand.d.ts +93 -0
  27. package/dist/commands/MigrateCommand.d.ts.map +1 -0
  28. package/dist/commands/MigrateCommand.js +260 -0
  29. package/dist/commands/MigrateCommand.js.map +1 -0
  30. package/dist/commands/StatusCommand.d.ts +61 -0
  31. package/dist/commands/StatusCommand.d.ts.map +1 -0
  32. package/dist/commands/StatusCommand.js +142 -0
  33. package/dist/commands/StatusCommand.js.map +1 -0
  34. package/dist/commands/TemplatesCommand.d.ts +69 -0
  35. package/dist/commands/TemplatesCommand.d.ts.map +1 -0
  36. package/dist/commands/TemplatesCommand.js +147 -0
  37. package/dist/commands/TemplatesCommand.js.map +1 -0
  38. package/dist/commands/WorkflowCommand.d.ts +82 -0
  39. package/dist/commands/WorkflowCommand.d.ts.map +1 -0
  40. package/dist/commands/WorkflowCommand.js +203 -0
  41. package/dist/commands/WorkflowCommand.js.map +1 -0
  42. package/dist/config/CLIConfig.d.ts +66 -0
  43. package/dist/config/CLIConfig.d.ts.map +1 -0
  44. package/dist/config/CLIConfig.js +60 -0
  45. package/dist/config/CLIConfig.js.map +1 -0
  46. package/dist/formatters/OutputFormatter.d.ts +102 -0
  47. package/dist/formatters/OutputFormatter.d.ts.map +1 -0
  48. package/dist/formatters/OutputFormatter.js +182 -0
  49. package/dist/formatters/OutputFormatter.js.map +1 -0
  50. package/dist/index.d.ts +15 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +249 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/templates/.gitkeep +0 -0
  55. package/dist/templates/TemplateEngine.d.ts +90 -0
  56. package/dist/templates/TemplateEngine.d.ts.map +1 -0
  57. package/dist/templates/TemplateEngine.js +149 -0
  58. package/dist/templates/TemplateEngine.js.map +1 -0
  59. package/dist/templates/base/CLAUDE.md.hbs +362 -0
  60. package/dist/templates/base/claude/agents/implementer.md +446 -0
  61. package/dist/templates/base/claude/agents/orchestrator.md +155 -0
  62. package/dist/templates/base/claude/agents/planner.md +348 -0
  63. package/dist/templates/base/claude/agents/researcher.md +390 -0
  64. package/dist/templates/base/claude/agents/reviewer.md +444 -0
  65. package/dist/templates/base/claude/agents/specifier.md +331 -0
  66. package/dist/templates/base/claude/agents/task-generator.md +382 -0
  67. package/dist/templates/base/claude/hooks/post-artifact-generate.sh +39 -0
  68. package/dist/templates/base/claude/hooks/post-implement-validate.sh +139 -0
  69. package/dist/templates/base/claude/hooks/post-phase-checkpoint.sh +322 -0
  70. package/dist/templates/base/claude/hooks/pre-agent-invoke.sh +34 -0
  71. package/dist/templates/base/claude/hooks/pre-phase-advance.sh +40 -0
  72. package/dist/templates/base/claude/hooks/track-agent-invocation.sh +230 -0
  73. package/dist/templates/base/claude/orchestrator-config.json +141 -0
  74. package/dist/templates/base/claude/settings.json +80 -0
  75. package/dist/templates/base/claude/skills/artifact-validator/SKILL.md +226 -0
  76. package/dist/templates/base/claude/skills/docs-guardian/SKILL.md +230 -0
  77. package/dist/templates/base/claude/skills/kb-lookup/SKILL.md +257 -0
  78. package/dist/templates/base/claude/skills/phase-gate-evaluator/SKILL.md +274 -0
  79. package/dist/templates/base/claude/skills/workflow-status/SKILL.md +322 -0
  80. package/dist/templates/base/docker-compose.yml.hbs +20 -0
  81. package/dist/templates/base/mcp.json.hbs +37 -0
  82. package/dist/templates/base/orchestrator/.state/.gitkeep +0 -0
  83. package/dist/templates/base/orchestrator-index.json.hbs +37 -0
  84. package/dist/templates/base/package.json.hbs +40 -0
  85. package/dist/templates/default/.orchestrator/orchestrator-index.json +19 -0
  86. package/dist/templates/default/README.md +58 -0
  87. package/dist/templates/default/docker-compose.yml +24 -0
  88. package/dist/templates/default/template.json +10 -0
  89. package/dist/templates/projects/api/files/index.ts.hbs +30 -0
  90. package/dist/templates/projects/api/files/server.ts.hbs +63 -0
  91. package/dist/templates/projects/api/files/tsconfig.json.hbs +27 -0
  92. package/dist/templates/projects/api/files/vitest.config.ts.hbs +28 -0
  93. package/dist/templates/projects/api/template.config.json +238 -0
  94. package/dist/templates/projects/api/template.config.ts +149 -0
  95. package/dist/templates/projects/cli/files/cli.ts.hbs +50 -0
  96. package/dist/templates/projects/cli/files/index.ts.hbs +8 -0
  97. package/dist/templates/projects/cli/files/tsconfig.json.hbs +27 -0
  98. package/dist/templates/projects/cli/files/vitest.config.ts.hbs +28 -0
  99. package/dist/templates/projects/cli/template.config.json +213 -0
  100. package/dist/templates/projects/cli/template.config.ts +126 -0
  101. package/dist/templates/projects/frontend/files/App.tsx.hbs +31 -0
  102. package/dist/templates/projects/frontend/files/index.html.hbs +13 -0
  103. package/dist/templates/projects/frontend/files/main.tsx.hbs +22 -0
  104. package/dist/templates/projects/frontend/files/tsconfig.json.hbs +34 -0
  105. package/dist/templates/projects/frontend/files/tsconfig.node.json.hbs +10 -0
  106. package/dist/templates/projects/frontend/files/vite.config.ts.hbs +19 -0
  107. package/dist/templates/projects/frontend/files/vitest.config.ts.hbs +36 -0
  108. package/dist/templates/projects/frontend/template.config.json +241 -0
  109. package/dist/templates/projects/frontend/template.config.ts +153 -0
  110. package/dist/templates/projects/minimal/files/claude-settings.json.hbs +20 -0
  111. package/dist/templates/projects/minimal/files/env.example.hbs +17 -0
  112. package/dist/templates/projects/minimal/files/gitignore.hbs +41 -0
  113. package/dist/templates/projects/minimal/files/index.ts.hbs +13 -0
  114. package/dist/templates/projects/minimal/files/tsconfig.json.hbs +27 -0
  115. package/dist/templates/projects/minimal/template.config.json +185 -0
  116. package/dist/templates/projects/minimal/template.config.ts +88 -0
  117. package/package.json +37 -0
  118. package/templates/.gitkeep +0 -0
  119. package/templates/base/CLAUDE.md.hbs +362 -0
  120. package/templates/base/claude/agents/implementer.md +446 -0
  121. package/templates/base/claude/agents/orchestrator.md +155 -0
  122. package/templates/base/claude/agents/planner.md +348 -0
  123. package/templates/base/claude/agents/researcher.md +390 -0
  124. package/templates/base/claude/agents/reviewer.md +444 -0
  125. package/templates/base/claude/agents/specifier.md +331 -0
  126. package/templates/base/claude/agents/task-generator.md +382 -0
  127. package/templates/base/claude/hooks/post-artifact-generate.sh +39 -0
  128. package/templates/base/claude/hooks/post-implement-validate.sh +139 -0
  129. package/templates/base/claude/hooks/post-phase-checkpoint.sh +322 -0
  130. package/templates/base/claude/hooks/pre-agent-invoke.sh +34 -0
  131. package/templates/base/claude/hooks/pre-phase-advance.sh +40 -0
  132. package/templates/base/claude/hooks/track-agent-invocation.sh +230 -0
  133. package/templates/base/claude/orchestrator-config.json +141 -0
  134. package/templates/base/claude/settings.json +80 -0
  135. package/templates/base/claude/skills/artifact-validator/SKILL.md +226 -0
  136. package/templates/base/claude/skills/docs-guardian/SKILL.md +230 -0
  137. package/templates/base/claude/skills/kb-lookup/SKILL.md +257 -0
  138. package/templates/base/claude/skills/phase-gate-evaluator/SKILL.md +274 -0
  139. package/templates/base/claude/skills/workflow-status/SKILL.md +322 -0
  140. package/templates/base/docker-compose.yml.hbs +20 -0
  141. package/templates/base/mcp.json.hbs +37 -0
  142. package/templates/base/orchestrator/.state/.gitkeep +0 -0
  143. package/templates/base/orchestrator-index.json.hbs +37 -0
  144. package/templates/base/package.json.hbs +40 -0
  145. package/templates/default/.orchestrator/orchestrator-index.json +19 -0
  146. package/templates/default/README.md +58 -0
  147. package/templates/default/docker-compose.yml +24 -0
  148. package/templates/default/template.json +10 -0
  149. package/templates/projects/api/files/index.ts.hbs +30 -0
  150. package/templates/projects/api/files/server.ts.hbs +63 -0
  151. package/templates/projects/api/files/tsconfig.json.hbs +27 -0
  152. package/templates/projects/api/files/vitest.config.ts.hbs +28 -0
  153. package/templates/projects/api/template.config.json +238 -0
  154. package/templates/projects/api/template.config.ts +149 -0
  155. package/templates/projects/cli/files/cli.ts.hbs +50 -0
  156. package/templates/projects/cli/files/index.ts.hbs +8 -0
  157. package/templates/projects/cli/files/tsconfig.json.hbs +27 -0
  158. package/templates/projects/cli/files/vitest.config.ts.hbs +28 -0
  159. package/templates/projects/cli/template.config.json +213 -0
  160. package/templates/projects/cli/template.config.ts +126 -0
  161. package/templates/projects/frontend/files/App.tsx.hbs +31 -0
  162. package/templates/projects/frontend/files/index.html.hbs +13 -0
  163. package/templates/projects/frontend/files/main.tsx.hbs +22 -0
  164. package/templates/projects/frontend/files/tsconfig.json.hbs +34 -0
  165. package/templates/projects/frontend/files/tsconfig.node.json.hbs +10 -0
  166. package/templates/projects/frontend/files/vite.config.ts.hbs +19 -0
  167. package/templates/projects/frontend/files/vitest.config.ts.hbs +36 -0
  168. package/templates/projects/frontend/template.config.json +241 -0
  169. package/templates/projects/frontend/template.config.ts +153 -0
  170. package/templates/projects/minimal/files/claude-settings.json.hbs +20 -0
  171. package/templates/projects/minimal/files/env.example.hbs +17 -0
  172. package/templates/projects/minimal/files/gitignore.hbs +41 -0
  173. package/templates/projects/minimal/files/index.ts.hbs +13 -0
  174. package/templates/projects/minimal/files/tsconfig.json.hbs +27 -0
  175. package/templates/projects/minimal/template.config.json +185 -0
  176. package/templates/projects/minimal/template.config.ts +88 -0
@@ -0,0 +1,230 @@
1
+ #!/bin/bash
2
+ # Track Agent Invocation Hook
3
+ # Registers agent invocations in orchestrator-index.json
4
+ #
5
+ # Usage (called by Claude Code hooks):
6
+ # track-agent-invocation.sh start (reads stdin JSON)
7
+ # track-agent-invocation.sh complete (reads stdin JSON)
8
+ #
9
+ # Claude Code passes JSON via stdin with structure:
10
+ # { "tool_name": "Task", "tool_input": { "subagent_type": "...", ... } }
11
+
12
+ set -e
13
+
14
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
15
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
16
+ INDEX_FILE="$PROJECT_ROOT/.orchestrator/orchestrator-index.json"
17
+ STATE_DIR="$PROJECT_ROOT/.orchestrator/.state"
18
+ INVOCATION_FILE="$STATE_DIR/current-invocation"
19
+ DEBUG_LOG="$STATE_DIR/hook-debug.log"
20
+
21
+ # Ensure state directory exists
22
+ mkdir -p "$STATE_DIR"
23
+
24
+ ACTION="${1:-}"
25
+
26
+ # Read stdin into variable (Claude Code passes JSON via stdin)
27
+ STDIN_DATA=""
28
+ if [ ! -t 0 ]; then
29
+ STDIN_DATA=$(cat)
30
+ fi
31
+
32
+ case "$ACTION" in
33
+ start)
34
+ # Extract agent info from stdin JSON
35
+ # Structure: { "tool_name": "Task", "tool_input": { "subagent_type": "...", ... } }
36
+ if [ -n "$STDIN_DATA" ]; then
37
+ # Debug: log received data
38
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] START stdin: $STDIN_DATA" >> "$DEBUG_LOG"
39
+
40
+ AGENT_NAME=$(echo "$STDIN_DATA" | node -e "
41
+ let data = '';
42
+ process.stdin.on('data', chunk => data += chunk);
43
+ process.stdin.on('end', () => {
44
+ try {
45
+ const json = JSON.parse(data);
46
+ // Try different structures
47
+ const type = json.tool_input?.subagent_type
48
+ || json.subagent_type
49
+ || json.tool_input?.type
50
+ || 'unknown';
51
+ console.log(type);
52
+ } catch { console.log('unknown'); }
53
+ });
54
+ ")
55
+ PHASE=$(echo "$STDIN_DATA" | node -e "
56
+ let data = '';
57
+ process.stdin.on('data', chunk => data += chunk);
58
+ process.stdin.on('end', () => {
59
+ try {
60
+ const json = JSON.parse(data);
61
+ const type = json.tool_input?.subagent_type
62
+ || json.subagent_type
63
+ || json.tool_input?.type
64
+ || 'unknown';
65
+ const phaseMap = {
66
+ 'specifier': 'specify',
67
+ 'planner': 'plan',
68
+ 'task-generator': 'tasks',
69
+ 'implementer': 'implement',
70
+ 'researcher': 'research',
71
+ 'reviewer': 'review',
72
+ 'orchestrator': 'orchestrate'
73
+ };
74
+ console.log(phaseMap[type] || type);
75
+ } catch { console.log('unknown'); }
76
+ });
77
+ ")
78
+ elif [ -n "$CLAUDE_TOOL_INPUT" ]; then
79
+ # Fallback to environment variable
80
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] START env: $CLAUDE_TOOL_INPUT" >> "$DEBUG_LOG"
81
+
82
+ AGENT_NAME=$(echo "$CLAUDE_TOOL_INPUT" | node -e "
83
+ let data = '';
84
+ process.stdin.on('data', chunk => data += chunk);
85
+ process.stdin.on('end', () => {
86
+ try {
87
+ const json = JSON.parse(data);
88
+ const type = json.subagent_type || json.tool_input?.subagent_type || 'unknown';
89
+ console.log(type);
90
+ } catch { console.log('unknown'); }
91
+ });
92
+ ")
93
+ PHASE="unknown"
94
+ else
95
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] START no input received" >> "$DEBUG_LOG"
96
+ AGENT_NAME="unknown"
97
+ PHASE="unknown"
98
+ fi
99
+
100
+ # Generate invocation ID
101
+ INVOCATION_ID="inv-$(date +%s)-$(head -c 4 /dev/urandom | xxd -p)"
102
+ STARTED_AT=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
103
+
104
+ # Get workflow ID from index
105
+ WORKFLOW_ID=""
106
+ if [ -f "$INDEX_FILE" ]; then
107
+ WORKFLOW_ID=$(node -e "
108
+ const fs = require('fs');
109
+ try {
110
+ const idx = JSON.parse(fs.readFileSync('$INDEX_FILE', 'utf8'));
111
+ console.log(idx.activeWorkflow?.id || 'wf-standalone-' + Date.now());
112
+ } catch { console.log('wf-standalone-' + Date.now()); }
113
+ ")
114
+ fi
115
+
116
+ # Save invocation state
117
+ echo "$INVOCATION_ID" > "$INVOCATION_FILE"
118
+
119
+ # Update orchestrator-index.json
120
+ if [ -f "$INDEX_FILE" ]; then
121
+ node -e "
122
+ const fs = require('fs');
123
+ const indexPath = '$INDEX_FILE';
124
+ const idx = JSON.parse(fs.readFileSync(indexPath, 'utf8'));
125
+
126
+ if (!idx.agentInvocations) idx.agentInvocations = [];
127
+
128
+ idx.agentInvocations.push({
129
+ id: '$INVOCATION_ID',
130
+ agentName: '$AGENT_NAME',
131
+ phase: '$PHASE',
132
+ workflowId: '$WORKFLOW_ID',
133
+ startedAt: '$STARTED_AT',
134
+ completedAt: null,
135
+ status: 'running',
136
+ durationMs: 0
137
+ });
138
+
139
+ fs.writeFileSync(indexPath, JSON.stringify(idx, null, 2));
140
+ console.log(JSON.stringify({ invocationId: '$INVOCATION_ID', startedAt: '$STARTED_AT' }));
141
+ "
142
+ else
143
+ echo '{"invocationId": "'$INVOCATION_ID'", "startedAt": "'$STARTED_AT'", "warning": "No index file found"}'
144
+ fi
145
+ ;;
146
+
147
+ complete)
148
+ # Get invocation ID from state file
149
+ INVOCATION_ID=""
150
+ if [ -f "$INVOCATION_FILE" ]; then
151
+ INVOCATION_ID=$(cat "$INVOCATION_FILE")
152
+ fi
153
+
154
+ if [ -z "$INVOCATION_ID" ]; then
155
+ echo '{"success": false, "error": "No invocation ID found"}'
156
+ exit 0 # Don't fail the hook
157
+ fi
158
+
159
+ # Debug log
160
+ if [ -n "$STDIN_DATA" ]; then
161
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] COMPLETE stdin: $STDIN_DATA" >> "$DEBUG_LOG"
162
+ fi
163
+
164
+ # Determine status - default to success
165
+ STATUS="success"
166
+ SUMMARY="Completed"
167
+
168
+ COMPLETED_AT=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
169
+
170
+ # Update orchestrator-index.json
171
+ if [ -f "$INDEX_FILE" ]; then
172
+ node -e "
173
+ const fs = require('fs');
174
+ const indexPath = '$INDEX_FILE';
175
+ const idx = JSON.parse(fs.readFileSync(indexPath, 'utf8'));
176
+
177
+ const invocations = idx.agentInvocations || [];
178
+ const invIdx = invocations.findIndex(i => i.id === '$INVOCATION_ID');
179
+
180
+ if (invIdx === -1) {
181
+ console.log(JSON.stringify({ success: false, error: 'Invocation not found' }));
182
+ process.exit(0);
183
+ }
184
+
185
+ const inv = invocations[invIdx];
186
+ const startTime = new Date(inv.startedAt).getTime();
187
+ const endTime = new Date('$COMPLETED_AT').getTime();
188
+ const durationMs = endTime - startTime;
189
+
190
+ invocations[invIdx] = {
191
+ ...inv,
192
+ completedAt: '$COMPLETED_AT',
193
+ status: '$STATUS' === 'success' ? 'completed' : 'failed',
194
+ durationMs,
195
+ result: {
196
+ status: '$STATUS',
197
+ summary: '$SUMMARY'
198
+ }
199
+ };
200
+
201
+ idx.agentInvocations = invocations;
202
+
203
+ // Update statistics
204
+ if (idx.statistics) {
205
+ idx.statistics.totalInvocations = invocations.length;
206
+ idx.statistics.lastActivity = '$COMPLETED_AT';
207
+ }
208
+
209
+ fs.writeFileSync(indexPath, JSON.stringify(idx, null, 2));
210
+ console.log(JSON.stringify({ success: true, durationMs }));
211
+ "
212
+ else
213
+ echo '{"success": false, "error": "No index file found"}'
214
+ fi
215
+
216
+ # Clean up state file
217
+ rm -f "$INVOCATION_FILE"
218
+ ;;
219
+
220
+ *)
221
+ echo "Usage: $0 {start|complete}"
222
+ echo ""
223
+ echo "This script is called by Claude Code hooks."
224
+ echo "It reads JSON from stdin with structure:"
225
+ echo ' { "tool_name": "Task", "tool_input": { "subagent_type": "...", ... } }'
226
+ echo ""
227
+ echo "Debug log: $DEBUG_LOG"
228
+ exit 0
229
+ ;;
230
+ esac
@@ -0,0 +1,141 @@
1
+ {
2
+ "$schema": "https://orchestrator.ai/schemas/orchestrator-config.json",
3
+ "version": "1.0",
4
+ "_description": "Configuracoes customizadas do Orchestrator. NAO e lido pelo Claude Code CLI - usado pelo codigo TypeScript do Orchestrator.",
5
+
6
+ "project": {
7
+ "name": "orchestrator",
8
+ "description": "Sistema de Orquestracao Autonomo para Claude Code"
9
+ },
10
+
11
+ "agents": {
12
+ "orchestrator": {
13
+ "prompt": ".claude/agents/orchestrator.md",
14
+ "description": "Orchestrator v2 - Minimal decision agent using deterministic MCP tools (getContext, executeAction, canAdvance)",
15
+ "capabilities": ["invoke_subagents", "access_mcp"],
16
+ "version": "2.0"
17
+ },
18
+ "specifier": {
19
+ "prompt": ".claude/agents/specifier.md",
20
+ "description": "Gera especificacoes tecnicas de features",
21
+ "capabilities": ["access_research", "kb_lookup"]
22
+ },
23
+ "planner": {
24
+ "prompt": ".claude/agents/planner.md",
25
+ "description": "Elabora planos tecnicos de implementacao",
26
+ "capabilities": ["access_research", "kb_lookup"]
27
+ },
28
+ "task-generator": {
29
+ "prompt": ".claude/agents/task-generator.md",
30
+ "description": "Gera backlog de tarefas atomicas",
31
+ "capabilities": ["kb_lookup"]
32
+ },
33
+ "implementer": {
34
+ "prompt": ".claude/agents/implementer.md",
35
+ "description": "Executa implementacao de tarefas",
36
+ "capabilities": ["code_write", "run_tests"]
37
+ },
38
+ "researcher": {
39
+ "prompt": ".claude/agents/researcher.md",
40
+ "description": "Conduz pesquisas tecnicas via Perplexity",
41
+ "capabilities": ["access_perplexity"]
42
+ },
43
+ "reviewer": {
44
+ "prompt": ".claude/agents/reviewer.md",
45
+ "description": "Revisa e valida artefatos e codigo",
46
+ "capabilities": ["validate_artifacts", "code_review"]
47
+ }
48
+ },
49
+
50
+ "skills": {
51
+ "artifact-validator": {
52
+ "definition": ".claude/skills/artifact-validator/SKILL.md",
53
+ "description": "Valida artefatos contra schemas e regras de negocio",
54
+ "auto_invoke": true,
55
+ "triggers": ["after_artifact_generation", "before_phase_advance"]
56
+ },
57
+ "kb-lookup": {
58
+ "definition": ".claude/skills/kb-lookup/SKILL.md",
59
+ "description": "Busca informacoes na knowledge base do projeto",
60
+ "auto_invoke": true,
61
+ "triggers": ["when_context_needed", "when_rules_referenced"]
62
+ },
63
+ "phase-gate-evaluator": {
64
+ "definition": ".claude/skills/phase-gate-evaluator/SKILL.md",
65
+ "description": "Avalia gates entre fases do workflow",
66
+ "auto_invoke": true,
67
+ "triggers": ["before_phase_advance"]
68
+ },
69
+ "workflow-status": {
70
+ "definition": ".claude/skills/workflow-status/SKILL.md",
71
+ "description": "Consulta status detalhado do workflow atual",
72
+ "auto_invoke": false,
73
+ "triggers": ["on_demand"]
74
+ }
75
+ },
76
+
77
+ "workflows": {
78
+ "feature_development": {
79
+ "phases": ["research", "specify", "plan", "tasks", "implement"],
80
+ "gates": {
81
+ "research": "research-complete",
82
+ "specify": "specification-complete",
83
+ "plan": "plan-complete",
84
+ "tasks": "tasks-complete",
85
+ "implement": "implementation-complete"
86
+ }
87
+ },
88
+ "bug_fix": {
89
+ "phases": ["triage", "specify", "implement", "verify"],
90
+ "gates": {
91
+ "triage": "triage-complete",
92
+ "specify": "bugfix-spec-complete",
93
+ "implement": "fix-implemented",
94
+ "verify": "fix-verified"
95
+ }
96
+ },
97
+ "refactoring": {
98
+ "phases": ["analyze", "plan", "implement", "verify"],
99
+ "gates": {
100
+ "analyze": "analysis-complete",
101
+ "plan": "refactor-plan-complete",
102
+ "implement": "refactor-implemented",
103
+ "verify": "refactor-verified"
104
+ }
105
+ }
106
+ },
107
+
108
+ "knowledge_base": {
109
+ "root": ".orchestrator/memory/knowledge-base",
110
+ "tiers": {
111
+ "core": {
112
+ "path": "core",
113
+ "immutable": true,
114
+ "files": ["CONSTITUTION.md"]
115
+ },
116
+ "contextual": {
117
+ "path": "contextual",
118
+ "immutable": false,
119
+ "files": ["project-context.md", "tech-stack.md"]
120
+ },
121
+ "research": {
122
+ "path": "research",
123
+ "cache": true,
124
+ "ttl_hours": 24
125
+ }
126
+ }
127
+ },
128
+
129
+ "quality": {
130
+ "validation": {
131
+ "schema_validation": true,
132
+ "business_rules_validation": true,
133
+ "lint_on_write": true,
134
+ "test_on_write": true
135
+ },
136
+ "checkpoints": {
137
+ "auto_checkpoint_on_artifact": true,
138
+ "checkpoint_message_format": "[orchestrator] {phase}: {artifact_type} - {description}"
139
+ }
140
+ }
141
+ }
@@ -0,0 +1,80 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm:*)",
5
+ "Bash(npx:*)",
6
+ "Bash(node:*)",
7
+ "Bash(git:*)",
8
+ "Bash(mkdir:*)",
9
+ "Bash(ls:*)",
10
+ "Bash(cat:*)",
11
+ "Bash(tree:*)",
12
+ "Read(.orchestrator/**)",
13
+ "Read(project-guidelines/**)",
14
+ "Read(src/**)",
15
+ "Read(tests/**)",
16
+ "Read(docs/**)",
17
+ "Write(.orchestrator/**)",
18
+ "Write(src/**)",
19
+ "Write(tests/**)",
20
+ "Write(docs/**)",
21
+ "mcp__orchestrator-tools__*",
22
+ "mcp__perplexity__*",
23
+ "mcp__knowledge-base__*"
24
+ ],
25
+ "deny": [
26
+ "Bash(rm -rf /)",
27
+ "Bash(rm -rf ~)",
28
+ "Write(.env)",
29
+ "Write(.env.*)",
30
+ "Read(.env)",
31
+ "Read(.env.*)"
32
+ ]
33
+ },
34
+ "env": {
35
+ "ORCHESTRATOR_ROOT": ".orchestrator",
36
+ "NODE_ENV": "development"
37
+ },
38
+ "hooks": {
39
+ "PreToolUse": [
40
+ {
41
+ "matcher": "Task",
42
+ "hooks": [
43
+ {
44
+ "type": "command",
45
+ "command": ".claude/hooks/track-agent-invocation.sh start",
46
+ "timeout": 5000,
47
+ "on_failure": "ignore"
48
+ }
49
+ ]
50
+ }
51
+ ],
52
+ "PostToolUse": [
53
+ {
54
+ "matcher": "Task",
55
+ "hooks": [
56
+ {
57
+ "type": "command",
58
+ "command": ".claude/hooks/track-agent-invocation.sh complete",
59
+ "timeout": 5000,
60
+ "on_failure": "ignore"
61
+ },
62
+ {
63
+ "type": "command",
64
+ "command": ".claude/hooks/post-implement-validate.sh",
65
+ "timeout": 10000,
66
+ "on_failure": "warn"
67
+ },
68
+ {
69
+ "type": "command",
70
+ "command": ".claude/hooks/post-phase-checkpoint.sh",
71
+ "timeout": 30000,
72
+ "on_failure": "ignore"
73
+ }
74
+ ]
75
+ }
76
+ ]
77
+ },
78
+ "enableAllProjectMcpServers": true,
79
+ "alwaysThinkingEnabled": true
80
+ }
@@ -0,0 +1,226 @@
1
+ ---
2
+ name: artifact-validator
3
+ description: Valida artefatos do Orchestrator contra JSON schemas e regras de negocio da CONSTITUTION. Use apos geracao de artefatos (spec, plan, tasks) ou antes de avancar fase.
4
+ allowed-tools: Read, Grep, Glob
5
+ ---
6
+
7
+ # Artifact Validator Skill
8
+
9
+ ## Descricao
10
+
11
+ Esta skill valida artefatos do sistema de orquestracao contra:
12
+ 1. **JSON Schemas**: Estrutura e tipos obrigatorios
13
+ 2. **Regras de Negocio**: Definidas na CONSTITUTION.md
14
+ 3. **Consistencia**: Referencias internas e dependencias
15
+
16
+ ## Quando Usar
17
+
18
+ Use esta skill quando:
19
+ - Apos geracao de qualquer artefato (spec, plan, tasks, implementation)
20
+ - Antes de avancar para proxima fase do workflow
21
+ - Quando solicitado revisao de artefato existente
22
+ - Para verificar integridade de artefatos apos edicao
23
+
24
+ ## Invocacao
25
+
26
+ Exemplos de como invocar esta skill:
27
+
28
+ ```
29
+ "Valide o artefato specification em .orchestrator/artifacts/specify/spec.md"
30
+
31
+ "Verifique se o plano esta conforme o schema de plan"
32
+
33
+ "Valide tasks.md contra regras de negocio da CONSTITUTION"
34
+
35
+ "Faca validacao completa do artefato de implementacao"
36
+ ```
37
+
38
+ ## Parametros
39
+
40
+ | Parametro | Tipo | Obrigatorio | Descricao |
41
+ |-----------|------|-------------|-----------|
42
+ | `artifact_path` | string | Sim | Caminho do artefato a validar |
43
+ | `artifact_type` | enum | Sim | specification, plan, tasks, implementation, research |
44
+ | `validation_level` | enum | Nao | schema (apenas estrutura), business (apenas regras), full (ambos) |
45
+
46
+ ### Valores de validation_level
47
+
48
+ - **schema**: Valida apenas estrutura JSON/Markdown e campos obrigatorios
49
+ - **business**: Valida apenas regras de negocio da CONSTITUTION
50
+ - **full** (default): Executa ambas validacoes
51
+
52
+ ## Output
53
+
54
+ A skill retorna resultado estruturado:
55
+
56
+ ```json
57
+ {
58
+ "isValid": true | false,
59
+ "validationLevel": "schema" | "business" | "full",
60
+ "artifactType": "specification",
61
+ "artifactPath": ".orchestrator/artifacts/specify/spec.md",
62
+ "timestamp": "2025-12-09T10:30:00Z",
63
+
64
+ "schemaValidation": {
65
+ "passed": true,
66
+ "errors": [],
67
+ "warnings": []
68
+ },
69
+
70
+ "businessValidation": {
71
+ "passed": true,
72
+ "errors": [],
73
+ "warnings": [],
74
+ "rulesChecked": [
75
+ "CONSTITUTION.rule.001",
76
+ "CONSTITUTION.rule.002"
77
+ ]
78
+ },
79
+
80
+ "errors": [
81
+ {
82
+ "code": "SCHEMA_001",
83
+ "field": "requisitos.RF-001.criterio_aceite",
84
+ "message": "Campo obrigatorio ausente",
85
+ "severity": "error",
86
+ "suggestion": "Adicione criterios de aceite verificaveis para RF-001"
87
+ }
88
+ ],
89
+
90
+ "warnings": [
91
+ {
92
+ "code": "BUSINESS_W001",
93
+ "field": "escopo.out_scope",
94
+ "message": "Out of scope sem justificativa",
95
+ "severity": "warning",
96
+ "suggestion": "Adicione justificativa para cada item out of scope"
97
+ }
98
+ ],
99
+
100
+ "suggestions": [
101
+ "Considere adicionar metricas de performance em RNF",
102
+ "Referencie o research-context se disponivel"
103
+ ],
104
+
105
+ "summary": {
106
+ "totalErrors": 1,
107
+ "totalWarnings": 1,
108
+ "canProceed": false
109
+ }
110
+ }
111
+ ```
112
+
113
+ ## Regras de Validacao
114
+
115
+ ### Schema Validation
116
+
117
+ #### Specification (spec.md)
118
+ - Campos obrigatorios: metadata, sumario, escopo, requisitos_funcionais
119
+ - Cada RF deve ter: id, descricao, ator, criterio_aceite
120
+ - Cada RNF deve ter: id, metrica, target
121
+
122
+ #### Plan (plan.md)
123
+ - Campos obrigatorios: metadata, arquitetura, fases, dependencias
124
+ - Cada fase deve ter: id, descricao, entregaveis, estimativa
125
+ - Dependencias devem referenciar fases existentes
126
+
127
+ #### Tasks (tasks.md)
128
+ - Campos obrigatorios: metadata, backlog, dependencias
129
+ - Cada task deve ter: id, titulo, descricao, criterio_aceite, estimativa
130
+ - Dependencias devem formar DAG (sem ciclos)
131
+
132
+ #### Implementation
133
+ - Campos obrigatorios: metadata, task_id, arquivos_modificados
134
+ - Cada arquivo deve ter: path, tipo_mudanca, descricao_mudanca
135
+ - task_id deve existir em tasks.md
136
+
137
+ ### Business Validation
138
+
139
+ Regras extraidas de CONSTITUTION.md:
140
+
141
+ 1. **CONST-001**: Todo requisito deve ter criterio de aceite mensuravel
142
+ 2. **CONST-002**: Out of scope deve ter justificativa explicita
143
+ 3. **CONST-003**: Estimativas devem estar em unidades padrao (horas/dias)
144
+ 4. **CONST-004**: Referencias a outros artefatos devem ser validas
145
+ 5. **CONST-005**: Nomes de arquivos devem seguir convencao do projeto
146
+
147
+ ## Integracao com TypeScript
148
+
149
+ Esta skill invoca o handler TypeScript:
150
+
151
+ ```typescript
152
+ // src/presentation/skills/ArtifactValidatorSkillHandler.ts
153
+
154
+ export class ArtifactValidatorSkillHandler {
155
+ async handle(params: ValidationParams): Promise<ValidationResult> {
156
+ // 1. Carrega artefato do path
157
+ // 2. Executa SchemaValidator (infrastructure)
158
+ // 3. Executa ConstitutionValidator (domain)
159
+ // 4. Combina resultados
160
+ // 5. Retorna ValidationResult
161
+ }
162
+ }
163
+ ```
164
+
165
+ ## Exemplos de Uso
166
+
167
+ ### Validacao Schema Only
168
+ ```
169
+ User: "Valide a estrutura do spec.md"
170
+ Skill: artifact-validator com validation_level=schema
171
+ ```
172
+
173
+ ### Validacao Business Only
174
+ ```
175
+ User: "Verifique se o plano atende as regras da CONSTITUTION"
176
+ Skill: artifact-validator com validation_level=business
177
+ ```
178
+
179
+ ### Validacao Completa (Default)
180
+ ```
181
+ User: "Valide completamente o artefato tasks.md"
182
+ Skill: artifact-validator com validation_level=full
183
+ ```
184
+
185
+ ## Comportamento em Caso de Erro
186
+
187
+ ### Artefato Nao Encontrado
188
+ ```json
189
+ {
190
+ "isValid": false,
191
+ "errors": [{
192
+ "code": "ARTIFACT_NOT_FOUND",
193
+ "message": "Artefato nao encontrado: {path}"
194
+ }]
195
+ }
196
+ ```
197
+
198
+ ### Tipo Desconhecido
199
+ ```json
200
+ {
201
+ "isValid": false,
202
+ "errors": [{
203
+ "code": "UNKNOWN_TYPE",
204
+ "message": "Tipo de artefato desconhecido: {type}"
205
+ }]
206
+ }
207
+ ```
208
+
209
+ ### Erro de Parse
210
+ ```json
211
+ {
212
+ "isValid": false,
213
+ "errors": [{
214
+ "code": "PARSE_ERROR",
215
+ "message": "Erro ao parsear artefato: {details}"
216
+ }]
217
+ }
218
+ ```
219
+
220
+ ## Notas Importantes
221
+
222
+ 1. Esta skill **NAO** modifica artefatos, apenas valida
223
+ 2. Validacao **full** e sempre recomendada antes de avancar fase
224
+ 3. Warnings **NAO** impedem avanco, mas devem ser revisados
225
+ 4. Errors **IMPEDEM** avanco e devem ser corrigidos
226
+ 5. Sugestoes sao opcionais mas melhoram qualidade