create-genia-os 2.4.0 → 3.0.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.
- package/bin/index.js +332 -332
- package/package.json +42 -42
- package/template/.aiox-core/constitution.md +171 -0
- package/template/.aiox-core/core-config.yaml +388 -0
- package/template/.aiox-core/development/README.md +142 -0
- package/template/.aiox-core/development/agent-teams/team-all.yaml +15 -0
- package/template/.aiox-core/development/agent-teams/team-fullstack.yaml +18 -0
- package/template/.aiox-core/development/agent-teams/team-ide-minimal.yaml +10 -0
- package/template/.aiox-core/development/agent-teams/team-no-ui.yaml +13 -0
- package/template/.aiox-core/development/agent-teams/team-qa-focused.yaml +155 -0
- package/template/.aiox-core/development/agents/aiox-master.md +463 -0
- package/template/.aiox-core/development/agents/analyst/MEMORY.md +33 -0
- package/template/.aiox-core/development/agents/analyst.md +271 -0
- package/template/.aiox-core/development/agents/architect/MEMORY.md +39 -0
- package/template/.aiox-core/development/agents/architect.md +472 -0
- package/template/.aiox-core/development/agents/data-engineer/MEMORY.md +32 -0
- package/template/.aiox-core/development/agents/data-engineer.md +493 -0
- package/template/.aiox-core/development/agents/dev/MEMORY.md +46 -0
- package/template/.aiox-core/development/agents/dev.md +558 -0
- package/template/.aiox-core/development/agents/devops/MEMORY.md +39 -0
- package/template/.aiox-core/development/agents/devops.md +537 -0
- package/template/.aiox-core/development/agents/pm/MEMORY.md +38 -0
- package/template/.aiox-core/development/agents/pm.md +375 -0
- package/template/.aiox-core/development/agents/po/MEMORY.md +45 -0
- package/template/.aiox-core/development/agents/po.md +333 -0
- package/template/.aiox-core/development/agents/qa/MEMORY.md +42 -0
- package/template/.aiox-core/development/agents/qa.md +447 -0
- package/template/.aiox-core/development/agents/sm/MEMORY.md +31 -0
- package/template/.aiox-core/development/agents/sm.md +285 -0
- package/template/.aiox-core/development/agents/squad-creator.md +342 -0
- package/template/.aiox-core/development/agents/ux/MEMORY.md +31 -0
- package/template/.aiox-core/development/agents/ux-design-expert.md +493 -0
- package/template/.aiox-core/development/checklists/agent-quality-gate.md +559 -0
- package/template/.aiox-core/development/checklists/brownfield-compatibility-checklist.md +114 -0
- package/template/.aiox-core/development/checklists/issue-triage-checklist.md +35 -0
- package/template/.aiox-core/development/checklists/memory-audit-checklist.md +53 -0
- package/template/.aiox-core/development/checklists/self-critique-checklist.md +273 -0
- package/template/.aiox-core/development/data/decision-heuristics-framework.md +621 -0
- package/template/.aiox-core/development/data/quality-dimensions-framework.md +426 -0
- package/template/.aiox-core/development/data/tier-system-framework.md +475 -0
- package/template/.aiox-core/development/scripts/activation-runtime.js +63 -0
- package/template/.aiox-core/development/scripts/agent-assignment-resolver.js +231 -0
- package/template/.aiox-core/development/scripts/agent-config-loader.js +626 -0
- package/template/.aiox-core/development/scripts/agent-exit-hooks.js +96 -0
- package/template/.aiox-core/development/scripts/apply-inline-greeting-all-agents.js +146 -0
- package/template/.aiox-core/development/scripts/approval-workflow.js +643 -0
- package/template/.aiox-core/development/scripts/audit-agent-config.js +380 -0
- package/template/.aiox-core/development/scripts/backlog-manager.js +407 -0
- package/template/.aiox-core/development/scripts/backup-manager.js +607 -0
- package/template/.aiox-core/development/scripts/batch-update-agents-session-context.js +95 -0
- package/template/.aiox-core/development/scripts/branch-manager.js +390 -0
- package/template/.aiox-core/development/scripts/code-quality-improver.js +1329 -0
- package/template/.aiox-core/development/scripts/commit-message-generator.js +850 -0
- package/template/.aiox-core/development/scripts/conflict-resolver.js +675 -0
- package/template/.aiox-core/development/scripts/decision-context.js +228 -0
- package/template/.aiox-core/development/scripts/decision-log-generator.js +293 -0
- package/template/.aiox-core/development/scripts/decision-log-indexer.js +284 -0
- package/template/.aiox-core/development/scripts/decision-recorder.js +168 -0
- package/template/.aiox-core/development/scripts/dependency-analyzer.js +638 -0
- package/template/.aiox-core/development/scripts/dev-context-loader.js +296 -0
- package/template/.aiox-core/development/scripts/diff-generator.js +352 -0
- package/template/.aiox-core/development/scripts/elicitation-engine.js +385 -0
- package/template/.aiox-core/development/scripts/elicitation-session-manager.js +300 -0
- package/template/.aiox-core/development/scripts/generate-greeting.js +109 -0
- package/template/.aiox-core/development/scripts/git-wrapper.js +462 -0
- package/template/.aiox-core/development/scripts/greeting-builder.js +1404 -0
- package/template/.aiox-core/development/scripts/greeting-config-cli.js +85 -0
- package/template/.aiox-core/development/scripts/greeting-preference-manager.js +169 -0
- package/template/.aiox-core/development/scripts/issue-triage.js +171 -0
- package/template/.aiox-core/development/scripts/manifest-preview.js +245 -0
- package/template/.aiox-core/development/scripts/metrics-tracker.js +776 -0
- package/template/.aiox-core/development/scripts/migrate-task-to-v2.js +377 -0
- package/template/.aiox-core/development/scripts/modification-validator.js +555 -0
- package/template/.aiox-core/development/scripts/pattern-learner.js +1225 -0
- package/template/.aiox-core/development/scripts/performance-analyzer.js +758 -0
- package/template/.aiox-core/development/scripts/populate-entity-registry.js +673 -0
- package/template/.aiox-core/development/scripts/refactoring-suggester.js +1148 -0
- package/template/.aiox-core/development/scripts/rollback-handler.js +531 -0
- package/template/.aiox-core/development/scripts/security-checker.js +359 -0
- package/template/.aiox-core/development/scripts/skill-validator.js +341 -0
- package/template/.aiox-core/development/scripts/squad/README.md +112 -0
- package/template/.aiox-core/development/scripts/squad/index.js +123 -0
- package/template/.aiox-core/development/scripts/squad/squad-analyzer.js +637 -0
- package/template/.aiox-core/development/scripts/squad/squad-designer.js +1010 -0
- package/template/.aiox-core/development/scripts/squad/squad-downloader.js +510 -0
- package/template/.aiox-core/development/scripts/squad/squad-extender.js +871 -0
- package/template/.aiox-core/development/scripts/squad/squad-generator.js +1405 -0
- package/template/.aiox-core/development/scripts/squad/squad-loader.js +359 -0
- package/template/.aiox-core/development/scripts/squad/squad-migrator.js +627 -0
- package/template/.aiox-core/development/scripts/squad/squad-publisher.js +629 -0
- package/template/.aiox-core/development/scripts/squad/squad-validator.js +855 -0
- package/template/.aiox-core/development/scripts/story-index-generator.js +337 -0
- package/template/.aiox-core/development/scripts/story-manager.js +375 -0
- package/template/.aiox-core/development/scripts/story-update-hook.js +259 -0
- package/template/.aiox-core/development/scripts/task-identifier-resolver.js +145 -0
- package/template/.aiox-core/development/scripts/template-engine.js +240 -0
- package/template/.aiox-core/development/scripts/template-validator.js +279 -0
- package/template/.aiox-core/development/scripts/test-generator.js +844 -0
- package/template/.aiox-core/development/scripts/test-greeting-system.js +142 -0
- package/template/.aiox-core/development/scripts/transaction-manager.js +590 -0
- package/template/.aiox-core/development/scripts/unified-activation-pipeline.js +815 -0
- package/template/.aiox-core/development/scripts/usage-tracker.js +674 -0
- package/template/.aiox-core/development/scripts/validate-filenames.js +226 -0
- package/template/.aiox-core/development/scripts/validate-task-v2.js +319 -0
- package/template/.aiox-core/development/scripts/verify-workflow-gaps.js +1032 -0
- package/template/.aiox-core/development/scripts/version-tracker.js +527 -0
- package/template/.aiox-core/development/scripts/workflow-navigator.js +327 -0
- package/template/.aiox-core/development/scripts/workflow-state-manager.js +650 -0
- package/template/.aiox-core/development/scripts/workflow-validator.js +769 -0
- package/template/.aiox-core/development/scripts/yaml-validator.js +397 -0
- package/template/.aiox-core/development/tasks/add-mcp.md +436 -0
- package/template/.aiox-core/development/tasks/advanced-elicitation.md +319 -0
- package/template/.aiox-core/development/tasks/analyst-facilitate-brainstorming.md +342 -0
- package/template/.aiox-core/development/tasks/analyze-brownfield.md +456 -0
- package/template/.aiox-core/development/tasks/analyze-cross-artifact.md +357 -0
- package/template/.aiox-core/development/tasks/analyze-framework.md +697 -0
- package/template/.aiox-core/development/tasks/analyze-performance.md +637 -0
- package/template/.aiox-core/development/tasks/analyze-project-structure.md +669 -0
- package/template/.aiox-core/development/tasks/apply-qa-fixes.md +347 -0
- package/template/.aiox-core/development/tasks/architect-analyze-impact.md +834 -0
- package/template/.aiox-core/development/tasks/audit-codebase.md +429 -0
- package/template/.aiox-core/development/tasks/audit-tailwind-config.md +270 -0
- package/template/.aiox-core/development/tasks/audit-utilities.md +358 -0
- package/template/.aiox-core/development/tasks/blocks/README.md +178 -0
- package/template/.aiox-core/development/tasks/blocks/agent-prompt-template.md +115 -0
- package/template/.aiox-core/development/tasks/blocks/context-loading.md +108 -0
- package/template/.aiox-core/development/tasks/blocks/execution-pattern.md +121 -0
- package/template/.aiox-core/development/tasks/blocks/finalization.md +123 -0
- package/template/.aiox-core/development/tasks/bootstrap-shadcn-library.md +286 -0
- package/template/.aiox-core/development/tasks/brownfield-create-epic.md +573 -0
- package/template/.aiox-core/development/tasks/brownfield-create-story.md +364 -0
- package/template/.aiox-core/development/tasks/build-autonomous.md +199 -0
- package/template/.aiox-core/development/tasks/build-component.md +478 -0
- package/template/.aiox-core/development/tasks/build-resume.md +125 -0
- package/template/.aiox-core/development/tasks/build-status.md +155 -0
- package/template/.aiox-core/development/tasks/build.md +141 -0
- package/template/.aiox-core/development/tasks/calculate-roi.md +455 -0
- package/template/.aiox-core/development/tasks/check-docs-links.md +114 -0
- package/template/.aiox-core/development/tasks/ci-cd-configuration.md +764 -0
- package/template/.aiox-core/development/tasks/cleanup-utilities.md +670 -0
- package/template/.aiox-core/development/tasks/cleanup-worktrees.md +39 -0
- package/template/.aiox-core/development/tasks/collaborative-edit.md +1109 -0
- package/template/.aiox-core/development/tasks/compose-molecule.md +284 -0
- package/template/.aiox-core/development/tasks/consolidate-patterns.md +414 -0
- package/template/.aiox-core/development/tasks/correct-course.md +280 -0
- package/template/.aiox-core/development/tasks/create-agent.md +1198 -0
- package/template/.aiox-core/development/tasks/create-brownfield-story.md +727 -0
- package/template/.aiox-core/development/tasks/create-deep-research-prompt.md +506 -0
- package/template/.aiox-core/development/tasks/create-doc.md +360 -0
- package/template/.aiox-core/development/tasks/create-next-story.md +791 -0
- package/template/.aiox-core/development/tasks/create-service.md +414 -0
- package/template/.aiox-core/development/tasks/create-suite.md +291 -0
- package/template/.aiox-core/development/tasks/create-task.md +390 -0
- package/template/.aiox-core/development/tasks/create-workflow.md +430 -0
- package/template/.aiox-core/development/tasks/create-worktree.md +437 -0
- package/template/.aiox-core/development/tasks/db-analyze-hotpaths.md +572 -0
- package/template/.aiox-core/development/tasks/db-apply-migration.md +381 -0
- package/template/.aiox-core/development/tasks/db-bootstrap.md +642 -0
- package/template/.aiox-core/development/tasks/db-domain-modeling.md +693 -0
- package/template/.aiox-core/development/tasks/db-dry-run.md +293 -0
- package/template/.aiox-core/development/tasks/db-env-check.md +260 -0
- package/template/.aiox-core/development/tasks/db-explain.md +631 -0
- package/template/.aiox-core/development/tasks/db-impersonate.md +495 -0
- package/template/.aiox-core/development/tasks/db-load-csv.md +593 -0
- package/template/.aiox-core/development/tasks/db-policy-apply.md +653 -0
- package/template/.aiox-core/development/tasks/db-rls-audit.md +411 -0
- package/template/.aiox-core/development/tasks/db-rollback.md +739 -0
- package/template/.aiox-core/development/tasks/db-run-sql.md +613 -0
- package/template/.aiox-core/development/tasks/db-schema-audit.md +1011 -0
- package/template/.aiox-core/development/tasks/db-seed.md +390 -0
- package/template/.aiox-core/development/tasks/db-smoke-test.md +351 -0
- package/template/.aiox-core/development/tasks/db-snapshot.md +569 -0
- package/template/.aiox-core/development/tasks/db-squad-integration.md +663 -0
- package/template/.aiox-core/development/tasks/db-supabase-setup.md +712 -0
- package/template/.aiox-core/development/tasks/db-verify-order.md +515 -0
- package/template/.aiox-core/development/tasks/deprecate-component.md +957 -0
- package/template/.aiox-core/development/tasks/dev-apply-qa-fixes.md +318 -0
- package/template/.aiox-core/development/tasks/dev-backlog-debt.md +469 -0
- package/template/.aiox-core/development/tasks/dev-develop-story.md +924 -0
- package/template/.aiox-core/development/tasks/dev-improve-code-quality.md +873 -0
- package/template/.aiox-core/development/tasks/dev-optimize-performance.md +1034 -0
- package/template/.aiox-core/development/tasks/dev-suggest-refactoring.md +877 -0
- package/template/.aiox-core/development/tasks/dev-validate-next-story.md +349 -0
- package/template/.aiox-core/development/tasks/document-gotchas.md +477 -0
- package/template/.aiox-core/development/tasks/document-project.md +553 -0
- package/template/.aiox-core/development/tasks/environment-bootstrap.md +1389 -0
- package/template/.aiox-core/development/tasks/execute-checklist.md +308 -0
- package/template/.aiox-core/development/tasks/execute-epic-plan.md +885 -0
- package/template/.aiox-core/development/tasks/export-design-tokens-dtcg.md +274 -0
- package/template/.aiox-core/development/tasks/extend-pattern.md +269 -0
- package/template/.aiox-core/development/tasks/extract-patterns.md +397 -0
- package/template/.aiox-core/development/tasks/extract-tokens.md +467 -0
- package/template/.aiox-core/development/tasks/facilitate-brainstorming-session.md +518 -0
- package/template/.aiox-core/development/tasks/generate-ai-frontend-prompt.md +261 -0
- package/template/.aiox-core/development/tasks/generate-documentation.md +284 -0
- package/template/.aiox-core/development/tasks/generate-migration-strategy.md +522 -0
- package/template/.aiox-core/development/tasks/generate-shock-report.md +501 -0
- package/template/.aiox-core/development/tasks/github-devops-github-pr-automation.md +720 -0
- package/template/.aiox-core/development/tasks/github-devops-pre-push-quality-gate.md +860 -0
- package/template/.aiox-core/development/tasks/github-devops-repository-cleanup.md +374 -0
- package/template/.aiox-core/development/tasks/github-devops-version-management.md +483 -0
- package/template/.aiox-core/development/tasks/github-issue-triage.md +118 -0
- package/template/.aiox-core/development/tasks/gotcha.md +136 -0
- package/template/.aiox-core/development/tasks/gotchas.md +153 -0
- package/template/.aiox-core/development/tasks/health-check.yaml +265 -0
- package/template/.aiox-core/development/tasks/ids-governor.md +94 -0
- package/template/.aiox-core/development/tasks/ids-health.md +89 -0
- package/template/.aiox-core/development/tasks/ids-query.md +154 -0
- package/template/.aiox-core/development/tasks/improve-self.md +823 -0
- package/template/.aiox-core/development/tasks/index-docs.md +388 -0
- package/template/.aiox-core/development/tasks/init-project-status.md +506 -0
- package/template/.aiox-core/development/tasks/integrate-squad.md +314 -0
- package/template/.aiox-core/development/tasks/kb-mode-interaction.md +284 -0
- package/template/.aiox-core/development/tasks/learn-patterns.md +901 -0
- package/template/.aiox-core/development/tasks/list-mcps.md +33 -0
- package/template/.aiox-core/development/tasks/list-worktrees.md +342 -0
- package/template/.aiox-core/development/tasks/mcp-workflow.md +437 -0
- package/template/.aiox-core/development/tasks/merge-worktree.md +42 -0
- package/template/.aiox-core/development/tasks/modify-agent.md +398 -0
- package/template/.aiox-core/development/tasks/modify-task.md +441 -0
- package/template/.aiox-core/development/tasks/modify-workflow.md +510 -0
- package/template/.aiox-core/development/tasks/next.md +325 -0
- package/template/.aiox-core/development/tasks/orchestrate-resume.md +59 -0
- package/template/.aiox-core/development/tasks/orchestrate-status.md +63 -0
- package/template/.aiox-core/development/tasks/orchestrate-stop.md +54 -0
- package/template/.aiox-core/development/tasks/orchestrate.md +65 -0
- package/template/.aiox-core/development/tasks/patterns.md +334 -0
- package/template/.aiox-core/development/tasks/plan-create-context.md +856 -0
- package/template/.aiox-core/development/tasks/plan-create-implementation.md +852 -0
- package/template/.aiox-core/development/tasks/plan-execute-subtask.md +960 -0
- package/template/.aiox-core/development/tasks/po-backlog-add.md +370 -0
- package/template/.aiox-core/development/tasks/po-close-story.md +434 -0
- package/template/.aiox-core/development/tasks/po-manage-story-backlog.md +523 -0
- package/template/.aiox-core/development/tasks/po-pull-story-from-clickup.md +540 -0
- package/template/.aiox-core/development/tasks/po-pull-story.md +316 -0
- package/template/.aiox-core/development/tasks/po-stories-index.md +351 -0
- package/template/.aiox-core/development/tasks/po-sync-story-to-clickup.md +457 -0
- package/template/.aiox-core/development/tasks/po-sync-story.md +303 -0
- package/template/.aiox-core/development/tasks/pr-automation.md +701 -0
- package/template/.aiox-core/development/tasks/project-status.md +280 -0
- package/template/.aiox-core/development/tasks/propose-modification.md +843 -0
- package/template/.aiox-core/development/tasks/publish-npm.md +257 -0
- package/template/.aiox-core/development/tasks/qa-after-creation.md +519 -0
- package/template/.aiox-core/development/tasks/qa-backlog-add-followup.md +425 -0
- package/template/.aiox-core/development/tasks/qa-browser-console-check.md +343 -0
- package/template/.aiox-core/development/tasks/qa-create-fix-request.md +630 -0
- package/template/.aiox-core/development/tasks/qa-evidence-requirements.md +314 -0
- package/template/.aiox-core/development/tasks/qa-false-positive-detection.md +374 -0
- package/template/.aiox-core/development/tasks/qa-fix-issues.md +692 -0
- package/template/.aiox-core/development/tasks/qa-gate.md +430 -0
- package/template/.aiox-core/development/tasks/qa-generate-tests.md +1175 -0
- package/template/.aiox-core/development/tasks/qa-library-validation.md +496 -0
- package/template/.aiox-core/development/tasks/qa-migration-validation.md +583 -0
- package/template/.aiox-core/development/tasks/qa-nfr-assess.md +558 -0
- package/template/.aiox-core/development/tasks/qa-review-build.md +1224 -0
- package/template/.aiox-core/development/tasks/qa-review-proposal.md +1158 -0
- package/template/.aiox-core/development/tasks/qa-review-story.md +714 -0
- package/template/.aiox-core/development/tasks/qa-risk-profile.md +567 -0
- package/template/.aiox-core/development/tasks/qa-run-tests.md +277 -0
- package/template/.aiox-core/development/tasks/qa-security-checklist.md +551 -0
- package/template/.aiox-core/development/tasks/qa-test-design.md +388 -0
- package/template/.aiox-core/development/tasks/qa-trace-requirements.md +477 -0
- package/template/.aiox-core/development/tasks/release-management.md +759 -0
- package/template/.aiox-core/development/tasks/remove-mcp.md +35 -0
- package/template/.aiox-core/development/tasks/remove-worktree.md +433 -0
- package/template/.aiox-core/development/tasks/resolve-github-issue.md +608 -0
- package/template/.aiox-core/development/tasks/review-contributor-pr.md +152 -0
- package/template/.aiox-core/development/tasks/run-design-system-pipeline.md +640 -0
- package/template/.aiox-core/development/tasks/run-workflow-engine.md +859 -0
- package/template/.aiox-core/development/tasks/run-workflow.md +387 -0
- package/template/.aiox-core/development/tasks/search-mcp.md +309 -0
- package/template/.aiox-core/development/tasks/security-audit.md +554 -0
- package/template/.aiox-core/development/tasks/security-scan.md +790 -0
- package/template/.aiox-core/development/tasks/session-resume.md +192 -0
- package/template/.aiox-core/development/tasks/setup-database.md +741 -0
- package/template/.aiox-core/development/tasks/setup-design-system.md +462 -0
- package/template/.aiox-core/development/tasks/setup-github.md +874 -0
- package/template/.aiox-core/development/tasks/setup-llm-routing.md +229 -0
- package/template/.aiox-core/development/tasks/setup-mcp-docker.md +627 -0
- package/template/.aiox-core/development/tasks/setup-project-docs.md +440 -0
- package/template/.aiox-core/development/tasks/shard-doc.md +538 -0
- package/template/.aiox-core/development/tasks/sm-create-next-story.md +480 -0
- package/template/.aiox-core/development/tasks/spec-assess-complexity.md +461 -0
- package/template/.aiox-core/development/tasks/spec-critique.md +603 -0
- package/template/.aiox-core/development/tasks/spec-gather-requirements.md +552 -0
- package/template/.aiox-core/development/tasks/spec-research-dependencies.md +449 -0
- package/template/.aiox-core/development/tasks/spec-write-spec.md +536 -0
- package/template/.aiox-core/development/tasks/squad-creator-analyze.md +315 -0
- package/template/.aiox-core/development/tasks/squad-creator-create.md +312 -0
- package/template/.aiox-core/development/tasks/squad-creator-design.md +334 -0
- package/template/.aiox-core/development/tasks/squad-creator-download.md +167 -0
- package/template/.aiox-core/development/tasks/squad-creator-extend.md +411 -0
- package/template/.aiox-core/development/tasks/squad-creator-list.md +225 -0
- package/template/.aiox-core/development/tasks/squad-creator-migrate.md +243 -0
- package/template/.aiox-core/development/tasks/squad-creator-publish.md +229 -0
- package/template/.aiox-core/development/tasks/squad-creator-sync-ide-command.md +402 -0
- package/template/.aiox-core/development/tasks/squad-creator-sync-synkra.md +315 -0
- package/template/.aiox-core/development/tasks/squad-creator-validate.md +159 -0
- package/template/.aiox-core/development/tasks/story-checkpoint.md +360 -0
- package/template/.aiox-core/development/tasks/sync-documentation.md +865 -0
- package/template/.aiox-core/development/tasks/sync-registry-intel.md +79 -0
- package/template/.aiox-core/development/tasks/tailwind-upgrade.md +294 -0
- package/template/.aiox-core/development/tasks/test-as-user.md +621 -0
- package/template/.aiox-core/development/tasks/test-validation-task.md +171 -0
- package/template/.aiox-core/development/tasks/triage-github-issues.md +356 -0
- package/template/.aiox-core/development/tasks/undo-last.md +347 -0
- package/template/.aiox-core/development/tasks/update-aiox.md +151 -0
- package/template/.aiox-core/development/tasks/update-manifest.md +410 -0
- package/template/.aiox-core/development/tasks/update-source-tree.md +137 -0
- package/template/.aiox-core/development/tasks/ux-create-wireframe.md +617 -0
- package/template/.aiox-core/development/tasks/ux-ds-scan-artifact.md +672 -0
- package/template/.aiox-core/development/tasks/ux-user-research.md +559 -0
- package/template/.aiox-core/development/tasks/validate-agents.md +119 -0
- package/template/.aiox-core/development/tasks/validate-next-story.md +472 -0
- package/template/.aiox-core/development/tasks/validate-tech-preset.md +186 -0
- package/template/.aiox-core/development/tasks/validate-workflow.md +321 -0
- package/template/.aiox-core/development/tasks/verify-subtask.md +235 -0
- package/template/.aiox-core/development/tasks/waves.md +205 -0
- package/template/.aiox-core/development/tasks/yolo-toggle.md +113 -0
- package/template/.aiox-core/development/templates/agent-handoff-tmpl.yaml +48 -0
- package/template/.aiox-core/development/templates/aiox-doc-template.md +494 -0
- package/template/.aiox-core/development/templates/code-intel-integration-pattern.md +199 -0
- package/template/.aiox-core/development/templates/ptc-entity-validation.md +113 -0
- package/template/.aiox-core/development/templates/ptc-qa-gate.md +100 -0
- package/template/.aiox-core/development/templates/ptc-research-aggregation.md +94 -0
- package/template/.aiox-core/development/templates/research-prompt-tmpl.md +486 -0
- package/template/.aiox-core/development/templates/service-template/README.md.hbs +158 -0
- package/template/.aiox-core/development/templates/service-template/__tests__/index.test.ts.hbs +237 -0
- package/template/.aiox-core/development/templates/service-template/client.ts.hbs +403 -0
- package/template/.aiox-core/development/templates/service-template/errors.ts.hbs +182 -0
- package/template/.aiox-core/development/templates/service-template/index.ts.hbs +120 -0
- package/template/.aiox-core/development/templates/service-template/jest.config.js +89 -0
- package/template/.aiox-core/development/templates/service-template/package.json.hbs +87 -0
- package/template/.aiox-core/development/templates/service-template/tsconfig.json +45 -0
- package/template/.aiox-core/development/templates/service-template/types.ts.hbs +145 -0
- package/template/.aiox-core/development/templates/squad/agent-template.md +80 -0
- package/template/.aiox-core/development/templates/squad/checklist-template.md +82 -0
- package/template/.aiox-core/development/templates/squad/data-template.yaml +105 -0
- package/template/.aiox-core/development/templates/squad/script-template.js +179 -0
- package/template/.aiox-core/development/templates/squad/task-template.md +146 -0
- package/template/.aiox-core/development/templates/squad/template-template.md +97 -0
- package/template/.aiox-core/development/templates/squad/tool-template.js +103 -0
- package/template/.aiox-core/development/templates/squad/workflow-template.yaml +123 -0
- package/template/.aiox-core/development/templates/squad-template/LICENSE +21 -0
- package/template/.aiox-core/development/templates/squad-template/README.md +37 -0
- package/template/.aiox-core/development/templates/squad-template/agents/example-agent.yaml +36 -0
- package/template/.aiox-core/development/templates/squad-template/package.json +19 -0
- package/template/.aiox-core/development/templates/squad-template/squad.yaml +25 -0
- package/template/.aiox-core/development/templates/squad-template/tasks/example-task.yaml +46 -0
- package/template/.aiox-core/development/templates/squad-template/templates/example-template.md +24 -0
- package/template/.aiox-core/development/templates/squad-template/tests/example-agent.test.js +53 -0
- package/template/.aiox-core/development/templates/squad-template/workflows/example-workflow.yaml +75 -0
- package/template/.aiox-core/development/templates/subagent-step-prompt.md +120 -0
- package/template/.aiox-core/development/workflows/README.md +88 -0
- package/template/.aiox-core/development/workflows/auto-worktree.yaml +421 -0
- package/template/.aiox-core/development/workflows/brownfield-discovery.yaml +932 -0
- package/template/.aiox-core/development/workflows/brownfield-fullstack.yaml +367 -0
- package/template/.aiox-core/development/workflows/brownfield-service.yaml +244 -0
- package/template/.aiox-core/development/workflows/brownfield-ui.yaml +258 -0
- package/template/.aiox-core/development/workflows/design-system-build-quality.yaml +227 -0
- package/template/.aiox-core/development/workflows/development-cycle.yaml +515 -0
- package/template/.aiox-core/development/workflows/epic-orchestration.yaml +326 -0
- package/template/.aiox-core/development/workflows/greenfield-fullstack.yaml +384 -0
- package/template/.aiox-core/development/workflows/greenfield-service.yaml +276 -0
- package/template/.aiox-core/development/workflows/greenfield-ui.yaml +282 -0
- package/template/.aiox-core/development/workflows/qa-loop.yaml +443 -0
- package/template/.aiox-core/development/workflows/spec-pipeline.yaml +576 -0
- package/template/.aiox-core/development/workflows/story-development-cycle.yaml +284 -0
- package/template/.aiox-core/elicitation/agent-elicitation.js +272 -0
- package/template/.aiox-core/elicitation/task-elicitation.js +281 -0
- package/template/.aiox-core/elicitation/workflow-elicitation.js +315 -0
- package/template/.aiox-core/framework-config.yaml +158 -0
- package/template/.aiox-core/hooks/gemini/after-tool.js +77 -0
- package/template/.aiox-core/hooks/gemini/before-agent.js +79 -0
- package/template/.aiox-core/hooks/gemini/before-tool.js +114 -0
- package/template/.aiox-core/hooks/gemini/rewind-handler.js +68 -0
- package/template/.aiox-core/hooks/gemini/session-end.js +90 -0
- package/template/.aiox-core/hooks/gemini/session-start.js +90 -0
- package/template/.aiox-core/hooks/ids-post-commit.js +116 -0
- package/template/.aiox-core/hooks/ids-pre-push.js +123 -0
- package/template/.aiox-core/hooks/unified/README.md +338 -0
- package/template/.aiox-core/hooks/unified/hook-interface.js +159 -0
- package/template/.aiox-core/hooks/unified/hook-registry.js +143 -0
- package/template/.aiox-core/hooks/unified/index.js +36 -0
- package/template/.aiox-core/hooks/unified/runners/precompact-runner.js +96 -0
- package/template/.aiox-core/manifests/schema/manifest-schema.json +190 -0
- package/template/.aiox-core/presets/README.md +358 -0
- package/template/.aiox-core/product/README.md +56 -0
- package/template/.aiox-core/product/checklists/accessibility-wcag-checklist.md +80 -0
- package/template/.aiox-core/product/checklists/architect-checklist.md +444 -0
- package/template/.aiox-core/product/checklists/change-checklist.md +183 -0
- package/template/.aiox-core/product/checklists/component-quality-checklist.md +74 -0
- package/template/.aiox-core/product/checklists/database-design-checklist.md +119 -0
- package/template/.aiox-core/product/checklists/dba-predeploy-checklist.md +97 -0
- package/template/.aiox-core/product/checklists/dba-rollback-checklist.md +99 -0
- package/template/.aiox-core/product/checklists/migration-readiness-checklist.md +75 -0
- package/template/.aiox-core/product/checklists/pattern-audit-checklist.md +88 -0
- package/template/.aiox-core/product/checklists/pm-checklist.md +376 -0
- package/template/.aiox-core/product/checklists/po-master-checklist.md +442 -0
- package/template/.aiox-core/product/checklists/pre-push-checklist.md +108 -0
- package/template/.aiox-core/product/checklists/release-checklist.md +122 -0
- package/template/.aiox-core/product/checklists/self-critique-checklist.md +386 -0
- package/template/.aiox-core/product/checklists/story-dod-checklist.md +102 -0
- package/template/.aiox-core/product/checklists/story-draft-checklist.md +216 -0
- package/template/.aiox-core/product/data/atomic-design-principles.md +108 -0
- package/template/.aiox-core/product/data/brainstorming-techniques.md +37 -0
- package/template/.aiox-core/product/data/consolidation-algorithms.md +142 -0
- package/template/.aiox-core/product/data/database-best-practices.md +182 -0
- package/template/.aiox-core/product/data/design-token-best-practices.md +107 -0
- package/template/.aiox-core/product/data/elicitation-methods.md +135 -0
- package/template/.aiox-core/product/data/integration-patterns.md +207 -0
- package/template/.aiox-core/product/data/migration-safety-guide.md +329 -0
- package/template/.aiox-core/product/data/mode-selection-best-practices.md +471 -0
- package/template/.aiox-core/product/data/postgres-tuning-guide.md +300 -0
- package/template/.aiox-core/product/data/rls-security-patterns.md +333 -0
- package/template/.aiox-core/product/data/roi-calculation-guide.md +142 -0
- package/template/.aiox-core/product/data/supabase-patterns.md +330 -0
- package/template/.aiox-core/product/data/test-levels-framework.md +149 -0
- package/template/.aiox-core/product/data/test-priorities-matrix.md +175 -0
- package/template/.aiox-core/product/data/wcag-compliance-guide.md +267 -0
- package/template/.aiox-core/product/templates/activation-instructions-inline-greeting.yaml +63 -0
- package/template/.aiox-core/product/templates/activation-instructions-template.md +258 -0
- package/template/.aiox-core/product/templates/adr.hbs +125 -0
- package/template/.aiox-core/product/templates/agent-template.yaml +121 -0
- package/template/.aiox-core/product/templates/aiox-ai-config.yaml +106 -0
- package/template/.aiox-core/product/templates/architecture-tmpl.yaml +651 -0
- package/template/.aiox-core/product/templates/brainstorming-output-tmpl.yaml +156 -0
- package/template/.aiox-core/product/templates/brownfield-architecture-tmpl.yaml +476 -0
- package/template/.aiox-core/product/templates/brownfield-prd-tmpl.yaml +280 -0
- package/template/.aiox-core/product/templates/brownfield-risk-report-tmpl.yaml +277 -0
- package/template/.aiox-core/product/templates/changelog-template.md +134 -0
- package/template/.aiox-core/product/templates/command-rationalization-matrix.md +152 -0
- package/template/.aiox-core/product/templates/competitor-analysis-tmpl.yaml +293 -0
- package/template/.aiox-core/product/templates/component-react-tmpl.tsx +98 -0
- package/template/.aiox-core/product/templates/current-approach-tmpl.md +56 -0
- package/template/.aiox-core/product/templates/dbdr.hbs +241 -0
- package/template/.aiox-core/product/templates/design-story-tmpl.yaml +587 -0
- package/template/.aiox-core/product/templates/ds-artifact-analysis.md +70 -0
- package/template/.aiox-core/product/templates/engine/elicitation.js +297 -0
- package/template/.aiox-core/product/templates/engine/index.js +308 -0
- package/template/.aiox-core/product/templates/engine/loader.js +231 -0
- package/template/.aiox-core/product/templates/engine/renderer.js +343 -0
- package/template/.aiox-core/product/templates/engine/schemas/adr.schema.json +102 -0
- package/template/.aiox-core/product/templates/engine/schemas/dbdr.schema.json +205 -0
- package/template/.aiox-core/product/templates/engine/schemas/epic.schema.json +175 -0
- package/template/.aiox-core/product/templates/engine/schemas/pmdr.schema.json +175 -0
- package/template/.aiox-core/product/templates/engine/schemas/prd-v2.schema.json +300 -0
- package/template/.aiox-core/product/templates/engine/schemas/prd.schema.json +152 -0
- package/template/.aiox-core/product/templates/engine/schemas/story.schema.json +222 -0
- package/template/.aiox-core/product/templates/engine/schemas/task.schema.json +154 -0
- package/template/.aiox-core/product/templates/engine/validator.js +294 -0
- package/template/.aiox-core/product/templates/epic.hbs +212 -0
- package/template/.aiox-core/product/templates/eslintrc-security.json +32 -0
- package/template/.aiox-core/product/templates/front-end-architecture-tmpl.yaml +206 -0
- package/template/.aiox-core/product/templates/front-end-spec-tmpl.yaml +349 -0
- package/template/.aiox-core/product/templates/fullstack-architecture-tmpl.yaml +805 -0
- package/template/.aiox-core/product/templates/gemini/settings.json +79 -0
- package/template/.aiox-core/product/templates/github-actions-cd.yml +212 -0
- package/template/.aiox-core/product/templates/github-actions-ci.yml +172 -0
- package/template/.aiox-core/product/templates/github-pr-template.md +67 -0
- package/template/.aiox-core/product/templates/gordon-mcp.yaml +140 -0
- package/template/.aiox-core/product/templates/ide-rules/antigravity-rules.md +115 -0
- package/template/.aiox-core/product/templates/ide-rules/claude-rules.md +356 -0
- package/template/.aiox-core/product/templates/ide-rules/codex-rules.md +65 -0
- package/template/.aiox-core/product/templates/ide-rules/copilot-rules.md +92 -0
- package/template/.aiox-core/product/templates/ide-rules/cursor-rules.md +115 -0
- package/template/.aiox-core/product/templates/ide-rules/gemini-rules.md +87 -0
- package/template/.aiox-core/product/templates/index-strategy-tmpl.yaml +53 -0
- package/template/.aiox-core/product/templates/market-research-tmpl.yaml +252 -0
- package/template/.aiox-core/product/templates/mcp-workflow.js +271 -0
- package/template/.aiox-core/product/templates/migration-plan-tmpl.yaml +1022 -0
- package/template/.aiox-core/product/templates/migration-strategy-tmpl.md +524 -0
- package/template/.aiox-core/product/templates/personalized-agent-template.md +258 -0
- package/template/.aiox-core/product/templates/personalized-checklist-template.md +340 -0
- package/template/.aiox-core/product/templates/personalized-task-template-v2.md +905 -0
- package/template/.aiox-core/product/templates/personalized-task-template.md +344 -0
- package/template/.aiox-core/product/templates/personalized-template-file.yaml +322 -0
- package/template/.aiox-core/product/templates/personalized-workflow-template.yaml +460 -0
- package/template/.aiox-core/product/templates/pmdr.hbs +186 -0
- package/template/.aiox-core/product/templates/prd-tmpl.yaml +202 -0
- package/template/.aiox-core/product/templates/prd-v2.0.hbs +216 -0
- package/template/.aiox-core/product/templates/prd.hbs +201 -0
- package/template/.aiox-core/product/templates/project-brief-tmpl.yaml +221 -0
- package/template/.aiox-core/product/templates/qa-gate-tmpl.yaml +240 -0
- package/template/.aiox-core/product/templates/qa-report-tmpl.md +234 -0
- package/template/.aiox-core/product/templates/rls-policies-tmpl.yaml +1203 -0
- package/template/.aiox-core/product/templates/schema-design-tmpl.yaml +428 -0
- package/template/.aiox-core/product/templates/shock-report-tmpl.html +502 -0
- package/template/.aiox-core/product/templates/spec-tmpl.md +234 -0
- package/template/.aiox-core/product/templates/state-persistence-tmpl.yaml +219 -0
- package/template/.aiox-core/product/templates/statusline/statusline-script.js +188 -0
- package/template/.aiox-core/product/templates/statusline/track-agent.sh +68 -0
- package/template/.aiox-core/product/templates/story-tmpl.yaml +368 -0
- package/template/.aiox-core/product/templates/story.hbs +263 -0
- package/template/.aiox-core/product/templates/task-execution-report.md +495 -0
- package/template/.aiox-core/product/templates/task-template.md +123 -0
- package/template/.aiox-core/product/templates/task.hbs +170 -0
- package/template/.aiox-core/product/templates/tmpl-comment-on-examples.sql +158 -0
- package/template/.aiox-core/product/templates/tmpl-migration-script.sql +91 -0
- package/template/.aiox-core/product/templates/tmpl-rls-granular-policies.sql +104 -0
- package/template/.aiox-core/product/templates/tmpl-rls-kiss-policy.sql +10 -0
- package/template/.aiox-core/product/templates/tmpl-rls-roles.sql +135 -0
- package/template/.aiox-core/product/templates/tmpl-rls-simple.sql +77 -0
- package/template/.aiox-core/product/templates/tmpl-rls-tenant.sql +152 -0
- package/template/.aiox-core/product/templates/tmpl-rollback-script.sql +77 -0
- package/template/.aiox-core/product/templates/tmpl-seed-data.sql +140 -0
- package/template/.aiox-core/product/templates/tmpl-smoke-test.sql +16 -0
- package/template/.aiox-core/product/templates/tmpl-staging-copy-merge.sql +139 -0
- package/template/.aiox-core/product/templates/tmpl-stored-proc.sql +140 -0
- package/template/.aiox-core/product/templates/tmpl-trigger.sql +152 -0
- package/template/.aiox-core/product/templates/tmpl-view-materialized.sql +133 -0
- package/template/.aiox-core/product/templates/tmpl-view.sql +177 -0
- package/template/.aiox-core/product/templates/token-exports-css-tmpl.css +240 -0
- package/template/.aiox-core/product/templates/token-exports-tailwind-tmpl.js +395 -0
- package/template/.aiox-core/product/templates/tokens-schema-tmpl.yaml +305 -0
- package/template/.aiox-core/product/templates/workflow-template.yaml +151 -0
- package/template/.aiox-core/project-config.yaml +166 -0
- package/template/.aiox-core/quality/metrics-collector.js +599 -0
- package/template/.aiox-core/quality/metrics-hook.js +260 -0
- package/template/.aiox-core/quality/schemas/quality-metrics.schema.json +233 -0
- package/template/.aiox-core/quality/seed-metrics.js +336 -0
- package/template/.aiox-core/schemas/README.md +403 -0
- package/template/.aiox-core/schemas/agent-v3-schema.json +394 -0
- package/template/.aiox-core/schemas/squad-design-schema.json +299 -0
- package/template/.aiox-core/schemas/squad-schema.json +185 -0
- package/template/.aiox-core/schemas/task-v3-schema.json +353 -0
- package/template/.aiox-core/schemas/validate-v3-schema.js +430 -0
- package/template/.aiox-core/user-guide.md +1409 -0
- package/template/.aiox-core/utils/aiox-validator.js +25 -0
- package/template/.aiox-core/utils/filters/constants.js +10 -0
- package/template/.aiox-core/utils/filters/content-filter.js +223 -0
- package/template/.aiox-core/utils/filters/field-filter.js +126 -0
- package/template/.aiox-core/utils/filters/index.js +180 -0
- package/template/.aiox-core/utils/filters/schema-filter.js +157 -0
- package/template/.aiox-core/utils/format-duration.js +95 -0
- package/template/.aiox-core/workflow-intelligence/__tests__/confidence-scorer.test.js +334 -0
- package/template/.aiox-core/workflow-intelligence/__tests__/integration.test.js +339 -0
- package/template/.aiox-core/workflow-intelligence/__tests__/suggestion-engine.test.js +437 -0
- package/template/.aiox-core/workflow-intelligence/__tests__/wave-analyzer.test.js +447 -0
- package/template/.aiox-core/workflow-intelligence/__tests__/workflow-registry.test.js +302 -0
- package/template/.aiox-core/workflow-intelligence/engine/confidence-scorer.js +306 -0
- package/template/.aiox-core/workflow-intelligence/engine/output-formatter.js +299 -0
- package/template/.aiox-core/workflow-intelligence/engine/suggestion-engine.js +797 -0
- package/template/.aiox-core/workflow-intelligence/engine/wave-analyzer.js +683 -0
- package/template/.aiox-core/workflow-intelligence/index.js +329 -0
- package/template/.aiox-core/workflow-intelligence/learning/capture-hook.js +147 -0
- package/template/.aiox-core/workflow-intelligence/learning/gotcha-registry.js +653 -0
- package/template/.aiox-core/workflow-intelligence/learning/index.js +305 -0
- package/template/.aiox-core/workflow-intelligence/learning/pattern-capture.js +329 -0
- package/template/.aiox-core/workflow-intelligence/learning/pattern-store.js +497 -0
- package/template/.aiox-core/workflow-intelligence/learning/pattern-validator.js +309 -0
- package/template/.aiox-core/workflow-intelligence/learning/qa-feedback.js +585 -0
- package/template/.aiox-core/workflow-intelligence/learning/semantic-search.js +521 -0
- package/template/.aiox-core/workflow-intelligence/registry/workflow-registry.js +357 -0
- package/template/.aiox-core/working-in-the-brownfield.md +361 -0
- package/template/.antigravity/rules/agents/aiox-master.md +97 -0
- package/template/.antigravity/rules/agents/analyst.md +41 -0
- package/template/.antigravity/rules/agents/architect.md +50 -0
- package/template/.antigravity/rules/agents/data-engineer.md +43 -0
- package/template/.antigravity/rules/agents/dev.md +74 -0
- package/template/.antigravity/rules/agents/devops.md +71 -0
- package/template/.antigravity/rules/agents/pm.md +50 -0
- package/template/.antigravity/rules/agents/po.md +45 -0
- package/template/.antigravity/rules/agents/qa.md +57 -0
- package/template/.antigravity/rules/agents/sm.md +34 -0
- package/template/.antigravity/rules/agents/squad-creator.md +41 -0
- package/template/.antigravity/rules/agents/ux-design-expert.md +12 -0
- package/template/.claude/CLAUDE.md +313 -97
- package/template/.claude/commands/AIOX/agents/aiox-master.md +465 -0
- package/template/.claude/commands/AIOX/agents/analyst.md +273 -0
- package/template/.claude/commands/AIOX/agents/architect.md +474 -0
- package/template/.claude/commands/AIOX/agents/data-engineer.md +495 -0
- package/template/.claude/commands/AIOX/agents/dev.md +560 -0
- package/template/.claude/commands/AIOX/agents/devops.md +539 -0
- package/template/.claude/commands/AIOX/agents/pm.md +377 -0
- package/template/.claude/commands/AIOX/agents/po.md +335 -0
- package/template/.claude/commands/AIOX/agents/qa.md +449 -0
- package/template/.claude/commands/AIOX/agents/sm.md +287 -0
- package/template/.claude/commands/AIOX/agents/squad-creator.md +344 -0
- package/template/.claude/commands/AIOX/agents/ux-design-expert.md +495 -0
- package/template/.claude/commands/AIOX/scripts/agent-config-loader.js +624 -0
- package/template/.claude/commands/AIOX/scripts/generate-greeting.js +160 -0
- package/template/.claude/commands/AIOX/scripts/greeting-builder.js +866 -0
- package/template/.claude/commands/AIOX/scripts/session-context-loader.js +286 -0
- package/template/.claude/commands/AIOX/stories/story-6.1.4.md +1404 -0
- package/template/.claude/commands/cohort-squad/agents/cohort-manager.md +145 -0
- package/template/.claude/commands/design-system/agents/brad-frost.md +1097 -0
- package/template/.claude/commands/design-system/agents/dan-mall.md +857 -0
- package/template/.claude/commands/design-system/agents/dave-malouf.md +2272 -0
- package/template/.claude/commands/design-system/agents/design-chief.md +102 -0
- package/template/.claude/commands/design-system/agents/nano-banana-generator.md +162 -0
- package/template/.claude/commands/greet.md +101 -0
- package/template/.claude/commands/synapse/manager.md +75 -0
- package/template/.claude/commands/synapse/tasks/add-rule.md +94 -0
- package/template/.claude/commands/synapse/tasks/create-command.md +109 -0
- package/template/.claude/commands/synapse/tasks/create-domain.md +127 -0
- package/template/.claude/commands/synapse/tasks/diagnose-synapse.md +245 -0
- package/template/.claude/commands/synapse/tasks/edit-rule.md +109 -0
- package/template/.claude/commands/synapse/tasks/suggest-domain.md +116 -0
- package/template/.claude/commands/synapse/tasks/toggle-domain.md +83 -0
- package/template/.claude/commands/synapse/templates/domain-template +8 -0
- package/template/.claude/commands/synapse/templates/manifest-entry-template +4 -0
- package/template/.claude/commands/synapse/utils/manifest-parser-reference.md +134 -0
- package/template/.claude/hooks/README.md +194 -0
- package/template/.claude/hooks/enforce-architecture-first.py +196 -0
- package/template/.claude/hooks/enforce-git-push-authority.sh +33 -0
- package/template/.claude/hooks/install-hooks.sh +41 -0
- package/template/.claude/hooks/mind-clone-governance.py +192 -0
- package/template/.claude/hooks/pre-commit-version-check.sh +156 -0
- package/template/.claude/hooks/precompact-session-digest.cjs +141 -87
- package/template/.claude/hooks/precompact-wrapper.cjs +46 -0
- package/template/.claude/hooks/read-protection.py +151 -0
- package/template/.claude/hooks/slug-validation.py +176 -0
- package/template/.claude/hooks/sql-governance.py +155 -38
- package/template/.claude/hooks/synapse-engine.cjs +91 -324
- package/template/.claude/hooks/synapse-wrapper.cjs +57 -0
- package/template/.claude/hooks/write-path-validation.py +169 -34
- package/template/.claude/rules/agent-authority.md +105 -39
- package/template/.claude/rules/agent-handoff.md +97 -71
- package/template/.claude/rules/agent-memory-imports.md +15 -0
- package/template/.claude/rules/coderabbit-integration.md +101 -0
- package/template/.claude/rules/ids-principles.md +119 -52
- package/template/.claude/rules/mcp-usage.md +176 -49
- package/template/.claude/rules/story-lifecycle.md +145 -87
- package/template/.claude/rules/tool-examples.md +64 -0
- package/template/.claude/rules/tool-response-filtering.md +57 -0
- package/template/.claude/rules/workflow-execution.md +150 -68
- package/template/.claude/settings.json +26 -58
- package/template/.synapse/agent-aiox-master +15 -0
- package/template/.synapse/agent-analyst +14 -38
- package/template/.synapse/agent-architect +16 -44
- package/template/.synapse/agent-data-engineer +17 -0
- package/template/.synapse/agent-dev +18 -8
- package/template/.synapse/agent-devops +17 -53
- package/template/.synapse/agent-pm +16 -37
- package/template/.synapse/agent-po +15 -48
- package/template/.synapse/agent-qa +16 -42
- package/template/.synapse/agent-sm +13 -68
- package/template/.synapse/agent-squad-creator +14 -0
- package/template/.synapse/agent-ux +15 -0
- package/template/.synapse/commands +109 -0
- package/template/.synapse/constitution +49 -44
- package/template/.synapse/context +25 -8
- package/template/.synapse/global +24 -47
- package/template/.synapse/manifest +56 -14
- package/template/.synapse/workflow-arch-review +15 -0
- package/template/.synapse/workflow-epic-create +16 -0
- package/template/.synapse/workflow-story-dev +20 -0
- package/template/AGENTS.md +75 -0
- package/template/README.md +746 -53
- package/template/.claude/agent-memory/analyst/MEMORY.md +0 -20
- package/template/.claude/agent-memory/architect/MEMORY.md +0 -20
- package/template/.claude/agent-memory/dev/MEMORY.md +0 -20
- package/template/.claude/agent-memory/devops/MEMORY.md +0 -20
- package/template/.claude/agent-memory/pm/MEMORY.md +0 -20
- package/template/.claude/agent-memory/po/MEMORY.md +0 -20
- package/template/.claude/agent-memory/qa/MEMORY.md +0 -20
- package/template/.claude/agent-memory/reviewer/MEMORY.md +0 -20
- package/template/.claude/agent-memory/sm/MEMORY.md +0 -20
- package/template/.claude/commands/analyst.md +0 -55
- package/template/.claude/commands/architect.md +0 -56
- package/template/.claude/commands/dev.md +0 -63
- package/template/.claude/commands/devops.md +0 -64
- package/template/.claude/commands/plan-story.md +0 -70
- package/template/.claude/commands/pm.md +0 -51
- package/template/.claude/commands/po.md +0 -69
- package/template/.claude/commands/project-state.md +0 -35
- package/template/.claude/commands/project-sync.md +0 -44
- package/template/.claude/commands/qa.md +0 -67
- package/template/.claude/commands/reviewer.md +0 -63
- package/template/.claude/commands/sm.md +0 -82
- package/template/.claude/commands/squad.md +0 -56
- package/template/.claude/hooks/enforce-git-push-authority.py +0 -70
- package/template/.claude/hooks/metrics-tracker.cjs +0 -65
- package/template/.claude/rules/agent-memory.md +0 -61
- package/template/.claude/rules/new-project.md +0 -157
- package/template/.claude/settings.local.json +0 -14
- package/template/.genia/CONSTITUTION.md +0 -129
- package/template/.genia/contexts/api-patterns.md +0 -134
- package/template/.genia/contexts/nextjs-react.md +0 -210
- package/template/.genia/contexts/projeto.md +0 -18
- package/template/.genia/contexts/supabase.md +0 -152
- package/template/.genia/contexts/whatsapp-cloud.md +0 -176
- package/template/.genia/core-config.yaml +0 -192
- package/template/.genia/development/agents/analyst.md +0 -138
- package/template/.genia/development/agents/architect.md +0 -171
- package/template/.genia/development/agents/dev.md +0 -160
- package/template/.genia/development/agents/devops.md +0 -200
- package/template/.genia/development/agents/pm.md +0 -142
- package/template/.genia/development/agents/po.md +0 -165
- package/template/.genia/development/agents/qa.md +0 -183
- package/template/.genia/development/agents/reviewer.md +0 -198
- package/template/.genia/development/agents/sm.md +0 -230
- package/template/.genia/development/checklists/architecture-review.md +0 -189
- package/template/.genia/development/checklists/pre-commit.md +0 -205
- package/template/.genia/development/checklists/pre-deploy.md +0 -230
- package/template/.genia/development/checklists/qa-gate.md +0 -216
- package/template/.genia/development/checklists/story-dod.md +0 -155
- package/template/.genia/development/tasks/code-review.md +0 -197
- package/template/.genia/development/tasks/criar-prd.md +0 -170
- package/template/.genia/development/tasks/criar-spec.md +0 -188
- package/template/.genia/development/tasks/criar-story.md +0 -185
- package/template/.genia/development/tasks/debug-sistematico.md +0 -230
- package/template/.genia/development/tasks/dev-implement.md +0 -199
- package/template/.genia/development/tasks/qa-review.md +0 -224
- package/template/.genia/development/workflows/brownfield.md +0 -178
- package/template/.genia/development/workflows/delivery.md +0 -208
- package/template/.genia/development/workflows/development.md +0 -189
- package/template/.genia/development/workflows/greenfield.md +0 -166
- package/template/.genia/development/workflows/planning.md +0 -167
- package/template/.genia/development/workflows/qa-loop.md +0 -179
- package/template/.genia/development/workflows/spec-pipeline.md +0 -192
- package/template/.genia/development/workflows/story-development-cycle.md +0 -252
- package/template/.genia/guidelines/clean-code.md +0 -98
- package/template/.genia/guidelines/testing.md +0 -176
- package/template/.genia/skills/design/canvas-design.md +0 -109
- package/template/.genia/skills/design/frontend-design.md +0 -140
- package/template/.genia/skills/dev/mcp-builder.md +0 -172
- package/template/.genia/skills/dev/webapp-testing.md +0 -150
- package/template/.genia/skills/documents/docx.md +0 -153
- package/template/.genia/skills/documents/pdf.md +0 -134
- package/template/.genia/skills/documents/pptx.md +0 -118
- package/template/.genia/skills/documents/xlsx.md +0 -140
- package/template/.synapse/agent-reviewer +0 -43
|
@@ -0,0 +1,1032 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Verification Script for Workflow Gap Fixes (GAP 1, 2, 3)
|
|
5
|
+
*
|
|
6
|
+
* Runs all verification checks and reports results.
|
|
7
|
+
* Usage: node .aiox-core/development/scripts/verify-workflow-gaps.js
|
|
8
|
+
*
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const fs = require('fs');
|
|
13
|
+
const _fsPromises = require('fs').promises; // Reserved for future async operations
|
|
14
|
+
const path = require('path');
|
|
15
|
+
const yaml = require('js-yaml');
|
|
16
|
+
const ROOT = path.resolve(__dirname, '..', '..', '..');
|
|
17
|
+
|
|
18
|
+
// ============ Test Infrastructure ============
|
|
19
|
+
|
|
20
|
+
let totalTests = 0;
|
|
21
|
+
let passedTests = 0;
|
|
22
|
+
let failedTests = 0;
|
|
23
|
+
const failures = [];
|
|
24
|
+
|
|
25
|
+
function pass(name) {
|
|
26
|
+
totalTests++;
|
|
27
|
+
passedTests++;
|
|
28
|
+
console.log(` [PASS] ${name}`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function fail(name, reason) {
|
|
32
|
+
totalTests++;
|
|
33
|
+
failedTests++;
|
|
34
|
+
failures.push({ name, reason });
|
|
35
|
+
console.log(` [FAIL] ${name}`);
|
|
36
|
+
console.log(` Reason: ${reason}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function assert(condition, name, reason) {
|
|
40
|
+
if (condition) {
|
|
41
|
+
pass(name);
|
|
42
|
+
} else {
|
|
43
|
+
fail(name, reason || 'Assertion failed');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function section(title) {
|
|
48
|
+
console.log(`\n${'='.repeat(60)}`);
|
|
49
|
+
console.log(` ${title}`);
|
|
50
|
+
console.log('='.repeat(60));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// ============ GAP 1: Context Targeting ============
|
|
54
|
+
|
|
55
|
+
function verifyGap1() {
|
|
56
|
+
section('GAP 1: Context Targeting');
|
|
57
|
+
|
|
58
|
+
// 1.1 create-workflow.md has target_context and squad_name
|
|
59
|
+
const createWf = fs.readFileSync(path.join(ROOT, '.aiox-core/development/tasks/create-workflow.md'), 'utf-8');
|
|
60
|
+
assert(
|
|
61
|
+
createWf.includes('campo: target_context'),
|
|
62
|
+
'1.1a create-workflow.md has target_context field',
|
|
63
|
+
'Missing "campo: target_context" in Entrada',
|
|
64
|
+
);
|
|
65
|
+
assert(
|
|
66
|
+
createWf.includes('campo: squad_name'),
|
|
67
|
+
'1.1b create-workflow.md has squad_name field',
|
|
68
|
+
'Missing "campo: squad_name" in Entrada',
|
|
69
|
+
);
|
|
70
|
+
assert(
|
|
71
|
+
createWf.includes('target_context="squad"'),
|
|
72
|
+
'1.1c create-workflow.md has squad pre-condition',
|
|
73
|
+
'Missing squad existence pre-condition',
|
|
74
|
+
);
|
|
75
|
+
assert(
|
|
76
|
+
createWf.includes('squads/{squad_name}/workflows/'),
|
|
77
|
+
'1.1d create-workflow.md has squad path resolution',
|
|
78
|
+
'Missing squad path in step 4',
|
|
79
|
+
);
|
|
80
|
+
assert(
|
|
81
|
+
createWf.includes('Update Squad Manifest'),
|
|
82
|
+
'1.1e create-workflow.md has step 4.5',
|
|
83
|
+
'Missing step 4.5 for squad manifest update',
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
// 1.2 modify-workflow.md
|
|
87
|
+
const modifyWf = fs.readFileSync(path.join(ROOT, '.aiox-core/development/tasks/modify-workflow.md'), 'utf-8');
|
|
88
|
+
assert(
|
|
89
|
+
modifyWf.includes('campo: target_context'),
|
|
90
|
+
'1.2a modify-workflow.md has target_context field',
|
|
91
|
+
'Missing "campo: target_context" in Entrada',
|
|
92
|
+
);
|
|
93
|
+
assert(
|
|
94
|
+
modifyWf.includes('campo: squad_name'),
|
|
95
|
+
'1.2b modify-workflow.md has squad_name field',
|
|
96
|
+
'Missing "campo: squad_name" in Entrada',
|
|
97
|
+
);
|
|
98
|
+
assert(
|
|
99
|
+
modifyWf.includes('Resolve workflow path based on target_context'),
|
|
100
|
+
'1.2c modify-workflow.md has conditional path resolution',
|
|
101
|
+
'Missing path resolution in step 1',
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
// 1.3 workflow-elicitation.js
|
|
105
|
+
const steps = require('../../../.aiox-core/core/elicitation/workflow-elicitation.js');
|
|
106
|
+
const firstStep = steps[0];
|
|
107
|
+
assert(
|
|
108
|
+
firstStep.title === 'Target Context',
|
|
109
|
+
'1.3a Elicitation first step is Target Context',
|
|
110
|
+
`First step title is "${firstStep.title}" instead of "Target Context"`,
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
const targetContextQ = firstStep.questions.find((q) => q.name === 'targetContext');
|
|
114
|
+
assert(
|
|
115
|
+
!!targetContextQ,
|
|
116
|
+
'1.3b Elicitation has targetContext question',
|
|
117
|
+
'Missing targetContext question',
|
|
118
|
+
);
|
|
119
|
+
assert(
|
|
120
|
+
targetContextQ && targetContextQ.choices.length === 3,
|
|
121
|
+
'1.3c targetContext has 3 choices (core/squad/hybrid)',
|
|
122
|
+
'Expected 3 choices',
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
const squadNameQ = firstStep.questions.find((q) => q.name === 'squadName');
|
|
126
|
+
assert(
|
|
127
|
+
!!squadNameQ,
|
|
128
|
+
'1.3d Elicitation has squadName question',
|
|
129
|
+
'Missing squadName question',
|
|
130
|
+
);
|
|
131
|
+
assert(
|
|
132
|
+
squadNameQ && typeof squadNameQ.when === 'function',
|
|
133
|
+
'1.3e squadName has conditional when function',
|
|
134
|
+
'Missing when condition',
|
|
135
|
+
);
|
|
136
|
+
assert(
|
|
137
|
+
squadNameQ && squadNameQ.when({ targetContext: 'squad' }) === true,
|
|
138
|
+
'1.3f squadName shows when targetContext=squad',
|
|
139
|
+
'when() should return true for squad',
|
|
140
|
+
);
|
|
141
|
+
assert(
|
|
142
|
+
squadNameQ && squadNameQ.when({ targetContext: 'core' }) === false,
|
|
143
|
+
'1.3g squadName hidden when targetContext=core',
|
|
144
|
+
'when() should return false for core',
|
|
145
|
+
);
|
|
146
|
+
assert(
|
|
147
|
+
squadNameQ && squadNameQ.validate('my-squad') === true,
|
|
148
|
+
'1.3h squadName accepts valid kebab-case',
|
|
149
|
+
'Should accept "my-squad"',
|
|
150
|
+
);
|
|
151
|
+
assert(
|
|
152
|
+
squadNameQ && squadNameQ.validate('INVALID') !== true,
|
|
153
|
+
'1.3i squadName rejects non-kebab-case',
|
|
154
|
+
'Should reject "INVALID"',
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
// 1.4 workflow-template.yaml
|
|
158
|
+
const template = fs.readFileSync(path.join(ROOT, '.aiox-core/product/templates/workflow-template.yaml'), 'utf-8');
|
|
159
|
+
assert(
|
|
160
|
+
template.includes('{{TARGET_CONTEXT}}'),
|
|
161
|
+
'1.4a Template has TARGET_CONTEXT variable',
|
|
162
|
+
'Missing {{TARGET_CONTEXT}}',
|
|
163
|
+
);
|
|
164
|
+
assert(
|
|
165
|
+
template.includes('{{SQUAD_NAME}}'),
|
|
166
|
+
'1.4b Template has SQUAD_NAME variable',
|
|
167
|
+
'Missing {{SQUAD_NAME}}',
|
|
168
|
+
);
|
|
169
|
+
assert(
|
|
170
|
+
template.includes('{{#IF_CONTEXT}}'),
|
|
171
|
+
'1.4c Template has IF_CONTEXT conditional',
|
|
172
|
+
'Missing {{#IF_CONTEXT}}',
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// ============ GAP 2: Workflow Validation ============
|
|
177
|
+
|
|
178
|
+
async function verifyGap2() {
|
|
179
|
+
section('GAP 2: Standalone Workflow Validation');
|
|
180
|
+
|
|
181
|
+
// 2.1 WorkflowValidator loads
|
|
182
|
+
let WorkflowValidator;
|
|
183
|
+
try {
|
|
184
|
+
({ WorkflowValidator } = require('../../../.aiox-core/development/scripts/workflow-validator'));
|
|
185
|
+
pass('2.1 WorkflowValidator module loads');
|
|
186
|
+
} catch (e) {
|
|
187
|
+
fail('2.1 WorkflowValidator module loads', e.message);
|
|
188
|
+
return; // Can't continue without module
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// 2.2 Instantiation
|
|
192
|
+
const validator = new WorkflowValidator({ verbose: false });
|
|
193
|
+
assert(
|
|
194
|
+
typeof validator.validate === 'function',
|
|
195
|
+
'2.2a WorkflowValidator has validate() method',
|
|
196
|
+
'Missing validate method',
|
|
197
|
+
);
|
|
198
|
+
assert(
|
|
199
|
+
typeof validator.formatResult === 'function',
|
|
200
|
+
'2.2b WorkflowValidator has formatResult() method',
|
|
201
|
+
'Missing formatResult method',
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
// 2.3 Validate known-good workflow
|
|
205
|
+
const goodResult = await validator.validate(path.join(ROOT, '.aiox-core/development/workflows/greenfield-service.yaml'));
|
|
206
|
+
assert(
|
|
207
|
+
goodResult.valid === true,
|
|
208
|
+
'2.3a greenfield-service.yaml validates as valid',
|
|
209
|
+
`Expected valid=true, got valid=${goodResult.valid}. Errors: ${JSON.stringify(goodResult.errors)}`,
|
|
210
|
+
);
|
|
211
|
+
assert(
|
|
212
|
+
goodResult.errors.length === 0,
|
|
213
|
+
'2.3b greenfield-service.yaml has 0 errors',
|
|
214
|
+
`Has ${goodResult.errors.length} errors: ${goodResult.errors.map((e) => e.code).join(', ')}`,
|
|
215
|
+
);
|
|
216
|
+
assert(
|
|
217
|
+
typeof goodResult.warnings === 'object',
|
|
218
|
+
'2.3c Result has warnings array',
|
|
219
|
+
'Missing warnings array',
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
// 2.4 formatResult works
|
|
223
|
+
const formatted = validator.formatResult(goodResult, 'greenfield-service.yaml');
|
|
224
|
+
assert(
|
|
225
|
+
formatted.includes('greenfield-service.yaml'),
|
|
226
|
+
'2.4 formatResult includes filename',
|
|
227
|
+
'Missing filename in formatted output',
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
// 2.5 Validate broken YAML — missing required fields
|
|
231
|
+
const brokenPath = path.join(__dirname, '_test_broken_wf.yaml');
|
|
232
|
+
fs.writeFileSync(brokenPath, 'workflow:\n id: broken-test\n');
|
|
233
|
+
try {
|
|
234
|
+
const brokenResult = await validator.validate(brokenPath);
|
|
235
|
+
assert(
|
|
236
|
+
brokenResult.valid === false,
|
|
237
|
+
'2.5a Broken workflow (missing name+sequence) is invalid',
|
|
238
|
+
'Should be invalid',
|
|
239
|
+
);
|
|
240
|
+
const errorCodes = brokenResult.errors.map((e) => e.code);
|
|
241
|
+
assert(
|
|
242
|
+
errorCodes.includes('WF_MISSING_REQUIRED_FIELD'),
|
|
243
|
+
'2.5b Has WF_MISSING_REQUIRED_FIELD error',
|
|
244
|
+
`Error codes: ${errorCodes.join(', ')}`,
|
|
245
|
+
);
|
|
246
|
+
} finally {
|
|
247
|
+
fs.unlinkSync(brokenPath);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// 2.6 Validate non-existent file
|
|
251
|
+
const missingResult = await validator.validate('/nonexistent/workflow.yaml');
|
|
252
|
+
assert(
|
|
253
|
+
missingResult.valid === false,
|
|
254
|
+
'2.6a Non-existent file returns invalid',
|
|
255
|
+
'Should be invalid',
|
|
256
|
+
);
|
|
257
|
+
assert(
|
|
258
|
+
missingResult.errors.length > 0 && missingResult.errors[0].code === 'WF_FILE_NOT_FOUND',
|
|
259
|
+
'2.6b Error code is WF_FILE_NOT_FOUND',
|
|
260
|
+
`Got: ${missingResult.errors[0]?.code}`,
|
|
261
|
+
);
|
|
262
|
+
|
|
263
|
+
// 2.7 Validate invalid YAML syntax
|
|
264
|
+
const badYamlPath = path.join(__dirname, '_test_bad_yaml.yaml');
|
|
265
|
+
fs.writeFileSync(badYamlPath, '{ invalid yaml [[[');
|
|
266
|
+
try {
|
|
267
|
+
const badYamlResult = await validator.validate(badYamlPath);
|
|
268
|
+
assert(
|
|
269
|
+
badYamlResult.valid === false,
|
|
270
|
+
'2.7a Invalid YAML syntax returns invalid',
|
|
271
|
+
'Should be invalid',
|
|
272
|
+
);
|
|
273
|
+
assert(
|
|
274
|
+
badYamlResult.errors.length > 0 && badYamlResult.errors[0].code === 'WF_YAML_PARSE_ERROR',
|
|
275
|
+
'2.7b Error code is WF_YAML_PARSE_ERROR',
|
|
276
|
+
`Got: ${badYamlResult.errors[0]?.code}`,
|
|
277
|
+
);
|
|
278
|
+
} finally {
|
|
279
|
+
fs.unlinkSync(badYamlPath);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// 2.8 Strict mode — warnings become errors
|
|
283
|
+
const strictValidator = new WorkflowValidator({ strict: true });
|
|
284
|
+
const strictResult = await strictValidator.validate(path.join(ROOT, '.aiox-core/development/workflows/greenfield-service.yaml'));
|
|
285
|
+
assert(
|
|
286
|
+
strictResult.warnings.length === 0,
|
|
287
|
+
'2.8 Strict mode moves all warnings to errors',
|
|
288
|
+
`Still has ${strictResult.warnings.length} warnings`,
|
|
289
|
+
);
|
|
290
|
+
|
|
291
|
+
// 2.9 Artifact flow validation
|
|
292
|
+
const artifactTestPath = path.join(__dirname, '_test_artifact_wf.yaml');
|
|
293
|
+
fs.writeFileSync(artifactTestPath, yaml.dump({
|
|
294
|
+
workflow: {
|
|
295
|
+
id: 'artifact-test',
|
|
296
|
+
name: 'Artifact Test',
|
|
297
|
+
type: 'test',
|
|
298
|
+
sequence: [
|
|
299
|
+
{ agent: 'dev', creates: 'output-a.md' },
|
|
300
|
+
{ agent: 'qa', requires: 'nonexistent.md', creates: 'review.md' },
|
|
301
|
+
],
|
|
302
|
+
},
|
|
303
|
+
}));
|
|
304
|
+
try {
|
|
305
|
+
const artifactResult = await validator.validate(artifactTestPath);
|
|
306
|
+
const hasArtifactWarning = artifactResult.warnings.some(
|
|
307
|
+
(w) => w.code === 'WF_ARTIFACT_CHAIN_BROKEN',
|
|
308
|
+
);
|
|
309
|
+
assert(
|
|
310
|
+
hasArtifactWarning,
|
|
311
|
+
'2.9 Detects broken artifact chain (requires without creates)',
|
|
312
|
+
'Should warn about missing artifact "nonexistent.md"',
|
|
313
|
+
);
|
|
314
|
+
} finally {
|
|
315
|
+
fs.unlinkSync(artifactTestPath);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// 2.10 SquadValidator has validateWorkflows
|
|
319
|
+
const { SquadValidator } = require('../../../.aiox-core/development/scripts/squad/squad-validator');
|
|
320
|
+
const sv = new SquadValidator({ verbose: false });
|
|
321
|
+
assert(
|
|
322
|
+
typeof sv.validateWorkflows === 'function',
|
|
323
|
+
'2.10 SquadValidator has validateWorkflows() method',
|
|
324
|
+
'Missing validateWorkflows method',
|
|
325
|
+
);
|
|
326
|
+
|
|
327
|
+
// 2.11 framework-analyzer integration
|
|
328
|
+
const FrameworkAnalyzer = require('../../../.aiox-core/infrastructure/scripts/framework-analyzer');
|
|
329
|
+
const fa = new FrameworkAnalyzer();
|
|
330
|
+
const faResult = await fa.validateWorkflow({ id: 'test', name: 'Test', sequence: [] });
|
|
331
|
+
assert(
|
|
332
|
+
faResult.valid !== undefined,
|
|
333
|
+
'2.11 FrameworkAnalyzer.validateWorkflow returns result with valid field',
|
|
334
|
+
'Missing valid field in result',
|
|
335
|
+
);
|
|
336
|
+
|
|
337
|
+
// 2.12 validate-workflow.md task exists
|
|
338
|
+
assert(
|
|
339
|
+
fs.existsSync(path.join(ROOT, '.aiox-core/development/tasks/validate-workflow.md')),
|
|
340
|
+
'2.12 validate-workflow.md task file exists',
|
|
341
|
+
'File not found',
|
|
342
|
+
);
|
|
343
|
+
|
|
344
|
+
// 2.13 aiox-master has validate-workflow command
|
|
345
|
+
const masterMd = fs.readFileSync(path.join(ROOT, '.aiox-core/development/agents/aiox-master.md'), 'utf-8');
|
|
346
|
+
assert(
|
|
347
|
+
masterMd.includes('name: validate-workflow'),
|
|
348
|
+
'2.13a aiox-master has validate-workflow command',
|
|
349
|
+
'Command not found in aiox-master.md',
|
|
350
|
+
);
|
|
351
|
+
assert(
|
|
352
|
+
masterMd.includes('validate-workflow.md'),
|
|
353
|
+
'2.13b aiox-master has validate-workflow.md in dependencies',
|
|
354
|
+
'Dependency not found',
|
|
355
|
+
);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// ============ GAP 3: Guided Workflow Automation ============
|
|
359
|
+
|
|
360
|
+
async function verifyGap3() {
|
|
361
|
+
section('GAP 3: Guided Workflow Automation');
|
|
362
|
+
|
|
363
|
+
// 3.1 WorkflowStateManager loads
|
|
364
|
+
let WorkflowStateManager;
|
|
365
|
+
try {
|
|
366
|
+
({ WorkflowStateManager } = require('../../../.aiox-core/development/scripts/workflow-state-manager'));
|
|
367
|
+
pass('3.1 WorkflowStateManager module loads');
|
|
368
|
+
} catch (e) {
|
|
369
|
+
fail('3.1 WorkflowStateManager module loads', e.message);
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
const mgr = new WorkflowStateManager({ verbose: false });
|
|
374
|
+
let statePath;
|
|
375
|
+
|
|
376
|
+
try {
|
|
377
|
+
|
|
378
|
+
// 3.2 Load real workflow and create state
|
|
379
|
+
const wfContent = fs.readFileSync(path.join(ROOT, '.aiox-core/development/workflows/greenfield-service.yaml'), 'utf-8');
|
|
380
|
+
const wfData = yaml.load(wfContent);
|
|
381
|
+
|
|
382
|
+
const state = await mgr.createState(wfData, { target_context: 'core' });
|
|
383
|
+
assert(
|
|
384
|
+
!!state.instance_id,
|
|
385
|
+
'3.2a createState generates instance_id',
|
|
386
|
+
'Missing instance_id',
|
|
387
|
+
);
|
|
388
|
+
assert(
|
|
389
|
+
state.status === 'active',
|
|
390
|
+
'3.2b Initial status is active',
|
|
391
|
+
`Got: ${state.status}`,
|
|
392
|
+
);
|
|
393
|
+
assert(
|
|
394
|
+
state.steps.length > 0,
|
|
395
|
+
'3.2c Steps array populated from sequence',
|
|
396
|
+
`Got ${state.steps.length} steps`,
|
|
397
|
+
);
|
|
398
|
+
assert(
|
|
399
|
+
state.current_step_index === 0,
|
|
400
|
+
'3.2d Starts at step 0',
|
|
401
|
+
`Got: ${state.current_step_index}`,
|
|
402
|
+
);
|
|
403
|
+
assert(
|
|
404
|
+
state.workflow_id === 'greenfield-service',
|
|
405
|
+
'3.2e workflow_id matches',
|
|
406
|
+
`Got: ${state.workflow_id}`,
|
|
407
|
+
);
|
|
408
|
+
assert(
|
|
409
|
+
state.target_context === 'core',
|
|
410
|
+
'3.2f target_context is core',
|
|
411
|
+
`Got: ${state.target_context}`,
|
|
412
|
+
);
|
|
413
|
+
|
|
414
|
+
// 3.3 State file was written to disk
|
|
415
|
+
statePath = mgr._resolveStatePath(state.instance_id);
|
|
416
|
+
assert(
|
|
417
|
+
fs.existsSync(statePath),
|
|
418
|
+
'3.3 State file exists on disk',
|
|
419
|
+
`File not found: ${statePath}`,
|
|
420
|
+
);
|
|
421
|
+
|
|
422
|
+
// 3.4 Progress query
|
|
423
|
+
const progress = mgr.getProgress(state);
|
|
424
|
+
assert(
|
|
425
|
+
progress.completed === 0,
|
|
426
|
+
'3.4a Initial progress: 0 completed',
|
|
427
|
+
`Got: ${progress.completed}`,
|
|
428
|
+
);
|
|
429
|
+
assert(
|
|
430
|
+
progress.total === state.steps.length,
|
|
431
|
+
'3.4b Total matches steps count',
|
|
432
|
+
`Got: ${progress.total}`,
|
|
433
|
+
);
|
|
434
|
+
assert(
|
|
435
|
+
progress.percentage === 0,
|
|
436
|
+
'3.4c Initial percentage is 0',
|
|
437
|
+
`Got: ${progress.percentage}`,
|
|
438
|
+
);
|
|
439
|
+
|
|
440
|
+
// 3.5 getCurrentStep
|
|
441
|
+
const currentStep = mgr.getCurrentStep(state);
|
|
442
|
+
assert(
|
|
443
|
+
currentStep !== null,
|
|
444
|
+
'3.5a getCurrentStep returns step object',
|
|
445
|
+
'Got null',
|
|
446
|
+
);
|
|
447
|
+
assert(
|
|
448
|
+
currentStep.step_index === 0,
|
|
449
|
+
'3.5b Current step is index 0',
|
|
450
|
+
`Got: ${currentStep?.step_index}`,
|
|
451
|
+
);
|
|
452
|
+
|
|
453
|
+
// 3.6 Mark step completed + advance
|
|
454
|
+
mgr.markStepCompleted(state, 0, ['project-brief.md']);
|
|
455
|
+
assert(
|
|
456
|
+
state.steps[0].status === 'completed',
|
|
457
|
+
'3.6a Step 0 marked completed',
|
|
458
|
+
`Got: ${state.steps[0].status}`,
|
|
459
|
+
);
|
|
460
|
+
assert(
|
|
461
|
+
state.steps[0].artifacts_created.includes('project-brief.md'),
|
|
462
|
+
'3.6b Artifacts recorded',
|
|
463
|
+
`Got: ${state.steps[0].artifacts_created}`,
|
|
464
|
+
);
|
|
465
|
+
|
|
466
|
+
mgr.advanceStep(state);
|
|
467
|
+
assert(
|
|
468
|
+
state.current_step_index > 0,
|
|
469
|
+
'3.6c Advanced past step 0',
|
|
470
|
+
`Still at: ${state.current_step_index}`,
|
|
471
|
+
);
|
|
472
|
+
|
|
473
|
+
// 3.7 Artifact status
|
|
474
|
+
const artifacts = mgr.getArtifactStatus(state);
|
|
475
|
+
assert(
|
|
476
|
+
artifacts.created.length > 0 || artifacts.pending.length > 0,
|
|
477
|
+
'3.7 getArtifactStatus returns artifacts',
|
|
478
|
+
'No artifacts found',
|
|
479
|
+
);
|
|
480
|
+
|
|
481
|
+
// 3.8 Status report
|
|
482
|
+
const report = mgr.generateStatusReport(state);
|
|
483
|
+
assert(
|
|
484
|
+
report.includes('Progress:'),
|
|
485
|
+
'3.8a Status report has progress bar',
|
|
486
|
+
'Missing "Progress:" in report',
|
|
487
|
+
);
|
|
488
|
+
assert(
|
|
489
|
+
report.includes('[x]'),
|
|
490
|
+
'3.8b Status report shows completed step',
|
|
491
|
+
'Missing [x] checkmark',
|
|
492
|
+
);
|
|
493
|
+
assert(
|
|
494
|
+
report.includes('<-- current'),
|
|
495
|
+
'3.8c Status report shows current step marker',
|
|
496
|
+
'Missing "<-- current" marker',
|
|
497
|
+
);
|
|
498
|
+
|
|
499
|
+
// 3.9 Handoff context
|
|
500
|
+
const handoff = mgr.generateHandoffContext(state);
|
|
501
|
+
assert(
|
|
502
|
+
handoff.includes('Workflow Handoff Context'),
|
|
503
|
+
'3.9a Handoff has header',
|
|
504
|
+
'Missing header',
|
|
505
|
+
);
|
|
506
|
+
assert(
|
|
507
|
+
handoff.includes('*run-workflow'),
|
|
508
|
+
'3.9b Handoff has resume command',
|
|
509
|
+
'Missing resume command',
|
|
510
|
+
);
|
|
511
|
+
|
|
512
|
+
// 3.10 Save and reload
|
|
513
|
+
await mgr.saveState(state);
|
|
514
|
+
const reloaded = await mgr.loadState(state.instance_id);
|
|
515
|
+
assert(
|
|
516
|
+
reloaded !== null,
|
|
517
|
+
'3.10a Reloaded state is not null',
|
|
518
|
+
'loadState returned null',
|
|
519
|
+
);
|
|
520
|
+
assert(
|
|
521
|
+
reloaded.instance_id === state.instance_id,
|
|
522
|
+
'3.10b Reloaded instance_id matches',
|
|
523
|
+
`Got: ${reloaded?.instance_id}`,
|
|
524
|
+
);
|
|
525
|
+
assert(
|
|
526
|
+
reloaded.current_step_index === state.current_step_index,
|
|
527
|
+
'3.10c Reloaded current_step_index matches',
|
|
528
|
+
`Got: ${reloaded?.current_step_index}`,
|
|
529
|
+
);
|
|
530
|
+
|
|
531
|
+
// 3.11 Skip optional step
|
|
532
|
+
const optionalIdx = state.steps.findIndex((s) => s.optional && s.status === 'pending');
|
|
533
|
+
if (optionalIdx !== -1) {
|
|
534
|
+
state.current_step_index = optionalIdx;
|
|
535
|
+
mgr.markStepSkipped(state, optionalIdx);
|
|
536
|
+
assert(
|
|
537
|
+
state.steps[optionalIdx].status === 'skipped',
|
|
538
|
+
'3.11a Optional step marked skipped',
|
|
539
|
+
`Got: ${state.steps[optionalIdx].status}`,
|
|
540
|
+
);
|
|
541
|
+
} else {
|
|
542
|
+
pass('3.11a (skip) No optional pending steps — N/A');
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// 3.12 Reject skip on required step
|
|
546
|
+
const requiredIdx = state.steps.findIndex((s) => !s.optional && s.status === 'pending');
|
|
547
|
+
if (requiredIdx !== -1) {
|
|
548
|
+
let threw = false;
|
|
549
|
+
try {
|
|
550
|
+
mgr.markStepSkipped(state, requiredIdx);
|
|
551
|
+
} catch {
|
|
552
|
+
threw = true;
|
|
553
|
+
}
|
|
554
|
+
assert(
|
|
555
|
+
threw,
|
|
556
|
+
'3.12 Rejects skip on required step',
|
|
557
|
+
'Should throw error for non-optional step',
|
|
558
|
+
);
|
|
559
|
+
} else {
|
|
560
|
+
pass('3.12 (skip reject) No required pending steps — N/A');
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
// 3.13 List active workflows
|
|
564
|
+
const activeList = await mgr.listActiveWorkflows();
|
|
565
|
+
assert(
|
|
566
|
+
activeList.length >= 1,
|
|
567
|
+
'3.13 listActiveWorkflows finds our test instance',
|
|
568
|
+
`Found ${activeList.length} active workflows`,
|
|
569
|
+
);
|
|
570
|
+
|
|
571
|
+
// 3.14 Load non-existent state returns null
|
|
572
|
+
const missing = await mgr.loadState('nonexistent-instance');
|
|
573
|
+
assert(
|
|
574
|
+
missing === null,
|
|
575
|
+
'3.14 loadState returns null for missing instance',
|
|
576
|
+
`Got: ${missing}`,
|
|
577
|
+
);
|
|
578
|
+
|
|
579
|
+
// 3.15 WorkflowNavigator state integration
|
|
580
|
+
const WorkflowNavigator = require('../../../.aiox-core/development/scripts/workflow-navigator');
|
|
581
|
+
const nav = new WorkflowNavigator();
|
|
582
|
+
assert(
|
|
583
|
+
typeof nav.detectWorkflowStateFromFile === 'function',
|
|
584
|
+
'3.15a Navigator has detectWorkflowStateFromFile()',
|
|
585
|
+
'Missing method',
|
|
586
|
+
);
|
|
587
|
+
assert(
|
|
588
|
+
typeof nav.suggestNextCommandsFromState === 'function',
|
|
589
|
+
'3.15b Navigator has suggestNextCommandsFromState()',
|
|
590
|
+
'Missing method',
|
|
591
|
+
);
|
|
592
|
+
|
|
593
|
+
// 3.16 Navigator detects state from file
|
|
594
|
+
const navState = nav.detectWorkflowStateFromFile(statePath);
|
|
595
|
+
assert(
|
|
596
|
+
navState !== null,
|
|
597
|
+
'3.16a Navigator detects state from file',
|
|
598
|
+
'Got null',
|
|
599
|
+
);
|
|
600
|
+
assert(
|
|
601
|
+
navState && navState.workflow === 'greenfield-service',
|
|
602
|
+
'3.16b Detected correct workflow',
|
|
603
|
+
`Got: ${navState?.workflow}`,
|
|
604
|
+
);
|
|
605
|
+
|
|
606
|
+
// 3.17 Navigator suggests commands from state
|
|
607
|
+
const suggestions = nav.suggestNextCommandsFromState(state);
|
|
608
|
+
assert(
|
|
609
|
+
suggestions.length > 0,
|
|
610
|
+
'3.17a Navigator generates suggestions from state',
|
|
611
|
+
'No suggestions',
|
|
612
|
+
);
|
|
613
|
+
assert(
|
|
614
|
+
suggestions.some((s) => s.command.includes('run-workflow')),
|
|
615
|
+
'3.17b Suggestions include run-workflow continue',
|
|
616
|
+
`Commands: ${suggestions.map((s) => s.command).join(', ')}`,
|
|
617
|
+
);
|
|
618
|
+
|
|
619
|
+
// 3.18 Navigator returns null for missing file
|
|
620
|
+
const navMissing = nav.detectWorkflowStateFromFile('/nonexistent.yaml');
|
|
621
|
+
assert(
|
|
622
|
+
navMissing === null,
|
|
623
|
+
'3.18 Navigator returns null for non-existent file',
|
|
624
|
+
`Got: ${navMissing}`,
|
|
625
|
+
);
|
|
626
|
+
|
|
627
|
+
// 3.19 workflow-patterns.yaml has state_integration
|
|
628
|
+
const patterns = yaml.load(fs.readFileSync(path.join(ROOT, '.aiox-core/data/workflow-patterns.yaml'), 'utf-8'));
|
|
629
|
+
assert(
|
|
630
|
+
!!patterns.state_integration,
|
|
631
|
+
'3.19a workflow-patterns.yaml has state_integration key',
|
|
632
|
+
'Missing state_integration',
|
|
633
|
+
);
|
|
634
|
+
assert(
|
|
635
|
+
!!patterns.state_integration.state_file_location,
|
|
636
|
+
'3.19b state_integration has state_file_location',
|
|
637
|
+
'Missing state_file_location',
|
|
638
|
+
);
|
|
639
|
+
assert(
|
|
640
|
+
!!patterns.state_integration.behavior,
|
|
641
|
+
'3.19c state_integration has behavior section',
|
|
642
|
+
'Missing behavior',
|
|
643
|
+
);
|
|
644
|
+
assert(
|
|
645
|
+
!!patterns.state_integration.commands,
|
|
646
|
+
'3.19d state_integration has commands section',
|
|
647
|
+
'Missing commands',
|
|
648
|
+
);
|
|
649
|
+
|
|
650
|
+
// 3.20 workflow-state-schema.yaml exists and is valid YAML
|
|
651
|
+
const schemaContent = fs.readFileSync(path.join(ROOT, '.aiox-core/data/workflow-state-schema.yaml'), 'utf-8');
|
|
652
|
+
const schema = yaml.load(schemaContent);
|
|
653
|
+
assert(
|
|
654
|
+
!!schema.fields,
|
|
655
|
+
'3.20a State schema has fields definition',
|
|
656
|
+
'Missing fields',
|
|
657
|
+
);
|
|
658
|
+
assert(
|
|
659
|
+
!!schema.fields.steps,
|
|
660
|
+
'3.20b State schema defines steps field',
|
|
661
|
+
'Missing steps field',
|
|
662
|
+
);
|
|
663
|
+
|
|
664
|
+
// 3.21 run-workflow.md task exists
|
|
665
|
+
assert(
|
|
666
|
+
fs.existsSync(path.join(ROOT, '.aiox-core/development/tasks/run-workflow.md')),
|
|
667
|
+
'3.21 run-workflow.md task file exists',
|
|
668
|
+
'File not found',
|
|
669
|
+
);
|
|
670
|
+
|
|
671
|
+
// 3.22 aiox-master has run-workflow command
|
|
672
|
+
const masterMd = fs.readFileSync(path.join(ROOT, '.aiox-core/development/agents/aiox-master.md'), 'utf-8');
|
|
673
|
+
assert(
|
|
674
|
+
masterMd.includes('name: run-workflow'),
|
|
675
|
+
'3.22a aiox-master has run-workflow command',
|
|
676
|
+
'Command not found',
|
|
677
|
+
);
|
|
678
|
+
assert(
|
|
679
|
+
masterMd.includes('run-workflow.md'),
|
|
680
|
+
'3.22b aiox-master has run-workflow.md in dependencies',
|
|
681
|
+
'Dependency not found',
|
|
682
|
+
);
|
|
683
|
+
|
|
684
|
+
} finally {
|
|
685
|
+
// Cleanup test state file
|
|
686
|
+
try {
|
|
687
|
+
fs.unlinkSync(statePath);
|
|
688
|
+
} catch {
|
|
689
|
+
// Already cleaned
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
// ============ GAP 4: Cross-Context Agent Support (Hybrid Workflows) ============
|
|
695
|
+
|
|
696
|
+
async function verifyGap4() {
|
|
697
|
+
section('GAP 4: Cross-Context Agent Support (Hybrid)');
|
|
698
|
+
|
|
699
|
+
// 4.1 Elicitation has 3 choices including hybrid
|
|
700
|
+
const steps = require('../../../.aiox-core/core/elicitation/workflow-elicitation.js');
|
|
701
|
+
const firstStep = steps[0];
|
|
702
|
+
const targetContextQ = firstStep.questions.find((q) => q.name === 'targetContext');
|
|
703
|
+
assert(
|
|
704
|
+
targetContextQ && targetContextQ.choices.length === 3,
|
|
705
|
+
'4.1a Elicitation has 3 choices',
|
|
706
|
+
`Expected 3 choices, got ${targetContextQ?.choices?.length}`,
|
|
707
|
+
);
|
|
708
|
+
const hybridChoice = targetContextQ && targetContextQ.choices.find((c) => c.value === 'hybrid');
|
|
709
|
+
assert(
|
|
710
|
+
!!hybridChoice,
|
|
711
|
+
'4.1b Elicitation includes hybrid choice',
|
|
712
|
+
'Missing hybrid choice in targetContext',
|
|
713
|
+
);
|
|
714
|
+
|
|
715
|
+
// 4.2 squadName shows for hybrid, hides for core
|
|
716
|
+
const squadNameQ = firstStep.questions.find((q) => q.name === 'squadName');
|
|
717
|
+
assert(
|
|
718
|
+
squadNameQ && squadNameQ.when({ targetContext: 'hybrid' }) === true,
|
|
719
|
+
'4.2a squadName shows when targetContext=hybrid',
|
|
720
|
+
'when() should return true for hybrid',
|
|
721
|
+
);
|
|
722
|
+
assert(
|
|
723
|
+
squadNameQ && squadNameQ.when({ targetContext: 'core' }) === false,
|
|
724
|
+
'4.2b squadName hidden when targetContext=core',
|
|
725
|
+
'when() should return false for core',
|
|
726
|
+
);
|
|
727
|
+
|
|
728
|
+
// 4.3 Schema includes hybrid
|
|
729
|
+
const schemaContent = fs.readFileSync(path.join(ROOT, '.aiox-core/data/workflow-state-schema.yaml'), 'utf-8');
|
|
730
|
+
const schema = yaml.load(schemaContent);
|
|
731
|
+
assert(
|
|
732
|
+
schema.fields.target_context.enum.includes('hybrid'),
|
|
733
|
+
'4.3 Schema enum includes hybrid',
|
|
734
|
+
`Enum: ${schema.fields.target_context.enum}`,
|
|
735
|
+
);
|
|
736
|
+
|
|
737
|
+
// 4.4 WorkflowValidator accepts squadAgentsPath
|
|
738
|
+
const { WorkflowValidator, WorkflowValidationErrorCodes } = require('../../../.aiox-core/development/scripts/workflow-validator');
|
|
739
|
+
const hybridValidator = new WorkflowValidator({
|
|
740
|
+
squadAgentsPath: '/tmp/fake-squad-agents',
|
|
741
|
+
});
|
|
742
|
+
assert(
|
|
743
|
+
hybridValidator.squadAgentsPath === '/tmp/fake-squad-agents',
|
|
744
|
+
'4.4 WorkflowValidator accepts squadAgentsPath option',
|
|
745
|
+
`Got: ${hybridValidator.squadAgentsPath}`,
|
|
746
|
+
);
|
|
747
|
+
|
|
748
|
+
// Setup temp dirs for agent tests
|
|
749
|
+
const tmpDir = path.join(__dirname, '_test_hybrid_agents');
|
|
750
|
+
const tmpCoreAgents = path.join(tmpDir, 'core-agents');
|
|
751
|
+
const tmpSquadAgents = path.join(tmpDir, 'squad-agents');
|
|
752
|
+
fs.mkdirSync(tmpCoreAgents, { recursive: true });
|
|
753
|
+
fs.mkdirSync(tmpSquadAgents, { recursive: true });
|
|
754
|
+
|
|
755
|
+
let hybridStateMgr, hybridState;
|
|
756
|
+
|
|
757
|
+
try {
|
|
758
|
+
|
|
759
|
+
// Create test agent files
|
|
760
|
+
fs.writeFileSync(path.join(tmpCoreAgents, 'architect.md'), '# Architect Agent');
|
|
761
|
+
fs.writeFileSync(path.join(tmpSquadAgents, 'validator.md'), '# Validator Agent');
|
|
762
|
+
fs.writeFileSync(path.join(tmpCoreAgents, 'pm.md'), '# PM Agent');
|
|
763
|
+
fs.writeFileSync(path.join(tmpSquadAgents, 'pm.md'), '# PM Agent (squad)'); // exists in both
|
|
764
|
+
|
|
765
|
+
const testValidator = new WorkflowValidator({
|
|
766
|
+
agentsPath: tmpCoreAgents,
|
|
767
|
+
squadAgentsPath: tmpSquadAgents,
|
|
768
|
+
});
|
|
769
|
+
|
|
770
|
+
// 4.5 Validator finds agent in core during hybrid mode
|
|
771
|
+
const coreAgentResult = await testValidator.validateAgentReferences([
|
|
772
|
+
{ agent: 'architect' },
|
|
773
|
+
]);
|
|
774
|
+
const coreNotFound = coreAgentResult.warnings.some(
|
|
775
|
+
(w) => w.code === 'WF_AGENT_NOT_FOUND' && w.message.includes('architect'),
|
|
776
|
+
);
|
|
777
|
+
assert(
|
|
778
|
+
!coreNotFound,
|
|
779
|
+
'4.5 Validator finds core agent "architect" in hybrid mode',
|
|
780
|
+
'architect should be found in core agents',
|
|
781
|
+
);
|
|
782
|
+
|
|
783
|
+
// 4.6 Validator finds agent in squad during hybrid mode
|
|
784
|
+
const squadAgentResult = await testValidator.validateAgentReferences([
|
|
785
|
+
{ agent: 'validator' },
|
|
786
|
+
]);
|
|
787
|
+
const squadNotFound = squadAgentResult.warnings.some(
|
|
788
|
+
(w) => w.code === 'WF_AGENT_NOT_FOUND' && w.message.includes('validator'),
|
|
789
|
+
);
|
|
790
|
+
assert(
|
|
791
|
+
!squadNotFound,
|
|
792
|
+
'4.6 Validator finds squad agent "validator" in hybrid mode',
|
|
793
|
+
'validator should be found in squad agents',
|
|
794
|
+
);
|
|
795
|
+
|
|
796
|
+
// 4.7 Validator warns for agent not found in either context
|
|
797
|
+
const missingResult = await testValidator.validateAgentReferences([
|
|
798
|
+
{ agent: 'nonexistent-agent' },
|
|
799
|
+
]);
|
|
800
|
+
const missingWarning = missingResult.warnings.some(
|
|
801
|
+
(w) => w.code === 'WF_AGENT_NOT_FOUND' && w.message.includes('nonexistent-agent'),
|
|
802
|
+
);
|
|
803
|
+
assert(
|
|
804
|
+
missingWarning,
|
|
805
|
+
'4.7 Validator warns for agent not found in either context',
|
|
806
|
+
'Should warn about nonexistent-agent',
|
|
807
|
+
);
|
|
808
|
+
|
|
809
|
+
// 4.8 Core-only validator works identically (backward compat)
|
|
810
|
+
const coreOnlyValidator = new WorkflowValidator({
|
|
811
|
+
agentsPath: tmpCoreAgents,
|
|
812
|
+
// squadAgentsPath NOT set — null
|
|
813
|
+
});
|
|
814
|
+
const coreOnlyResult = await coreOnlyValidator.validateAgentReferences([
|
|
815
|
+
{ agent: 'architect' },
|
|
816
|
+
]);
|
|
817
|
+
const coreOnlyNotFound = coreOnlyResult.warnings.some(
|
|
818
|
+
(w) => w.code === 'WF_AGENT_NOT_FOUND' && w.message.includes('architect'),
|
|
819
|
+
);
|
|
820
|
+
assert(
|
|
821
|
+
!coreOnlyNotFound,
|
|
822
|
+
'4.8 Core-only validator finds architect (backward compat)',
|
|
823
|
+
'architect should be found without squadAgentsPath',
|
|
824
|
+
);
|
|
825
|
+
|
|
826
|
+
// 4.9 Explicit prefix core:architect works
|
|
827
|
+
const explicitCoreResult = await testValidator.validateAgentReferences([
|
|
828
|
+
{ agent: 'core:architect' },
|
|
829
|
+
]);
|
|
830
|
+
const explicitCoreNotFound = explicitCoreResult.warnings.some(
|
|
831
|
+
(w) => w.code === 'WF_AGENT_NOT_FOUND',
|
|
832
|
+
);
|
|
833
|
+
assert(
|
|
834
|
+
!explicitCoreNotFound,
|
|
835
|
+
'4.9 Explicit prefix "core:architect" resolves correctly',
|
|
836
|
+
'core:architect should be found',
|
|
837
|
+
);
|
|
838
|
+
|
|
839
|
+
// 4.10 Explicit prefix squad:validator works
|
|
840
|
+
const explicitSquadResult = await testValidator.validateAgentReferences([
|
|
841
|
+
{ agent: 'squad:validator' },
|
|
842
|
+
]);
|
|
843
|
+
const explicitSquadNotFound = explicitSquadResult.warnings.some(
|
|
844
|
+
(w) => w.code === 'WF_AGENT_NOT_FOUND',
|
|
845
|
+
);
|
|
846
|
+
assert(
|
|
847
|
+
!explicitSquadNotFound,
|
|
848
|
+
'4.10 Explicit prefix "squad:validator" resolves correctly',
|
|
849
|
+
'squad:validator should be found',
|
|
850
|
+
);
|
|
851
|
+
|
|
852
|
+
// 4.11 StateManager.createState with hybrid
|
|
853
|
+
const { WorkflowStateManager } = require('../../../.aiox-core/development/scripts/workflow-state-manager');
|
|
854
|
+
hybridStateMgr = new WorkflowStateManager({ verbose: false });
|
|
855
|
+
const wfData = {
|
|
856
|
+
workflow: {
|
|
857
|
+
id: 'hybrid-test',
|
|
858
|
+
name: 'Hybrid Test Workflow',
|
|
859
|
+
sequence: [
|
|
860
|
+
{ agent: 'architect', creates: 'design.md' },
|
|
861
|
+
{ agent: 'validator', validates: 'design.md' },
|
|
862
|
+
],
|
|
863
|
+
},
|
|
864
|
+
};
|
|
865
|
+
hybridState = await hybridStateMgr.createState(wfData, {
|
|
866
|
+
target_context: 'hybrid',
|
|
867
|
+
squad_name: 'test-squad',
|
|
868
|
+
});
|
|
869
|
+
assert(
|
|
870
|
+
hybridState.target_context === 'hybrid',
|
|
871
|
+
'4.11a createState sets target_context=hybrid',
|
|
872
|
+
`Got: ${hybridState.target_context}`,
|
|
873
|
+
);
|
|
874
|
+
assert(
|
|
875
|
+
hybridState.squad_name === 'test-squad',
|
|
876
|
+
'4.11b createState sets squad_name for hybrid',
|
|
877
|
+
`Got: ${hybridState.squad_name}`,
|
|
878
|
+
);
|
|
879
|
+
|
|
880
|
+
// 4.12 resolveAgentPaths returns both paths for hybrid
|
|
881
|
+
const hybridPaths = hybridStateMgr.resolveAgentPaths(hybridState);
|
|
882
|
+
assert(
|
|
883
|
+
hybridPaths.corePath !== null && hybridPaths.squadPath !== null,
|
|
884
|
+
'4.12 resolveAgentPaths returns both corePath and squadPath for hybrid',
|
|
885
|
+
`corePath=${hybridPaths.corePath}, squadPath=${hybridPaths.squadPath}`,
|
|
886
|
+
);
|
|
887
|
+
|
|
888
|
+
// 4.13 resolveAgentPaths returns null squadPath for core
|
|
889
|
+
const coreState = { target_context: 'core', squad_name: null };
|
|
890
|
+
const corePaths = hybridStateMgr.resolveAgentPaths(coreState);
|
|
891
|
+
assert(
|
|
892
|
+
corePaths.squadPath === null,
|
|
893
|
+
'4.13 resolveAgentPaths returns null squadPath for core',
|
|
894
|
+
`Got squadPath: ${corePaths.squadPath}`,
|
|
895
|
+
);
|
|
896
|
+
|
|
897
|
+
// 4.14 workflow-patterns.yaml has cross_context
|
|
898
|
+
const patterns = yaml.load(fs.readFileSync(path.join(ROOT, '.aiox-core/data/workflow-patterns.yaml'), 'utf-8'));
|
|
899
|
+
assert(
|
|
900
|
+
!!patterns.cross_context,
|
|
901
|
+
'4.14a workflow-patterns.yaml has cross_context key',
|
|
902
|
+
'Missing cross_context',
|
|
903
|
+
);
|
|
904
|
+
assert(
|
|
905
|
+
!!patterns.cross_context.resolution_rules,
|
|
906
|
+
'4.14b cross_context has resolution_rules',
|
|
907
|
+
'Missing resolution_rules',
|
|
908
|
+
);
|
|
909
|
+
assert(
|
|
910
|
+
!!patterns.cross_context.explicit_prefix,
|
|
911
|
+
'4.14c cross_context has explicit_prefix',
|
|
912
|
+
'Missing explicit_prefix',
|
|
913
|
+
);
|
|
914
|
+
assert(
|
|
915
|
+
!!patterns.cross_context.hybrid_workflow_storage,
|
|
916
|
+
'4.14d cross_context has hybrid_workflow_storage',
|
|
917
|
+
'Missing hybrid_workflow_storage',
|
|
918
|
+
);
|
|
919
|
+
assert(
|
|
920
|
+
!!patterns.cross_context.validator_behavior,
|
|
921
|
+
'4.14e cross_context has validator_behavior',
|
|
922
|
+
'Missing validator_behavior',
|
|
923
|
+
);
|
|
924
|
+
|
|
925
|
+
// 4.15 All 4 task docs mention hybrid
|
|
926
|
+
const taskFiles = [
|
|
927
|
+
'create-workflow.md',
|
|
928
|
+
'modify-workflow.md',
|
|
929
|
+
'validate-workflow.md',
|
|
930
|
+
'run-workflow.md',
|
|
931
|
+
];
|
|
932
|
+
for (const taskFile of taskFiles) {
|
|
933
|
+
const content = fs.readFileSync(path.join(ROOT, '.aiox-core/development/tasks', taskFile), 'utf-8');
|
|
934
|
+
assert(
|
|
935
|
+
content.includes('hybrid'),
|
|
936
|
+
`4.15 ${taskFile} mentions hybrid`,
|
|
937
|
+
`"hybrid" not found in ${taskFile}`,
|
|
938
|
+
);
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
// 4.16 Template mentions hybrid
|
|
942
|
+
const template = fs.readFileSync(path.join(ROOT, '.aiox-core/product/templates/workflow-template.yaml'), 'utf-8');
|
|
943
|
+
assert(
|
|
944
|
+
template.includes('hybrid') || template.includes('IF_HYBRID'),
|
|
945
|
+
'4.16 workflow-template.yaml mentions hybrid',
|
|
946
|
+
'Missing hybrid reference in template',
|
|
947
|
+
);
|
|
948
|
+
|
|
949
|
+
// 4.17 WF_AGENT_AMBIGUOUS error code exists
|
|
950
|
+
assert(
|
|
951
|
+
WorkflowValidationErrorCodes.WF_AGENT_AMBIGUOUS === 'WF_AGENT_AMBIGUOUS',
|
|
952
|
+
'4.17a WF_AGENT_AMBIGUOUS error code exists',
|
|
953
|
+
'Missing WF_AGENT_AMBIGUOUS in error codes',
|
|
954
|
+
);
|
|
955
|
+
|
|
956
|
+
// Also verify ambiguity detection works (pm exists in both)
|
|
957
|
+
const ambiguousResult = await testValidator.validateAgentReferences([
|
|
958
|
+
{ agent: 'pm' },
|
|
959
|
+
]);
|
|
960
|
+
const ambiguousWarning = ambiguousResult.warnings.some(
|
|
961
|
+
(w) => w.code === 'WF_AGENT_AMBIGUOUS' && w.message.includes('pm'),
|
|
962
|
+
);
|
|
963
|
+
assert(
|
|
964
|
+
ambiguousWarning,
|
|
965
|
+
'4.17b Validator detects ambiguous agent (pm in both contexts)',
|
|
966
|
+
'Should emit WF_AGENT_AMBIGUOUS for pm',
|
|
967
|
+
);
|
|
968
|
+
} finally {
|
|
969
|
+
// Cleanup
|
|
970
|
+
if (hybridStateMgr && hybridState) {
|
|
971
|
+
const cleanupPath = hybridStateMgr._resolveStatePath(hybridState.instance_id);
|
|
972
|
+
try { fs.unlinkSync(cleanupPath); } catch { /* already cleaned */ }
|
|
973
|
+
}
|
|
974
|
+
try { fs.rmSync(tmpDir, { recursive: true }); } catch { /* cleanup */ }
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
// ============ Main ============
|
|
979
|
+
|
|
980
|
+
async function main() {
|
|
981
|
+
console.log('\n' + '='.repeat(60));
|
|
982
|
+
console.log(' AIOX Workflow Gaps — Verification Suite');
|
|
983
|
+
console.log(' Running from:', process.cwd());
|
|
984
|
+
console.log('='.repeat(60));
|
|
985
|
+
|
|
986
|
+
try {
|
|
987
|
+
verifyGap1();
|
|
988
|
+
} catch (e) {
|
|
989
|
+
fail('GAP 1 unexpected error', e.message);
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
try {
|
|
993
|
+
await verifyGap2();
|
|
994
|
+
} catch (e) {
|
|
995
|
+
fail('GAP 2 unexpected error', e.message);
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
try {
|
|
999
|
+
await verifyGap3();
|
|
1000
|
+
} catch (e) {
|
|
1001
|
+
fail('GAP 3 unexpected error', e.message);
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
try {
|
|
1005
|
+
await verifyGap4();
|
|
1006
|
+
} catch (e) {
|
|
1007
|
+
fail('GAP 4 unexpected error', e.message);
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
// Summary
|
|
1011
|
+
console.log('\n' + '='.repeat(60));
|
|
1012
|
+
console.log(' RESULTS');
|
|
1013
|
+
console.log('='.repeat(60));
|
|
1014
|
+
console.log(` Total: ${totalTests}`);
|
|
1015
|
+
console.log(` Passed: ${passedTests}`);
|
|
1016
|
+
console.log(` Failed: ${failedTests}`);
|
|
1017
|
+
|
|
1018
|
+
if (failures.length > 0) {
|
|
1019
|
+
console.log('\n Failed tests:');
|
|
1020
|
+
failures.forEach((f) => {
|
|
1021
|
+
console.log(` - ${f.name}`);
|
|
1022
|
+
console.log(` ${f.reason}`);
|
|
1023
|
+
});
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
console.log('\n' + (failedTests === 0 ? ' ALL TESTS PASSED' : ` ${failedTests} TEST(S) FAILED`));
|
|
1027
|
+
console.log('='.repeat(60) + '\n');
|
|
1028
|
+
|
|
1029
|
+
process.exit(failedTests > 0 ? 1 : 0);
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
main();
|