aios-core 2.1.5 ā 2.2.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/.aios-core/core/README.md +229 -229
- package/.aios-core/core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/core/data/aios-kb.md +923 -923
- package/.aios-core/core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/core/docs/component-creation-guide.md +457 -457
- package/.aios-core/core/docs/session-update-pattern.md +307 -307
- package/.aios-core/core/docs/template-syntax.md +266 -266
- package/.aios-core/core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/core/elicitation/elicitation-engine.js +1 -1
- package/.aios-core/core/index.esm.js +42 -42
- package/.aios-core/core/index.js +1 -1
- package/.aios-core/core/migration/migration-config.yaml +83 -83
- package/.aios-core/core/migration/module-mapping.yaml +89 -89
- package/.aios-core/core/quality-gates/layer2-pr-automation.js +1 -1
- package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -86
- package/.aios-core/core/registry/README.md +179 -179
- package/.aios-core/core/utils/security-utils.js +1 -1
- package/.aios-core/core-config.yaml +391 -382
- package/.aios-core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/data/aios-kb.md +923 -923
- package/.aios-core/data/technical-preferences.md +3 -3
- package/.aios-core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/development/README.md +142 -142
- package/.aios-core/development/agent-teams/team-all.yaml +15 -15
- package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -18
- package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -10
- package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -13
- package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -155
- package/.aios-core/development/agents/aios-master.md +339 -339
- package/.aios-core/development/agents/analyst.md +195 -195
- package/.aios-core/development/agents/architect.md +359 -359
- package/.aios-core/development/agents/data-engineer.md +468 -468
- package/.aios-core/development/agents/dev.md +390 -390
- package/.aios-core/development/agents/devops.md +398 -398
- package/.aios-core/development/agents/pm.md +198 -198
- package/.aios-core/development/agents/po.md +256 -256
- package/.aios-core/development/agents/qa.md +312 -312
- package/.aios-core/development/agents/sm.md +220 -220
- package/.aios-core/development/agents/ux-design-expert.md +451 -451
- package/.aios-core/development/scripts/greeting-config-cli.js +85 -85
- package/.aios-core/development/tasks/add-mcp.md +319 -319
- package/.aios-core/development/tasks/advanced-elicitation.md +318 -318
- package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +341 -341
- package/.aios-core/development/tasks/analyze-brownfield.md +456 -0
- package/.aios-core/development/tasks/analyze-framework.md +696 -696
- package/.aios-core/development/tasks/analyze-performance.md +637 -637
- package/.aios-core/development/tasks/apply-qa-fixes.md +340 -340
- package/.aios-core/development/tasks/architect-analyze-impact.md +826 -826
- package/.aios-core/development/tasks/audit-codebase.md +429 -429
- package/.aios-core/development/tasks/audit-tailwind-config.md +270 -270
- package/.aios-core/development/tasks/audit-utilities.md +358 -358
- package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -286
- package/.aios-core/development/tasks/brownfield-create-epic.md +485 -485
- package/.aios-core/development/tasks/brownfield-create-story.md +356 -356
- package/.aios-core/development/tasks/build-component.md +478 -478
- package/.aios-core/development/tasks/calculate-roi.md +455 -455
- package/.aios-core/development/tasks/ci-cd-configuration.md +764 -764
- package/.aios-core/development/tasks/cleanup-utilities.md +670 -670
- package/.aios-core/development/tasks/collaborative-edit.md +1108 -1108
- package/.aios-core/development/tasks/compose-molecule.md +284 -284
- package/.aios-core/development/tasks/consolidate-patterns.md +414 -414
- package/.aios-core/development/tasks/correct-course.md +279 -279
- package/.aios-core/development/tasks/create-agent.md +321 -321
- package/.aios-core/development/tasks/create-brownfield-story.md +726 -726
- package/.aios-core/development/tasks/create-deep-research-prompt.md +498 -498
- package/.aios-core/development/tasks/create-doc.md +316 -316
- package/.aios-core/development/tasks/create-next-story.md +774 -774
- package/.aios-core/development/tasks/create-suite.md +283 -283
- package/.aios-core/development/tasks/create-task.md +371 -371
- package/.aios-core/development/tasks/create-workflow.md +370 -370
- package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -572
- package/.aios-core/development/tasks/db-apply-migration.md +381 -381
- package/.aios-core/development/tasks/db-bootstrap.md +642 -642
- package/.aios-core/development/tasks/db-domain-modeling.md +693 -693
- package/.aios-core/development/tasks/db-dry-run.md +293 -293
- package/.aios-core/development/tasks/db-env-check.md +260 -260
- package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -663
- package/.aios-core/development/tasks/db-explain.md +631 -631
- package/.aios-core/development/tasks/db-impersonate.md +495 -495
- package/.aios-core/development/tasks/db-load-csv.md +593 -593
- package/.aios-core/development/tasks/db-policy-apply.md +653 -653
- package/.aios-core/development/tasks/db-rls-audit.md +411 -411
- package/.aios-core/development/tasks/db-rollback.md +739 -739
- package/.aios-core/development/tasks/db-run-sql.md +613 -613
- package/.aios-core/development/tasks/db-schema-audit.md +1011 -1011
- package/.aios-core/development/tasks/db-seed.md +390 -390
- package/.aios-core/development/tasks/db-smoke-test.md +351 -351
- package/.aios-core/development/tasks/db-snapshot.md +569 -569
- package/.aios-core/development/tasks/db-supabase-setup.md +712 -712
- package/.aios-core/development/tasks/db-verify-order.md +515 -515
- package/.aios-core/development/tasks/deprecate-component.md +956 -956
- package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -318
- package/.aios-core/development/tasks/dev-backlog-debt.md +469 -469
- package/.aios-core/development/tasks/dev-develop-story.md +846 -846
- package/.aios-core/development/tasks/dev-improve-code-quality.md +872 -872
- package/.aios-core/development/tasks/dev-optimize-performance.md +1033 -1033
- package/.aios-core/development/tasks/dev-suggest-refactoring.md +870 -870
- package/.aios-core/development/tasks/dev-validate-next-story.md +348 -348
- package/.aios-core/development/tasks/document-project.md +552 -552
- package/.aios-core/development/tasks/environment-bootstrap.md +1311 -1311
- package/.aios-core/development/tasks/execute-checklist.md +301 -301
- package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -274
- package/.aios-core/development/tasks/extend-pattern.md +269 -269
- package/.aios-core/development/tasks/extract-tokens.md +467 -467
- package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -518
- package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +260 -260
- package/.aios-core/development/tasks/generate-documentation.md +284 -284
- package/.aios-core/development/tasks/generate-migration-strategy.md +522 -522
- package/.aios-core/development/tasks/generate-shock-report.md +501 -501
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -427
- package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -733
- package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -374
- package/.aios-core/development/tasks/github-devops-version-management.md +483 -483
- package/.aios-core/development/tasks/improve-self.md +822 -822
- package/.aios-core/development/tasks/index-docs.md +387 -387
- package/.aios-core/development/tasks/init-project-status.md +506 -506
- package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -314
- package/.aios-core/development/tasks/kb-mode-interaction.md +283 -283
- package/.aios-core/development/tasks/learn-patterns.md +900 -900
- package/.aios-core/development/tasks/mcp-workflow.md +437 -437
- package/.aios-core/development/tasks/modify-agent.md +381 -381
- package/.aios-core/development/tasks/modify-task.md +424 -424
- package/.aios-core/development/tasks/modify-workflow.md +465 -465
- package/.aios-core/development/tasks/po-backlog-add.md +370 -370
- package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -523
- package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -540
- package/.aios-core/development/tasks/po-pull-story.md +316 -316
- package/.aios-core/development/tasks/po-stories-index.md +351 -351
- package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -457
- package/.aios-core/development/tasks/po-sync-story.md +303 -303
- package/.aios-core/development/tasks/pr-automation.md +701 -701
- package/.aios-core/development/tasks/propose-modification.md +842 -842
- package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -425
- package/.aios-core/development/tasks/qa-gate.md +373 -373
- package/.aios-core/development/tasks/qa-generate-tests.md +1174 -1174
- package/.aios-core/development/tasks/qa-nfr-assess.md +557 -557
- package/.aios-core/development/tasks/qa-review-proposal.md +1157 -1157
- package/.aios-core/development/tasks/qa-review-story.md +682 -682
- package/.aios-core/development/tasks/qa-risk-profile.md +566 -566
- package/.aios-core/development/tasks/qa-run-tests.md +277 -277
- package/.aios-core/development/tasks/qa-test-design.md +387 -387
- package/.aios-core/development/tasks/qa-trace-requirements.md +476 -476
- package/.aios-core/development/tasks/release-management.md +723 -723
- package/.aios-core/development/tasks/security-audit.md +554 -554
- package/.aios-core/development/tasks/security-scan.md +790 -790
- package/.aios-core/development/tasks/setup-database.md +741 -741
- package/.aios-core/development/tasks/setup-design-system.md +462 -462
- package/.aios-core/development/tasks/setup-github.md +874 -874
- package/.aios-core/development/tasks/setup-llm-routing.md +1 -1
- package/.aios-core/development/tasks/setup-mcp-docker.md +584 -584
- package/.aios-core/development/tasks/setup-project-docs.md +440 -0
- package/.aios-core/development/tasks/shard-doc.md +537 -537
- package/.aios-core/development/tasks/sm-create-next-story.md +480 -480
- package/.aios-core/development/tasks/sync-documentation.md +864 -864
- package/.aios-core/development/tasks/tailwind-upgrade.md +294 -294
- package/.aios-core/development/tasks/test-as-user.md +621 -621
- package/.aios-core/development/tasks/test-validation-task.md +171 -171
- package/.aios-core/development/tasks/undo-last.md +346 -346
- package/.aios-core/development/tasks/update-manifest.md +409 -409
- package/.aios-core/development/tasks/ux-create-wireframe.md +617 -617
- package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -672
- package/.aios-core/development/tasks/ux-user-research.md +559 -559
- package/.aios-core/development/tasks/validate-next-story.md +422 -422
- package/.aios-core/development/workflows/README.md +83 -83
- package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -297
- package/.aios-core/development/workflows/brownfield-service.yaml +187 -187
- package/.aios-core/development/workflows/brownfield-ui.yaml +197 -197
- package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -333
- package/.aios-core/development/workflows/greenfield-service.yaml +206 -206
- package/.aios-core/development/workflows/greenfield-ui.yaml +235 -235
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/docs/component-creation-guide.md +457 -457
- package/.aios-core/docs/session-update-pattern.md +307 -307
- package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -572
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -185
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -354
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -1963
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -821
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -1190
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -439
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -1339
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -5398
- package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -697
- package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -511
- package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -556
- package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -210
- package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -550
- package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -1414
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -523
- package/.aios-core/docs/template-syntax.md +266 -266
- package/.aios-core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/index.esm.js +15 -15
- package/.aios-core/index.js +1 -1
- package/.aios-core/infrastructure/README.md +126 -126
- package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -59
- package/.aios-core/infrastructure/scripts/approval-workflow.js +1 -1
- package/.aios-core/infrastructure/scripts/batch-creator.js +1 -1
- package/.aios-core/infrastructure/scripts/component-generator.js +3 -3
- package/.aios-core/infrastructure/scripts/component-metadata.js +1 -1
- package/.aios-core/infrastructure/scripts/component-search.js +1 -1
- package/.aios-core/infrastructure/scripts/coverage-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/documentation-integrity/brownfield-analyzer.js +501 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/config-generator.js +368 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/deployment-config-loader.js +308 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/doc-generator.js +331 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/gitignore-generator.js +312 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/index.js +74 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/mode-detector.js +389 -0
- package/.aios-core/infrastructure/scripts/framework-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/improvement-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +26 -13
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.sh +108 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.sh +65 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.sh +16 -0
- package/.aios-core/infrastructure/scripts/llm-routing/usage-tracker/index.js +549 -0
- package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/performance-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -134
- package/.aios-core/infrastructure/scripts/repository-detector.js +3 -3
- package/.aios-core/infrastructure/scripts/template-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/template-validator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-generator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/transaction-manager.js +1 -1
- package/.aios-core/infrastructure/scripts/usage-analytics.js +1 -1
- package/.aios-core/infrastructure/scripts/visual-impact-generator.js +2 -2
- package/.aios-core/infrastructure/templates/core-config/core-config-brownfield.tmpl.yaml +176 -0
- package/.aios-core/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +127 -0
- package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -109
- package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -0
- package/.aios-core/infrastructure/templates/project-docs/coding-standards-tmpl.md +346 -0
- package/.aios-core/infrastructure/templates/project-docs/source-tree-tmpl.md +177 -0
- package/.aios-core/infrastructure/templates/project-docs/tech-stack-tmpl.md +267 -0
- package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -621
- package/.aios-core/infrastructure/tools/README.md +222 -222
- package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -200
- package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -260
- package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -224
- package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -261
- package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -127
- package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -534
- package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -78
- package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -180
- package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -930
- package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -551
- package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -808
- package/.aios-core/install-manifest.yaml +347 -347
- package/.aios-core/product/README.md +56 -56
- package/.aios-core/product/checklists/accessibility-wcag-checklist.md +80 -0
- package/.aios-core/product/checklists/architect-checklist.md +443 -443
- package/.aios-core/product/checklists/change-checklist.md +182 -182
- package/.aios-core/product/checklists/component-quality-checklist.md +74 -0
- package/.aios-core/product/checklists/database-design-checklist.md +119 -119
- package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -97
- package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -99
- package/.aios-core/product/checklists/migration-readiness-checklist.md +75 -0
- package/.aios-core/product/checklists/pattern-audit-checklist.md +88 -0
- package/.aios-core/product/checklists/pm-checklist.md +375 -375
- package/.aios-core/product/checklists/po-master-checklist.md +441 -441
- package/.aios-core/product/checklists/pre-push-checklist.md +108 -108
- package/.aios-core/product/checklists/release-checklist.md +122 -122
- package/.aios-core/product/checklists/story-dod-checklist.md +101 -101
- package/.aios-core/product/checklists/story-draft-checklist.md +215 -215
- package/.aios-core/product/data/atomic-design-principles.md +108 -0
- package/.aios-core/product/data/brainstorming-techniques.md +36 -36
- package/.aios-core/product/data/consolidation-algorithms.md +142 -0
- package/.aios-core/product/data/database-best-practices.md +182 -0
- package/.aios-core/product/data/design-token-best-practices.md +107 -0
- package/.aios-core/product/data/elicitation-methods.md +134 -134
- package/.aios-core/product/data/integration-patterns.md +207 -0
- package/.aios-core/product/data/migration-safety-guide.md +329 -0
- package/.aios-core/product/data/mode-selection-best-practices.md +471 -471
- package/.aios-core/product/data/postgres-tuning-guide.md +300 -0
- package/.aios-core/product/data/rls-security-patterns.md +333 -0
- package/.aios-core/product/data/roi-calculation-guide.md +142 -0
- package/.aios-core/product/data/supabase-patterns.md +330 -0
- package/.aios-core/product/data/test-levels-framework.md +148 -148
- package/.aios-core/product/data/test-priorities-matrix.md +174 -174
- package/.aios-core/product/data/wcag-compliance-guide.md +267 -0
- package/.aios-core/product/templates/1mcp-config.yaml +225 -225
- package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -63
- package/.aios-core/product/templates/activation-instructions-template.md +258 -258
- package/.aios-core/product/templates/agent-template.yaml +120 -120
- package/.aios-core/product/templates/architecture-tmpl.yaml +650 -650
- package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +155 -155
- package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +475 -475
- package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +279 -279
- package/.aios-core/product/templates/changelog-template.md +134 -134
- package/.aios-core/product/templates/command-rationalization-matrix.md +152 -152
- package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +292 -292
- package/.aios-core/product/templates/design-story-tmpl.yaml +587 -587
- package/.aios-core/product/templates/ds-artifact-analysis.md +70 -70
- package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +205 -205
- package/.aios-core/product/templates/front-end-spec-tmpl.yaml +348 -348
- package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +804 -804
- package/.aios-core/product/templates/github-pr-template.md +67 -67
- package/.aios-core/product/templates/gordon-mcp.yaml +140 -140
- package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -221
- package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -84
- package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -92
- package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -85
- package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -86
- package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -104
- package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -80
- package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -53
- package/.aios-core/product/templates/market-research-tmpl.yaml +251 -251
- package/.aios-core/product/templates/mcp-workflow.js +271 -271
- package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -1022
- package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -524
- package/.aios-core/product/templates/personalized-agent-template.md +258 -258
- package/.aios-core/product/templates/personalized-checklist-template.md +340 -340
- package/.aios-core/product/templates/personalized-task-template-v2.md +905 -905
- package/.aios-core/product/templates/personalized-task-template.md +344 -344
- package/.aios-core/product/templates/personalized-template-file.yaml +322 -322
- package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -460
- package/.aios-core/product/templates/prd-tmpl.yaml +201 -201
- package/.aios-core/product/templates/project-brief-tmpl.yaml +220 -220
- package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -240
- package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -1203
- package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -428
- package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -219
- package/.aios-core/product/templates/story-tmpl.yaml +331 -331
- package/.aios-core/product/templates/task-execution-report.md +495 -495
- package/.aios-core/product/templates/task-template.md +122 -122
- package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -395
- package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -305
- package/.aios-core/product/templates/workflow-template.yaml +133 -133
- package/.aios-core/scripts/README.md +354 -354
- package/.aios-core/scripts/aios-doc-template.md +325 -325
- package/.aios-core/scripts/elicitation-engine.js +1 -1
- package/.aios-core/scripts/test-template-system.js +1 -1
- package/.aios-core/scripts/workflow-management.md +69 -69
- package/.aios-core/user-guide.md +1413 -1413
- package/.aios-core/working-in-the-brownfield.md +361 -361
- package/LICENSE +1 -1
- package/README.md +702 -703
- package/bin/aios-init-old.js +3 -3
- package/bin/aios-init-v4.js +1 -1
- package/bin/aios-init.backup-v1.1.4.js +1 -1
- package/bin/aios-init.js +3 -3
- package/bin/aios.js +279 -279
- package/bin/utils/install-errors.js +339 -339
- package/bin/utils/install-transaction.js +445 -445
- package/index.d.ts +18 -18
- package/index.esm.js +20 -20
- package/index.js +6 -6
- package/package.json +8 -10
- package/packages/installer/src/config/templates/env-template.js +27 -4
- package/packages/installer/src/detection/detect-project-type.js +81 -81
- package/packages/installer/src/wizard/wizard.js +185 -34
- package/packages/installer/tests/integration/environment-configuration.test.js +2 -1
- package/packages/installer/tests/integration/wizard-detection.test.js +8 -6
- package/packages/installer/tests/unit/env-template.test.js +11 -10
- package/src/config/ide-configs.js +1 -1
- package/src/wizard/feedback.js +2 -2
- package/src/wizard/index.js +1 -1
- package/src/wizard/validation/report-generator.js +1 -1
- package/src/wizard/validation/troubleshooting-system.js +13 -13
- package/.aios-core/development/tasks/validate-structure.md +0 -243
- package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +0 -122
- package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +0 -89
- package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +0 -780
- package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +0 -950
- package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +0 -425
- package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +0 -132
- package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +0 -381
- package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +0 -203
- package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +0 -24
- package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +0 -51
- package/.aios-core/infrastructure/scripts/source-tree-guardian/index.js +0 -375
- package/.aios-core/infrastructure/scripts/source-tree-guardian/manifest-generator.js +0 -410
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/naming-rules.yaml +0 -285
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/placement-rules.yaml +0 -262
- package/.aios-core/infrastructure/scripts/source-tree-guardian/validator.js +0 -468
- package/.aios-core/tasks/find-component.md.legacy +0 -391
- package/.aios-core/tasks/generate-commit-message.md.legacy +0 -426
- package/.aios-core/tasks/generate-migration.md.legacy +0 -382
- package/.aios-core/tasks/rollback-modification.md.legacy +0 -307
- package/.aios-core/tasks/update-tests.md.legacy +0 -283
|
@@ -1,865 +1,865 @@
|
|
|
1
|
-
# sync-documentation
|
|
2
|
-
|
|
3
|
-
**Task ID:** `sync-documentation`
|
|
4
|
-
**Version:** 2.0.0
|
|
5
|
-
**Status:** Active
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Purpose
|
|
10
|
-
|
|
11
|
-
Automatically synchronize documentation with code changes to ensure documentation stays up-to-date with implementation.
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Execution Modes
|
|
16
|
-
|
|
17
|
-
**Choose your execution mode:**
|
|
18
|
-
|
|
19
|
-
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
20
|
-
- Autonomous decision making with logging
|
|
21
|
-
- Minimal user interaction
|
|
22
|
-
- **Best for:** Simple, deterministic tasks
|
|
23
|
-
|
|
24
|
-
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
25
|
-
- Explicit decision checkpoints
|
|
26
|
-
- Educational explanations
|
|
27
|
-
- **Best for:** Learning, complex decisions
|
|
28
|
-
|
|
29
|
-
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
30
|
-
- Task analysis phase (identify all ambiguities)
|
|
31
|
-
- Zero ambiguity execution
|
|
32
|
-
- **Best for:** Ambiguous requirements, critical work
|
|
33
|
-
|
|
34
|
-
**Parameter:** `mode` (optional, default: `interactive`)
|
|
35
|
-
|
|
36
|
-
**Valid values:** `yolo`, `interactive`, `preflight`
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## Task Definition (AIOS Task Format V1.0)
|
|
41
|
-
|
|
42
|
-
```yaml
|
|
43
|
-
task: syncDocumentation()
|
|
44
|
-
responsƔvel: Morgan (Strategist)
|
|
45
|
-
responsavel_type: Agente
|
|
46
|
-
atomic_layer: Molecule
|
|
47
|
-
|
|
48
|
-
**Entrada:**
|
|
49
|
-
- campo: task
|
|
50
|
-
tipo: string
|
|
51
|
-
origem: User Input
|
|
52
|
-
obrigatório: true
|
|
53
|
-
validação: Must be registered task
|
|
54
|
-
|
|
55
|
-
- campo: parameters
|
|
56
|
-
tipo: object
|
|
57
|
-
origem: User Input
|
|
58
|
-
obrigatório: false
|
|
59
|
-
validação: Valid task parameters
|
|
60
|
-
|
|
61
|
-
- campo: mode
|
|
62
|
-
tipo: string
|
|
63
|
-
origem: User Input
|
|
64
|
-
obrigatório: false
|
|
65
|
-
validação: yolo|interactive|pre-flight
|
|
66
|
-
|
|
67
|
-
**SaĆda:**
|
|
68
|
-
- campo: execution_result
|
|
69
|
-
tipo: object
|
|
70
|
-
destino: Memory
|
|
71
|
-
persistido: false
|
|
72
|
-
|
|
73
|
-
- campo: logs
|
|
74
|
-
tipo: array
|
|
75
|
-
destino: File (.ai/logs/*)
|
|
76
|
-
persistido: true
|
|
77
|
-
|
|
78
|
-
- campo: state
|
|
79
|
-
tipo: object
|
|
80
|
-
destino: State management
|
|
81
|
-
persistido: true
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## Pre-Conditions
|
|
87
|
-
|
|
88
|
-
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
89
|
-
|
|
90
|
-
**Checklist:**
|
|
91
|
-
|
|
92
|
-
```yaml
|
|
93
|
-
pre-conditions:
|
|
94
|
-
- [ ] Task is registered; required parameters provided; dependencies met
|
|
95
|
-
tipo: pre-condition
|
|
96
|
-
blocker: true
|
|
97
|
-
validação: |
|
|
98
|
-
Check task is registered; required parameters provided; dependencies met
|
|
99
|
-
error_message: "Pre-condition failed: Task is registered; required parameters provided; dependencies met"
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
## Step-by-Step Execution
|
|
105
|
-
|
|
106
|
-
### Step 1: Parse Parameters
|
|
107
|
-
|
|
108
|
-
**Purpose:** Parse and validate command-line parameters
|
|
109
|
-
|
|
110
|
-
**Actions:**
|
|
111
|
-
1. Parse command-line options (--component, --all, --check, etc.)
|
|
112
|
-
2. Validate sync strategies
|
|
113
|
-
3. Set default values
|
|
114
|
-
4. Validate file paths if provided
|
|
115
|
-
|
|
116
|
-
**Validation:**
|
|
117
|
-
- Parameters are valid
|
|
118
|
-
- Strategies are supported
|
|
119
|
-
- File paths exist (if specified)
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
### Step 2: Initialize Dependencies
|
|
124
|
-
|
|
125
|
-
**Purpose:** Set up documentation synchronizer and required tools
|
|
126
|
-
|
|
127
|
-
**Actions:**
|
|
128
|
-
1. Load DocumentationSynchronizer module
|
|
129
|
-
2. Initialize synchronizer with root path
|
|
130
|
-
3. Set up event listeners
|
|
131
|
-
4. Verify all dependencies available
|
|
132
|
-
|
|
133
|
-
**Validation:**
|
|
134
|
-
- Synchronizer initialized successfully
|
|
135
|
-
- Event listeners registered
|
|
136
|
-
- Dependencies available
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
|
|
140
|
-
### Step 3: Execute Requested Action
|
|
141
|
-
|
|
142
|
-
**Purpose:** Execute the requested synchronization action
|
|
143
|
-
|
|
144
|
-
**Actions:**
|
|
145
|
-
1. Determine action type (check, sync, auto-sync, report)
|
|
146
|
-
2. Execute corresponding method
|
|
147
|
-
3. Handle errors gracefully
|
|
148
|
-
4. Return results
|
|
149
|
-
|
|
150
|
-
**Validation:**
|
|
151
|
-
- Action executed successfully
|
|
152
|
-
- Results returned
|
|
153
|
-
- Errors handled appropriately
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Post-Conditions
|
|
158
|
-
|
|
159
|
-
**Purpose:** Validate execution success AFTER task completes
|
|
160
|
-
|
|
161
|
-
**Checklist:**
|
|
162
|
-
|
|
163
|
-
```yaml
|
|
164
|
-
post-conditions:
|
|
165
|
-
- [ ] Task completed; exit code 0; expected outputs created
|
|
166
|
-
tipo: post-condition
|
|
167
|
-
blocker: true
|
|
168
|
-
validação: |
|
|
169
|
-
Verify task completed; exit code 0; expected outputs created
|
|
170
|
-
rollback: false
|
|
171
|
-
error_message: "Post-condition failed: Task completed; exit code 0; expected outputs created"
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
## Acceptance Criteria
|
|
177
|
-
|
|
178
|
-
**Purpose:** Validate story requirements AFTER workflow (non-blocking, can be manual)
|
|
179
|
-
|
|
180
|
-
**Checklist:**
|
|
181
|
-
|
|
182
|
-
```yaml
|
|
183
|
-
acceptance-criteria:
|
|
184
|
-
- [ ] Task completed as expected; side effects documented
|
|
185
|
-
tipo: acceptance-criterion
|
|
186
|
-
blocker: false
|
|
187
|
-
story: N/A
|
|
188
|
-
manual_check: false
|
|
189
|
-
validação: |
|
|
190
|
-
Assert task completed as expected; side effects documented
|
|
191
|
-
error_message: "Acceptance criterion not met: Task completed as expected; side effects documented"
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## Tools (External/Shared)
|
|
197
|
-
|
|
198
|
-
**Purpose:** Catalog reusable tools used by multiple agents
|
|
199
|
-
|
|
200
|
-
```yaml
|
|
201
|
-
**Tools:**
|
|
202
|
-
- task-runner:
|
|
203
|
-
version: latest
|
|
204
|
-
used_for: Task execution and orchestration
|
|
205
|
-
shared_with: [dev, qa, po]
|
|
206
|
-
cost: $0
|
|
207
|
-
|
|
208
|
-
- logger:
|
|
209
|
-
version: latest
|
|
210
|
-
used_for: Execution logging and error tracking
|
|
211
|
-
shared_with: [dev, qa, po, sm]
|
|
212
|
-
cost: $0
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## Scripts (Agent-Specific)
|
|
218
|
-
|
|
219
|
-
**Purpose:** Agent-specific code for this task
|
|
220
|
-
|
|
221
|
-
```yaml
|
|
222
|
-
**Scripts:**
|
|
223
|
-
- execute-task.js:
|
|
224
|
-
description: Generic task execution wrapper
|
|
225
|
-
language: JavaScript
|
|
226
|
-
location: .aios-core/scripts/execute-task.js
|
|
227
|
-
|
|
228
|
-
- documentation-synchronizer.js:
|
|
229
|
-
description: Core documentation synchronization engine
|
|
230
|
-
language: JavaScript
|
|
231
|
-
location: .aios-core/scripts/documentation-synchronizer.js
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
## Error Handling
|
|
237
|
-
|
|
238
|
-
**Strategy:** fallback
|
|
239
|
-
|
|
240
|
-
**Common Errors:**
|
|
241
|
-
|
|
242
|
-
1. **Error:** Task Not Found
|
|
243
|
-
- **Cause:** Specified task not registered in system
|
|
244
|
-
- **Resolution:** Verify task name and registration
|
|
245
|
-
- **Recovery:** List available tasks, suggest similar
|
|
246
|
-
|
|
247
|
-
2. **Error:** Invalid Parameters
|
|
248
|
-
- **Cause:** Task parameters do not match expected schema
|
|
249
|
-
- **Resolution:** Validate parameters against task definition
|
|
250
|
-
- **Recovery:** Provide parameter template, reject execution
|
|
251
|
-
|
|
252
|
-
3. **Error:** Execution Timeout
|
|
253
|
-
- **Cause:** Task exceeds maximum execution time
|
|
254
|
-
- **Resolution:** Optimize task or increase timeout
|
|
255
|
-
- **Recovery:** Kill task, cleanup resources, log state
|
|
256
|
-
|
|
257
|
-
---
|
|
258
|
-
|
|
259
|
-
## Performance
|
|
260
|
-
|
|
261
|
-
**Expected Metrics:**
|
|
262
|
-
|
|
263
|
-
```yaml
|
|
264
|
-
duration_expected: 2-5 min (estimated)
|
|
265
|
-
cost_estimated: $0.001-0.003
|
|
266
|
-
token_usage: ~1,000-3,000 tokens
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
**Optimization Notes:**
|
|
270
|
-
- Parallelize independent operations; reuse atom results; implement early exits
|
|
271
|
-
|
|
272
|
-
---
|
|
273
|
-
|
|
274
|
-
## Metadata
|
|
275
|
-
|
|
276
|
-
```yaml
|
|
277
|
-
story: STORY-6.1.7.2
|
|
278
|
-
version: 2.0.0
|
|
279
|
-
dependencies:
|
|
280
|
-
- N/A
|
|
281
|
-
tags:
|
|
282
|
-
- automation
|
|
283
|
-
- workflow
|
|
284
|
-
updated_at: 2025-01-17
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
## Command Pattern
|
|
288
|
-
```
|
|
289
|
-
*sync-documentation [options]
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
## Parameters
|
|
293
|
-
- `options`: Documentation synchronization configuration
|
|
294
|
-
|
|
295
|
-
### Options
|
|
296
|
-
- `--component <path>`: Sync documentation for specific component
|
|
297
|
-
- `--all`: Sync all registered components
|
|
298
|
-
- `--check`: Check for out-of-sync documentation without updating
|
|
299
|
-
- `--strategies <types>`: Comma-separated sync strategies (jsdoc,markdown,schema,api,examples)
|
|
300
|
-
- `--auto-sync`: Enable automatic synchronization monitoring
|
|
301
|
-
- `--report <file>`: Generate synchronization report
|
|
302
|
-
- `--force`: Force synchronization even if up-to-date
|
|
303
|
-
- `--interactive`: Interactive mode for reviewing changes
|
|
304
|
-
|
|
305
|
-
## Examples
|
|
306
|
-
```bash
|
|
307
|
-
# Check documentation status
|
|
308
|
-
*sync-documentation --check
|
|
309
|
-
|
|
310
|
-
# Sync specific component
|
|
311
|
-
*sync-documentation --component aios-core/scripts/pattern-learner.js
|
|
312
|
-
|
|
313
|
-
# Sync all components with specific strategies
|
|
314
|
-
*sync-documentation --all --strategies jsdoc,examples
|
|
315
|
-
|
|
316
|
-
# Enable auto-sync monitoring
|
|
317
|
-
*sync-documentation --auto-sync
|
|
318
|
-
|
|
319
|
-
# Generate sync report
|
|
320
|
-
*sync-documentation --report sync-report.json
|
|
321
|
-
|
|
322
|
-
# Interactive sync review
|
|
323
|
-
*sync-documentation --all --interactive
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
## Implementation
|
|
327
|
-
|
|
328
|
-
```javascript
|
|
329
|
-
const fs = require('fs').promises;
|
|
330
|
-
const path = require('path');
|
|
331
|
-
const chalk = require('chalk');
|
|
332
|
-
const inquirer = require('inquirer');
|
|
333
|
-
|
|
334
|
-
class SyncDocumentationTask {
|
|
335
|
-
constructor() {
|
|
336
|
-
this.taskName = 'sync-documentation';
|
|
337
|
-
this.description = 'Synchronize documentation with code changes';
|
|
338
|
-
this.rootPath = process.cwd();
|
|
339
|
-
this.documentationSynchronizer = null;
|
|
340
|
-
this.syncResults = [];
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
async execute(params) {
|
|
344
|
-
try {
|
|
345
|
-
console.log(chalk.blue('š AIOS Documentation Synchronization'));
|
|
346
|
-
console.log(chalk.gray('Keeping documentation in sync with code\n'));
|
|
347
|
-
|
|
348
|
-
// Parse parameters
|
|
349
|
-
const config = await this.parseParameters(params);
|
|
350
|
-
|
|
351
|
-
// Initialize dependencies
|
|
352
|
-
await this.initializeDependencies();
|
|
353
|
-
|
|
354
|
-
// Execute requested action
|
|
355
|
-
let result;
|
|
356
|
-
|
|
357
|
-
if (config.check) {
|
|
358
|
-
result = await this.checkSyncStatus(config);
|
|
359
|
-
} else if (config.autoSync) {
|
|
360
|
-
result = await this.enableAutoSync(config);
|
|
361
|
-
} else if (config.report) {
|
|
362
|
-
result = await this.generateReport(config.report);
|
|
363
|
-
} else if (config.component) {
|
|
364
|
-
result = await this.syncComponent(config.component, config);
|
|
365
|
-
} else if (config.all) {
|
|
366
|
-
result = await this.syncAllComponents(config);
|
|
367
|
-
} else {
|
|
368
|
-
// Default: show sync status
|
|
369
|
-
result = await this.showSyncStatus();
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
return {
|
|
373
|
-
success: true,
|
|
374
|
-
...result
|
|
375
|
-
};
|
|
376
|
-
|
|
377
|
-
} catch (error) {
|
|
378
|
-
console.error(chalk.red(`\nā Documentation sync failed: ${error.message}`));
|
|
379
|
-
throw error;
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
async parseParameters(params) {
|
|
384
|
-
const config = {
|
|
385
|
-
component: null,
|
|
386
|
-
all: false,
|
|
387
|
-
check: false,
|
|
388
|
-
strategies: ['jsdoc', 'markdown', 'schema', 'api', 'examples'],
|
|
389
|
-
autoSync: false,
|
|
390
|
-
report: null,
|
|
391
|
-
force: false,
|
|
392
|
-
interactive: false
|
|
393
|
-
};
|
|
394
|
-
|
|
395
|
-
for (let i = 0; i < params.length; i++) {
|
|
396
|
-
const param = params[i];
|
|
397
|
-
|
|
398
|
-
if (param === '--all') {
|
|
399
|
-
config.all = true;
|
|
400
|
-
} else if (param === '--check') {
|
|
401
|
-
config.check = true;
|
|
402
|
-
} else if (param === '--auto-sync') {
|
|
403
|
-
config.autoSync = true;
|
|
404
|
-
} else if (param === '--force') {
|
|
405
|
-
config.force = true;
|
|
406
|
-
} else if (param === '--interactive') {
|
|
407
|
-
config.interactive = true;
|
|
408
|
-
} else if (param.startsWith('--component') && params[i + 1]) {
|
|
409
|
-
config.component = params[++i];
|
|
410
|
-
} else if (param.startsWith('--strategies') && params[i + 1]) {
|
|
411
|
-
config.strategies = params[++i].split(',').map(s => s.trim());
|
|
412
|
-
} else if (param.startsWith('--report') && params[i + 1]) {
|
|
413
|
-
config.report = params[++i];
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
// Validate strategies
|
|
418
|
-
const validStrategies = ['jsdoc', 'markdown', 'schema', 'api', 'examples'];
|
|
419
|
-
for (const strategy of config.strategies) {
|
|
420
|
-
if (!validStrategies.includes(strategy)) {
|
|
421
|
-
throw new Error(`Invalid sync strategy: ${strategy}`);
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
return config;
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
async initializeDependencies() {
|
|
429
|
-
try {
|
|
430
|
-
const DocumentationSynchronizer = require('../scripts/documentation-synchronizer');
|
|
431
|
-
this.documentationSynchronizer = new DocumentationSynchronizer({
|
|
432
|
-
rootPath: this.rootPath,
|
|
433
|
-
autoSync: false // We'll manage auto-sync manually
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
// Initialize synchronizer
|
|
437
|
-
await this.documentationSynchronizer.initialize();
|
|
438
|
-
|
|
439
|
-
// Listen to events
|
|
440
|
-
this.documentationSynchronizer.on('synchronized', (data) => {
|
|
441
|
-
this.syncResults.push(data);
|
|
442
|
-
});
|
|
443
|
-
|
|
444
|
-
this.documentationSynchronizer.on('error', (data) => {
|
|
445
|
-
console.error(chalk.red(`Sync error: ${data.error.message}`));
|
|
446
|
-
});
|
|
447
|
-
|
|
448
|
-
} catch (error) {
|
|
449
|
-
throw new Error(`Failed to initialize dependencies: ${error.message}`);
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
async checkSyncStatus(config) {
|
|
454
|
-
console.log(chalk.blue('š Checking documentation sync status...\n'));
|
|
455
|
-
|
|
456
|
-
const components = this.documentationSynchronizer.syncedComponents;
|
|
457
|
-
const outOfSync = [];
|
|
458
|
-
const upToDate = [];
|
|
459
|
-
|
|
460
|
-
for (const [componentPath, component] of components) {
|
|
461
|
-
try {
|
|
462
|
-
const stats = await fs.stat(componentPath);
|
|
463
|
-
const lastModified = stats.mtime.toISOString();
|
|
464
|
-
|
|
465
|
-
if (!component.lastSync || lastModified > component.lastSync) {
|
|
466
|
-
outOfSync.push({
|
|
467
|
-
component: componentPath,
|
|
468
|
-
doc: component.docPath,
|
|
469
|
-
lastModified,
|
|
470
|
-
lastSync: component.lastSync
|
|
471
|
-
});
|
|
472
|
-
} else {
|
|
473
|
-
upToDate.push({
|
|
474
|
-
component: componentPath,
|
|
475
|
-
doc: component.docPath
|
|
476
|
-
});
|
|
477
|
-
}
|
|
478
|
-
} catch (error) {
|
|
479
|
-
console.warn(chalk.yellow(`Cannot check: ${componentPath}`));
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
// Display results
|
|
484
|
-
if (outOfSync.length > 0) {
|
|
485
|
-
console.log(chalk.yellow(`š Out of sync (${outOfSync.length}):\n`));
|
|
486
|
-
|
|
487
|
-
for (const item of outOfSync) {
|
|
488
|
-
console.log(chalk.red(' ā ļø ') + path.relative(this.rootPath, item.component));
|
|
489
|
-
console.log(chalk.gray(` Doc: ${path.relative(this.rootPath, item.doc)}`));
|
|
490
|
-
console.log(chalk.gray(` Last modified: ${this.formatDate(item.lastModified)}`));
|
|
491
|
-
if (item.lastSync) {
|
|
492
|
-
console.log(chalk.gray(` Last sync: ${this.formatDate(item.lastSync)}`));
|
|
493
|
-
} else {
|
|
494
|
-
console.log(chalk.gray(` Last sync: Never`));
|
|
495
|
-
}
|
|
496
|
-
console.log('');
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
if (upToDate.length > 0) {
|
|
501
|
-
console.log(chalk.green(`ā
Up to date (${upToDate.length}):\n`));
|
|
502
|
-
|
|
503
|
-
const shown = Math.min(5, upToDate.length);
|
|
504
|
-
for (let i = 0; i < shown; i++) {
|
|
505
|
-
const item = upToDate[i];
|
|
506
|
-
console.log(chalk.green(' ā ') + path.relative(this.rootPath, item.component));
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
if (upToDate.length > shown) {
|
|
510
|
-
console.log(chalk.gray(` ... and ${upToDate.length - shown} more`));
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
console.log(chalk.blue('\nš Summary:'));
|
|
515
|
-
console.log(` Total components: ${components.size}`);
|
|
516
|
-
console.log(` Out of sync: ${chalk.yellow(outOfSync.length)}`);
|
|
517
|
-
console.log(` Up to date: ${chalk.green(upToDate.length)}`);
|
|
518
|
-
|
|
519
|
-
if (outOfSync.length > 0) {
|
|
520
|
-
console.log(chalk.yellow('\nš” Run with --all to sync all out-of-date documentation'));
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
return {
|
|
524
|
-
totalComponents: components.size,
|
|
525
|
-
outOfSync: outOfSync.length,
|
|
526
|
-
upToDate: upToDate.length
|
|
527
|
-
};
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
async syncComponent(componentPath, config) {
|
|
531
|
-
const fullPath = path.resolve(this.rootPath, componentPath);
|
|
532
|
-
|
|
533
|
-
console.log(chalk.blue(`š Syncing documentation for: ${componentPath}\n`));
|
|
534
|
-
|
|
535
|
-
try {
|
|
536
|
-
const changes = await this.documentationSynchronizer.synchronizeComponent(fullPath, {
|
|
537
|
-
strategies: config.strategies,
|
|
538
|
-
force: config.force
|
|
539
|
-
});
|
|
540
|
-
|
|
541
|
-
if (changes.length === 0) {
|
|
542
|
-
console.log(chalk.green('ā
Documentation is already up to date'));
|
|
543
|
-
return { synced: 0 };
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
// Display changes
|
|
547
|
-
await this.displaySyncChanges(changes, config);
|
|
548
|
-
|
|
549
|
-
return {
|
|
550
|
-
synced: 1,
|
|
551
|
-
changes: changes.length
|
|
552
|
-
};
|
|
553
|
-
|
|
554
|
-
} catch (error) {
|
|
555
|
-
console.error(chalk.red(`Failed to sync: ${error.message}`));
|
|
556
|
-
return { synced: 0, error: error.message };
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
async syncAllComponents(config) {
|
|
561
|
-
const components = Array.from(this.documentationSynchronizer.syncedComponents.entries());
|
|
562
|
-
|
|
563
|
-
console.log(chalk.blue(`š Syncing ${components.length} components...\n`));
|
|
564
|
-
|
|
565
|
-
const results = {
|
|
566
|
-
synced: 0,
|
|
567
|
-
skipped: 0,
|
|
568
|
-
failed: 0,
|
|
569
|
-
totalChanges: 0
|
|
570
|
-
};
|
|
571
|
-
|
|
572
|
-
for (const [componentPath, component] of components) {
|
|
573
|
-
try {
|
|
574
|
-
// Check if needs sync
|
|
575
|
-
if (!config.force) {
|
|
576
|
-
const stats = await fs.stat(componentPath);
|
|
577
|
-
const lastModified = stats.mtime.toISOString();
|
|
578
|
-
|
|
579
|
-
if (component.lastSync && lastModified <= component.lastSync) {
|
|
580
|
-
results.skipped++;
|
|
581
|
-
continue;
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
console.log(chalk.gray(`\nSyncing: ${path.relative(this.rootPath, componentPath)}`));
|
|
586
|
-
|
|
587
|
-
const changes = await this.documentationSynchronizer.synchronizeComponent(componentPath, {
|
|
588
|
-
strategies: config.strategies
|
|
589
|
-
});
|
|
590
|
-
|
|
591
|
-
if (changes.length > 0) {
|
|
592
|
-
results.synced++;
|
|
593
|
-
results.totalChanges += changes.length;
|
|
594
|
-
|
|
595
|
-
if (config.interactive) {
|
|
596
|
-
await this.displaySyncChanges(changes, config);
|
|
597
|
-
} else {
|
|
598
|
-
console.log(chalk.green(` ā
Applied ${changes.length} changes`));
|
|
599
|
-
}
|
|
600
|
-
} else {
|
|
601
|
-
results.skipped++;
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
} catch (error) {
|
|
605
|
-
results.failed++;
|
|
606
|
-
console.error(chalk.red(` ā Failed: ${error.message}`));
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
// Display summary
|
|
611
|
-
console.log(chalk.blue('\nš Synchronization Summary:'));
|
|
612
|
-
console.log(chalk.green(` ā
Synced: ${results.synced}`));
|
|
613
|
-
console.log(chalk.gray(` āļø Skipped: ${results.skipped}`));
|
|
614
|
-
if (results.failed > 0) {
|
|
615
|
-
console.log(chalk.red(` ā Failed: ${results.failed}`));
|
|
616
|
-
}
|
|
617
|
-
console.log(` Total changes: ${results.totalChanges}`);
|
|
618
|
-
|
|
619
|
-
return results;
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
async displaySyncChanges(changes, config) {
|
|
623
|
-
console.log(chalk.blue('š Changes applied:\n'));
|
|
624
|
-
|
|
625
|
-
for (const strategyChanges of changes) {
|
|
626
|
-
if (!strategyChanges.success) {
|
|
627
|
-
console.log(chalk.red(`ā ${strategyChanges.strategy}: ${strategyChanges.error}`));
|
|
628
|
-
continue;
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
console.log(chalk.yellow(`${strategyChanges.strategy}:`));
|
|
632
|
-
|
|
633
|
-
for (const change of strategyChanges.changes) {
|
|
634
|
-
console.log(` - ${change.description}`);
|
|
635
|
-
|
|
636
|
-
if (config.interactive && change.type === 'updated') {
|
|
637
|
-
// Show diff preview
|
|
638
|
-
console.log(chalk.gray(' Preview of changes...'));
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
|
|
644
|
-
async enableAutoSync(config) {
|
|
645
|
-
console.log(chalk.blue('š Enabling automatic documentation sync...\n'));
|
|
646
|
-
|
|
647
|
-
// Configure auto-sync
|
|
648
|
-
this.documentationSynchronizer.options.autoSync = true;
|
|
649
|
-
this.documentationSynchronizer.options.syncInterval = 60000; // 1 minute
|
|
650
|
-
|
|
651
|
-
// Start auto-sync
|
|
652
|
-
await this.documentationSynchronizer.startAutoSync();
|
|
653
|
-
|
|
654
|
-
console.log(chalk.green('ā
Auto-sync enabled'));
|
|
655
|
-
console.log(chalk.gray('Documentation will be checked every minute for changes'));
|
|
656
|
-
console.log(chalk.gray('Press Ctrl+C to stop auto-sync'));
|
|
657
|
-
|
|
658
|
-
// Set up monitoring
|
|
659
|
-
this.documentationSynchronizer.on('auto-sync', (data) => {
|
|
660
|
-
if (data.changes.length > 0) {
|
|
661
|
-
console.log(chalk.blue(`\n[${this.formatTime(new Date())}] Auto-sync detected changes:`));
|
|
662
|
-
|
|
663
|
-
for (const change of data.changes) {
|
|
664
|
-
console.log(` - ${path.relative(this.rootPath, change.componentPath)}`);
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
});
|
|
668
|
-
|
|
669
|
-
// Keep process running
|
|
670
|
-
await new Promise((resolve) => {
|
|
671
|
-
process.on('SIGINT', () => {
|
|
672
|
-
console.log(chalk.yellow('\n\nStopping auto-sync...'));
|
|
673
|
-
this.documentationSynchronizer.stopAutoSync();
|
|
674
|
-
resolve();
|
|
675
|
-
});
|
|
676
|
-
});
|
|
677
|
-
|
|
678
|
-
return {
|
|
679
|
-
autoSyncEnabled: true
|
|
680
|
-
};
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
async generateReport(reportPath) {
|
|
684
|
-
console.log(chalk.blue('š Generating synchronization report...\n'));
|
|
685
|
-
|
|
686
|
-
const report = await this.documentationSynchronizer.generateSyncReport();
|
|
687
|
-
|
|
688
|
-
// Add sync results
|
|
689
|
-
report.syncResults = this.syncResults;
|
|
690
|
-
|
|
691
|
-
// Save report
|
|
692
|
-
await fs.writeFile(reportPath, JSON.stringify(report, null, 2));
|
|
693
|
-
|
|
694
|
-
console.log(chalk.green(`ā
Report generated: ${reportPath}`));
|
|
695
|
-
|
|
696
|
-
// Display summary
|
|
697
|
-
console.log(chalk.blue('\nš Report Summary:'));
|
|
698
|
-
console.log(` Total components: ${report.summary.totalComponents}`);
|
|
699
|
-
console.log(` Total documentation: ${report.summary.totalDocumentation}`);
|
|
700
|
-
console.log(` Sync history entries: ${report.summary.syncHistory}`);
|
|
701
|
-
|
|
702
|
-
if (report.summary.lastSync) {
|
|
703
|
-
console.log(` Last sync: ${this.formatDate(report.summary.lastSync)}`);
|
|
704
|
-
}
|
|
705
|
-
|
|
706
|
-
return {
|
|
707
|
-
reportGenerated: true,
|
|
708
|
-
reportPath
|
|
709
|
-
};
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
async showSyncStatus() {
|
|
713
|
-
const components = this.documentationSynchronizer.syncedComponents;
|
|
714
|
-
const docs = this.documentationSynchronizer.documentationIndex;
|
|
715
|
-
|
|
716
|
-
console.log(chalk.blue('š Documentation Sync Status\n'));
|
|
717
|
-
|
|
718
|
-
console.log(chalk.gray('Registered components:'));
|
|
719
|
-
console.log(` Components with docs: ${components.size}`);
|
|
720
|
-
console.log(` Documentation files: ${docs.size}`);
|
|
721
|
-
|
|
722
|
-
// Show sync strategies
|
|
723
|
-
console.log(chalk.gray('\nActive sync strategies:'));
|
|
724
|
-
for (const [name, strategy] of this.documentationSynchronizer.syncStrategies) {
|
|
725
|
-
console.log(` - ${name}: ${strategy.description}`);
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
// Recent sync history
|
|
729
|
-
const history = this.documentationSynchronizer.syncHistory.slice(-5);
|
|
730
|
-
if (history.length > 0) {
|
|
731
|
-
console.log(chalk.gray('\nRecent synchronizations:'));
|
|
732
|
-
for (const entry of history) {
|
|
733
|
-
console.log(` ${this.formatDate(entry.timestamp)} - ${path.basename(entry.componentPath)}`);
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
|
|
737
|
-
console.log(chalk.blue('\nš Commands:'));
|
|
738
|
-
console.log(' Check status: *sync-documentation --check');
|
|
739
|
-
console.log(' Sync all: *sync-documentation --all');
|
|
740
|
-
console.log(' Enable auto-sync: *sync-documentation --auto-sync');
|
|
741
|
-
console.log(' Generate report: *sync-documentation --report <file>');
|
|
742
|
-
|
|
743
|
-
return {
|
|
744
|
-
status: 'ready',
|
|
745
|
-
components: components.size,
|
|
746
|
-
documentation: docs.size
|
|
747
|
-
};
|
|
748
|
-
}
|
|
749
|
-
|
|
750
|
-
formatDate(dateString) {
|
|
751
|
-
const date = new Date(dateString);
|
|
752
|
-
const now = new Date();
|
|
753
|
-
const diff = now - date;
|
|
754
|
-
|
|
755
|
-
// Less than 1 hour
|
|
756
|
-
if (diff < 3600000) {
|
|
757
|
-
const minutes = Math.floor(diff / 60000);
|
|
758
|
-
return `${minutes} minute${minutes !== 1 ? 's' : ''} ago`;
|
|
759
|
-
}
|
|
760
|
-
|
|
761
|
-
// Less than 24 hours
|
|
762
|
-
if (diff < 86400000) {
|
|
763
|
-
const hours = Math.floor(diff / 3600000);
|
|
764
|
-
return `${hours} hour${hours !== 1 ? 's' : ''} ago`;
|
|
765
|
-
}
|
|
766
|
-
|
|
767
|
-
// Less than 7 days
|
|
768
|
-
if (diff < 604800000) {
|
|
769
|
-
const days = Math.floor(diff / 86400000);
|
|
770
|
-
return `${days} day${days !== 1 ? 's' : ''} ago`;
|
|
771
|
-
}
|
|
772
|
-
|
|
773
|
-
// Otherwise show date
|
|
774
|
-
return date.toLocaleDateString();
|
|
775
|
-
}
|
|
776
|
-
|
|
777
|
-
formatTime(date) {
|
|
778
|
-
return date.toLocaleTimeString();
|
|
779
|
-
}
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
module.exports = SyncDocumentationTask;
|
|
783
|
-
```
|
|
784
|
-
|
|
785
|
-
## Integration Points
|
|
786
|
-
|
|
787
|
-
### Documentation Synchronizer
|
|
788
|
-
- Core synchronization engine
|
|
789
|
-
- Multi-strategy sync support
|
|
790
|
-
- Automatic change detection
|
|
791
|
-
- Real-time monitoring
|
|
792
|
-
|
|
793
|
-
### Sync Strategies
|
|
794
|
-
- **JSDoc**: Sync code comments with markdown
|
|
795
|
-
- **Markdown**: Update documentation sections
|
|
796
|
-
- **Schema**: Sync YAML/JSON schemas
|
|
797
|
-
- **API**: Update API documentation
|
|
798
|
-
- **Examples**: Validate and update code examples
|
|
799
|
-
|
|
800
|
-
### Documentation Sources
|
|
801
|
-
- Markdown files (.md)
|
|
802
|
-
- YAML manifests (.yaml, .yml)
|
|
803
|
-
- JSON schemas (.json)
|
|
804
|
-
- README files
|
|
805
|
-
- Inline documentation
|
|
806
|
-
|
|
807
|
-
### Code Sources
|
|
808
|
-
- JavaScript files (.js, .jsx)
|
|
809
|
-
- TypeScript files (.ts, .tsx)
|
|
810
|
-
- Task definitions
|
|
811
|
-
- Agent manifests
|
|
812
|
-
- Workflow configurations
|
|
813
|
-
|
|
814
|
-
## Synchronization Workflow
|
|
815
|
-
|
|
816
|
-
### Detection Phase
|
|
817
|
-
1. Monitor file changes
|
|
818
|
-
2. Identify linked documentation
|
|
819
|
-
3. Detect content differences
|
|
820
|
-
4. Calculate sync requirements
|
|
821
|
-
5. Prioritize updates
|
|
822
|
-
|
|
823
|
-
### Analysis Phase
|
|
824
|
-
1. Parse code changes
|
|
825
|
-
2. Extract documentation elements
|
|
826
|
-
3. Compare with existing docs
|
|
827
|
-
4. Identify gaps and conflicts
|
|
828
|
-
5. Generate sync plan
|
|
829
|
-
|
|
830
|
-
### Update Phase
|
|
831
|
-
1. Apply sync strategies
|
|
832
|
-
2. Update documentation files
|
|
833
|
-
3. Preserve formatting
|
|
834
|
-
4. Validate changes
|
|
835
|
-
5. Record sync history
|
|
836
|
-
|
|
837
|
-
## Best Practices
|
|
838
|
-
|
|
839
|
-
### Documentation Structure
|
|
840
|
-
- Keep docs near code
|
|
841
|
-
- Use consistent naming
|
|
842
|
-
- Link explicitly in docs
|
|
843
|
-
- Maintain clear sections
|
|
844
|
-
- Update examples regularly
|
|
845
|
-
|
|
846
|
-
### Sync Configuration
|
|
847
|
-
- Choose appropriate strategies
|
|
848
|
-
- Set reasonable intervals
|
|
849
|
-
- Review changes regularly
|
|
850
|
-
- Monitor sync history
|
|
851
|
-
- Handle conflicts gracefully
|
|
852
|
-
|
|
853
|
-
### Quality Assurance
|
|
854
|
-
- Validate after sync
|
|
855
|
-
- Test code examples
|
|
856
|
-
- Check API accuracy
|
|
857
|
-
- Verify schema alignment
|
|
858
|
-
- Maintain version history
|
|
859
|
-
|
|
860
|
-
## Security Considerations
|
|
861
|
-
- Validate file paths
|
|
862
|
-
- Prevent injection in docs
|
|
863
|
-
- Protect sensitive information
|
|
864
|
-
- Audit sync operations
|
|
1
|
+
# sync-documentation
|
|
2
|
+
|
|
3
|
+
**Task ID:** `sync-documentation`
|
|
4
|
+
**Version:** 2.0.0
|
|
5
|
+
**Status:** Active
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Automatically synchronize documentation with code changes to ensure documentation stays up-to-date with implementation.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Execution Modes
|
|
16
|
+
|
|
17
|
+
**Choose your execution mode:**
|
|
18
|
+
|
|
19
|
+
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
20
|
+
- Autonomous decision making with logging
|
|
21
|
+
- Minimal user interaction
|
|
22
|
+
- **Best for:** Simple, deterministic tasks
|
|
23
|
+
|
|
24
|
+
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
25
|
+
- Explicit decision checkpoints
|
|
26
|
+
- Educational explanations
|
|
27
|
+
- **Best for:** Learning, complex decisions
|
|
28
|
+
|
|
29
|
+
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
30
|
+
- Task analysis phase (identify all ambiguities)
|
|
31
|
+
- Zero ambiguity execution
|
|
32
|
+
- **Best for:** Ambiguous requirements, critical work
|
|
33
|
+
|
|
34
|
+
**Parameter:** `mode` (optional, default: `interactive`)
|
|
35
|
+
|
|
36
|
+
**Valid values:** `yolo`, `interactive`, `preflight`
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Task Definition (AIOS Task Format V1.0)
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
task: syncDocumentation()
|
|
44
|
+
responsƔvel: Morgan (Strategist)
|
|
45
|
+
responsavel_type: Agente
|
|
46
|
+
atomic_layer: Molecule
|
|
47
|
+
|
|
48
|
+
**Entrada:**
|
|
49
|
+
- campo: task
|
|
50
|
+
tipo: string
|
|
51
|
+
origem: User Input
|
|
52
|
+
obrigatório: true
|
|
53
|
+
validação: Must be registered task
|
|
54
|
+
|
|
55
|
+
- campo: parameters
|
|
56
|
+
tipo: object
|
|
57
|
+
origem: User Input
|
|
58
|
+
obrigatório: false
|
|
59
|
+
validação: Valid task parameters
|
|
60
|
+
|
|
61
|
+
- campo: mode
|
|
62
|
+
tipo: string
|
|
63
|
+
origem: User Input
|
|
64
|
+
obrigatório: false
|
|
65
|
+
validação: yolo|interactive|pre-flight
|
|
66
|
+
|
|
67
|
+
**SaĆda:**
|
|
68
|
+
- campo: execution_result
|
|
69
|
+
tipo: object
|
|
70
|
+
destino: Memory
|
|
71
|
+
persistido: false
|
|
72
|
+
|
|
73
|
+
- campo: logs
|
|
74
|
+
tipo: array
|
|
75
|
+
destino: File (.ai/logs/*)
|
|
76
|
+
persistido: true
|
|
77
|
+
|
|
78
|
+
- campo: state
|
|
79
|
+
tipo: object
|
|
80
|
+
destino: State management
|
|
81
|
+
persistido: true
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Pre-Conditions
|
|
87
|
+
|
|
88
|
+
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
89
|
+
|
|
90
|
+
**Checklist:**
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
pre-conditions:
|
|
94
|
+
- [ ] Task is registered; required parameters provided; dependencies met
|
|
95
|
+
tipo: pre-condition
|
|
96
|
+
blocker: true
|
|
97
|
+
validação: |
|
|
98
|
+
Check task is registered; required parameters provided; dependencies met
|
|
99
|
+
error_message: "Pre-condition failed: Task is registered; required parameters provided; dependencies met"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Step-by-Step Execution
|
|
105
|
+
|
|
106
|
+
### Step 1: Parse Parameters
|
|
107
|
+
|
|
108
|
+
**Purpose:** Parse and validate command-line parameters
|
|
109
|
+
|
|
110
|
+
**Actions:**
|
|
111
|
+
1. Parse command-line options (--component, --all, --check, etc.)
|
|
112
|
+
2. Validate sync strategies
|
|
113
|
+
3. Set default values
|
|
114
|
+
4. Validate file paths if provided
|
|
115
|
+
|
|
116
|
+
**Validation:**
|
|
117
|
+
- Parameters are valid
|
|
118
|
+
- Strategies are supported
|
|
119
|
+
- File paths exist (if specified)
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### Step 2: Initialize Dependencies
|
|
124
|
+
|
|
125
|
+
**Purpose:** Set up documentation synchronizer and required tools
|
|
126
|
+
|
|
127
|
+
**Actions:**
|
|
128
|
+
1. Load DocumentationSynchronizer module
|
|
129
|
+
2. Initialize synchronizer with root path
|
|
130
|
+
3. Set up event listeners
|
|
131
|
+
4. Verify all dependencies available
|
|
132
|
+
|
|
133
|
+
**Validation:**
|
|
134
|
+
- Synchronizer initialized successfully
|
|
135
|
+
- Event listeners registered
|
|
136
|
+
- Dependencies available
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### Step 3: Execute Requested Action
|
|
141
|
+
|
|
142
|
+
**Purpose:** Execute the requested synchronization action
|
|
143
|
+
|
|
144
|
+
**Actions:**
|
|
145
|
+
1. Determine action type (check, sync, auto-sync, report)
|
|
146
|
+
2. Execute corresponding method
|
|
147
|
+
3. Handle errors gracefully
|
|
148
|
+
4. Return results
|
|
149
|
+
|
|
150
|
+
**Validation:**
|
|
151
|
+
- Action executed successfully
|
|
152
|
+
- Results returned
|
|
153
|
+
- Errors handled appropriately
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Post-Conditions
|
|
158
|
+
|
|
159
|
+
**Purpose:** Validate execution success AFTER task completes
|
|
160
|
+
|
|
161
|
+
**Checklist:**
|
|
162
|
+
|
|
163
|
+
```yaml
|
|
164
|
+
post-conditions:
|
|
165
|
+
- [ ] Task completed; exit code 0; expected outputs created
|
|
166
|
+
tipo: post-condition
|
|
167
|
+
blocker: true
|
|
168
|
+
validação: |
|
|
169
|
+
Verify task completed; exit code 0; expected outputs created
|
|
170
|
+
rollback: false
|
|
171
|
+
error_message: "Post-condition failed: Task completed; exit code 0; expected outputs created"
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Acceptance Criteria
|
|
177
|
+
|
|
178
|
+
**Purpose:** Validate story requirements AFTER workflow (non-blocking, can be manual)
|
|
179
|
+
|
|
180
|
+
**Checklist:**
|
|
181
|
+
|
|
182
|
+
```yaml
|
|
183
|
+
acceptance-criteria:
|
|
184
|
+
- [ ] Task completed as expected; side effects documented
|
|
185
|
+
tipo: acceptance-criterion
|
|
186
|
+
blocker: false
|
|
187
|
+
story: N/A
|
|
188
|
+
manual_check: false
|
|
189
|
+
validação: |
|
|
190
|
+
Assert task completed as expected; side effects documented
|
|
191
|
+
error_message: "Acceptance criterion not met: Task completed as expected; side effects documented"
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Tools (External/Shared)
|
|
197
|
+
|
|
198
|
+
**Purpose:** Catalog reusable tools used by multiple agents
|
|
199
|
+
|
|
200
|
+
```yaml
|
|
201
|
+
**Tools:**
|
|
202
|
+
- task-runner:
|
|
203
|
+
version: latest
|
|
204
|
+
used_for: Task execution and orchestration
|
|
205
|
+
shared_with: [dev, qa, po]
|
|
206
|
+
cost: $0
|
|
207
|
+
|
|
208
|
+
- logger:
|
|
209
|
+
version: latest
|
|
210
|
+
used_for: Execution logging and error tracking
|
|
211
|
+
shared_with: [dev, qa, po, sm]
|
|
212
|
+
cost: $0
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Scripts (Agent-Specific)
|
|
218
|
+
|
|
219
|
+
**Purpose:** Agent-specific code for this task
|
|
220
|
+
|
|
221
|
+
```yaml
|
|
222
|
+
**Scripts:**
|
|
223
|
+
- execute-task.js:
|
|
224
|
+
description: Generic task execution wrapper
|
|
225
|
+
language: JavaScript
|
|
226
|
+
location: .aios-core/scripts/execute-task.js
|
|
227
|
+
|
|
228
|
+
- documentation-synchronizer.js:
|
|
229
|
+
description: Core documentation synchronization engine
|
|
230
|
+
language: JavaScript
|
|
231
|
+
location: .aios-core/scripts/documentation-synchronizer.js
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Error Handling
|
|
237
|
+
|
|
238
|
+
**Strategy:** fallback
|
|
239
|
+
|
|
240
|
+
**Common Errors:**
|
|
241
|
+
|
|
242
|
+
1. **Error:** Task Not Found
|
|
243
|
+
- **Cause:** Specified task not registered in system
|
|
244
|
+
- **Resolution:** Verify task name and registration
|
|
245
|
+
- **Recovery:** List available tasks, suggest similar
|
|
246
|
+
|
|
247
|
+
2. **Error:** Invalid Parameters
|
|
248
|
+
- **Cause:** Task parameters do not match expected schema
|
|
249
|
+
- **Resolution:** Validate parameters against task definition
|
|
250
|
+
- **Recovery:** Provide parameter template, reject execution
|
|
251
|
+
|
|
252
|
+
3. **Error:** Execution Timeout
|
|
253
|
+
- **Cause:** Task exceeds maximum execution time
|
|
254
|
+
- **Resolution:** Optimize task or increase timeout
|
|
255
|
+
- **Recovery:** Kill task, cleanup resources, log state
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Performance
|
|
260
|
+
|
|
261
|
+
**Expected Metrics:**
|
|
262
|
+
|
|
263
|
+
```yaml
|
|
264
|
+
duration_expected: 2-5 min (estimated)
|
|
265
|
+
cost_estimated: $0.001-0.003
|
|
266
|
+
token_usage: ~1,000-3,000 tokens
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Optimization Notes:**
|
|
270
|
+
- Parallelize independent operations; reuse atom results; implement early exits
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Metadata
|
|
275
|
+
|
|
276
|
+
```yaml
|
|
277
|
+
story: STORY-6.1.7.2
|
|
278
|
+
version: 2.0.0
|
|
279
|
+
dependencies:
|
|
280
|
+
- N/A
|
|
281
|
+
tags:
|
|
282
|
+
- automation
|
|
283
|
+
- workflow
|
|
284
|
+
updated_at: 2025-01-17
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## Command Pattern
|
|
288
|
+
```
|
|
289
|
+
*sync-documentation [options]
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## Parameters
|
|
293
|
+
- `options`: Documentation synchronization configuration
|
|
294
|
+
|
|
295
|
+
### Options
|
|
296
|
+
- `--component <path>`: Sync documentation for specific component
|
|
297
|
+
- `--all`: Sync all registered components
|
|
298
|
+
- `--check`: Check for out-of-sync documentation without updating
|
|
299
|
+
- `--strategies <types>`: Comma-separated sync strategies (jsdoc,markdown,schema,api,examples)
|
|
300
|
+
- `--auto-sync`: Enable automatic synchronization monitoring
|
|
301
|
+
- `--report <file>`: Generate synchronization report
|
|
302
|
+
- `--force`: Force synchronization even if up-to-date
|
|
303
|
+
- `--interactive`: Interactive mode for reviewing changes
|
|
304
|
+
|
|
305
|
+
## Examples
|
|
306
|
+
```bash
|
|
307
|
+
# Check documentation status
|
|
308
|
+
*sync-documentation --check
|
|
309
|
+
|
|
310
|
+
# Sync specific component
|
|
311
|
+
*sync-documentation --component aios-core/scripts/pattern-learner.js
|
|
312
|
+
|
|
313
|
+
# Sync all components with specific strategies
|
|
314
|
+
*sync-documentation --all --strategies jsdoc,examples
|
|
315
|
+
|
|
316
|
+
# Enable auto-sync monitoring
|
|
317
|
+
*sync-documentation --auto-sync
|
|
318
|
+
|
|
319
|
+
# Generate sync report
|
|
320
|
+
*sync-documentation --report sync-report.json
|
|
321
|
+
|
|
322
|
+
# Interactive sync review
|
|
323
|
+
*sync-documentation --all --interactive
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## Implementation
|
|
327
|
+
|
|
328
|
+
```javascript
|
|
329
|
+
const fs = require('fs').promises;
|
|
330
|
+
const path = require('path');
|
|
331
|
+
const chalk = require('chalk');
|
|
332
|
+
const inquirer = require('inquirer');
|
|
333
|
+
|
|
334
|
+
class SyncDocumentationTask {
|
|
335
|
+
constructor() {
|
|
336
|
+
this.taskName = 'sync-documentation';
|
|
337
|
+
this.description = 'Synchronize documentation with code changes';
|
|
338
|
+
this.rootPath = process.cwd();
|
|
339
|
+
this.documentationSynchronizer = null;
|
|
340
|
+
this.syncResults = [];
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
async execute(params) {
|
|
344
|
+
try {
|
|
345
|
+
console.log(chalk.blue('š AIOS Documentation Synchronization'));
|
|
346
|
+
console.log(chalk.gray('Keeping documentation in sync with code\n'));
|
|
347
|
+
|
|
348
|
+
// Parse parameters
|
|
349
|
+
const config = await this.parseParameters(params);
|
|
350
|
+
|
|
351
|
+
// Initialize dependencies
|
|
352
|
+
await this.initializeDependencies();
|
|
353
|
+
|
|
354
|
+
// Execute requested action
|
|
355
|
+
let result;
|
|
356
|
+
|
|
357
|
+
if (config.check) {
|
|
358
|
+
result = await this.checkSyncStatus(config);
|
|
359
|
+
} else if (config.autoSync) {
|
|
360
|
+
result = await this.enableAutoSync(config);
|
|
361
|
+
} else if (config.report) {
|
|
362
|
+
result = await this.generateReport(config.report);
|
|
363
|
+
} else if (config.component) {
|
|
364
|
+
result = await this.syncComponent(config.component, config);
|
|
365
|
+
} else if (config.all) {
|
|
366
|
+
result = await this.syncAllComponents(config);
|
|
367
|
+
} else {
|
|
368
|
+
// Default: show sync status
|
|
369
|
+
result = await this.showSyncStatus();
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
return {
|
|
373
|
+
success: true,
|
|
374
|
+
...result
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
} catch (error) {
|
|
378
|
+
console.error(chalk.red(`\nā Documentation sync failed: ${error.message}`));
|
|
379
|
+
throw error;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
async parseParameters(params) {
|
|
384
|
+
const config = {
|
|
385
|
+
component: null,
|
|
386
|
+
all: false,
|
|
387
|
+
check: false,
|
|
388
|
+
strategies: ['jsdoc', 'markdown', 'schema', 'api', 'examples'],
|
|
389
|
+
autoSync: false,
|
|
390
|
+
report: null,
|
|
391
|
+
force: false,
|
|
392
|
+
interactive: false
|
|
393
|
+
};
|
|
394
|
+
|
|
395
|
+
for (let i = 0; i < params.length; i++) {
|
|
396
|
+
const param = params[i];
|
|
397
|
+
|
|
398
|
+
if (param === '--all') {
|
|
399
|
+
config.all = true;
|
|
400
|
+
} else if (param === '--check') {
|
|
401
|
+
config.check = true;
|
|
402
|
+
} else if (param === '--auto-sync') {
|
|
403
|
+
config.autoSync = true;
|
|
404
|
+
} else if (param === '--force') {
|
|
405
|
+
config.force = true;
|
|
406
|
+
} else if (param === '--interactive') {
|
|
407
|
+
config.interactive = true;
|
|
408
|
+
} else if (param.startsWith('--component') && params[i + 1]) {
|
|
409
|
+
config.component = params[++i];
|
|
410
|
+
} else if (param.startsWith('--strategies') && params[i + 1]) {
|
|
411
|
+
config.strategies = params[++i].split(',').map(s => s.trim());
|
|
412
|
+
} else if (param.startsWith('--report') && params[i + 1]) {
|
|
413
|
+
config.report = params[++i];
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// Validate strategies
|
|
418
|
+
const validStrategies = ['jsdoc', 'markdown', 'schema', 'api', 'examples'];
|
|
419
|
+
for (const strategy of config.strategies) {
|
|
420
|
+
if (!validStrategies.includes(strategy)) {
|
|
421
|
+
throw new Error(`Invalid sync strategy: ${strategy}`);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
return config;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
async initializeDependencies() {
|
|
429
|
+
try {
|
|
430
|
+
const DocumentationSynchronizer = require('../scripts/documentation-synchronizer');
|
|
431
|
+
this.documentationSynchronizer = new DocumentationSynchronizer({
|
|
432
|
+
rootPath: this.rootPath,
|
|
433
|
+
autoSync: false // We'll manage auto-sync manually
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
// Initialize synchronizer
|
|
437
|
+
await this.documentationSynchronizer.initialize();
|
|
438
|
+
|
|
439
|
+
// Listen to events
|
|
440
|
+
this.documentationSynchronizer.on('synchronized', (data) => {
|
|
441
|
+
this.syncResults.push(data);
|
|
442
|
+
});
|
|
443
|
+
|
|
444
|
+
this.documentationSynchronizer.on('error', (data) => {
|
|
445
|
+
console.error(chalk.red(`Sync error: ${data.error.message}`));
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
} catch (error) {
|
|
449
|
+
throw new Error(`Failed to initialize dependencies: ${error.message}`);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
async checkSyncStatus(config) {
|
|
454
|
+
console.log(chalk.blue('š Checking documentation sync status...\n'));
|
|
455
|
+
|
|
456
|
+
const components = this.documentationSynchronizer.syncedComponents;
|
|
457
|
+
const outOfSync = [];
|
|
458
|
+
const upToDate = [];
|
|
459
|
+
|
|
460
|
+
for (const [componentPath, component] of components) {
|
|
461
|
+
try {
|
|
462
|
+
const stats = await fs.stat(componentPath);
|
|
463
|
+
const lastModified = stats.mtime.toISOString();
|
|
464
|
+
|
|
465
|
+
if (!component.lastSync || lastModified > component.lastSync) {
|
|
466
|
+
outOfSync.push({
|
|
467
|
+
component: componentPath,
|
|
468
|
+
doc: component.docPath,
|
|
469
|
+
lastModified,
|
|
470
|
+
lastSync: component.lastSync
|
|
471
|
+
});
|
|
472
|
+
} else {
|
|
473
|
+
upToDate.push({
|
|
474
|
+
component: componentPath,
|
|
475
|
+
doc: component.docPath
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
} catch (error) {
|
|
479
|
+
console.warn(chalk.yellow(`Cannot check: ${componentPath}`));
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// Display results
|
|
484
|
+
if (outOfSync.length > 0) {
|
|
485
|
+
console.log(chalk.yellow(`š Out of sync (${outOfSync.length}):\n`));
|
|
486
|
+
|
|
487
|
+
for (const item of outOfSync) {
|
|
488
|
+
console.log(chalk.red(' ā ļø ') + path.relative(this.rootPath, item.component));
|
|
489
|
+
console.log(chalk.gray(` Doc: ${path.relative(this.rootPath, item.doc)}`));
|
|
490
|
+
console.log(chalk.gray(` Last modified: ${this.formatDate(item.lastModified)}`));
|
|
491
|
+
if (item.lastSync) {
|
|
492
|
+
console.log(chalk.gray(` Last sync: ${this.formatDate(item.lastSync)}`));
|
|
493
|
+
} else {
|
|
494
|
+
console.log(chalk.gray(` Last sync: Never`));
|
|
495
|
+
}
|
|
496
|
+
console.log('');
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
if (upToDate.length > 0) {
|
|
501
|
+
console.log(chalk.green(`ā
Up to date (${upToDate.length}):\n`));
|
|
502
|
+
|
|
503
|
+
const shown = Math.min(5, upToDate.length);
|
|
504
|
+
for (let i = 0; i < shown; i++) {
|
|
505
|
+
const item = upToDate[i];
|
|
506
|
+
console.log(chalk.green(' ā ') + path.relative(this.rootPath, item.component));
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
if (upToDate.length > shown) {
|
|
510
|
+
console.log(chalk.gray(` ... and ${upToDate.length - shown} more`));
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
console.log(chalk.blue('\nš Summary:'));
|
|
515
|
+
console.log(` Total components: ${components.size}`);
|
|
516
|
+
console.log(` Out of sync: ${chalk.yellow(outOfSync.length)}`);
|
|
517
|
+
console.log(` Up to date: ${chalk.green(upToDate.length)}`);
|
|
518
|
+
|
|
519
|
+
if (outOfSync.length > 0) {
|
|
520
|
+
console.log(chalk.yellow('\nš” Run with --all to sync all out-of-date documentation'));
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
return {
|
|
524
|
+
totalComponents: components.size,
|
|
525
|
+
outOfSync: outOfSync.length,
|
|
526
|
+
upToDate: upToDate.length
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
async syncComponent(componentPath, config) {
|
|
531
|
+
const fullPath = path.resolve(this.rootPath, componentPath);
|
|
532
|
+
|
|
533
|
+
console.log(chalk.blue(`š Syncing documentation for: ${componentPath}\n`));
|
|
534
|
+
|
|
535
|
+
try {
|
|
536
|
+
const changes = await this.documentationSynchronizer.synchronizeComponent(fullPath, {
|
|
537
|
+
strategies: config.strategies,
|
|
538
|
+
force: config.force
|
|
539
|
+
});
|
|
540
|
+
|
|
541
|
+
if (changes.length === 0) {
|
|
542
|
+
console.log(chalk.green('ā
Documentation is already up to date'));
|
|
543
|
+
return { synced: 0 };
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
// Display changes
|
|
547
|
+
await this.displaySyncChanges(changes, config);
|
|
548
|
+
|
|
549
|
+
return {
|
|
550
|
+
synced: 1,
|
|
551
|
+
changes: changes.length
|
|
552
|
+
};
|
|
553
|
+
|
|
554
|
+
} catch (error) {
|
|
555
|
+
console.error(chalk.red(`Failed to sync: ${error.message}`));
|
|
556
|
+
return { synced: 0, error: error.message };
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
async syncAllComponents(config) {
|
|
561
|
+
const components = Array.from(this.documentationSynchronizer.syncedComponents.entries());
|
|
562
|
+
|
|
563
|
+
console.log(chalk.blue(`š Syncing ${components.length} components...\n`));
|
|
564
|
+
|
|
565
|
+
const results = {
|
|
566
|
+
synced: 0,
|
|
567
|
+
skipped: 0,
|
|
568
|
+
failed: 0,
|
|
569
|
+
totalChanges: 0
|
|
570
|
+
};
|
|
571
|
+
|
|
572
|
+
for (const [componentPath, component] of components) {
|
|
573
|
+
try {
|
|
574
|
+
// Check if needs sync
|
|
575
|
+
if (!config.force) {
|
|
576
|
+
const stats = await fs.stat(componentPath);
|
|
577
|
+
const lastModified = stats.mtime.toISOString();
|
|
578
|
+
|
|
579
|
+
if (component.lastSync && lastModified <= component.lastSync) {
|
|
580
|
+
results.skipped++;
|
|
581
|
+
continue;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
console.log(chalk.gray(`\nSyncing: ${path.relative(this.rootPath, componentPath)}`));
|
|
586
|
+
|
|
587
|
+
const changes = await this.documentationSynchronizer.synchronizeComponent(componentPath, {
|
|
588
|
+
strategies: config.strategies
|
|
589
|
+
});
|
|
590
|
+
|
|
591
|
+
if (changes.length > 0) {
|
|
592
|
+
results.synced++;
|
|
593
|
+
results.totalChanges += changes.length;
|
|
594
|
+
|
|
595
|
+
if (config.interactive) {
|
|
596
|
+
await this.displaySyncChanges(changes, config);
|
|
597
|
+
} else {
|
|
598
|
+
console.log(chalk.green(` ā
Applied ${changes.length} changes`));
|
|
599
|
+
}
|
|
600
|
+
} else {
|
|
601
|
+
results.skipped++;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
} catch (error) {
|
|
605
|
+
results.failed++;
|
|
606
|
+
console.error(chalk.red(` ā Failed: ${error.message}`));
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
// Display summary
|
|
611
|
+
console.log(chalk.blue('\nš Synchronization Summary:'));
|
|
612
|
+
console.log(chalk.green(` ā
Synced: ${results.synced}`));
|
|
613
|
+
console.log(chalk.gray(` āļø Skipped: ${results.skipped}`));
|
|
614
|
+
if (results.failed > 0) {
|
|
615
|
+
console.log(chalk.red(` ā Failed: ${results.failed}`));
|
|
616
|
+
}
|
|
617
|
+
console.log(` Total changes: ${results.totalChanges}`);
|
|
618
|
+
|
|
619
|
+
return results;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
async displaySyncChanges(changes, config) {
|
|
623
|
+
console.log(chalk.blue('š Changes applied:\n'));
|
|
624
|
+
|
|
625
|
+
for (const strategyChanges of changes) {
|
|
626
|
+
if (!strategyChanges.success) {
|
|
627
|
+
console.log(chalk.red(`ā ${strategyChanges.strategy}: ${strategyChanges.error}`));
|
|
628
|
+
continue;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
console.log(chalk.yellow(`${strategyChanges.strategy}:`));
|
|
632
|
+
|
|
633
|
+
for (const change of strategyChanges.changes) {
|
|
634
|
+
console.log(` - ${change.description}`);
|
|
635
|
+
|
|
636
|
+
if (config.interactive && change.type === 'updated') {
|
|
637
|
+
// Show diff preview
|
|
638
|
+
console.log(chalk.gray(' Preview of changes...'));
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
async enableAutoSync(config) {
|
|
645
|
+
console.log(chalk.blue('š Enabling automatic documentation sync...\n'));
|
|
646
|
+
|
|
647
|
+
// Configure auto-sync
|
|
648
|
+
this.documentationSynchronizer.options.autoSync = true;
|
|
649
|
+
this.documentationSynchronizer.options.syncInterval = 60000; // 1 minute
|
|
650
|
+
|
|
651
|
+
// Start auto-sync
|
|
652
|
+
await this.documentationSynchronizer.startAutoSync();
|
|
653
|
+
|
|
654
|
+
console.log(chalk.green('ā
Auto-sync enabled'));
|
|
655
|
+
console.log(chalk.gray('Documentation will be checked every minute for changes'));
|
|
656
|
+
console.log(chalk.gray('Press Ctrl+C to stop auto-sync'));
|
|
657
|
+
|
|
658
|
+
// Set up monitoring
|
|
659
|
+
this.documentationSynchronizer.on('auto-sync', (data) => {
|
|
660
|
+
if (data.changes.length > 0) {
|
|
661
|
+
console.log(chalk.blue(`\n[${this.formatTime(new Date())}] Auto-sync detected changes:`));
|
|
662
|
+
|
|
663
|
+
for (const change of data.changes) {
|
|
664
|
+
console.log(` - ${path.relative(this.rootPath, change.componentPath)}`);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
});
|
|
668
|
+
|
|
669
|
+
// Keep process running
|
|
670
|
+
await new Promise((resolve) => {
|
|
671
|
+
process.on('SIGINT', () => {
|
|
672
|
+
console.log(chalk.yellow('\n\nStopping auto-sync...'));
|
|
673
|
+
this.documentationSynchronizer.stopAutoSync();
|
|
674
|
+
resolve();
|
|
675
|
+
});
|
|
676
|
+
});
|
|
677
|
+
|
|
678
|
+
return {
|
|
679
|
+
autoSyncEnabled: true
|
|
680
|
+
};
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
async generateReport(reportPath) {
|
|
684
|
+
console.log(chalk.blue('š Generating synchronization report...\n'));
|
|
685
|
+
|
|
686
|
+
const report = await this.documentationSynchronizer.generateSyncReport();
|
|
687
|
+
|
|
688
|
+
// Add sync results
|
|
689
|
+
report.syncResults = this.syncResults;
|
|
690
|
+
|
|
691
|
+
// Save report
|
|
692
|
+
await fs.writeFile(reportPath, JSON.stringify(report, null, 2));
|
|
693
|
+
|
|
694
|
+
console.log(chalk.green(`ā
Report generated: ${reportPath}`));
|
|
695
|
+
|
|
696
|
+
// Display summary
|
|
697
|
+
console.log(chalk.blue('\nš Report Summary:'));
|
|
698
|
+
console.log(` Total components: ${report.summary.totalComponents}`);
|
|
699
|
+
console.log(` Total documentation: ${report.summary.totalDocumentation}`);
|
|
700
|
+
console.log(` Sync history entries: ${report.summary.syncHistory}`);
|
|
701
|
+
|
|
702
|
+
if (report.summary.lastSync) {
|
|
703
|
+
console.log(` Last sync: ${this.formatDate(report.summary.lastSync)}`);
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
return {
|
|
707
|
+
reportGenerated: true,
|
|
708
|
+
reportPath
|
|
709
|
+
};
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
async showSyncStatus() {
|
|
713
|
+
const components = this.documentationSynchronizer.syncedComponents;
|
|
714
|
+
const docs = this.documentationSynchronizer.documentationIndex;
|
|
715
|
+
|
|
716
|
+
console.log(chalk.blue('š Documentation Sync Status\n'));
|
|
717
|
+
|
|
718
|
+
console.log(chalk.gray('Registered components:'));
|
|
719
|
+
console.log(` Components with docs: ${components.size}`);
|
|
720
|
+
console.log(` Documentation files: ${docs.size}`);
|
|
721
|
+
|
|
722
|
+
// Show sync strategies
|
|
723
|
+
console.log(chalk.gray('\nActive sync strategies:'));
|
|
724
|
+
for (const [name, strategy] of this.documentationSynchronizer.syncStrategies) {
|
|
725
|
+
console.log(` - ${name}: ${strategy.description}`);
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
// Recent sync history
|
|
729
|
+
const history = this.documentationSynchronizer.syncHistory.slice(-5);
|
|
730
|
+
if (history.length > 0) {
|
|
731
|
+
console.log(chalk.gray('\nRecent synchronizations:'));
|
|
732
|
+
for (const entry of history) {
|
|
733
|
+
console.log(` ${this.formatDate(entry.timestamp)} - ${path.basename(entry.componentPath)}`);
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
console.log(chalk.blue('\nš Commands:'));
|
|
738
|
+
console.log(' Check status: *sync-documentation --check');
|
|
739
|
+
console.log(' Sync all: *sync-documentation --all');
|
|
740
|
+
console.log(' Enable auto-sync: *sync-documentation --auto-sync');
|
|
741
|
+
console.log(' Generate report: *sync-documentation --report <file>');
|
|
742
|
+
|
|
743
|
+
return {
|
|
744
|
+
status: 'ready',
|
|
745
|
+
components: components.size,
|
|
746
|
+
documentation: docs.size
|
|
747
|
+
};
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
formatDate(dateString) {
|
|
751
|
+
const date = new Date(dateString);
|
|
752
|
+
const now = new Date();
|
|
753
|
+
const diff = now - date;
|
|
754
|
+
|
|
755
|
+
// Less than 1 hour
|
|
756
|
+
if (diff < 3600000) {
|
|
757
|
+
const minutes = Math.floor(diff / 60000);
|
|
758
|
+
return `${minutes} minute${minutes !== 1 ? 's' : ''} ago`;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
// Less than 24 hours
|
|
762
|
+
if (diff < 86400000) {
|
|
763
|
+
const hours = Math.floor(diff / 3600000);
|
|
764
|
+
return `${hours} hour${hours !== 1 ? 's' : ''} ago`;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
// Less than 7 days
|
|
768
|
+
if (diff < 604800000) {
|
|
769
|
+
const days = Math.floor(diff / 86400000);
|
|
770
|
+
return `${days} day${days !== 1 ? 's' : ''} ago`;
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
// Otherwise show date
|
|
774
|
+
return date.toLocaleDateString();
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
formatTime(date) {
|
|
778
|
+
return date.toLocaleTimeString();
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
module.exports = SyncDocumentationTask;
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
## Integration Points
|
|
786
|
+
|
|
787
|
+
### Documentation Synchronizer
|
|
788
|
+
- Core synchronization engine
|
|
789
|
+
- Multi-strategy sync support
|
|
790
|
+
- Automatic change detection
|
|
791
|
+
- Real-time monitoring
|
|
792
|
+
|
|
793
|
+
### Sync Strategies
|
|
794
|
+
- **JSDoc**: Sync code comments with markdown
|
|
795
|
+
- **Markdown**: Update documentation sections
|
|
796
|
+
- **Schema**: Sync YAML/JSON schemas
|
|
797
|
+
- **API**: Update API documentation
|
|
798
|
+
- **Examples**: Validate and update code examples
|
|
799
|
+
|
|
800
|
+
### Documentation Sources
|
|
801
|
+
- Markdown files (.md)
|
|
802
|
+
- YAML manifests (.yaml, .yml)
|
|
803
|
+
- JSON schemas (.json)
|
|
804
|
+
- README files
|
|
805
|
+
- Inline documentation
|
|
806
|
+
|
|
807
|
+
### Code Sources
|
|
808
|
+
- JavaScript files (.js, .jsx)
|
|
809
|
+
- TypeScript files (.ts, .tsx)
|
|
810
|
+
- Task definitions
|
|
811
|
+
- Agent manifests
|
|
812
|
+
- Workflow configurations
|
|
813
|
+
|
|
814
|
+
## Synchronization Workflow
|
|
815
|
+
|
|
816
|
+
### Detection Phase
|
|
817
|
+
1. Monitor file changes
|
|
818
|
+
2. Identify linked documentation
|
|
819
|
+
3. Detect content differences
|
|
820
|
+
4. Calculate sync requirements
|
|
821
|
+
5. Prioritize updates
|
|
822
|
+
|
|
823
|
+
### Analysis Phase
|
|
824
|
+
1. Parse code changes
|
|
825
|
+
2. Extract documentation elements
|
|
826
|
+
3. Compare with existing docs
|
|
827
|
+
4. Identify gaps and conflicts
|
|
828
|
+
5. Generate sync plan
|
|
829
|
+
|
|
830
|
+
### Update Phase
|
|
831
|
+
1. Apply sync strategies
|
|
832
|
+
2. Update documentation files
|
|
833
|
+
3. Preserve formatting
|
|
834
|
+
4. Validate changes
|
|
835
|
+
5. Record sync history
|
|
836
|
+
|
|
837
|
+
## Best Practices
|
|
838
|
+
|
|
839
|
+
### Documentation Structure
|
|
840
|
+
- Keep docs near code
|
|
841
|
+
- Use consistent naming
|
|
842
|
+
- Link explicitly in docs
|
|
843
|
+
- Maintain clear sections
|
|
844
|
+
- Update examples regularly
|
|
845
|
+
|
|
846
|
+
### Sync Configuration
|
|
847
|
+
- Choose appropriate strategies
|
|
848
|
+
- Set reasonable intervals
|
|
849
|
+
- Review changes regularly
|
|
850
|
+
- Monitor sync history
|
|
851
|
+
- Handle conflicts gracefully
|
|
852
|
+
|
|
853
|
+
### Quality Assurance
|
|
854
|
+
- Validate after sync
|
|
855
|
+
- Test code examples
|
|
856
|
+
- Check API accuracy
|
|
857
|
+
- Verify schema alignment
|
|
858
|
+
- Maintain version history
|
|
859
|
+
|
|
860
|
+
## Security Considerations
|
|
861
|
+
- Validate file paths
|
|
862
|
+
- Prevent injection in docs
|
|
863
|
+
- Protect sensitive information
|
|
864
|
+
- Audit sync operations
|
|
865
865
|
- Control write permissions
|