aios-core 2.1.6 → 2.2.1
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-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 +1 -1
- 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/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/github-workflows/README.md +109 -109
- 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 +704 -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 -11
- 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/tests/integration/wizard-detection.test.js +8 -6
- package/packages/installer/tests/unit/env-template.test.js +8 -8
- 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/tools/diagnose-installation.js +266 -0
- package/tools/diagnose-npx-issue.ps1 +96 -0
- package/tools/quick-diagnose.cmd +85 -0
- package/tools/quick-diagnose.ps1 +117 -0
- 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/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,843 +1,843 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
## Execution Modes
|
|
4
|
-
|
|
5
|
-
**Choose your execution mode:**
|
|
6
|
-
|
|
7
|
-
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
8
|
-
- Autonomous decision making with logging
|
|
9
|
-
- Minimal user interaction
|
|
10
|
-
- **Best for:** Simple, deterministic tasks
|
|
11
|
-
|
|
12
|
-
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
13
|
-
- Explicit decision checkpoints
|
|
14
|
-
- Educational explanations
|
|
15
|
-
- **Best for:** Learning, complex decisions
|
|
16
|
-
|
|
17
|
-
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
18
|
-
- Task analysis phase (identify all ambiguities)
|
|
19
|
-
- Zero ambiguity execution
|
|
20
|
-
- **Best for:** Ambiguous requirements, critical work
|
|
21
|
-
|
|
22
|
-
**Parameter:** `mode` (optional, default: `interactive`)
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Task Definition (AIOS Task Format V1.0)
|
|
27
|
-
|
|
28
|
-
```yaml
|
|
29
|
-
task: proposeModification()
|
|
30
|
-
responsável: Atlas (Decoder)
|
|
31
|
-
responsavel_type: Agente
|
|
32
|
-
atomic_layer: Molecule
|
|
33
|
-
|
|
34
|
-
**Entrada:**
|
|
35
|
-
- campo: task
|
|
36
|
-
tipo: string
|
|
37
|
-
origem: User Input
|
|
38
|
-
obrigatório: true
|
|
39
|
-
validação: Must be registered task
|
|
40
|
-
|
|
41
|
-
- campo: parameters
|
|
42
|
-
tipo: object
|
|
43
|
-
origem: User Input
|
|
44
|
-
obrigatório: false
|
|
45
|
-
validação: Valid task parameters
|
|
46
|
-
|
|
47
|
-
- campo: mode
|
|
48
|
-
tipo: string
|
|
49
|
-
origem: User Input
|
|
50
|
-
obrigatório: false
|
|
51
|
-
validação: yolo|interactive|pre-flight
|
|
52
|
-
|
|
53
|
-
**Saída:**
|
|
54
|
-
- campo: execution_result
|
|
55
|
-
tipo: object
|
|
56
|
-
destino: Memory
|
|
57
|
-
persistido: false
|
|
58
|
-
|
|
59
|
-
- campo: logs
|
|
60
|
-
tipo: array
|
|
61
|
-
destino: File (.ai/logs/*)
|
|
62
|
-
persistido: true
|
|
63
|
-
|
|
64
|
-
- campo: state
|
|
65
|
-
tipo: object
|
|
66
|
-
destino: State management
|
|
67
|
-
persistido: true
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## Pre-Conditions
|
|
73
|
-
|
|
74
|
-
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
75
|
-
|
|
76
|
-
**Checklist:**
|
|
77
|
-
|
|
78
|
-
```yaml
|
|
79
|
-
pre-conditions:
|
|
80
|
-
- [ ] Task is registered; required parameters provided; dependencies met
|
|
81
|
-
tipo: pre-condition
|
|
82
|
-
blocker: true
|
|
83
|
-
validação: |
|
|
84
|
-
Check task is registered; required parameters provided; dependencies met
|
|
85
|
-
error_message: "Pre-condition failed: Task is registered; required parameters provided; dependencies met"
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## Post-Conditions
|
|
91
|
-
|
|
92
|
-
**Purpose:** Validate execution success AFTER task completes
|
|
93
|
-
|
|
94
|
-
**Checklist:**
|
|
95
|
-
|
|
96
|
-
```yaml
|
|
97
|
-
post-conditions:
|
|
98
|
-
- [ ] Task completed; exit code 0; expected outputs created
|
|
99
|
-
tipo: post-condition
|
|
100
|
-
blocker: true
|
|
101
|
-
validação: |
|
|
102
|
-
Verify task completed; exit code 0; expected outputs created
|
|
103
|
-
error_message: "Post-condition failed: Task completed; exit code 0; expected outputs created"
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## Acceptance Criteria
|
|
109
|
-
|
|
110
|
-
**Purpose:** Definitive pass/fail criteria for task completion
|
|
111
|
-
|
|
112
|
-
**Checklist:**
|
|
113
|
-
|
|
114
|
-
```yaml
|
|
115
|
-
acceptance-criteria:
|
|
116
|
-
- [ ] Task completed as expected; side effects documented
|
|
117
|
-
tipo: acceptance-criterion
|
|
118
|
-
blocker: true
|
|
119
|
-
validação: |
|
|
120
|
-
Assert task completed as expected; side effects documented
|
|
121
|
-
error_message: "Acceptance criterion not met: Task completed as expected; side effects documented"
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Tools
|
|
127
|
-
|
|
128
|
-
**External/shared resources used by this task:**
|
|
129
|
-
|
|
130
|
-
- **Tool:** task-runner
|
|
131
|
-
- **Purpose:** Task execution and orchestration
|
|
132
|
-
- **Source:** .aios-core/core/task-runner.js
|
|
133
|
-
|
|
134
|
-
- **Tool:** logger
|
|
135
|
-
- **Purpose:** Execution logging and error tracking
|
|
136
|
-
- **Source:** .aios-core/utils/logger.js
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
|
|
140
|
-
## Scripts
|
|
141
|
-
|
|
142
|
-
**Agent-specific code for this task:**
|
|
143
|
-
|
|
144
|
-
- **Script:** execute-task.js
|
|
145
|
-
- **Purpose:** Generic task execution wrapper
|
|
146
|
-
- **Language:** JavaScript
|
|
147
|
-
- **Location:** .aios-core/scripts/execute-task.js
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## Error Handling
|
|
152
|
-
|
|
153
|
-
**Strategy:** retry
|
|
154
|
-
|
|
155
|
-
**Common Errors:**
|
|
156
|
-
|
|
157
|
-
1. **Error:** Task Not Found
|
|
158
|
-
- **Cause:** Specified task not registered in system
|
|
159
|
-
- **Resolution:** Verify task name and registration
|
|
160
|
-
- **Recovery:** List available tasks, suggest similar
|
|
161
|
-
|
|
162
|
-
2. **Error:** Invalid Parameters
|
|
163
|
-
- **Cause:** Task parameters do not match expected schema
|
|
164
|
-
- **Resolution:** Validate parameters against task definition
|
|
165
|
-
- **Recovery:** Provide parameter template, reject execution
|
|
166
|
-
|
|
167
|
-
3. **Error:** Execution Timeout
|
|
168
|
-
- **Cause:** Task exceeds maximum execution time
|
|
169
|
-
- **Resolution:** Optimize task or increase timeout
|
|
170
|
-
- **Recovery:** Kill task, cleanup resources, log state
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
## Performance
|
|
175
|
-
|
|
176
|
-
**Expected Metrics:**
|
|
177
|
-
|
|
178
|
-
```yaml
|
|
179
|
-
duration_expected: 2-5 min (estimated)
|
|
180
|
-
cost_estimated: $0.001-0.003
|
|
181
|
-
token_usage: ~1,000-3,000 tokens
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
**Optimization Notes:**
|
|
185
|
-
- Parallelize independent operations; reuse atom results; implement early exits
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
## Metadata
|
|
190
|
-
|
|
191
|
-
```yaml
|
|
192
|
-
story: N/A
|
|
193
|
-
version: 1.0.0
|
|
194
|
-
dependencies:
|
|
195
|
-
- N/A
|
|
196
|
-
tags:
|
|
197
|
-
- automation
|
|
198
|
-
- workflow
|
|
199
|
-
updated_at: 2025-11-17
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
checklists:
|
|
205
|
-
- change-checklist.md
|
|
206
|
-
---
|
|
207
|
-
|
|
208
|
-
# Propose Modification - AIOS Developer Task
|
|
209
|
-
|
|
210
|
-
## Purpose
|
|
211
|
-
Create and submit modification proposals for collaborative review and approval within the AIOS
|
|
212
|
-
|
|
213
|
-
## Command Pattern
|
|
214
|
-
```
|
|
215
|
-
*propose-modification <component-path> <modification-type> [options]
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
## Parameters
|
|
219
|
-
- `component-path`: Path to the component to modify
|
|
220
|
-
- `modification-type`: Type of modification (modify, refactor, deprecate, enhance)
|
|
221
|
-
- `options`: Additional proposal configuration
|
|
222
|
-
|
|
223
|
-
### Options
|
|
224
|
-
- `--title <title>`: Title for the proposal
|
|
225
|
-
- `--description <desc>`: Detailed description of changes
|
|
226
|
-
- `--priority <level>`: Priority level (low, medium, high, critical)
|
|
227
|
-
- `--tags <tags>`: Comma-separated tags for categorization
|
|
228
|
-
- `--assignees <users>`: Comma-separated list of reviewers
|
|
229
|
-
- `--draft`: Create as draft proposal
|
|
230
|
-
- `--link-issues <ids>`: Link related issues or tasks
|
|
231
|
-
- `--impact-analysis`: Include impact analysis report
|
|
232
|
-
- `--test-results`: Attach test results
|
|
233
|
-
|
|
234
|
-
## Examples
|
|
235
|
-
```bash
|
|
236
|
-
# Propose agent enhancement
|
|
237
|
-
*propose-modification aios-core/agents/weather-agent.md enhance --title "Add caching support" --description "Implement response caching to reduce API calls" --priority medium
|
|
238
|
-
|
|
239
|
-
# Propose critical refactoring with impact analysis
|
|
240
|
-
*propose-modification aios-core/scripts/core-utility.js refactor --title "Optimize performance" --priority critical --impact-analysis --assignees "alice,bob"
|
|
241
|
-
|
|
242
|
-
# Create draft proposal for workflow deprecation
|
|
243
|
-
*propose-modification aios-core/workflows/legacy-workflow.yaml deprecate --draft --title "Deprecate legacy workflow" --link-issues "123,456"
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
## Implementation
|
|
247
|
-
|
|
248
|
-
```javascript
|
|
249
|
-
const fs = require('fs').promises;
|
|
250
|
-
const path = require('path');
|
|
251
|
-
const chalk = require('chalk');
|
|
252
|
-
const inquirer = require('inquirer');
|
|
253
|
-
|
|
254
|
-
class ProposeModificationTask {
|
|
255
|
-
constructor() {
|
|
256
|
-
this.taskName = 'propose-modification';
|
|
257
|
-
this.description = 'Create modification proposals for collaborative review';
|
|
258
|
-
this.rootPath = process.cwd();
|
|
259
|
-
this.proposalSystem = null;
|
|
260
|
-
this.impactAnalyzer = null;
|
|
261
|
-
this.notificationService = null;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
async execute(params) {
|
|
265
|
-
try {
|
|
266
|
-
console.log(chalk.blue('📝 AIOS Modification Proposal'));
|
|
267
|
-
console.log(chalk.gray('Creating collaborative modification proposal\n'));
|
|
268
|
-
|
|
269
|
-
// Parse and validate parameters
|
|
270
|
-
const config = await this.parseParameters(params);
|
|
271
|
-
|
|
272
|
-
// Initialize dependencies
|
|
273
|
-
await this.initializeDependencies();
|
|
274
|
-
|
|
275
|
-
// Validate target component
|
|
276
|
-
const component = await this.validateComponent(config.componentPath);
|
|
277
|
-
|
|
278
|
-
// Create proposal
|
|
279
|
-
console.log(chalk.gray('Creating modification proposal...'));
|
|
280
|
-
const proposal = await this.createProposal(component, config);
|
|
281
|
-
|
|
282
|
-
// Run impact analysis if requested
|
|
283
|
-
if (config.includeImpactAnalysis) {
|
|
284
|
-
console.log(chalk.gray('Running impact analysis...'));
|
|
285
|
-
proposal.impactAnalysis = await this.runImpactAnalysis(component, config);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
// Attach test results if provided
|
|
289
|
-
if (config.testResults) {
|
|
290
|
-
console.log(chalk.gray('Attaching test results...'));
|
|
291
|
-
proposal.testResults = await this.attachTestResults(config.testResults);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
// Get proposal details from user
|
|
295
|
-
const details = await this.getProposalDetails(proposal, config);
|
|
296
|
-
Object.assign(proposal, details);
|
|
297
|
-
|
|
298
|
-
// Submit proposal
|
|
299
|
-
console.log(chalk.gray('Submitting proposal...'));
|
|
300
|
-
const result = await this.submitProposal(proposal, config);
|
|
301
|
-
|
|
302
|
-
// Notify assignees
|
|
303
|
-
if (config.assignees.length > 0) {
|
|
304
|
-
await this.notifyAssignees(result, config.assignees);
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// Display success
|
|
308
|
-
console.log(chalk.green('\n✅ Modification proposal created successfully'));
|
|
309
|
-
console.log(chalk.gray(` Proposal ID: ${result.proposalId}`));
|
|
310
|
-
console.log(chalk.gray(` Status: ${result.status}`));
|
|
311
|
-
console.log(chalk.gray(` Reviewers: ${config.assignees.join(', ') || 'None assigned'}`));
|
|
312
|
-
|
|
313
|
-
if (result.webUrl) {
|
|
314
|
-
console.log(chalk.blue(` View proposal: ${result.webUrl}`));
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
return {
|
|
318
|
-
success: true,
|
|
319
|
-
proposalId: result.proposalId,
|
|
320
|
-
status: result.status,
|
|
321
|
-
component: component.path,
|
|
322
|
-
modificationType: config.modificationType,
|
|
323
|
-
priority: config.priority,
|
|
324
|
-
assignees: config.assignees
|
|
325
|
-
};
|
|
326
|
-
|
|
327
|
-
} catch (error) {
|
|
328
|
-
console.error(chalk.red(`\n❌ Proposal creation failed: ${error.message}`));
|
|
329
|
-
throw error;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
async parseParameters(params) {
|
|
334
|
-
if (params.length < 2) {
|
|
335
|
-
throw new Error('Usage: *propose-modification <component-path> <modification-type> [options]');
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
const config = {
|
|
339
|
-
componentPath: params[0],
|
|
340
|
-
modificationType: params[1],
|
|
341
|
-
title: '',
|
|
342
|
-
description: '',
|
|
343
|
-
priority: 'medium',
|
|
344
|
-
tags: [],
|
|
345
|
-
assignees: [],
|
|
346
|
-
isDraft: false,
|
|
347
|
-
linkedIssues: [],
|
|
348
|
-
includeImpactAnalysis: false,
|
|
349
|
-
testResults: null
|
|
350
|
-
};
|
|
351
|
-
|
|
352
|
-
// Validate modification type
|
|
353
|
-
const validTypes = ['modify', 'refactor', 'deprecate', 'enhance'];
|
|
354
|
-
if (!validTypes.includes(config.modificationType)) {
|
|
355
|
-
throw new Error(`Invalid modification type: ${config.modificationType}. Must be one of: ${validTypes.join(', ')}`);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
// Parse options
|
|
359
|
-
for (let i = 2; i < params.length; i++) {
|
|
360
|
-
const param = params[i];
|
|
361
|
-
|
|
362
|
-
if (param === '--draft') {
|
|
363
|
-
config.isDraft = true;
|
|
364
|
-
} else if (param === '--impact-analysis') {
|
|
365
|
-
config.includeImpactAnalysis = true;
|
|
366
|
-
} else if (param.startsWith('--title') && params[i + 1]) {
|
|
367
|
-
config.title = params[++i];
|
|
368
|
-
} else if (param.startsWith('--description') && params[i + 1]) {
|
|
369
|
-
config.description = params[++i];
|
|
370
|
-
} else if (param.startsWith('--priority') && params[i + 1]) {
|
|
371
|
-
config.priority = params[++i];
|
|
372
|
-
} else if (param.startsWith('--tags') && params[i + 1]) {
|
|
373
|
-
config.tags = params[++i].split(',').map(t => t.trim());
|
|
374
|
-
} else if (param.startsWith('--assignees') && params[i + 1]) {
|
|
375
|
-
config.assignees = params[++i].split(',').map(a => a.trim());
|
|
376
|
-
} else if (param.startsWith('--link-issues') && params[i + 1]) {
|
|
377
|
-
config.linkedIssues = params[++i].split(',').map(id => id.trim());
|
|
378
|
-
} else if (param.startsWith('--test-results') && params[i + 1]) {
|
|
379
|
-
config.testResults = params[++i];
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
// Validate priority
|
|
384
|
-
const validPriorities = ['low', 'medium', 'high', 'critical'];
|
|
385
|
-
if (!validPriorities.includes(config.priority)) {
|
|
386
|
-
throw new Error(`Invalid priority: ${config.priority}. Must be one of: ${validPriorities.join(', ')}`);
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
return config;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
async initializeDependencies() {
|
|
393
|
-
try {
|
|
394
|
-
const ProposalSystem = require('../scripts/proposal-system');
|
|
395
|
-
this.proposalSystem = new ProposalSystem({ rootPath: this.rootPath });
|
|
396
|
-
|
|
397
|
-
const ImpactAnalyzer = require('../scripts/dependency-impact-analyzer');
|
|
398
|
-
this.impactAnalyzer = new ImpactAnalyzer({ rootPath: this.rootPath });
|
|
399
|
-
|
|
400
|
-
const NotificationService = require('../scripts/notification-service');
|
|
401
|
-
this.notificationService = new NotificationService({ rootPath: this.rootPath });
|
|
402
|
-
|
|
403
|
-
} catch (error) {
|
|
404
|
-
throw new Error(`Failed to initialize dependencies: ${error.message}`);
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
async validateComponent(componentPath) {
|
|
409
|
-
const fullPath = path.resolve(this.rootPath, componentPath);
|
|
410
|
-
|
|
411
|
-
try {
|
|
412
|
-
const stats = await fs.stat(fullPath);
|
|
413
|
-
if (!stats.isFile()) {
|
|
414
|
-
throw new Error(`Not a file: ${componentPath}`);
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
const content = await fs.readFile(fullPath, 'utf-8');
|
|
418
|
-
const componentType = this.determineComponentType(fullPath, content);
|
|
419
|
-
|
|
420
|
-
return {
|
|
421
|
-
path: componentPath,
|
|
422
|
-
fullPath: fullPath,
|
|
423
|
-
type: componentType,
|
|
424
|
-
content: content,
|
|
425
|
-
lastModified: stats.mtime
|
|
426
|
-
};
|
|
427
|
-
|
|
428
|
-
} catch (error) {
|
|
429
|
-
if (error.code === 'ENOENT') {
|
|
430
|
-
throw new Error(`Component not found: ${componentPath}`);
|
|
431
|
-
}
|
|
432
|
-
throw error;
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
async createProposal(component, config) {
|
|
437
|
-
const proposal = {
|
|
438
|
-
proposalId: `proposal-${Date.now()}-${Math.random().toString(36).substr(2, 6)}`,
|
|
439
|
-
componentPath: component.path,
|
|
440
|
-
componentType: component.type,
|
|
441
|
-
modificationType: config.modificationType,
|
|
442
|
-
title: config.title || `${config.modificationType} ${component.path}`,
|
|
443
|
-
description: config.description,
|
|
444
|
-
priority: config.priority,
|
|
445
|
-
status: config.isDraft ? 'draft' : 'pending_review',
|
|
446
|
-
tags: config.tags,
|
|
447
|
-
assignees: config.assignees,
|
|
448
|
-
linkedIssues: config.linkedIssues,
|
|
449
|
-
metadata: {
|
|
450
|
-
createdBy: process.env.USER || 'aios-developer',
|
|
451
|
-
createdAt: new Date().toISOString(),
|
|
452
|
-
lastModified: new Date().toISOString(),
|
|
453
|
-
version: 1
|
|
454
|
-
}
|
|
455
|
-
};
|
|
456
|
-
|
|
457
|
-
// Add modification type specific fields
|
|
458
|
-
switch (config.modificationType) {
|
|
459
|
-
case 'deprecate':
|
|
460
|
-
proposal.deprecationInfo = {
|
|
461
|
-
targetRemovalDate: null,
|
|
462
|
-
migrationPath: null,
|
|
463
|
-
affectedComponents: []
|
|
464
|
-
};
|
|
465
|
-
break;
|
|
466
|
-
case 'enhance':
|
|
467
|
-
proposal.enhancementInfo = {
|
|
468
|
-
newCapabilities: [],
|
|
469
|
-
performanceImpact: null,
|
|
470
|
-
backwardCompatible: true
|
|
471
|
-
};
|
|
472
|
-
break;
|
|
473
|
-
case 'refactor':
|
|
474
|
-
proposal.refactorInfo = {
|
|
475
|
-
scope: 'component', // component, module, system
|
|
476
|
-
breakingChanges: false,
|
|
477
|
-
codeQualityMetrics: {}
|
|
478
|
-
};
|
|
479
|
-
break;
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
return proposal;
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
async runImpactAnalysis(component, config) {
|
|
486
|
-
try {
|
|
487
|
-
const impact = await this.impactAnalyzer.analyzeDependencyImpact(component, {
|
|
488
|
-
modificationType: config.modificationType,
|
|
489
|
-
depth: 'deep'
|
|
490
|
-
});
|
|
491
|
-
|
|
492
|
-
return {
|
|
493
|
-
affectedComponents: impact.affectedComponents.length,
|
|
494
|
-
criticalDependencies: impact.impactCategories?.critical || [],
|
|
495
|
-
riskLevel: this.calculateRiskLevel(impact),
|
|
496
|
-
summary: this.generateImpactSummary(impact)
|
|
497
|
-
};
|
|
498
|
-
|
|
499
|
-
} catch (error) {
|
|
500
|
-
console.warn(chalk.yellow(`Impact analysis failed: ${error.message}`));
|
|
501
|
-
return null;
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
async attachTestResults(testResultsPath) {
|
|
506
|
-
try {
|
|
507
|
-
const content = await fs.readFile(testResultsPath, 'utf-8');
|
|
508
|
-
return {
|
|
509
|
-
source: testResultsPath,
|
|
510
|
-
content: content,
|
|
511
|
-
attachedAt: new Date().toISOString()
|
|
512
|
-
};
|
|
513
|
-
} catch (error) {
|
|
514
|
-
console.warn(chalk.yellow(`Failed to attach test results: ${error.message}`));
|
|
515
|
-
return null;
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
async getProposalDetails(proposal, config) {
|
|
520
|
-
const questions = [];
|
|
521
|
-
|
|
522
|
-
// Title if not provided
|
|
523
|
-
if (!config.title) {
|
|
524
|
-
questions.push({
|
|
525
|
-
type: 'input',
|
|
526
|
-
name: 'title',
|
|
527
|
-
message: 'Proposal title:',
|
|
528
|
-
default: proposal.title,
|
|
529
|
-
validate: input => input.length > 0 || 'Title is required'
|
|
530
|
-
});
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
// Description if not provided
|
|
534
|
-
if (!config.description) {
|
|
535
|
-
questions.push({
|
|
536
|
-
type: 'editor',
|
|
537
|
-
name: 'description',
|
|
538
|
-
message: 'Detailed description (opens editor):',
|
|
539
|
-
default: this.getDescriptionTemplate(config.modificationType)
|
|
540
|
-
});
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
// Modification-specific questions
|
|
544
|
-
if (config.modificationType === 'deprecate') {
|
|
545
|
-
questions.push({
|
|
546
|
-
type: 'input',
|
|
547
|
-
name: 'targetRemovalDate',
|
|
548
|
-
message: 'Target removal date (YYYY-MM-DD):',
|
|
549
|
-
validate: input => {
|
|
550
|
-
if (!input) return true;
|
|
551
|
-
return /^\d{4}-\d{2}-\d{2}$/.test(input) || 'Invalid date format';
|
|
552
|
-
}
|
|
553
|
-
});
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
if (config.modificationType === 'enhance') {
|
|
557
|
-
questions.push({
|
|
558
|
-
type: 'checkbox',
|
|
559
|
-
name: 'newCapabilities',
|
|
560
|
-
message: 'Select new capabilities:',
|
|
561
|
-
choices: [
|
|
562
|
-
'Performance optimization',
|
|
563
|
-
'New API endpoints',
|
|
564
|
-
'Additional configuration options',
|
|
565
|
-
'Extended error handling',
|
|
566
|
-
'Improved logging',
|
|
567
|
-
'New integrations',
|
|
568
|
-
'Other'
|
|
569
|
-
]
|
|
570
|
-
});
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
if (config.modificationType === 'refactor') {
|
|
574
|
-
questions.push({
|
|
575
|
-
type: 'confirm',
|
|
576
|
-
name: 'breakingChanges',
|
|
577
|
-
message: 'Will this refactoring introduce breaking changes?',
|
|
578
|
-
default: false
|
|
579
|
-
});
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
// Review timeline
|
|
583
|
-
questions.push({
|
|
584
|
-
type: 'list',
|
|
585
|
-
name: 'reviewTimeline',
|
|
586
|
-
message: 'Expected review timeline:',
|
|
587
|
-
choices: [
|
|
588
|
-
{ name: 'Urgent (1-2 days)', value: 'urgent' },
|
|
589
|
-
{ name: 'Normal (3-5 days)', value: 'normal' },
|
|
590
|
-
{ name: 'Low priority (1 week+)', value: 'low' }
|
|
591
|
-
],
|
|
592
|
-
default: 'normal'
|
|
593
|
-
});
|
|
594
|
-
|
|
595
|
-
const answers = await inquirer.prompt(questions);
|
|
596
|
-
|
|
597
|
-
// Process answers
|
|
598
|
-
const details = {
|
|
599
|
-
title: answers.title || config.title,
|
|
600
|
-
description: answers.description || config.description,
|
|
601
|
-
reviewTimeline: answers.reviewTimeline
|
|
602
|
-
};
|
|
603
|
-
|
|
604
|
-
// Add modification-specific details
|
|
605
|
-
if (config.modificationType === 'deprecate' && answers.targetRemovalDate) {
|
|
606
|
-
details.deprecationInfo = {
|
|
607
|
-
targetRemovalDate: answers.targetRemovalDate
|
|
608
|
-
};
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
if (config.modificationType === 'enhance' && answers.newCapabilities) {
|
|
612
|
-
details.enhancementInfo = {
|
|
613
|
-
newCapabilities: answers.newCapabilities
|
|
614
|
-
};
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
if (config.modificationType === 'refactor') {
|
|
618
|
-
details.refactorInfo = {
|
|
619
|
-
breakingChanges: answers.breakingChanges
|
|
620
|
-
};
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
return details;
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
async submitProposal(proposal, config) {
|
|
627
|
-
try {
|
|
628
|
-
// Submit through proposal system
|
|
629
|
-
const result = await this.proposalSystem.submitProposal(proposal);
|
|
630
|
-
|
|
631
|
-
// Store in memory/database
|
|
632
|
-
await this.storeProposal(proposal, result);
|
|
633
|
-
|
|
634
|
-
return {
|
|
635
|
-
proposalId: proposal.proposalId,
|
|
636
|
-
status: proposal.status,
|
|
637
|
-
webUrl: this.generateProposalUrl(proposal.proposalId),
|
|
638
|
-
createdAt: proposal.metadata.createdAt
|
|
639
|
-
};
|
|
640
|
-
|
|
641
|
-
} catch (error) {
|
|
642
|
-
throw new Error(`Failed to submit proposal: ${error.message}`);
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
async storeProposal(proposal, result) {
|
|
647
|
-
const proposalsDir = path.join(this.rootPath, '.aios', 'proposals');
|
|
648
|
-
await fs.mkdir(proposalsDir, { recursive: true });
|
|
649
|
-
|
|
650
|
-
const proposalFile = path.join(proposalsDir, `${proposal.proposalId}.json`);
|
|
651
|
-
await fs.writeFile(proposalFile, JSON.stringify(proposal, null, 2));
|
|
652
|
-
|
|
653
|
-
// Update proposals index
|
|
654
|
-
const indexFile = path.join(proposalsDir, 'index.json');
|
|
655
|
-
let index = { proposals: [] };
|
|
656
|
-
|
|
657
|
-
try {
|
|
658
|
-
const existing = await fs.readFile(indexFile, 'utf-8');
|
|
659
|
-
index = JSON.parse(existing);
|
|
660
|
-
} catch (error) {
|
|
661
|
-
// Index doesn't exist yet
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
index.proposals.push({
|
|
665
|
-
proposalId: proposal.proposalId,
|
|
666
|
-
title: proposal.title,
|
|
667
|
-
componentPath: proposal.componentPath,
|
|
668
|
-
modificationType: proposal.modificationType,
|
|
669
|
-
status: proposal.status,
|
|
670
|
-
priority: proposal.priority,
|
|
671
|
-
createdAt: proposal.metadata.createdAt,
|
|
672
|
-
createdBy: proposal.metadata.createdBy
|
|
673
|
-
});
|
|
674
|
-
|
|
675
|
-
await fs.writeFile(indexFile, JSON.stringify(index, null, 2));
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
async notifyAssignees(result, assignees) {
|
|
679
|
-
try {
|
|
680
|
-
await this.notificationService.notifyUsers(assignees, {
|
|
681
|
-
type: 'proposal_assigned',
|
|
682
|
-
proposalId: result.proposalId,
|
|
683
|
-
title: result.title,
|
|
684
|
-
priority: result.priority,
|
|
685
|
-
url: result.webUrl
|
|
686
|
-
});
|
|
687
|
-
|
|
688
|
-
console.log(chalk.gray(` Notifications sent to: ${assignees.join(', ')}`));
|
|
689
|
-
|
|
690
|
-
} catch (error) {
|
|
691
|
-
console.warn(chalk.yellow(`Failed to send notifications: ${error.message}`));
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
|
|
695
|
-
// Helper methods
|
|
696
|
-
|
|
697
|
-
determineComponentType(filePath, content) {
|
|
698
|
-
if (filePath.includes('/agents/')) return 'agent';
|
|
699
|
-
if (filePath.includes('/tasks/')) return 'task';
|
|
700
|
-
if (filePath.includes('/workflows/')) return 'workflow';
|
|
701
|
-
if (filePath.includes('/utils/')) return 'util';
|
|
702
|
-
return 'unknown';
|
|
703
|
-
}
|
|
704
|
-
|
|
705
|
-
calculateRiskLevel(impact) {
|
|
706
|
-
const affectedCount = impact.affectedComponents.length;
|
|
707
|
-
const criticalCount = impact.impactCategories?.critical?.length || 0;
|
|
708
|
-
|
|
709
|
-
if (criticalCount > 0 || affectedCount > 20) return 'high';
|
|
710
|
-
if (affectedCount > 10) return 'medium';
|
|
711
|
-
return 'low';
|
|
712
|
-
}
|
|
713
|
-
|
|
714
|
-
generateImpactSummary(impact) {
|
|
715
|
-
return {
|
|
716
|
-
totalAffected: impact.affectedComponents.length,
|
|
717
|
-
byCategory: {
|
|
718
|
-
critical: impact.impactCategories?.critical?.length || 0,
|
|
719
|
-
high: impact.impactCategories?.high?.length || 0,
|
|
720
|
-
medium: impact.impactCategories?.medium?.length || 0,
|
|
721
|
-
low: impact.impactCategories?.low?.length || 0
|
|
722
|
-
}
|
|
723
|
-
};
|
|
724
|
-
}
|
|
725
|
-
|
|
726
|
-
getDescriptionTemplate(modificationType) {
|
|
727
|
-
const templates = {
|
|
728
|
-
enhance: `## Enhancement Description
|
|
729
|
-
|
|
730
|
-
### Objective
|
|
731
|
-
[Describe what this enhancement aims to achieve]
|
|
732
|
-
|
|
733
|
-
### Implementation Details
|
|
734
|
-
[Explain how the enhancement will be implemented]
|
|
735
|
-
|
|
736
|
-
### Benefits
|
|
737
|
-
- [List expected benefits]
|
|
738
|
-
|
|
739
|
-
### Testing Plan
|
|
740
|
-
[Describe how the enhancement will be tested]`,
|
|
741
|
-
|
|
742
|
-
refactor: `## Refactoring Description
|
|
743
|
-
|
|
744
|
-
### Current Issues
|
|
745
|
-
[Describe problems with current implementation]
|
|
746
|
-
|
|
747
|
-
### Proposed Changes
|
|
748
|
-
[Detail the refactoring approach]
|
|
749
|
-
|
|
750
|
-
### Expected Improvements
|
|
751
|
-
- [List expected improvements]
|
|
752
|
-
|
|
753
|
-
### Risk Assessment
|
|
754
|
-
[Identify potential risks]`,
|
|
755
|
-
|
|
756
|
-
deprecate: `## Deprecation Description
|
|
757
|
-
|
|
758
|
-
### Reason for Deprecation
|
|
759
|
-
[Explain why this component should be deprecated]
|
|
760
|
-
|
|
761
|
-
### Migration Path
|
|
762
|
-
[Describe how users should migrate]
|
|
763
|
-
|
|
764
|
-
### Timeline
|
|
765
|
-
[Specify deprecation timeline]
|
|
766
|
-
|
|
767
|
-
### Affected Users
|
|
768
|
-
[Identify who will be affected]`,
|
|
769
|
-
|
|
770
|
-
modify: `## Modification Description
|
|
771
|
-
|
|
772
|
-
### Changes Overview
|
|
773
|
-
[Summarize the modifications]
|
|
774
|
-
|
|
775
|
-
### Rationale
|
|
776
|
-
[Explain why these changes are needed]
|
|
777
|
-
|
|
778
|
-
### Implementation
|
|
779
|
-
[Detail how changes will be implemented]
|
|
780
|
-
|
|
781
|
-
### Validation
|
|
782
|
-
[Describe validation approach]`
|
|
783
|
-
};
|
|
784
|
-
|
|
785
|
-
return templates[modificationType] || templates.modify;
|
|
786
|
-
}
|
|
787
|
-
|
|
788
|
-
generateProposalUrl(proposalId) {
|
|
789
|
-
// In a real implementation, this would generate actual web URLs
|
|
790
|
-
return `http://aios-framework.local/proposals/${proposalId}`;
|
|
791
|
-
}
|
|
792
|
-
}
|
|
793
|
-
|
|
794
|
-
module.exports = ProposeModificationTask;
|
|
795
|
-
```
|
|
796
|
-
|
|
797
|
-
## Validation Rules
|
|
798
|
-
|
|
799
|
-
### Input Validation
|
|
800
|
-
- Component path must exist and be accessible
|
|
801
|
-
- Modification type must be valid
|
|
802
|
-
- Priority must be recognized level
|
|
803
|
-
- Assignees should be valid user identifiers
|
|
804
|
-
- Linked issues should be valid issue IDs
|
|
805
|
-
|
|
806
|
-
### Proposal Requirements
|
|
807
|
-
- Title and description are required (prompted if not provided)
|
|
808
|
-
- Draft proposals can be incomplete
|
|
809
|
-
- Non-draft proposals must have complete information
|
|
810
|
-
- Impact analysis is recommended for high priority changes
|
|
811
|
-
|
|
812
|
-
### Review Process
|
|
813
|
-
- Proposals start in 'draft' or 'pending_review' status
|
|
814
|
-
- Assignees are notified upon submission
|
|
815
|
-
- Review timeline expectations are set
|
|
816
|
-
- Modification type determines required fields
|
|
817
|
-
|
|
818
|
-
## Integration Points
|
|
819
|
-
|
|
820
|
-
### Proposal System
|
|
821
|
-
- Manages proposal lifecycle and storage
|
|
822
|
-
- Handles versioning and history tracking
|
|
823
|
-
- Coordinates review workflows
|
|
824
|
-
- Integrates with notification system
|
|
825
|
-
|
|
826
|
-
### Impact Analysis
|
|
827
|
-
- Optional but recommended for significant changes
|
|
828
|
-
- Provides risk assessment for reviewers
|
|
829
|
-
- Identifies affected components
|
|
830
|
-
- Helps prioritize review efforts
|
|
831
|
-
|
|
832
|
-
### Notification Service
|
|
833
|
-
- Notifies assigned reviewers
|
|
834
|
-
- Sends updates on proposal status changes
|
|
835
|
-
- Supports multiple notification channels
|
|
836
|
-
- Tracks notification delivery
|
|
837
|
-
|
|
838
|
-
## Security Considerations
|
|
839
|
-
- Validate all user inputs to prevent injection
|
|
840
|
-
- Ensure proper access control for proposals
|
|
841
|
-
- Sanitize file paths and content
|
|
842
|
-
- Log all proposal activities for audit
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
## Execution Modes
|
|
4
|
+
|
|
5
|
+
**Choose your execution mode:**
|
|
6
|
+
|
|
7
|
+
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
8
|
+
- Autonomous decision making with logging
|
|
9
|
+
- Minimal user interaction
|
|
10
|
+
- **Best for:** Simple, deterministic tasks
|
|
11
|
+
|
|
12
|
+
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
13
|
+
- Explicit decision checkpoints
|
|
14
|
+
- Educational explanations
|
|
15
|
+
- **Best for:** Learning, complex decisions
|
|
16
|
+
|
|
17
|
+
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
18
|
+
- Task analysis phase (identify all ambiguities)
|
|
19
|
+
- Zero ambiguity execution
|
|
20
|
+
- **Best for:** Ambiguous requirements, critical work
|
|
21
|
+
|
|
22
|
+
**Parameter:** `mode` (optional, default: `interactive`)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Task Definition (AIOS Task Format V1.0)
|
|
27
|
+
|
|
28
|
+
```yaml
|
|
29
|
+
task: proposeModification()
|
|
30
|
+
responsável: Atlas (Decoder)
|
|
31
|
+
responsavel_type: Agente
|
|
32
|
+
atomic_layer: Molecule
|
|
33
|
+
|
|
34
|
+
**Entrada:**
|
|
35
|
+
- campo: task
|
|
36
|
+
tipo: string
|
|
37
|
+
origem: User Input
|
|
38
|
+
obrigatório: true
|
|
39
|
+
validação: Must be registered task
|
|
40
|
+
|
|
41
|
+
- campo: parameters
|
|
42
|
+
tipo: object
|
|
43
|
+
origem: User Input
|
|
44
|
+
obrigatório: false
|
|
45
|
+
validação: Valid task parameters
|
|
46
|
+
|
|
47
|
+
- campo: mode
|
|
48
|
+
tipo: string
|
|
49
|
+
origem: User Input
|
|
50
|
+
obrigatório: false
|
|
51
|
+
validação: yolo|interactive|pre-flight
|
|
52
|
+
|
|
53
|
+
**Saída:**
|
|
54
|
+
- campo: execution_result
|
|
55
|
+
tipo: object
|
|
56
|
+
destino: Memory
|
|
57
|
+
persistido: false
|
|
58
|
+
|
|
59
|
+
- campo: logs
|
|
60
|
+
tipo: array
|
|
61
|
+
destino: File (.ai/logs/*)
|
|
62
|
+
persistido: true
|
|
63
|
+
|
|
64
|
+
- campo: state
|
|
65
|
+
tipo: object
|
|
66
|
+
destino: State management
|
|
67
|
+
persistido: true
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Pre-Conditions
|
|
73
|
+
|
|
74
|
+
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
75
|
+
|
|
76
|
+
**Checklist:**
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
pre-conditions:
|
|
80
|
+
- [ ] Task is registered; required parameters provided; dependencies met
|
|
81
|
+
tipo: pre-condition
|
|
82
|
+
blocker: true
|
|
83
|
+
validação: |
|
|
84
|
+
Check task is registered; required parameters provided; dependencies met
|
|
85
|
+
error_message: "Pre-condition failed: Task is registered; required parameters provided; dependencies met"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Post-Conditions
|
|
91
|
+
|
|
92
|
+
**Purpose:** Validate execution success AFTER task completes
|
|
93
|
+
|
|
94
|
+
**Checklist:**
|
|
95
|
+
|
|
96
|
+
```yaml
|
|
97
|
+
post-conditions:
|
|
98
|
+
- [ ] Task completed; exit code 0; expected outputs created
|
|
99
|
+
tipo: post-condition
|
|
100
|
+
blocker: true
|
|
101
|
+
validação: |
|
|
102
|
+
Verify task completed; exit code 0; expected outputs created
|
|
103
|
+
error_message: "Post-condition failed: Task completed; exit code 0; expected outputs created"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Acceptance Criteria
|
|
109
|
+
|
|
110
|
+
**Purpose:** Definitive pass/fail criteria for task completion
|
|
111
|
+
|
|
112
|
+
**Checklist:**
|
|
113
|
+
|
|
114
|
+
```yaml
|
|
115
|
+
acceptance-criteria:
|
|
116
|
+
- [ ] Task completed as expected; side effects documented
|
|
117
|
+
tipo: acceptance-criterion
|
|
118
|
+
blocker: true
|
|
119
|
+
validação: |
|
|
120
|
+
Assert task completed as expected; side effects documented
|
|
121
|
+
error_message: "Acceptance criterion not met: Task completed as expected; side effects documented"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Tools
|
|
127
|
+
|
|
128
|
+
**External/shared resources used by this task:**
|
|
129
|
+
|
|
130
|
+
- **Tool:** task-runner
|
|
131
|
+
- **Purpose:** Task execution and orchestration
|
|
132
|
+
- **Source:** .aios-core/core/task-runner.js
|
|
133
|
+
|
|
134
|
+
- **Tool:** logger
|
|
135
|
+
- **Purpose:** Execution logging and error tracking
|
|
136
|
+
- **Source:** .aios-core/utils/logger.js
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Scripts
|
|
141
|
+
|
|
142
|
+
**Agent-specific code for this task:**
|
|
143
|
+
|
|
144
|
+
- **Script:** execute-task.js
|
|
145
|
+
- **Purpose:** Generic task execution wrapper
|
|
146
|
+
- **Language:** JavaScript
|
|
147
|
+
- **Location:** .aios-core/scripts/execute-task.js
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Error Handling
|
|
152
|
+
|
|
153
|
+
**Strategy:** retry
|
|
154
|
+
|
|
155
|
+
**Common Errors:**
|
|
156
|
+
|
|
157
|
+
1. **Error:** Task Not Found
|
|
158
|
+
- **Cause:** Specified task not registered in system
|
|
159
|
+
- **Resolution:** Verify task name and registration
|
|
160
|
+
- **Recovery:** List available tasks, suggest similar
|
|
161
|
+
|
|
162
|
+
2. **Error:** Invalid Parameters
|
|
163
|
+
- **Cause:** Task parameters do not match expected schema
|
|
164
|
+
- **Resolution:** Validate parameters against task definition
|
|
165
|
+
- **Recovery:** Provide parameter template, reject execution
|
|
166
|
+
|
|
167
|
+
3. **Error:** Execution Timeout
|
|
168
|
+
- **Cause:** Task exceeds maximum execution time
|
|
169
|
+
- **Resolution:** Optimize task or increase timeout
|
|
170
|
+
- **Recovery:** Kill task, cleanup resources, log state
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Performance
|
|
175
|
+
|
|
176
|
+
**Expected Metrics:**
|
|
177
|
+
|
|
178
|
+
```yaml
|
|
179
|
+
duration_expected: 2-5 min (estimated)
|
|
180
|
+
cost_estimated: $0.001-0.003
|
|
181
|
+
token_usage: ~1,000-3,000 tokens
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Optimization Notes:**
|
|
185
|
+
- Parallelize independent operations; reuse atom results; implement early exits
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Metadata
|
|
190
|
+
|
|
191
|
+
```yaml
|
|
192
|
+
story: N/A
|
|
193
|
+
version: 1.0.0
|
|
194
|
+
dependencies:
|
|
195
|
+
- N/A
|
|
196
|
+
tags:
|
|
197
|
+
- automation
|
|
198
|
+
- workflow
|
|
199
|
+
updated_at: 2025-11-17
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
checklists:
|
|
205
|
+
- change-checklist.md
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
# Propose Modification - AIOS Developer Task
|
|
209
|
+
|
|
210
|
+
## Purpose
|
|
211
|
+
Create and submit modification proposals for collaborative review and approval within the Synkra AIOS framework.
|
|
212
|
+
|
|
213
|
+
## Command Pattern
|
|
214
|
+
```
|
|
215
|
+
*propose-modification <component-path> <modification-type> [options]
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Parameters
|
|
219
|
+
- `component-path`: Path to the component to modify
|
|
220
|
+
- `modification-type`: Type of modification (modify, refactor, deprecate, enhance)
|
|
221
|
+
- `options`: Additional proposal configuration
|
|
222
|
+
|
|
223
|
+
### Options
|
|
224
|
+
- `--title <title>`: Title for the proposal
|
|
225
|
+
- `--description <desc>`: Detailed description of changes
|
|
226
|
+
- `--priority <level>`: Priority level (low, medium, high, critical)
|
|
227
|
+
- `--tags <tags>`: Comma-separated tags for categorization
|
|
228
|
+
- `--assignees <users>`: Comma-separated list of reviewers
|
|
229
|
+
- `--draft`: Create as draft proposal
|
|
230
|
+
- `--link-issues <ids>`: Link related issues or tasks
|
|
231
|
+
- `--impact-analysis`: Include impact analysis report
|
|
232
|
+
- `--test-results`: Attach test results
|
|
233
|
+
|
|
234
|
+
## Examples
|
|
235
|
+
```bash
|
|
236
|
+
# Propose agent enhancement
|
|
237
|
+
*propose-modification aios-core/agents/weather-agent.md enhance --title "Add caching support" --description "Implement response caching to reduce API calls" --priority medium
|
|
238
|
+
|
|
239
|
+
# Propose critical refactoring with impact analysis
|
|
240
|
+
*propose-modification aios-core/scripts/core-utility.js refactor --title "Optimize performance" --priority critical --impact-analysis --assignees "alice,bob"
|
|
241
|
+
|
|
242
|
+
# Create draft proposal for workflow deprecation
|
|
243
|
+
*propose-modification aios-core/workflows/legacy-workflow.yaml deprecate --draft --title "Deprecate legacy workflow" --link-issues "123,456"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## Implementation
|
|
247
|
+
|
|
248
|
+
```javascript
|
|
249
|
+
const fs = require('fs').promises;
|
|
250
|
+
const path = require('path');
|
|
251
|
+
const chalk = require('chalk');
|
|
252
|
+
const inquirer = require('inquirer');
|
|
253
|
+
|
|
254
|
+
class ProposeModificationTask {
|
|
255
|
+
constructor() {
|
|
256
|
+
this.taskName = 'propose-modification';
|
|
257
|
+
this.description = 'Create modification proposals for collaborative review';
|
|
258
|
+
this.rootPath = process.cwd();
|
|
259
|
+
this.proposalSystem = null;
|
|
260
|
+
this.impactAnalyzer = null;
|
|
261
|
+
this.notificationService = null;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
async execute(params) {
|
|
265
|
+
try {
|
|
266
|
+
console.log(chalk.blue('📝 AIOS Modification Proposal'));
|
|
267
|
+
console.log(chalk.gray('Creating collaborative modification proposal\n'));
|
|
268
|
+
|
|
269
|
+
// Parse and validate parameters
|
|
270
|
+
const config = await this.parseParameters(params);
|
|
271
|
+
|
|
272
|
+
// Initialize dependencies
|
|
273
|
+
await this.initializeDependencies();
|
|
274
|
+
|
|
275
|
+
// Validate target component
|
|
276
|
+
const component = await this.validateComponent(config.componentPath);
|
|
277
|
+
|
|
278
|
+
// Create proposal
|
|
279
|
+
console.log(chalk.gray('Creating modification proposal...'));
|
|
280
|
+
const proposal = await this.createProposal(component, config);
|
|
281
|
+
|
|
282
|
+
// Run impact analysis if requested
|
|
283
|
+
if (config.includeImpactAnalysis) {
|
|
284
|
+
console.log(chalk.gray('Running impact analysis...'));
|
|
285
|
+
proposal.impactAnalysis = await this.runImpactAnalysis(component, config);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Attach test results if provided
|
|
289
|
+
if (config.testResults) {
|
|
290
|
+
console.log(chalk.gray('Attaching test results...'));
|
|
291
|
+
proposal.testResults = await this.attachTestResults(config.testResults);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Get proposal details from user
|
|
295
|
+
const details = await this.getProposalDetails(proposal, config);
|
|
296
|
+
Object.assign(proposal, details);
|
|
297
|
+
|
|
298
|
+
// Submit proposal
|
|
299
|
+
console.log(chalk.gray('Submitting proposal...'));
|
|
300
|
+
const result = await this.submitProposal(proposal, config);
|
|
301
|
+
|
|
302
|
+
// Notify assignees
|
|
303
|
+
if (config.assignees.length > 0) {
|
|
304
|
+
await this.notifyAssignees(result, config.assignees);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Display success
|
|
308
|
+
console.log(chalk.green('\n✅ Modification proposal created successfully'));
|
|
309
|
+
console.log(chalk.gray(` Proposal ID: ${result.proposalId}`));
|
|
310
|
+
console.log(chalk.gray(` Status: ${result.status}`));
|
|
311
|
+
console.log(chalk.gray(` Reviewers: ${config.assignees.join(', ') || 'None assigned'}`));
|
|
312
|
+
|
|
313
|
+
if (result.webUrl) {
|
|
314
|
+
console.log(chalk.blue(` View proposal: ${result.webUrl}`));
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
return {
|
|
318
|
+
success: true,
|
|
319
|
+
proposalId: result.proposalId,
|
|
320
|
+
status: result.status,
|
|
321
|
+
component: component.path,
|
|
322
|
+
modificationType: config.modificationType,
|
|
323
|
+
priority: config.priority,
|
|
324
|
+
assignees: config.assignees
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
} catch (error) {
|
|
328
|
+
console.error(chalk.red(`\n❌ Proposal creation failed: ${error.message}`));
|
|
329
|
+
throw error;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
async parseParameters(params) {
|
|
334
|
+
if (params.length < 2) {
|
|
335
|
+
throw new Error('Usage: *propose-modification <component-path> <modification-type> [options]');
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
const config = {
|
|
339
|
+
componentPath: params[0],
|
|
340
|
+
modificationType: params[1],
|
|
341
|
+
title: '',
|
|
342
|
+
description: '',
|
|
343
|
+
priority: 'medium',
|
|
344
|
+
tags: [],
|
|
345
|
+
assignees: [],
|
|
346
|
+
isDraft: false,
|
|
347
|
+
linkedIssues: [],
|
|
348
|
+
includeImpactAnalysis: false,
|
|
349
|
+
testResults: null
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
// Validate modification type
|
|
353
|
+
const validTypes = ['modify', 'refactor', 'deprecate', 'enhance'];
|
|
354
|
+
if (!validTypes.includes(config.modificationType)) {
|
|
355
|
+
throw new Error(`Invalid modification type: ${config.modificationType}. Must be one of: ${validTypes.join(', ')}`);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// Parse options
|
|
359
|
+
for (let i = 2; i < params.length; i++) {
|
|
360
|
+
const param = params[i];
|
|
361
|
+
|
|
362
|
+
if (param === '--draft') {
|
|
363
|
+
config.isDraft = true;
|
|
364
|
+
} else if (param === '--impact-analysis') {
|
|
365
|
+
config.includeImpactAnalysis = true;
|
|
366
|
+
} else if (param.startsWith('--title') && params[i + 1]) {
|
|
367
|
+
config.title = params[++i];
|
|
368
|
+
} else if (param.startsWith('--description') && params[i + 1]) {
|
|
369
|
+
config.description = params[++i];
|
|
370
|
+
} else if (param.startsWith('--priority') && params[i + 1]) {
|
|
371
|
+
config.priority = params[++i];
|
|
372
|
+
} else if (param.startsWith('--tags') && params[i + 1]) {
|
|
373
|
+
config.tags = params[++i].split(',').map(t => t.trim());
|
|
374
|
+
} else if (param.startsWith('--assignees') && params[i + 1]) {
|
|
375
|
+
config.assignees = params[++i].split(',').map(a => a.trim());
|
|
376
|
+
} else if (param.startsWith('--link-issues') && params[i + 1]) {
|
|
377
|
+
config.linkedIssues = params[++i].split(',').map(id => id.trim());
|
|
378
|
+
} else if (param.startsWith('--test-results') && params[i + 1]) {
|
|
379
|
+
config.testResults = params[++i];
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// Validate priority
|
|
384
|
+
const validPriorities = ['low', 'medium', 'high', 'critical'];
|
|
385
|
+
if (!validPriorities.includes(config.priority)) {
|
|
386
|
+
throw new Error(`Invalid priority: ${config.priority}. Must be one of: ${validPriorities.join(', ')}`);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
return config;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
async initializeDependencies() {
|
|
393
|
+
try {
|
|
394
|
+
const ProposalSystem = require('../scripts/proposal-system');
|
|
395
|
+
this.proposalSystem = new ProposalSystem({ rootPath: this.rootPath });
|
|
396
|
+
|
|
397
|
+
const ImpactAnalyzer = require('../scripts/dependency-impact-analyzer');
|
|
398
|
+
this.impactAnalyzer = new ImpactAnalyzer({ rootPath: this.rootPath });
|
|
399
|
+
|
|
400
|
+
const NotificationService = require('../scripts/notification-service');
|
|
401
|
+
this.notificationService = new NotificationService({ rootPath: this.rootPath });
|
|
402
|
+
|
|
403
|
+
} catch (error) {
|
|
404
|
+
throw new Error(`Failed to initialize dependencies: ${error.message}`);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
async validateComponent(componentPath) {
|
|
409
|
+
const fullPath = path.resolve(this.rootPath, componentPath);
|
|
410
|
+
|
|
411
|
+
try {
|
|
412
|
+
const stats = await fs.stat(fullPath);
|
|
413
|
+
if (!stats.isFile()) {
|
|
414
|
+
throw new Error(`Not a file: ${componentPath}`);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
const content = await fs.readFile(fullPath, 'utf-8');
|
|
418
|
+
const componentType = this.determineComponentType(fullPath, content);
|
|
419
|
+
|
|
420
|
+
return {
|
|
421
|
+
path: componentPath,
|
|
422
|
+
fullPath: fullPath,
|
|
423
|
+
type: componentType,
|
|
424
|
+
content: content,
|
|
425
|
+
lastModified: stats.mtime
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
} catch (error) {
|
|
429
|
+
if (error.code === 'ENOENT') {
|
|
430
|
+
throw new Error(`Component not found: ${componentPath}`);
|
|
431
|
+
}
|
|
432
|
+
throw error;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
async createProposal(component, config) {
|
|
437
|
+
const proposal = {
|
|
438
|
+
proposalId: `proposal-${Date.now()}-${Math.random().toString(36).substr(2, 6)}`,
|
|
439
|
+
componentPath: component.path,
|
|
440
|
+
componentType: component.type,
|
|
441
|
+
modificationType: config.modificationType,
|
|
442
|
+
title: config.title || `${config.modificationType} ${component.path}`,
|
|
443
|
+
description: config.description,
|
|
444
|
+
priority: config.priority,
|
|
445
|
+
status: config.isDraft ? 'draft' : 'pending_review',
|
|
446
|
+
tags: config.tags,
|
|
447
|
+
assignees: config.assignees,
|
|
448
|
+
linkedIssues: config.linkedIssues,
|
|
449
|
+
metadata: {
|
|
450
|
+
createdBy: process.env.USER || 'aios-developer',
|
|
451
|
+
createdAt: new Date().toISOString(),
|
|
452
|
+
lastModified: new Date().toISOString(),
|
|
453
|
+
version: 1
|
|
454
|
+
}
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
// Add modification type specific fields
|
|
458
|
+
switch (config.modificationType) {
|
|
459
|
+
case 'deprecate':
|
|
460
|
+
proposal.deprecationInfo = {
|
|
461
|
+
targetRemovalDate: null,
|
|
462
|
+
migrationPath: null,
|
|
463
|
+
affectedComponents: []
|
|
464
|
+
};
|
|
465
|
+
break;
|
|
466
|
+
case 'enhance':
|
|
467
|
+
proposal.enhancementInfo = {
|
|
468
|
+
newCapabilities: [],
|
|
469
|
+
performanceImpact: null,
|
|
470
|
+
backwardCompatible: true
|
|
471
|
+
};
|
|
472
|
+
break;
|
|
473
|
+
case 'refactor':
|
|
474
|
+
proposal.refactorInfo = {
|
|
475
|
+
scope: 'component', // component, module, system
|
|
476
|
+
breakingChanges: false,
|
|
477
|
+
codeQualityMetrics: {}
|
|
478
|
+
};
|
|
479
|
+
break;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
return proposal;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
async runImpactAnalysis(component, config) {
|
|
486
|
+
try {
|
|
487
|
+
const impact = await this.impactAnalyzer.analyzeDependencyImpact(component, {
|
|
488
|
+
modificationType: config.modificationType,
|
|
489
|
+
depth: 'deep'
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
return {
|
|
493
|
+
affectedComponents: impact.affectedComponents.length,
|
|
494
|
+
criticalDependencies: impact.impactCategories?.critical || [],
|
|
495
|
+
riskLevel: this.calculateRiskLevel(impact),
|
|
496
|
+
summary: this.generateImpactSummary(impact)
|
|
497
|
+
};
|
|
498
|
+
|
|
499
|
+
} catch (error) {
|
|
500
|
+
console.warn(chalk.yellow(`Impact analysis failed: ${error.message}`));
|
|
501
|
+
return null;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
async attachTestResults(testResultsPath) {
|
|
506
|
+
try {
|
|
507
|
+
const content = await fs.readFile(testResultsPath, 'utf-8');
|
|
508
|
+
return {
|
|
509
|
+
source: testResultsPath,
|
|
510
|
+
content: content,
|
|
511
|
+
attachedAt: new Date().toISOString()
|
|
512
|
+
};
|
|
513
|
+
} catch (error) {
|
|
514
|
+
console.warn(chalk.yellow(`Failed to attach test results: ${error.message}`));
|
|
515
|
+
return null;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
async getProposalDetails(proposal, config) {
|
|
520
|
+
const questions = [];
|
|
521
|
+
|
|
522
|
+
// Title if not provided
|
|
523
|
+
if (!config.title) {
|
|
524
|
+
questions.push({
|
|
525
|
+
type: 'input',
|
|
526
|
+
name: 'title',
|
|
527
|
+
message: 'Proposal title:',
|
|
528
|
+
default: proposal.title,
|
|
529
|
+
validate: input => input.length > 0 || 'Title is required'
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
// Description if not provided
|
|
534
|
+
if (!config.description) {
|
|
535
|
+
questions.push({
|
|
536
|
+
type: 'editor',
|
|
537
|
+
name: 'description',
|
|
538
|
+
message: 'Detailed description (opens editor):',
|
|
539
|
+
default: this.getDescriptionTemplate(config.modificationType)
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
// Modification-specific questions
|
|
544
|
+
if (config.modificationType === 'deprecate') {
|
|
545
|
+
questions.push({
|
|
546
|
+
type: 'input',
|
|
547
|
+
name: 'targetRemovalDate',
|
|
548
|
+
message: 'Target removal date (YYYY-MM-DD):',
|
|
549
|
+
validate: input => {
|
|
550
|
+
if (!input) return true;
|
|
551
|
+
return /^\d{4}-\d{2}-\d{2}$/.test(input) || 'Invalid date format';
|
|
552
|
+
}
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
if (config.modificationType === 'enhance') {
|
|
557
|
+
questions.push({
|
|
558
|
+
type: 'checkbox',
|
|
559
|
+
name: 'newCapabilities',
|
|
560
|
+
message: 'Select new capabilities:',
|
|
561
|
+
choices: [
|
|
562
|
+
'Performance optimization',
|
|
563
|
+
'New API endpoints',
|
|
564
|
+
'Additional configuration options',
|
|
565
|
+
'Extended error handling',
|
|
566
|
+
'Improved logging',
|
|
567
|
+
'New integrations',
|
|
568
|
+
'Other'
|
|
569
|
+
]
|
|
570
|
+
});
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
if (config.modificationType === 'refactor') {
|
|
574
|
+
questions.push({
|
|
575
|
+
type: 'confirm',
|
|
576
|
+
name: 'breakingChanges',
|
|
577
|
+
message: 'Will this refactoring introduce breaking changes?',
|
|
578
|
+
default: false
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
// Review timeline
|
|
583
|
+
questions.push({
|
|
584
|
+
type: 'list',
|
|
585
|
+
name: 'reviewTimeline',
|
|
586
|
+
message: 'Expected review timeline:',
|
|
587
|
+
choices: [
|
|
588
|
+
{ name: 'Urgent (1-2 days)', value: 'urgent' },
|
|
589
|
+
{ name: 'Normal (3-5 days)', value: 'normal' },
|
|
590
|
+
{ name: 'Low priority (1 week+)', value: 'low' }
|
|
591
|
+
],
|
|
592
|
+
default: 'normal'
|
|
593
|
+
});
|
|
594
|
+
|
|
595
|
+
const answers = await inquirer.prompt(questions);
|
|
596
|
+
|
|
597
|
+
// Process answers
|
|
598
|
+
const details = {
|
|
599
|
+
title: answers.title || config.title,
|
|
600
|
+
description: answers.description || config.description,
|
|
601
|
+
reviewTimeline: answers.reviewTimeline
|
|
602
|
+
};
|
|
603
|
+
|
|
604
|
+
// Add modification-specific details
|
|
605
|
+
if (config.modificationType === 'deprecate' && answers.targetRemovalDate) {
|
|
606
|
+
details.deprecationInfo = {
|
|
607
|
+
targetRemovalDate: answers.targetRemovalDate
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
if (config.modificationType === 'enhance' && answers.newCapabilities) {
|
|
612
|
+
details.enhancementInfo = {
|
|
613
|
+
newCapabilities: answers.newCapabilities
|
|
614
|
+
};
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
if (config.modificationType === 'refactor') {
|
|
618
|
+
details.refactorInfo = {
|
|
619
|
+
breakingChanges: answers.breakingChanges
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
return details;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
async submitProposal(proposal, config) {
|
|
627
|
+
try {
|
|
628
|
+
// Submit through proposal system
|
|
629
|
+
const result = await this.proposalSystem.submitProposal(proposal);
|
|
630
|
+
|
|
631
|
+
// Store in memory/database
|
|
632
|
+
await this.storeProposal(proposal, result);
|
|
633
|
+
|
|
634
|
+
return {
|
|
635
|
+
proposalId: proposal.proposalId,
|
|
636
|
+
status: proposal.status,
|
|
637
|
+
webUrl: this.generateProposalUrl(proposal.proposalId),
|
|
638
|
+
createdAt: proposal.metadata.createdAt
|
|
639
|
+
};
|
|
640
|
+
|
|
641
|
+
} catch (error) {
|
|
642
|
+
throw new Error(`Failed to submit proposal: ${error.message}`);
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
async storeProposal(proposal, result) {
|
|
647
|
+
const proposalsDir = path.join(this.rootPath, '.aios', 'proposals');
|
|
648
|
+
await fs.mkdir(proposalsDir, { recursive: true });
|
|
649
|
+
|
|
650
|
+
const proposalFile = path.join(proposalsDir, `${proposal.proposalId}.json`);
|
|
651
|
+
await fs.writeFile(proposalFile, JSON.stringify(proposal, null, 2));
|
|
652
|
+
|
|
653
|
+
// Update proposals index
|
|
654
|
+
const indexFile = path.join(proposalsDir, 'index.json');
|
|
655
|
+
let index = { proposals: [] };
|
|
656
|
+
|
|
657
|
+
try {
|
|
658
|
+
const existing = await fs.readFile(indexFile, 'utf-8');
|
|
659
|
+
index = JSON.parse(existing);
|
|
660
|
+
} catch (error) {
|
|
661
|
+
// Index doesn't exist yet
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
index.proposals.push({
|
|
665
|
+
proposalId: proposal.proposalId,
|
|
666
|
+
title: proposal.title,
|
|
667
|
+
componentPath: proposal.componentPath,
|
|
668
|
+
modificationType: proposal.modificationType,
|
|
669
|
+
status: proposal.status,
|
|
670
|
+
priority: proposal.priority,
|
|
671
|
+
createdAt: proposal.metadata.createdAt,
|
|
672
|
+
createdBy: proposal.metadata.createdBy
|
|
673
|
+
});
|
|
674
|
+
|
|
675
|
+
await fs.writeFile(indexFile, JSON.stringify(index, null, 2));
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
async notifyAssignees(result, assignees) {
|
|
679
|
+
try {
|
|
680
|
+
await this.notificationService.notifyUsers(assignees, {
|
|
681
|
+
type: 'proposal_assigned',
|
|
682
|
+
proposalId: result.proposalId,
|
|
683
|
+
title: result.title,
|
|
684
|
+
priority: result.priority,
|
|
685
|
+
url: result.webUrl
|
|
686
|
+
});
|
|
687
|
+
|
|
688
|
+
console.log(chalk.gray(` Notifications sent to: ${assignees.join(', ')}`));
|
|
689
|
+
|
|
690
|
+
} catch (error) {
|
|
691
|
+
console.warn(chalk.yellow(`Failed to send notifications: ${error.message}`));
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
// Helper methods
|
|
696
|
+
|
|
697
|
+
determineComponentType(filePath, content) {
|
|
698
|
+
if (filePath.includes('/agents/')) return 'agent';
|
|
699
|
+
if (filePath.includes('/tasks/')) return 'task';
|
|
700
|
+
if (filePath.includes('/workflows/')) return 'workflow';
|
|
701
|
+
if (filePath.includes('/utils/')) return 'util';
|
|
702
|
+
return 'unknown';
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
calculateRiskLevel(impact) {
|
|
706
|
+
const affectedCount = impact.affectedComponents.length;
|
|
707
|
+
const criticalCount = impact.impactCategories?.critical?.length || 0;
|
|
708
|
+
|
|
709
|
+
if (criticalCount > 0 || affectedCount > 20) return 'high';
|
|
710
|
+
if (affectedCount > 10) return 'medium';
|
|
711
|
+
return 'low';
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
generateImpactSummary(impact) {
|
|
715
|
+
return {
|
|
716
|
+
totalAffected: impact.affectedComponents.length,
|
|
717
|
+
byCategory: {
|
|
718
|
+
critical: impact.impactCategories?.critical?.length || 0,
|
|
719
|
+
high: impact.impactCategories?.high?.length || 0,
|
|
720
|
+
medium: impact.impactCategories?.medium?.length || 0,
|
|
721
|
+
low: impact.impactCategories?.low?.length || 0
|
|
722
|
+
}
|
|
723
|
+
};
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
getDescriptionTemplate(modificationType) {
|
|
727
|
+
const templates = {
|
|
728
|
+
enhance: `## Enhancement Description
|
|
729
|
+
|
|
730
|
+
### Objective
|
|
731
|
+
[Describe what this enhancement aims to achieve]
|
|
732
|
+
|
|
733
|
+
### Implementation Details
|
|
734
|
+
[Explain how the enhancement will be implemented]
|
|
735
|
+
|
|
736
|
+
### Benefits
|
|
737
|
+
- [List expected benefits]
|
|
738
|
+
|
|
739
|
+
### Testing Plan
|
|
740
|
+
[Describe how the enhancement will be tested]`,
|
|
741
|
+
|
|
742
|
+
refactor: `## Refactoring Description
|
|
743
|
+
|
|
744
|
+
### Current Issues
|
|
745
|
+
[Describe problems with current implementation]
|
|
746
|
+
|
|
747
|
+
### Proposed Changes
|
|
748
|
+
[Detail the refactoring approach]
|
|
749
|
+
|
|
750
|
+
### Expected Improvements
|
|
751
|
+
- [List expected improvements]
|
|
752
|
+
|
|
753
|
+
### Risk Assessment
|
|
754
|
+
[Identify potential risks]`,
|
|
755
|
+
|
|
756
|
+
deprecate: `## Deprecation Description
|
|
757
|
+
|
|
758
|
+
### Reason for Deprecation
|
|
759
|
+
[Explain why this component should be deprecated]
|
|
760
|
+
|
|
761
|
+
### Migration Path
|
|
762
|
+
[Describe how users should migrate]
|
|
763
|
+
|
|
764
|
+
### Timeline
|
|
765
|
+
[Specify deprecation timeline]
|
|
766
|
+
|
|
767
|
+
### Affected Users
|
|
768
|
+
[Identify who will be affected]`,
|
|
769
|
+
|
|
770
|
+
modify: `## Modification Description
|
|
771
|
+
|
|
772
|
+
### Changes Overview
|
|
773
|
+
[Summarize the modifications]
|
|
774
|
+
|
|
775
|
+
### Rationale
|
|
776
|
+
[Explain why these changes are needed]
|
|
777
|
+
|
|
778
|
+
### Implementation
|
|
779
|
+
[Detail how changes will be implemented]
|
|
780
|
+
|
|
781
|
+
### Validation
|
|
782
|
+
[Describe validation approach]`
|
|
783
|
+
};
|
|
784
|
+
|
|
785
|
+
return templates[modificationType] || templates.modify;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
generateProposalUrl(proposalId) {
|
|
789
|
+
// In a real implementation, this would generate actual web URLs
|
|
790
|
+
return `http://aios-framework.local/proposals/${proposalId}`;
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
module.exports = ProposeModificationTask;
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
## Validation Rules
|
|
798
|
+
|
|
799
|
+
### Input Validation
|
|
800
|
+
- Component path must exist and be accessible
|
|
801
|
+
- Modification type must be valid
|
|
802
|
+
- Priority must be recognized level
|
|
803
|
+
- Assignees should be valid user identifiers
|
|
804
|
+
- Linked issues should be valid issue IDs
|
|
805
|
+
|
|
806
|
+
### Proposal Requirements
|
|
807
|
+
- Title and description are required (prompted if not provided)
|
|
808
|
+
- Draft proposals can be incomplete
|
|
809
|
+
- Non-draft proposals must have complete information
|
|
810
|
+
- Impact analysis is recommended for high priority changes
|
|
811
|
+
|
|
812
|
+
### Review Process
|
|
813
|
+
- Proposals start in 'draft' or 'pending_review' status
|
|
814
|
+
- Assignees are notified upon submission
|
|
815
|
+
- Review timeline expectations are set
|
|
816
|
+
- Modification type determines required fields
|
|
817
|
+
|
|
818
|
+
## Integration Points
|
|
819
|
+
|
|
820
|
+
### Proposal System
|
|
821
|
+
- Manages proposal lifecycle and storage
|
|
822
|
+
- Handles versioning and history tracking
|
|
823
|
+
- Coordinates review workflows
|
|
824
|
+
- Integrates with notification system
|
|
825
|
+
|
|
826
|
+
### Impact Analysis
|
|
827
|
+
- Optional but recommended for significant changes
|
|
828
|
+
- Provides risk assessment for reviewers
|
|
829
|
+
- Identifies affected components
|
|
830
|
+
- Helps prioritize review efforts
|
|
831
|
+
|
|
832
|
+
### Notification Service
|
|
833
|
+
- Notifies assigned reviewers
|
|
834
|
+
- Sends updates on proposal status changes
|
|
835
|
+
- Supports multiple notification channels
|
|
836
|
+
- Tracks notification delivery
|
|
837
|
+
|
|
838
|
+
## Security Considerations
|
|
839
|
+
- Validate all user inputs to prevent injection
|
|
840
|
+
- Ensure proper access control for proposals
|
|
841
|
+
- Sanitize file paths and content
|
|
842
|
+
- Log all proposal activities for audit
|
|
843
843
|
- Protect sensitive component information
|