start-vibing 1.1.2 → 1.1.4
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.
- package/package.json +1 -1
- package/template/.claude/CLAUDE.md +129 -168
- package/template/.claude/agents/analyzer.md +0 -14
- package/template/.claude/agents/commit-manager.md +0 -19
- package/template/.claude/agents/documenter.md +0 -10
- package/template/.claude/agents/domain-updater.md +194 -200
- package/template/.claude/agents/final-validator.md +0 -18
- package/template/.claude/agents/orchestrator.md +36 -34
- package/template/.claude/agents/quality-checker.md +0 -24
- package/template/.claude/agents/research.md +299 -262
- package/template/.claude/agents/security-auditor.md +1 -14
- package/template/.claude/agents/tester.md +0 -8
- package/template/.claude/agents/ui-ux-reviewer.md +80 -18
- package/template/.claude/commands/feature.md +48 -102
- package/template/.claude/config/README.md +30 -30
- package/template/.claude/config/project-config.json +53 -53
- package/template/.claude/config/quality-gates.json +46 -46
- package/template/.claude/config/security-rules.json +45 -45
- package/template/.claude/config/testing-config.json +168 -168
- package/template/.claude/hooks/SETUP.md +52 -181
- package/template/.claude/hooks/user-prompt-submit.py +184 -46
- package/template/.claude/settings.json +0 -39
- package/template/.claude/skills/codebase-knowledge/SKILL.md +145 -145
- package/template/.claude/skills/codebase-knowledge/domains/claude-system.md +260 -321
- package/template/.claude/skills/docs-tracker/SKILL.md +239 -239
- package/template/.claude/skills/final-check/SKILL.md +284 -284
- package/template/.claude/skills/quality-gate/SKILL.md +278 -278
- package/template/.claude/skills/research-cache/SKILL.md +207 -207
- package/template/.claude/skills/security-scan/SKILL.md +206 -206
- package/template/.claude/skills/test-coverage/SKILL.md +441 -441
- package/template/.claude/skills/ui-ux-audit/SKILL.md +254 -254
- package/template/.claude/config/domain-mapping.json +0 -26
- package/template/.claude/hooks/post-tool-use.py +0 -155
- package/template/.claude/hooks/pre-tool-use.py +0 -159
- package/template/.claude/hooks/stop-validation.py +0 -155
- package/template/.claude/hooks/validate-commit.py +0 -200
- package/template/.claude/hooks/workflow-manager.py +0 -350
- package/template/.claude/workflow-state.schema.json +0 -200
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Workflow Manager - Helper Script for Agents
|
|
4
|
-
|
|
5
|
-
This script provides utilities for agents to update workflow state.
|
|
6
|
-
Called by agents to track their execution.
|
|
7
|
-
|
|
8
|
-
Usage:
|
|
9
|
-
workflow-manager.py start-task --type feature --description "Add login"
|
|
10
|
-
workflow-manager.py agent-executed --agent analyzer --result approved
|
|
11
|
-
workflow-manager.py approve-files --files "src/*.ts" "app/page.tsx"
|
|
12
|
-
workflow-manager.py quality-gate --gate typecheck --passed true
|
|
13
|
-
workflow-manager.py security-audit --result approved
|
|
14
|
-
workflow-manager.py final-validation --result approved --ready-to-commit true
|
|
15
|
-
workflow-manager.py complete-task --commit-hash abc123
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
import json
|
|
19
|
-
import sys
|
|
20
|
-
import os
|
|
21
|
-
import argparse
|
|
22
|
-
from datetime import datetime
|
|
23
|
-
from pathlib import Path
|
|
24
|
-
|
|
25
|
-
PROJECT_DIR = os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
|
|
26
|
-
WORKFLOW_STATE_PATH = Path(PROJECT_DIR) / '.claude' / 'workflow-state.json'
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def load_state():
|
|
30
|
-
if not WORKFLOW_STATE_PATH.exists():
|
|
31
|
-
return {"version": "1.0.0", "currentTask": None, "sessions": []}
|
|
32
|
-
with open(WORKFLOW_STATE_PATH) as f:
|
|
33
|
-
return json.load(f)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def save_state(state):
|
|
37
|
-
WORKFLOW_STATE_PATH.parent.mkdir(parents=True, exist_ok=True)
|
|
38
|
-
with open(WORKFLOW_STATE_PATH, 'w') as f:
|
|
39
|
-
json.dump(state, f, indent=2)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def start_task(args):
|
|
43
|
-
"""Start a new task"""
|
|
44
|
-
state = load_state()
|
|
45
|
-
|
|
46
|
-
# Archive current task if exists
|
|
47
|
-
if state.get('currentTask'):
|
|
48
|
-
print("Warning: Previous task was not completed. Archiving.", file=sys.stderr)
|
|
49
|
-
|
|
50
|
-
task_id = datetime.now().strftime('%Y%m%d_%H%M%S')
|
|
51
|
-
|
|
52
|
-
state['currentTask'] = {
|
|
53
|
-
'id': task_id,
|
|
54
|
-
'type': args.type,
|
|
55
|
-
'description': args.description,
|
|
56
|
-
'startedAt': datetime.now().isoformat(),
|
|
57
|
-
'agents': {
|
|
58
|
-
'orchestrator': {'executed': True, 'executedAt': datetime.now().isoformat(), 'result': 'approved'},
|
|
59
|
-
'analyzer': {'executed': False},
|
|
60
|
-
'research': {'executed': False},
|
|
61
|
-
'uiUxReviewer': {'executed': False},
|
|
62
|
-
'documenter': {'executed': False},
|
|
63
|
-
'tester': {'executed': False},
|
|
64
|
-
'securityAuditor': {'executed': False},
|
|
65
|
-
'qualityChecker': {'executed': False},
|
|
66
|
-
'finalValidator': {'executed': False},
|
|
67
|
-
'domainUpdater': {'executed': False},
|
|
68
|
-
'commitManager': {'executed': False},
|
|
69
|
-
},
|
|
70
|
-
'approvedFiles': [],
|
|
71
|
-
'modifiedFiles': [],
|
|
72
|
-
'testsCreated': [],
|
|
73
|
-
'docsUpdated': [],
|
|
74
|
-
'qualityGates': {},
|
|
75
|
-
'securityAudit': {},
|
|
76
|
-
'finalValidation': {}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
save_state(state)
|
|
80
|
-
print(f"[OK] Task started: {task_id}")
|
|
81
|
-
print(f" Type: {args.type}")
|
|
82
|
-
print(f" Description: {args.description}")
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
def agent_executed(args):
|
|
86
|
-
"""Mark an agent as executed"""
|
|
87
|
-
state = load_state()
|
|
88
|
-
|
|
89
|
-
if not state.get('currentTask'):
|
|
90
|
-
print("Error: No active task", file=sys.stderr)
|
|
91
|
-
sys.exit(1)
|
|
92
|
-
|
|
93
|
-
# Map CLI names to JSON keys
|
|
94
|
-
agent_map = {
|
|
95
|
-
'orchestrator': 'orchestrator',
|
|
96
|
-
'analyzer': 'analyzer',
|
|
97
|
-
'research': 'research',
|
|
98
|
-
'ui-ux-reviewer': 'uiUxReviewer',
|
|
99
|
-
'documenter': 'documenter',
|
|
100
|
-
'tester': 'tester',
|
|
101
|
-
'security-auditor': 'securityAuditor',
|
|
102
|
-
'quality-checker': 'qualityChecker',
|
|
103
|
-
'final-validator': 'finalValidator',
|
|
104
|
-
'domain-updater': 'domainUpdater',
|
|
105
|
-
'domainUpdater': 'domainUpdater',
|
|
106
|
-
'commit-manager': 'commitManager',
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
agent_key = agent_map.get(args.agent, args.agent)
|
|
110
|
-
|
|
111
|
-
state['currentTask']['agents'][agent_key] = {
|
|
112
|
-
'executed': True,
|
|
113
|
-
'executedAt': datetime.now().isoformat(),
|
|
114
|
-
'result': args.result,
|
|
115
|
-
'notes': args.notes or ''
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
save_state(state)
|
|
119
|
-
print(f"[OK] Agent '{args.agent}' marked as executed with result: {args.result}")
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
def approve_files(args):
|
|
123
|
-
"""Add files to approved list"""
|
|
124
|
-
state = load_state()
|
|
125
|
-
|
|
126
|
-
if not state.get('currentTask'):
|
|
127
|
-
print("Error: No active task", file=sys.stderr)
|
|
128
|
-
sys.exit(1)
|
|
129
|
-
|
|
130
|
-
# Get current approved files
|
|
131
|
-
approved = state['currentTask'].get('approvedFiles', [])
|
|
132
|
-
|
|
133
|
-
# Add new files
|
|
134
|
-
for file in args.files:
|
|
135
|
-
if file not in approved:
|
|
136
|
-
approved.append(file)
|
|
137
|
-
|
|
138
|
-
state['currentTask']['approvedFiles'] = approved
|
|
139
|
-
|
|
140
|
-
save_state(state)
|
|
141
|
-
print(f"[OK] Approved {len(args.files)} file(s) for modification:")
|
|
142
|
-
for f in args.files:
|
|
143
|
-
print(f" - {f}")
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
def quality_gate(args):
|
|
147
|
-
"""Record quality gate result"""
|
|
148
|
-
state = load_state()
|
|
149
|
-
|
|
150
|
-
if not state.get('currentTask'):
|
|
151
|
-
print("Error: No active task", file=sys.stderr)
|
|
152
|
-
sys.exit(1)
|
|
153
|
-
|
|
154
|
-
passed = args.passed.lower() == 'true'
|
|
155
|
-
|
|
156
|
-
state['currentTask']['qualityGates'][args.gate] = {
|
|
157
|
-
'passed': passed,
|
|
158
|
-
'executedAt': datetime.now().isoformat(),
|
|
159
|
-
'errors': args.errors.split(',') if args.errors else []
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
save_state(state)
|
|
163
|
-
status = "[PASS]" if passed else "[FAIL]"
|
|
164
|
-
print(f"{status}: Quality gate '{args.gate}'")
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
def security_audit(args):
|
|
168
|
-
"""Record security audit result"""
|
|
169
|
-
state = load_state()
|
|
170
|
-
|
|
171
|
-
if not state.get('currentTask'):
|
|
172
|
-
print("Error: No active task", file=sys.stderr)
|
|
173
|
-
sys.exit(1)
|
|
174
|
-
|
|
175
|
-
state['currentTask']['securityAudit'] = {
|
|
176
|
-
'executed': True,
|
|
177
|
-
'executedAt': datetime.now().isoformat(),
|
|
178
|
-
'result': args.result,
|
|
179
|
-
'vulnerabilities': args.vulnerabilities.split(',') if args.vulnerabilities else []
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
# Update agent status
|
|
183
|
-
state['currentTask']['agents']['securityAuditor'] = {
|
|
184
|
-
'executed': True,
|
|
185
|
-
'executedAt': datetime.now().isoformat(),
|
|
186
|
-
'result': args.result
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
save_state(state)
|
|
190
|
-
status = "[APPROVED]" if args.result == 'approved' else "[VETOED]"
|
|
191
|
-
print(f"{status}: Security audit")
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
def final_validation(args):
|
|
195
|
-
"""Record final validation result"""
|
|
196
|
-
state = load_state()
|
|
197
|
-
|
|
198
|
-
if not state.get('currentTask'):
|
|
199
|
-
print("Error: No active task", file=sys.stderr)
|
|
200
|
-
sys.exit(1)
|
|
201
|
-
|
|
202
|
-
ready = args.ready_to_commit.lower() == 'true' if args.ready_to_commit else False
|
|
203
|
-
|
|
204
|
-
state['currentTask']['finalValidation'] = {
|
|
205
|
-
'executed': True,
|
|
206
|
-
'executedAt': datetime.now().isoformat(),
|
|
207
|
-
'result': args.result,
|
|
208
|
-
'violations': args.violations.split(',') if args.violations else [],
|
|
209
|
-
'readyToCommit': ready
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
# Update agent status
|
|
213
|
-
state['currentTask']['agents']['finalValidator'] = {
|
|
214
|
-
'executed': True,
|
|
215
|
-
'executedAt': datetime.now().isoformat(),
|
|
216
|
-
'result': args.result
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
save_state(state)
|
|
220
|
-
status = "[APPROVED]" if args.result == 'approved' else "[VETOED]"
|
|
221
|
-
print(f"{status}: Final validation (ready to commit: {ready})")
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
def complete_task(args):
|
|
225
|
-
"""Complete current task and archive"""
|
|
226
|
-
state = load_state()
|
|
227
|
-
|
|
228
|
-
if not state.get('currentTask'):
|
|
229
|
-
print("Error: No active task", file=sys.stderr)
|
|
230
|
-
sys.exit(1)
|
|
231
|
-
|
|
232
|
-
task = state['currentTask']
|
|
233
|
-
|
|
234
|
-
# Check if ready to commit
|
|
235
|
-
final = task.get('finalValidation', {})
|
|
236
|
-
if not final.get('readyToCommit'):
|
|
237
|
-
print("Error: Task is not ready to commit. Run final validation first.", file=sys.stderr)
|
|
238
|
-
sys.exit(1)
|
|
239
|
-
|
|
240
|
-
# Archive task
|
|
241
|
-
session = {
|
|
242
|
-
'id': task['id'],
|
|
243
|
-
'task': task,
|
|
244
|
-
'completedAt': datetime.now().isoformat(),
|
|
245
|
-
'commitHash': args.commit_hash
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
state['sessions'].append(session)
|
|
249
|
-
state['currentTask'] = None
|
|
250
|
-
|
|
251
|
-
save_state(state)
|
|
252
|
-
print(f"[OK] Task completed and archived")
|
|
253
|
-
print(f" Commit: {args.commit_hash}")
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
def show_status(args):
|
|
257
|
-
"""Show current workflow status"""
|
|
258
|
-
state = load_state()
|
|
259
|
-
|
|
260
|
-
if not state.get('currentTask'):
|
|
261
|
-
print("No active task")
|
|
262
|
-
print("Run: workflow-manager.py start-task --type <type> --description <desc>")
|
|
263
|
-
return
|
|
264
|
-
|
|
265
|
-
task = state['currentTask']
|
|
266
|
-
print(f"Current Task: {task['id']}")
|
|
267
|
-
print(f"Type: {task['type']}")
|
|
268
|
-
print(f"Description: {task['description']}")
|
|
269
|
-
print(f"Started: {task['startedAt']}")
|
|
270
|
-
print()
|
|
271
|
-
print("Agents:")
|
|
272
|
-
for name, agent_status in task['agents'].items():
|
|
273
|
-
icon = "[x]" if agent_status.get('executed') else "[ ]"
|
|
274
|
-
result = f" ({agent_status.get('result', 'pending')})" if agent_status.get('executed') else ""
|
|
275
|
-
print(f" {icon} {name}{result}")
|
|
276
|
-
print()
|
|
277
|
-
print(f"Approved files: {len(task.get('approvedFiles', []))}")
|
|
278
|
-
print(f"Modified files: {len(task.get('modifiedFiles', []))}")
|
|
279
|
-
print(f"Tests created: {len(task.get('testsCreated', []))}")
|
|
280
|
-
print(f"Docs updated: {len(task.get('docsUpdated', []))}")
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
def main():
|
|
284
|
-
parser = argparse.ArgumentParser(description='Workflow Manager')
|
|
285
|
-
subparsers = parser.add_subparsers(dest='command', help='Commands')
|
|
286
|
-
|
|
287
|
-
# start-task
|
|
288
|
-
p = subparsers.add_parser('start-task', help='Start a new task')
|
|
289
|
-
p.add_argument('--type', required=True, choices=['feature', 'fix', 'refactor', 'config', 'research'])
|
|
290
|
-
p.add_argument('--description', required=True)
|
|
291
|
-
|
|
292
|
-
# agent-executed
|
|
293
|
-
p = subparsers.add_parser('agent-executed', help='Mark agent as executed')
|
|
294
|
-
p.add_argument('--agent', required=True)
|
|
295
|
-
p.add_argument('--result', required=True, choices=['approved', 'vetoed', 'skipped'])
|
|
296
|
-
p.add_argument('--notes', default='')
|
|
297
|
-
|
|
298
|
-
# approve-files
|
|
299
|
-
p = subparsers.add_parser('approve-files', help='Approve files for modification')
|
|
300
|
-
p.add_argument('--files', nargs='+', required=True)
|
|
301
|
-
|
|
302
|
-
# quality-gate
|
|
303
|
-
p = subparsers.add_parser('quality-gate', help='Record quality gate result')
|
|
304
|
-
p.add_argument('--gate', required=True, choices=['typecheck', 'lint', 'unitTests', 'e2eTests', 'build'])
|
|
305
|
-
p.add_argument('--passed', required=True, choices=['true', 'false'])
|
|
306
|
-
p.add_argument('--errors', default='')
|
|
307
|
-
|
|
308
|
-
# security-audit
|
|
309
|
-
p = subparsers.add_parser('security-audit', help='Record security audit')
|
|
310
|
-
p.add_argument('--result', required=True, choices=['approved', 'vetoed'])
|
|
311
|
-
p.add_argument('--vulnerabilities', default='')
|
|
312
|
-
|
|
313
|
-
# final-validation
|
|
314
|
-
p = subparsers.add_parser('final-validation', help='Record final validation')
|
|
315
|
-
p.add_argument('--result', required=True, choices=['approved', 'vetoed'])
|
|
316
|
-
p.add_argument('--ready-to-commit', default='false')
|
|
317
|
-
p.add_argument('--violations', default='')
|
|
318
|
-
|
|
319
|
-
# complete-task
|
|
320
|
-
p = subparsers.add_parser('complete-task', help='Complete and archive task')
|
|
321
|
-
p.add_argument('--commit-hash', required=True)
|
|
322
|
-
|
|
323
|
-
# status
|
|
324
|
-
subparsers.add_parser('status', help='Show current status')
|
|
325
|
-
|
|
326
|
-
args = parser.parse_args()
|
|
327
|
-
|
|
328
|
-
if args.command == 'start-task':
|
|
329
|
-
start_task(args)
|
|
330
|
-
elif args.command == 'agent-executed':
|
|
331
|
-
agent_executed(args)
|
|
332
|
-
elif args.command == 'approve-files':
|
|
333
|
-
approve_files(args)
|
|
334
|
-
elif args.command == 'quality-gate':
|
|
335
|
-
quality_gate(args)
|
|
336
|
-
elif args.command == 'security-audit':
|
|
337
|
-
security_audit(args)
|
|
338
|
-
elif args.command == 'final-validation':
|
|
339
|
-
final_validation(args)
|
|
340
|
-
elif args.command == 'complete-task':
|
|
341
|
-
complete_task(args)
|
|
342
|
-
elif args.command == 'status':
|
|
343
|
-
show_status(args)
|
|
344
|
-
else:
|
|
345
|
-
parser.print_help()
|
|
346
|
-
sys.exit(1)
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
if __name__ == '__main__':
|
|
350
|
-
main()
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
-
"title": "Claude Workflow State",
|
|
4
|
-
"description": "Tracks agent workflow execution state for enforcement",
|
|
5
|
-
"type": "object",
|
|
6
|
-
"required": ["version", "currentTask", "sessions"],
|
|
7
|
-
"properties": {
|
|
8
|
-
"version": {
|
|
9
|
-
"type": "string",
|
|
10
|
-
"description": "Schema version"
|
|
11
|
-
},
|
|
12
|
-
"currentTask": {
|
|
13
|
-
"oneOf": [{ "type": "null" }, { "$ref": "#/definitions/task" }],
|
|
14
|
-
"description": "Currently active task (null if no task in progress)"
|
|
15
|
-
},
|
|
16
|
-
"sessions": {
|
|
17
|
-
"type": "array",
|
|
18
|
-
"items": { "$ref": "#/definitions/session" },
|
|
19
|
-
"description": "History of completed sessions"
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"definitions": {
|
|
23
|
-
"task": {
|
|
24
|
-
"type": "object",
|
|
25
|
-
"required": [
|
|
26
|
-
"id",
|
|
27
|
-
"type",
|
|
28
|
-
"description",
|
|
29
|
-
"startedAt",
|
|
30
|
-
"agents",
|
|
31
|
-
"approvedFiles",
|
|
32
|
-
"modifiedFiles"
|
|
33
|
-
],
|
|
34
|
-
"properties": {
|
|
35
|
-
"id": {
|
|
36
|
-
"type": "string",
|
|
37
|
-
"description": "Unique task ID (timestamp-based)"
|
|
38
|
-
},
|
|
39
|
-
"type": {
|
|
40
|
-
"type": "string",
|
|
41
|
-
"enum": ["feature", "fix", "refactor", "config", "research"],
|
|
42
|
-
"description": "Task classification"
|
|
43
|
-
},
|
|
44
|
-
"description": {
|
|
45
|
-
"type": "string",
|
|
46
|
-
"description": "Task description from user"
|
|
47
|
-
},
|
|
48
|
-
"startedAt": {
|
|
49
|
-
"type": "string",
|
|
50
|
-
"format": "date-time",
|
|
51
|
-
"description": "When task started"
|
|
52
|
-
},
|
|
53
|
-
"agents": {
|
|
54
|
-
"$ref": "#/definitions/agentExecution",
|
|
55
|
-
"description": "Track which agents have executed"
|
|
56
|
-
},
|
|
57
|
-
"approvedFiles": {
|
|
58
|
-
"type": "array",
|
|
59
|
-
"items": { "type": "string" },
|
|
60
|
-
"description": "Files approved for modification by analyzer"
|
|
61
|
-
},
|
|
62
|
-
"modifiedFiles": {
|
|
63
|
-
"type": "array",
|
|
64
|
-
"items": { "$ref": "#/definitions/fileModification" },
|
|
65
|
-
"description": "Files actually modified"
|
|
66
|
-
},
|
|
67
|
-
"testsCreated": {
|
|
68
|
-
"type": "array",
|
|
69
|
-
"items": { "type": "string" },
|
|
70
|
-
"description": "Test files created"
|
|
71
|
-
},
|
|
72
|
-
"docsUpdated": {
|
|
73
|
-
"type": "array",
|
|
74
|
-
"items": { "type": "string" },
|
|
75
|
-
"description": "Documentation files updated"
|
|
76
|
-
},
|
|
77
|
-
"qualityGates": {
|
|
78
|
-
"$ref": "#/definitions/qualityGates",
|
|
79
|
-
"description": "Quality gate results"
|
|
80
|
-
},
|
|
81
|
-
"securityAudit": {
|
|
82
|
-
"$ref": "#/definitions/securityAudit",
|
|
83
|
-
"description": "Security audit result"
|
|
84
|
-
},
|
|
85
|
-
"finalValidation": {
|
|
86
|
-
"$ref": "#/definitions/finalValidation",
|
|
87
|
-
"description": "Final validation result"
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
"agentExecution": {
|
|
92
|
-
"type": "object",
|
|
93
|
-
"properties": {
|
|
94
|
-
"orchestrator": { "$ref": "#/definitions/agentStatus" },
|
|
95
|
-
"analyzer": { "$ref": "#/definitions/agentStatus" },
|
|
96
|
-
"uiUxReviewer": { "$ref": "#/definitions/agentStatus" },
|
|
97
|
-
"documenter": { "$ref": "#/definitions/agentStatus" },
|
|
98
|
-
"tester": { "$ref": "#/definitions/agentStatus" },
|
|
99
|
-
"securityAuditor": { "$ref": "#/definitions/agentStatus" },
|
|
100
|
-
"qualityChecker": { "$ref": "#/definitions/agentStatus" },
|
|
101
|
-
"finalValidator": { "$ref": "#/definitions/agentStatus" },
|
|
102
|
-
"commitManager": { "$ref": "#/definitions/agentStatus" }
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
"agentStatus": {
|
|
106
|
-
"type": "object",
|
|
107
|
-
"required": ["executed"],
|
|
108
|
-
"properties": {
|
|
109
|
-
"executed": {
|
|
110
|
-
"type": "boolean",
|
|
111
|
-
"description": "Whether this agent has executed"
|
|
112
|
-
},
|
|
113
|
-
"executedAt": {
|
|
114
|
-
"type": "string",
|
|
115
|
-
"format": "date-time",
|
|
116
|
-
"description": "When executed"
|
|
117
|
-
},
|
|
118
|
-
"result": {
|
|
119
|
-
"type": "string",
|
|
120
|
-
"enum": ["pending", "approved", "vetoed", "skipped"],
|
|
121
|
-
"description": "Agent result"
|
|
122
|
-
},
|
|
123
|
-
"notes": {
|
|
124
|
-
"type": "string",
|
|
125
|
-
"description": "Any notes from execution"
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
"fileModification": {
|
|
130
|
-
"type": "object",
|
|
131
|
-
"required": ["path", "action", "timestamp"],
|
|
132
|
-
"properties": {
|
|
133
|
-
"path": {
|
|
134
|
-
"type": "string",
|
|
135
|
-
"description": "File path"
|
|
136
|
-
},
|
|
137
|
-
"action": {
|
|
138
|
-
"type": "string",
|
|
139
|
-
"enum": ["created", "modified", "deleted"],
|
|
140
|
-
"description": "Type of modification"
|
|
141
|
-
},
|
|
142
|
-
"timestamp": {
|
|
143
|
-
"type": "string",
|
|
144
|
-
"format": "date-time"
|
|
145
|
-
},
|
|
146
|
-
"approved": {
|
|
147
|
-
"type": "boolean",
|
|
148
|
-
"description": "Was this file in approvedFiles list?"
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
},
|
|
152
|
-
"qualityGates": {
|
|
153
|
-
"type": "object",
|
|
154
|
-
"properties": {
|
|
155
|
-
"typecheck": { "$ref": "#/definitions/gateResult" },
|
|
156
|
-
"lint": { "$ref": "#/definitions/gateResult" },
|
|
157
|
-
"unitTests": { "$ref": "#/definitions/gateResult" },
|
|
158
|
-
"e2eTests": { "$ref": "#/definitions/gateResult" },
|
|
159
|
-
"build": { "$ref": "#/definitions/gateResult" }
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
"gateResult": {
|
|
163
|
-
"type": "object",
|
|
164
|
-
"properties": {
|
|
165
|
-
"passed": { "type": "boolean" },
|
|
166
|
-
"executedAt": { "type": "string", "format": "date-time" },
|
|
167
|
-
"errors": { "type": "array", "items": { "type": "string" } }
|
|
168
|
-
}
|
|
169
|
-
},
|
|
170
|
-
"securityAudit": {
|
|
171
|
-
"type": "object",
|
|
172
|
-
"properties": {
|
|
173
|
-
"executed": { "type": "boolean" },
|
|
174
|
-
"executedAt": { "type": "string", "format": "date-time" },
|
|
175
|
-
"result": { "type": "string", "enum": ["approved", "vetoed"] },
|
|
176
|
-
"vulnerabilities": { "type": "array", "items": { "type": "string" } }
|
|
177
|
-
}
|
|
178
|
-
},
|
|
179
|
-
"finalValidation": {
|
|
180
|
-
"type": "object",
|
|
181
|
-
"properties": {
|
|
182
|
-
"executed": { "type": "boolean" },
|
|
183
|
-
"executedAt": { "type": "string", "format": "date-time" },
|
|
184
|
-
"result": { "type": "string", "enum": ["approved", "vetoed"] },
|
|
185
|
-
"violations": { "type": "array", "items": { "type": "string" } },
|
|
186
|
-
"readyToCommit": { "type": "boolean" }
|
|
187
|
-
}
|
|
188
|
-
},
|
|
189
|
-
"session": {
|
|
190
|
-
"type": "object",
|
|
191
|
-
"required": ["id", "task", "completedAt", "commitHash"],
|
|
192
|
-
"properties": {
|
|
193
|
-
"id": { "type": "string" },
|
|
194
|
-
"task": { "$ref": "#/definitions/task" },
|
|
195
|
-
"completedAt": { "type": "string", "format": "date-time" },
|
|
196
|
-
"commitHash": { "type": "string" }
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|