@caddis/cli 0.2.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/antigravity-plugin/agents/claude-md-curator.md +1 -1
- package/bundles/antigravity-plugin/agents/knowledge-transfer.md +17 -32
- package/bundles/antigravity-plugin/caddis_statusline.py +825 -0
- package/bundles/antigravity-plugin/claude-md/folder-agents.md.tmpl +21 -0
- package/bundles/antigravity-plugin/guard_agy.py +60 -9
- package/bundles/antigravity-plugin/plugin.json +1 -1
- package/bundles/antigravity-plugin/scripts/caddis_gate.py +524 -0
- package/bundles/antigravity-plugin/scripts/caddis_inventory.py +439 -0
- package/bundles/antigravity-plugin/scripts/caddis_migrate_dir.py +270 -0
- package/bundles/antigravity-plugin/scripts/caddis_spawn.py +300 -0
- package/bundles/antigravity-plugin/scripts/caddis_statusline.py +825 -0
- package/bundles/antigravity-plugin/scripts/caddis_tidy.py +366 -0
- package/bundles/antigravity-plugin/scripts/check_doc_coverage.py +924 -0
- package/bundles/antigravity-plugin/scripts/claude-deepseek.ps1 +4 -0
- package/bundles/antigravity-plugin/scripts/claude-deepseek.sh +3 -0
- package/bundles/antigravity-plugin/scripts/claude-glm.ps1 +4 -0
- package/bundles/antigravity-plugin/scripts/claude-glm.sh +3 -0
- package/bundles/antigravity-plugin/scripts/claude-oss.ps1 +64 -0
- package/bundles/antigravity-plugin/scripts/claude-oss.sh +60 -0
- package/bundles/antigravity-plugin/scripts/claudster_config.py +121 -0
- package/bundles/antigravity-plugin/scripts/claudster_doctor.py +356 -0
- package/bundles/antigravity-plugin/scripts/claudster_init.py +400 -0
- package/bundles/antigravity-plugin/scripts/claudster_migrate_rules.py +300 -0
- package/bundles/antigravity-plugin/scripts/enforcement_inventory.py +261 -0
- package/bundles/antigravity-plugin/scripts/hook_log.py +156 -0
- package/bundles/antigravity-plugin/scripts/new-machine.ps1 +170 -0
- package/bundles/antigravity-plugin/scripts/oss_ask.py +98 -0
- package/bundles/antigravity-plugin/scripts/oss_model.py +174 -0
- package/bundles/antigravity-plugin/scripts/oss_review.py +718 -0
- package/bundles/antigravity-plugin/scripts/setup_project_ai.py +1432 -0
- package/bundles/antigravity-plugin/scripts/usage_review.py +1323 -0
- package/bundles/antigravity-plugin/session_end_agy.py +52 -8
- package/bundles/antigravity-plugin/skills/_registry.md +1 -0
- package/bundles/antigravity-plugin/skills/advisory-hub/SKILL.md +44 -0
- package/bundles/antigravity-plugin/skills/code-review/SKILL.md +11 -0
- package/bundles/antigravity-plugin/skills/fastapi-dev/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/feature-plan/SKILL.md +21 -0
- package/bundles/antigravity-plugin/skills/gate-review/SKILL.md +11 -0
- package/bundles/antigravity-plugin/skills/implement/SKILL.md +36 -0
- package/bundles/antigravity-plugin/skills/security-review/SKILL.md +9 -0
- package/bundles/antigravity-plugin/skills/ship/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/ship-merge/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/ship-pr/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/statusline/SKILL.md +105 -0
- package/bundles/antigravity-plugin/skills/use-model/SKILL.md +15 -3
- package/bundles/antigravity-plugin/skills/validate-phase/SKILL.md +31 -0
- package/bundles/antigravity-plugin/warm_start_agy.py +117 -11
- package/bundles/antigravity-plugin-extras/plugin.json +1 -1
- package/bundles/antigravity-plugin-extras/skills/architecture-design/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/caching-patterns/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/webapp-development/SKILL.md +1 -1
- package/bundles/codex/.codex/config.toml.example +36 -0
- package/bundles/codex/.codex/skills/coding/api-design/SKILL.md +249 -0
- package/bundles/codex/.codex/skills/coding/backend-development/SKILL.md +305 -0
- package/bundles/codex/.codex/skills/coding/code-review/SKILL.md +140 -0
- package/bundles/codex/.codex/skills/coding/codebase-audit/SKILL.md +204 -0
- package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/SKILL.md +132 -0
- package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/scripts/perf_sweep.py +249 -0
- package/bundles/codex/.codex/skills/coding/error-handling/SKILL.md +260 -0
- package/bundles/codex/.codex/skills/coding/fastapi-dev/SKILL.md +300 -0
- package/bundles/codex/.codex/skills/coding/javascript-typescript/SKILL.md +142 -0
- package/bundles/codex/.codex/skills/coding/python/SKILL.md +388 -0
- package/bundles/codex/.codex/skills/coding/refactoring/SKILL.md +486 -0
- package/bundles/codex/.codex/skills/coding/security-review/SKILL.md +205 -0
- package/bundles/codex/.codex/skills/coding/sql/SKILL.md +321 -0
- package/bundles/codex/.codex/skills/data/database-design/SKILL.md +177 -0
- package/bundles/codex/.codex/skills/data/db-diagram/SKILL.md +148 -0
- package/bundles/codex/.codex/skills/data/db-diagram/scripts/sql_to_graph.py +1212 -0
- package/bundles/codex/.codex/skills/devops/ci-cd-pipeline/SKILL.md +315 -0
- package/bundles/codex/.codex/skills/devops/gh-cli/SKILL.md +195 -0
- package/bundles/codex/.codex/skills/devops/git-commit/SKILL.md +285 -0
- package/bundles/codex/.codex/skills/devops/using-git-worktrees/SKILL.md +217 -0
- package/bundles/codex/.codex/skills/devops/windows-deployment/SKILL.md +880 -0
- package/bundles/codex/.codex/skills/docs/code-documentation/SKILL.md +271 -0
- package/bundles/codex/.codex/skills/docs/explainer-doc/SKILL.md +97 -0
- package/bundles/codex/.codex/skills/docs/technical-writing/SKILL.md +286 -0
- package/bundles/codex/.codex/skills/docs/writing-plans/SKILL.md +387 -0
- package/bundles/codex/.codex/skills/frontend/css-architecture/SKILL.md +305 -0
- package/bundles/codex/.codex/skills/frontend/css-architecture/references/RESPONSIVE-DESIGN.md +604 -0
- package/bundles/codex/.codex/skills/frontend/frontend-design/SKILL.md +193 -0
- package/bundles/codex/.codex/skills/frontend/frontend-design/references/my-tech-stack.md +127 -0
- package/bundles/codex/.codex/skills/frontend/mockup/SKILL.md +242 -0
- package/bundles/codex/.codex/skills/frontend/react-best-practices/SKILL.md +269 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/README.md +404 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/SKILL.md +459 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/examples/generic-components.md +579 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/examples/server-components.md +579 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/event-handlers.md +574 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/hooks.md +456 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/react-19-patterns.md +638 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/react-router.md +1002 -0
- package/bundles/codex/.codex/skills/frontend/react-dev/references/tanstack-router.md +587 -0
- package/bundles/codex/.codex/skills/frontend/ui-review/SKILL.md +176 -0
- package/bundles/codex/.codex/skills/frontend/ui-review/references/framework-fixes.md +471 -0
- package/bundles/codex/.codex/skills/frontend/ui-review/references/visual-checklist.md +236 -0
- package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/DESIGN_TOKENS.md +487 -0
- package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/IMPLEMENTATION_GUIDE.md +177 -0
- package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/SKILL.md +732 -0
- package/bundles/codex/.codex/skills/media/draw-io/SKILL.md +162 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/aws-icons.md +677 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/layout-guidelines.md +142 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/troubleshooting.md +118 -0
- package/bundles/codex/.codex/skills/media/draw-io/references/workflows.md +103 -0
- package/bundles/codex/.codex/skills/media/draw-io/scripts/convert-drawio-to-png.sh +25 -0
- package/bundles/codex/.codex/skills/media/draw-io/scripts/find_aws_icon.py +79 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/SKILL.md +292 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/ENHANCEMENTS.md +264 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/MERMAID-SUMMARY.md +137 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/advanced-features.md +556 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/architecture-diagrams.md +192 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/c4-diagrams.md +410 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/class-diagrams.md +361 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/erd-diagrams.md +510 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/flowcharts.md +450 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/sequence-diagrams.md +394 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/troubleshooting.md +335 -0
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/workflows.md +418 -0
- package/bundles/codex/.codex/skills/media/particle-art/SKILL.md +243 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/canvas-utils.ts +171 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/dot-field.template.tsx +203 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/flow-field.template.tsx +263 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/node-shape.template.tsx +261 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/shape-sampler.ts +281 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/stipple-morph.template.tsx +167 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/stipple.template.tsx +175 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/trail-ghost.template.tsx +266 -0
- package/bundles/codex/.codex/skills/media/particle-art/references/usage-examples.md +320 -0
- package/bundles/codex/.codex/skills/testing/playwright/API_REFERENCE.md +653 -0
- package/bundles/codex/.codex/skills/testing/playwright/SKILL.md +454 -0
- package/bundles/codex/.codex/skills/testing/playwright/lib/helpers.js +441 -0
- package/bundles/codex/.codex/skills/testing/playwright/package.json +26 -0
- package/bundles/codex/.codex/skills/testing/playwright/run.js +228 -0
- package/bundles/codex/.codex/skills/testing/tdd-workflow/SKILL.md +188 -0
- package/bundles/codex/.codex/skills/testing/test-strategy/SKILL.md +155 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/LICENSE.txt +202 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/SKILL.md +97 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/examples/console_logging.py +35 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/examples/element_discovery.py +40 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/examples/static_html_automation.py +33 -0
- package/bundles/codex/.codex/skills/testing/webapp-testing/scripts/with_server.py +106 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/SKILL.md +227 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/context-template.md +214 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/hub-handbook.md +233 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/report-contract.md +94 -0
- package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/succession.md +118 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/SKILL.md +500 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/agents/best-practices-referencer.md +263 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/agents/codebase-context-builder.md +326 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/agents/task-intent-analyzer.md +245 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/anti-patterns.md +571 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/before-after-examples.md +1114 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/best-practices-guide.md +513 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/common-workflows.md +692 -0
- package/bundles/codex/.codex/skills/workflow/best-practices/references/prompt-patterns.md +547 -0
- package/bundles/codex/.codex/skills/workflow/brainstorming/SKILL.md +57 -0
- package/bundles/codex/.codex/skills/workflow/context-curator/SKILL.md +157 -0
- package/bundles/codex/.codex/skills/workflow/golden-plan/SKILL.md +586 -0
- package/bundles/codex/.codex/skills/workflow/preflight/SKILL.md +440 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/LICENSE.txt +202 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/SKILL.md +491 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/agents/analyzer.md +274 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/agents/comparator.md +202 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/agents/grader.md +223 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/assets/eval_review.html +146 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/generate_review.py +471 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/viewer.html +1325 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/references/schemas.md +430 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/__init__.py +0 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/generate_report.py +326 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/improve_description.py +247 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/package_skill.py +136 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/quick_validate.py +103 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_eval.py +310 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_loop.py +328 -0
- package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/utils.py +47 -0
- package/bundles/codex/AGENTS.md +146 -0
- package/bundles/manifest.json +4 -3
- package/dist/claude-deepseek.js +544 -0
- package/dist/claude-glm.js +544 -0
- package/dist/claude-oss.js +544 -0
- package/dist/cli.js +542 -90
- package/package.json +5 -2
- package/bundles/antigravity-plugin/statusline-command-agy.sh +0 -91
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
package/dist/cli.js
CHANGED
|
@@ -2419,8 +2419,8 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
2419
2419
|
if (index < this.args.length) {
|
|
2420
2420
|
value = this.args.slice(index);
|
|
2421
2421
|
if (declaredArg.parseArg) {
|
|
2422
|
-
value = value.reduce((processed,
|
|
2423
|
-
return myParseArg(declaredArg,
|
|
2422
|
+
value = value.reduce((processed, v2) => {
|
|
2423
|
+
return myParseArg(declaredArg, v2, processed);
|
|
2424
2424
|
}, declaredArg.defaultValue);
|
|
2425
2425
|
}
|
|
2426
2426
|
} else if (value === void 0) {
|
|
@@ -3596,7 +3596,7 @@ var require_index_min = __commonJS({
|
|
|
3596
3596
|
"use strict";
|
|
3597
3597
|
Object.defineProperty(h2, "__esModule", { value: true });
|
|
3598
3598
|
});
|
|
3599
|
-
var
|
|
3599
|
+
var v2 = exports && exports.__createBinding || (Object.create ? (function(t, e2, r2, s) {
|
|
3600
3600
|
s === void 0 && (s = r2);
|
|
3601
3601
|
var n = Object.getOwnPropertyDescriptor(e2, r2);
|
|
3602
3602
|
(!n || ("get" in n ? !e2.__esModule : n.writable || n.configurable)) && (n = { enumerable: true, get: function() {
|
|
@@ -3621,12 +3621,12 @@ var require_index_min = __commonJS({
|
|
|
3621
3621
|
return function(e2) {
|
|
3622
3622
|
if (e2 && e2.__esModule) return e2;
|
|
3623
3623
|
var r2 = {};
|
|
3624
|
-
if (e2 != null) for (var s = t(e2), n = 0; n < s.length; n++) s[n] !== "default" &&
|
|
3624
|
+
if (e2 != null) for (var s = t(e2), n = 0; n < s.length; n++) s[n] !== "default" && v2(r2, e2, s[n]);
|
|
3625
3625
|
return G2(r2, e2), r2;
|
|
3626
3626
|
};
|
|
3627
3627
|
})();
|
|
3628
3628
|
var X2 = exports && exports.__exportStar || function(t, e2) {
|
|
3629
|
-
for (var r2 in t) r2 !== "default" && !Object.prototype.hasOwnProperty.call(e2, r2) &&
|
|
3629
|
+
for (var r2 in t) r2 !== "default" && !Object.prototype.hasOwnProperty.call(e2, r2) && v2(e2, t, r2);
|
|
3630
3630
|
};
|
|
3631
3631
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3632
3632
|
exports.sync = exports.isexe = exports.posix = exports.win32 = void 0;
|
|
@@ -3647,7 +3647,7 @@ var require_lib = __commonJS({
|
|
|
3647
3647
|
"node_modules/which/lib/index.js"(exports, module) {
|
|
3648
3648
|
"use strict";
|
|
3649
3649
|
var { isexe, sync: isexeSync } = require_index_min();
|
|
3650
|
-
var { join, delimiter, sep, posix } = __require("path");
|
|
3650
|
+
var { join: join2, delimiter, sep, posix } = __require("path");
|
|
3651
3651
|
var isWindows = process.platform === "win32";
|
|
3652
3652
|
var rSlash = new RegExp(`[${posix.sep}${sep === posix.sep ? "" : sep}]`.replace(/(\\)/g, "\\$1"));
|
|
3653
3653
|
var rRel = new RegExp(`^\\.${rSlash.source}`);
|
|
@@ -3676,7 +3676,7 @@ var require_lib = __commonJS({
|
|
|
3676
3676
|
var getPathPart = (raw, cmd) => {
|
|
3677
3677
|
const pathPart = /^".*"$/.test(raw) ? raw.slice(1, -1) : raw;
|
|
3678
3678
|
const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : "";
|
|
3679
|
-
return prefix +
|
|
3679
|
+
return prefix + join2(pathPart, cmd);
|
|
3680
3680
|
};
|
|
3681
3681
|
var which = async (cmd, opt = {}) => {
|
|
3682
3682
|
const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
|
|
@@ -3764,8 +3764,11 @@ function packageInfo() {
|
|
|
3764
3764
|
cached = { root, name: parsed.name, version: parsed.version };
|
|
3765
3765
|
return cached;
|
|
3766
3766
|
}
|
|
3767
|
-
function bundlePath(name) {
|
|
3767
|
+
function bundlePath(name, options = {}) {
|
|
3768
|
+
const { requireManifest = true } = options;
|
|
3768
3769
|
const dir = path.join(packageInfo().root, "bundles", name);
|
|
3770
|
+
if (!existsSync(dir)) return null;
|
|
3771
|
+
if (!requireManifest) return dir;
|
|
3769
3772
|
return existsSync(path.join(dir, "plugin.json")) ? dir : null;
|
|
3770
3773
|
}
|
|
3771
3774
|
function bundleManifest() {
|
|
@@ -4087,11 +4090,12 @@ function fD({ input: e2 = j, output: u2 = M, overwrite: t = true, hideCursor: F2
|
|
|
4087
4090
|
e2.off("keypress", i), F2 && u2.write(import_sisteransi.cursor.show), e2.isTTY && !AD && e2.setRawMode(false), s.terminal = false, s.close();
|
|
4088
4091
|
};
|
|
4089
4092
|
}
|
|
4090
|
-
var import_sisteransi, uD, W, tD, eD, FD, sD, w, N, I, R, r, iD, CD, ED, d, oD, y, V, nD, G, _, z, K, aD, k, hD, lD, xD, B, AD, S, gD, vD, h, x, dD, A;
|
|
4093
|
+
var import_sisteransi, import_picocolors2, uD, W, tD, eD, FD, sD, w, N, I, R, r, iD, CD, ED, d, oD, y, V, nD, G, _, z, K, aD, k, hD, lD, xD, B, AD, S, gD, vD, h, x, dD, A, TD, jD, U, MD;
|
|
4091
4094
|
var init_dist = __esm({
|
|
4092
4095
|
"node_modules/@clack/core/dist/index.mjs"() {
|
|
4093
4096
|
"use strict";
|
|
4094
4097
|
import_sisteransi = __toESM(require_src(), 1);
|
|
4098
|
+
import_picocolors2 = __toESM(require_picocolors(), 1);
|
|
4095
4099
|
uD = DD();
|
|
4096
4100
|
W = { exports: {} };
|
|
4097
4101
|
(function(e2) {
|
|
@@ -4324,6 +4328,28 @@ var init_dist = __esm({
|
|
|
4324
4328
|
}
|
|
4325
4329
|
};
|
|
4326
4330
|
A = /* @__PURE__ */ new WeakMap();
|
|
4331
|
+
TD = Object.defineProperty;
|
|
4332
|
+
jD = (e2, u2, t) => u2 in e2 ? TD(e2, u2, { enumerable: true, configurable: true, writable: true, value: t }) : e2[u2] = t;
|
|
4333
|
+
U = (e2, u2, t) => (jD(e2, typeof u2 != "symbol" ? u2 + "" : u2, t), t);
|
|
4334
|
+
MD = class extends x {
|
|
4335
|
+
constructor({ mask: u2, ...t }) {
|
|
4336
|
+
super(t), U(this, "valueWithCursor", ""), U(this, "_mask", "\u2022"), this._mask = u2 ?? "\u2022", this.on("finalize", () => {
|
|
4337
|
+
this.valueWithCursor = this.masked;
|
|
4338
|
+
}), this.on("value", () => {
|
|
4339
|
+
if (this.cursor >= this.value.length) this.valueWithCursor = `${this.masked}${import_picocolors2.default.inverse(import_picocolors2.default.hidden("_"))}`;
|
|
4340
|
+
else {
|
|
4341
|
+
const F2 = this.masked.slice(0, this.cursor), s = this.masked.slice(this.cursor);
|
|
4342
|
+
this.valueWithCursor = `${F2}${import_picocolors2.default.inverse(s[0])}${s.slice(1)}`;
|
|
4343
|
+
}
|
|
4344
|
+
});
|
|
4345
|
+
}
|
|
4346
|
+
get cursor() {
|
|
4347
|
+
return this._cursor;
|
|
4348
|
+
}
|
|
4349
|
+
get masked() {
|
|
4350
|
+
return this.value.replaceAll(/./g, this._mask);
|
|
4351
|
+
}
|
|
4352
|
+
};
|
|
4327
4353
|
}
|
|
4328
4354
|
});
|
|
4329
4355
|
|
|
@@ -4333,13 +4359,13 @@ import y2 from "process";
|
|
|
4333
4359
|
function ce() {
|
|
4334
4360
|
return y2.platform !== "win32" ? y2.env.TERM !== "linux" : !!y2.env.CI || !!y2.env.WT_SESSION || !!y2.env.TERMINUS_SUBLIME || y2.env.ConEmuTask === "{cmd::Cmder}" || y2.env.TERM_PROGRAM === "Terminus-Sublime" || y2.env.TERM_PROGRAM === "vscode" || y2.env.TERM === "xterm-256color" || y2.env.TERM === "alacritty" || y2.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
|
|
4335
4361
|
}
|
|
4336
|
-
var
|
|
4362
|
+
var import_picocolors3, import_sisteransi2, V2, u, le, L2, W2, C, ue, o, d2, k2, P2, A2, T, F, $e, _2, me, de, pe, q, D, U2, K2, b2, ge, ye, xe, Ie, Se, J, Y2;
|
|
4337
4363
|
var init_dist2 = __esm({
|
|
4338
4364
|
"node_modules/@clack/prompts/dist/index.mjs"() {
|
|
4339
4365
|
"use strict";
|
|
4340
4366
|
init_dist();
|
|
4341
4367
|
init_dist();
|
|
4342
|
-
|
|
4368
|
+
import_picocolors3 = __toESM(require_picocolors(), 1);
|
|
4343
4369
|
import_sisteransi2 = __toESM(require_src(), 1);
|
|
4344
4370
|
V2 = ce();
|
|
4345
4371
|
u = (t, n) => V2 ? t : n;
|
|
@@ -4362,66 +4388,87 @@ var init_dist2 = __esm({
|
|
|
4362
4388
|
pe = u("\u256F", "+");
|
|
4363
4389
|
q = u("\u25CF", "\u2022");
|
|
4364
4390
|
D = u("\u25C6", "*");
|
|
4365
|
-
|
|
4391
|
+
U2 = u("\u25B2", "!");
|
|
4366
4392
|
K2 = u("\u25A0", "x");
|
|
4367
4393
|
b2 = (t) => {
|
|
4368
4394
|
switch (t) {
|
|
4369
4395
|
case "initial":
|
|
4370
4396
|
case "active":
|
|
4371
|
-
return
|
|
4397
|
+
return import_picocolors3.default.cyan(le);
|
|
4372
4398
|
case "cancel":
|
|
4373
|
-
return
|
|
4399
|
+
return import_picocolors3.default.red(L2);
|
|
4374
4400
|
case "error":
|
|
4375
|
-
return
|
|
4401
|
+
return import_picocolors3.default.yellow(W2);
|
|
4376
4402
|
case "submit":
|
|
4377
|
-
return
|
|
4403
|
+
return import_picocolors3.default.green(C);
|
|
4378
4404
|
}
|
|
4379
4405
|
};
|
|
4406
|
+
ge = (t) => new MD({ validate: t.validate, mask: t.mask ?? $e, render() {
|
|
4407
|
+
const n = `${import_picocolors3.default.gray(o)}
|
|
4408
|
+
${b2(this.state)} ${t.message}
|
|
4409
|
+
`, r2 = this.valueWithCursor, i = this.masked;
|
|
4410
|
+
switch (this.state) {
|
|
4411
|
+
case "error":
|
|
4412
|
+
return `${n.trim()}
|
|
4413
|
+
${import_picocolors3.default.yellow(o)} ${i}
|
|
4414
|
+
${import_picocolors3.default.yellow(d2)} ${import_picocolors3.default.yellow(this.error)}
|
|
4415
|
+
`;
|
|
4416
|
+
case "submit":
|
|
4417
|
+
return `${n}${import_picocolors3.default.gray(o)} ${import_picocolors3.default.dim(i)}`;
|
|
4418
|
+
case "cancel":
|
|
4419
|
+
return `${n}${import_picocolors3.default.gray(o)} ${import_picocolors3.default.strikethrough(import_picocolors3.default.dim(i ?? ""))}${i ? `
|
|
4420
|
+
${import_picocolors3.default.gray(o)}` : ""}`;
|
|
4421
|
+
default:
|
|
4422
|
+
return `${n}${import_picocolors3.default.cyan(o)} ${r2}
|
|
4423
|
+
${import_picocolors3.default.cyan(d2)}
|
|
4424
|
+
`;
|
|
4425
|
+
}
|
|
4426
|
+
} }).prompt();
|
|
4380
4427
|
ye = (t) => {
|
|
4381
4428
|
const n = t.active ?? "Yes", r2 = t.inactive ?? "No";
|
|
4382
4429
|
return new dD({ active: n, inactive: r2, initialValue: t.initialValue ?? true, render() {
|
|
4383
|
-
const i = `${
|
|
4430
|
+
const i = `${import_picocolors3.default.gray(o)}
|
|
4384
4431
|
${b2(this.state)} ${t.message}
|
|
4385
4432
|
`, s = this.value ? n : r2;
|
|
4386
4433
|
switch (this.state) {
|
|
4387
4434
|
case "submit":
|
|
4388
|
-
return `${i}${
|
|
4435
|
+
return `${i}${import_picocolors3.default.gray(o)} ${import_picocolors3.default.dim(s)}`;
|
|
4389
4436
|
case "cancel":
|
|
4390
|
-
return `${i}${
|
|
4391
|
-
${
|
|
4437
|
+
return `${i}${import_picocolors3.default.gray(o)} ${import_picocolors3.default.strikethrough(import_picocolors3.default.dim(s))}
|
|
4438
|
+
${import_picocolors3.default.gray(o)}`;
|
|
4392
4439
|
default:
|
|
4393
|
-
return `${i}${
|
|
4394
|
-
${
|
|
4440
|
+
return `${i}${import_picocolors3.default.cyan(o)} ${this.value ? `${import_picocolors3.default.green(k2)} ${n}` : `${import_picocolors3.default.dim(P2)} ${import_picocolors3.default.dim(n)}`} ${import_picocolors3.default.dim("/")} ${this.value ? `${import_picocolors3.default.dim(P2)} ${import_picocolors3.default.dim(r2)}` : `${import_picocolors3.default.green(k2)} ${r2}`}
|
|
4441
|
+
${import_picocolors3.default.cyan(d2)}
|
|
4395
4442
|
`;
|
|
4396
4443
|
}
|
|
4397
4444
|
} }).prompt();
|
|
4398
4445
|
};
|
|
4399
4446
|
xe = (t = "") => {
|
|
4400
|
-
process.stdout.write(`${
|
|
4447
|
+
process.stdout.write(`${import_picocolors3.default.gray(d2)} ${import_picocolors3.default.red(t)}
|
|
4401
4448
|
|
|
4402
4449
|
`);
|
|
4403
4450
|
};
|
|
4404
4451
|
Ie = (t = "") => {
|
|
4405
|
-
process.stdout.write(`${
|
|
4452
|
+
process.stdout.write(`${import_picocolors3.default.gray(ue)} ${t}
|
|
4406
4453
|
`);
|
|
4407
4454
|
};
|
|
4408
4455
|
Se = (t = "") => {
|
|
4409
|
-
process.stdout.write(`${
|
|
4410
|
-
${
|
|
4456
|
+
process.stdout.write(`${import_picocolors3.default.gray(o)}
|
|
4457
|
+
${import_picocolors3.default.gray(d2)} ${t}
|
|
4411
4458
|
|
|
4412
4459
|
`);
|
|
4413
4460
|
};
|
|
4414
|
-
J = `${
|
|
4461
|
+
J = `${import_picocolors3.default.gray(o)} `;
|
|
4415
4462
|
Y2 = ({ indicator: t = "dots" } = {}) => {
|
|
4416
4463
|
const n = V2 ? ["\u25D2", "\u25D0", "\u25D3", "\u25D1"] : ["\u2022", "o", "O", "0"], r2 = V2 ? 80 : 120, i = process.env.CI === "true";
|
|
4417
4464
|
let s, c, a = false, l2 = "", $2, g2 = performance.now();
|
|
4418
4465
|
const p2 = (m2) => {
|
|
4419
4466
|
const h2 = m2 > 1 ? "Something went wrong" : "Canceled";
|
|
4420
4467
|
a && N2(h2, m2);
|
|
4421
|
-
},
|
|
4422
|
-
process.on("uncaughtExceptionMonitor",
|
|
4468
|
+
}, v2 = () => p2(2), f = () => p2(1), j2 = () => {
|
|
4469
|
+
process.on("uncaughtExceptionMonitor", v2), process.on("unhandledRejection", v2), process.on("SIGINT", f), process.on("SIGTERM", f), process.on("exit", p2);
|
|
4423
4470
|
}, E = () => {
|
|
4424
|
-
process.removeListener("uncaughtExceptionMonitor",
|
|
4471
|
+
process.removeListener("uncaughtExceptionMonitor", v2), process.removeListener("unhandledRejection", v2), process.removeListener("SIGINT", f), process.removeListener("SIGTERM", f), process.removeListener("exit", p2);
|
|
4425
4472
|
}, B2 = () => {
|
|
4426
4473
|
if ($2 === void 0) return;
|
|
4427
4474
|
i && process.stdout.write(`
|
|
@@ -4433,13 +4480,13 @@ ${import_picocolors2.default.gray(d2)} ${t}
|
|
|
4433
4480
|
const h2 = (performance.now() - m2) / 1e3, w2 = Math.floor(h2 / 60), I2 = Math.floor(h2 % 60);
|
|
4434
4481
|
return w2 > 0 ? `[${w2}m ${I2}s]` : `[${I2}s]`;
|
|
4435
4482
|
}, H = (m2 = "") => {
|
|
4436
|
-
a = true, s = fD(), l2 = R2(m2), g2 = performance.now(), process.stdout.write(`${
|
|
4483
|
+
a = true, s = fD(), l2 = R2(m2), g2 = performance.now(), process.stdout.write(`${import_picocolors3.default.gray(o)}
|
|
4437
4484
|
`);
|
|
4438
4485
|
let h2 = 0, w2 = 0;
|
|
4439
4486
|
j2(), c = setInterval(() => {
|
|
4440
4487
|
if (i && l2 === $2) return;
|
|
4441
4488
|
B2(), $2 = l2;
|
|
4442
|
-
const I2 =
|
|
4489
|
+
const I2 = import_picocolors3.default.magenta(n[h2]);
|
|
4443
4490
|
if (i) process.stdout.write(`${I2} ${l2}...`);
|
|
4444
4491
|
else if (t === "timer") process.stdout.write(`${I2} ${l2} ${O2(g2)}`);
|
|
4445
4492
|
else {
|
|
@@ -4450,7 +4497,7 @@ ${import_picocolors2.default.gray(d2)} ${t}
|
|
|
4450
4497
|
}, r2);
|
|
4451
4498
|
}, N2 = (m2 = "", h2 = 0) => {
|
|
4452
4499
|
a = false, clearInterval(c), B2();
|
|
4453
|
-
const w2 = h2 === 0 ?
|
|
4500
|
+
const w2 = h2 === 0 ? import_picocolors3.default.green(C) : h2 === 1 ? import_picocolors3.default.red(L2) : import_picocolors3.default.red(W2);
|
|
4454
4501
|
l2 = R2(m2 ?? l2), t === "timer" ? process.stdout.write(`${w2} ${l2} ${O2(g2)}
|
|
4455
4502
|
`) : process.stdout.write(`${w2} ${l2}
|
|
4456
4503
|
`), E(), s();
|
|
@@ -4540,9 +4587,9 @@ function compareVersions(a, b3) {
|
|
|
4540
4587
|
}
|
|
4541
4588
|
return 0;
|
|
4542
4589
|
}
|
|
4543
|
-
function parse(
|
|
4544
|
-
if (!
|
|
4545
|
-
const core =
|
|
4590
|
+
function parse(v2) {
|
|
4591
|
+
if (!v2 || v2 === "unknown") return null;
|
|
4592
|
+
const core = v2.trim().replace(/^v/, "").split(/[-+]/)[0] ?? "";
|
|
4546
4593
|
const parts = core.split(".");
|
|
4547
4594
|
if (parts.length === 0 || parts.some((p2) => p2 === "" || !/^\d+$/.test(p2))) return null;
|
|
4548
4595
|
return parts.map((p2) => Number.parseInt(p2, 10));
|
|
@@ -4561,14 +4608,14 @@ async function checkCliUpdate(currentVersion) {
|
|
|
4561
4608
|
if (!latest || latest === currentVersion) return null;
|
|
4562
4609
|
return { current: currentVersion, latest };
|
|
4563
4610
|
}
|
|
4564
|
-
function classify(adapter, detection,
|
|
4611
|
+
function classify(adapter, detection, status5, poolVersion) {
|
|
4565
4612
|
if (!detection.present) return "absent";
|
|
4566
4613
|
if (!adapter.supported) return "unsupported";
|
|
4567
|
-
if (!
|
|
4568
|
-
if (!
|
|
4614
|
+
if (!status5.installed) return "missing";
|
|
4615
|
+
if (!status5.version) return "unknown";
|
|
4569
4616
|
if (poolVersion === "unknown") return "unknown";
|
|
4570
|
-
const order = compareVersions(
|
|
4571
|
-
if (order === null) return
|
|
4617
|
+
const order = compareVersions(status5.version, poolVersion);
|
|
4618
|
+
if (order === null) return status5.version === poolVersion ? "current" : "stale";
|
|
4572
4619
|
if (order === 0) return "current";
|
|
4573
4620
|
return order > 0 ? "ahead" : "stale";
|
|
4574
4621
|
}
|
|
@@ -4581,13 +4628,13 @@ async function gather(adapters, options = {}) {
|
|
|
4581
4628
|
Promise.all(
|
|
4582
4629
|
adapters.map(async (adapter) => {
|
|
4583
4630
|
const detection = await adapter.detect();
|
|
4584
|
-
const
|
|
4631
|
+
const status5 = detection.present ? await adapter.status() : { installed: false, note: "agent not installed" };
|
|
4585
4632
|
return {
|
|
4586
4633
|
adapter,
|
|
4587
4634
|
detection,
|
|
4588
|
-
status:
|
|
4589
|
-
drift: classify(adapter, detection,
|
|
4590
|
-
extrasDrift: classifyExtras(adapter, detection,
|
|
4635
|
+
status: status5,
|
|
4636
|
+
drift: classify(adapter, detection, status5, poolVersion),
|
|
4637
|
+
extrasDrift: classifyExtras(adapter, detection, status5, extrasVersion)
|
|
4591
4638
|
};
|
|
4592
4639
|
})
|
|
4593
4640
|
),
|
|
@@ -4595,19 +4642,24 @@ async function gather(adapters, options = {}) {
|
|
|
4595
4642
|
]);
|
|
4596
4643
|
return { cliVersion, poolVersion, extrasVersion, agents, cliUpdate: cliUpdate ?? void 0 };
|
|
4597
4644
|
}
|
|
4598
|
-
function classifyExtras(adapter, detection,
|
|
4599
|
-
if (!
|
|
4645
|
+
function classifyExtras(adapter, detection, status5, extrasVersion) {
|
|
4646
|
+
if (!status5.extras) return void 0;
|
|
4600
4647
|
if (!detection.present) return "absent";
|
|
4601
4648
|
if (!adapter.supported) return "unsupported";
|
|
4602
|
-
if (!
|
|
4603
|
-
if (!
|
|
4604
|
-
|
|
4649
|
+
if (!status5.extras.installed) return "missing";
|
|
4650
|
+
if (!status5.extras.version || !extrasVersion) return "unknown";
|
|
4651
|
+
const order = compareVersions(status5.extras.version, extrasVersion);
|
|
4652
|
+
if (order === null) return status5.extras.version === extrasVersion ? "current" : "stale";
|
|
4653
|
+
if (order === 0) return "current";
|
|
4654
|
+
return order > 0 ? "ahead" : "stale";
|
|
4605
4655
|
}
|
|
4606
|
-
function actionable(report,
|
|
4656
|
+
function actionable(report, options = {}) {
|
|
4657
|
+
const { includeCurrent = false, allowDowngrade = false } = options;
|
|
4607
4658
|
return report.agents.filter((entry) => {
|
|
4608
4659
|
if (!entry.detection.present || !entry.adapter.supported) return false;
|
|
4660
|
+
if (entry.drift === "ahead" && !allowDowngrade) return false;
|
|
4661
|
+
if (entry.extrasDrift === "ahead" && !allowDowngrade) return false;
|
|
4609
4662
|
if (includeCurrent) return true;
|
|
4610
|
-
if (entry.drift === "ahead") return false;
|
|
4611
4663
|
return entry.drift !== "current" || entry.extrasDrift === "stale" || entry.extrasDrift === "unknown";
|
|
4612
4664
|
});
|
|
4613
4665
|
}
|
|
@@ -4641,7 +4693,7 @@ async function init(options) {
|
|
|
4641
4693
|
const current = entry.drift === "current";
|
|
4642
4694
|
item(current ? "ok" : "warn", `${entry.adapter.name} \u2014 ${current ? `caddis ${entry.status.version} (current)` : entry.status.installed ? `caddis ${entry.status.version ?? "?"} \u2192 ${report.poolVersion}` : "caddis not installed"}`);
|
|
4643
4695
|
}
|
|
4644
|
-
const targets = actionable(report, true);
|
|
4696
|
+
const targets = actionable(report, { includeCurrent: true });
|
|
4645
4697
|
if (targets.length === 0) {
|
|
4646
4698
|
Se(
|
|
4647
4699
|
`${color.yellow("No supported agent found.")} caddis v0.1 drives Claude Code and agy \u2014 install one, then re-run.`
|
|
@@ -4684,6 +4736,266 @@ var init_init = __esm({
|
|
|
4684
4736
|
}
|
|
4685
4737
|
});
|
|
4686
4738
|
|
|
4739
|
+
// src/providers/resolve.ts
|
|
4740
|
+
import { readFileSync as readFileSync4 } from "fs";
|
|
4741
|
+
import { homedir } from "os";
|
|
4742
|
+
import { isAbsolute, join } from "path";
|
|
4743
|
+
function expandHome(p2) {
|
|
4744
|
+
if (p2 === "~") return homedir();
|
|
4745
|
+
if (p2.startsWith("~/") || p2.startsWith("~\\")) return join(homedir(), p2.slice(2));
|
|
4746
|
+
return p2;
|
|
4747
|
+
}
|
|
4748
|
+
function keysFilePath(env) {
|
|
4749
|
+
const configured = (env[KEYS_FILE_ENV] || "").trim() || DEFAULT_KEYS_FILE;
|
|
4750
|
+
const expanded = expandHome(configured);
|
|
4751
|
+
return isAbsolute(expanded) ? expanded : expanded;
|
|
4752
|
+
}
|
|
4753
|
+
function parseKeysFile(path5) {
|
|
4754
|
+
let text;
|
|
4755
|
+
try {
|
|
4756
|
+
text = readFileSync4(path5, "utf8");
|
|
4757
|
+
} catch {
|
|
4758
|
+
return {};
|
|
4759
|
+
}
|
|
4760
|
+
const out = {};
|
|
4761
|
+
for (const raw of text.split(/\r?\n/)) {
|
|
4762
|
+
const line2 = raw.trim();
|
|
4763
|
+
if (!line2 || line2.startsWith("#") || !line2.includes("=")) continue;
|
|
4764
|
+
const idx = line2.indexOf("=");
|
|
4765
|
+
const key = line2.slice(0, idx).trim();
|
|
4766
|
+
let val = line2.slice(idx + 1).trim();
|
|
4767
|
+
if (val.length >= 2 && (val.startsWith('"') && val.endsWith('"') || val.startsWith("'") && val.endsWith("'"))) {
|
|
4768
|
+
val = val.slice(1, -1);
|
|
4769
|
+
}
|
|
4770
|
+
out[key] = val;
|
|
4771
|
+
}
|
|
4772
|
+
return out;
|
|
4773
|
+
}
|
|
4774
|
+
function maskKey(key) {
|
|
4775
|
+
if (!key) return "(none)";
|
|
4776
|
+
return key.length <= 4 ? "*".repeat(key.length) : `${"*".repeat(8)}${key.slice(-4)}`;
|
|
4777
|
+
}
|
|
4778
|
+
var PROVIDERS, DEFAULT_KEYS_FILE, KEYS_FILE_ENV;
|
|
4779
|
+
var init_resolve = __esm({
|
|
4780
|
+
"src/providers/resolve.ts"() {
|
|
4781
|
+
"use strict";
|
|
4782
|
+
PROVIDERS = {
|
|
4783
|
+
deepseek: {
|
|
4784
|
+
baseUrl: "https://api.deepseek.com/anthropic",
|
|
4785
|
+
model: "deepseek-v4-flash[1m]",
|
|
4786
|
+
keyEnv: "DEEPSEEK_API_KEY"
|
|
4787
|
+
},
|
|
4788
|
+
glm: {
|
|
4789
|
+
baseUrl: "https://api.z.ai/api/anthropic",
|
|
4790
|
+
model: "glm-5.3[1m]",
|
|
4791
|
+
keyEnv: "GLM_API_KEY"
|
|
4792
|
+
},
|
|
4793
|
+
// OpenRouter has no Anthropic-protocol endpoint. It works only through an
|
|
4794
|
+
// Anthropic-compatible gateway (e.g. LiteLLM — see claude-harness/LOCAL-MODELS.md)
|
|
4795
|
+
// whose URL you supply via OSS_BASE_URL.
|
|
4796
|
+
openrouter: {
|
|
4797
|
+
baseUrl: "",
|
|
4798
|
+
model: "deepseek/deepseek-v4-flash",
|
|
4799
|
+
keyEnv: "OPENROUTER_API_KEY"
|
|
4800
|
+
}
|
|
4801
|
+
};
|
|
4802
|
+
DEFAULT_KEYS_FILE = "~/.caddis/keys.env";
|
|
4803
|
+
KEYS_FILE_ENV = "CADDIS_KEYS_FILE";
|
|
4804
|
+
}
|
|
4805
|
+
});
|
|
4806
|
+
|
|
4807
|
+
// src/commands/keys.ts
|
|
4808
|
+
var keys_exports = {};
|
|
4809
|
+
__export(keys_exports, {
|
|
4810
|
+
keys: () => keys,
|
|
4811
|
+
probeKey: () => probeKey,
|
|
4812
|
+
upsertKeyLines: () => upsertKeyLines
|
|
4813
|
+
});
|
|
4814
|
+
import { chmodSync, mkdirSync as mkdirSync2, readFileSync as readFileSync5, writeFileSync as writeFileSync2 } from "fs";
|
|
4815
|
+
import { dirname } from "path";
|
|
4816
|
+
async function probeKey(baseUrl, model, apiKey) {
|
|
4817
|
+
if (!baseUrl) return { ok: false, rejected: false, detail: "no endpoint for this provider" };
|
|
4818
|
+
const controller = new AbortController();
|
|
4819
|
+
const timer = setTimeout(() => controller.abort(), 15e3);
|
|
4820
|
+
try {
|
|
4821
|
+
const res = await fetch(`${baseUrl.replace(/\/$/, "")}/v1/messages`, {
|
|
4822
|
+
method: "POST",
|
|
4823
|
+
headers: {
|
|
4824
|
+
"content-type": "application/json",
|
|
4825
|
+
"anthropic-version": "2023-06-01",
|
|
4826
|
+
authorization: `Bearer ${apiKey}`,
|
|
4827
|
+
"x-api-key": apiKey
|
|
4828
|
+
},
|
|
4829
|
+
body: JSON.stringify({ model, max_tokens: 1, messages: [{ role: "user", content: "ping" }] }),
|
|
4830
|
+
signal: controller.signal
|
|
4831
|
+
});
|
|
4832
|
+
if (res.ok) return { ok: true, rejected: false, detail: "ok" };
|
|
4833
|
+
if (res.status === 401 || res.status === 403) {
|
|
4834
|
+
return { ok: false, rejected: true, detail: `rejected (HTTP ${res.status})` };
|
|
4835
|
+
}
|
|
4836
|
+
return { ok: false, rejected: false, detail: `could not validate (HTTP ${res.status})` };
|
|
4837
|
+
} catch (error) {
|
|
4838
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
4839
|
+
return { ok: false, rejected: false, detail: `could not validate (${message})` };
|
|
4840
|
+
} finally {
|
|
4841
|
+
clearTimeout(timer);
|
|
4842
|
+
}
|
|
4843
|
+
}
|
|
4844
|
+
function upsertKeyLines(existing, updates) {
|
|
4845
|
+
const lines = existing ? existing.split(/\r?\n/) : [];
|
|
4846
|
+
const remaining = { ...updates };
|
|
4847
|
+
const out = lines.map((line2) => {
|
|
4848
|
+
const trimmed = line2.trim();
|
|
4849
|
+
if (!trimmed || trimmed.startsWith("#") || !trimmed.includes("=")) return line2;
|
|
4850
|
+
const name = trimmed.slice(0, trimmed.indexOf("=")).trim();
|
|
4851
|
+
if (name in remaining) {
|
|
4852
|
+
const value = remaining[name];
|
|
4853
|
+
delete remaining[name];
|
|
4854
|
+
return `${name}=${value}`;
|
|
4855
|
+
}
|
|
4856
|
+
return line2;
|
|
4857
|
+
});
|
|
4858
|
+
const added = Object.entries(remaining).map(([k3, v2]) => `${k3}=${v2}`);
|
|
4859
|
+
if (added.length) {
|
|
4860
|
+
if (out.length && out[out.length - 1].trim() !== "") out.push("");
|
|
4861
|
+
out.push("# added by `caddis keys`");
|
|
4862
|
+
out.push(...added);
|
|
4863
|
+
}
|
|
4864
|
+
let text = out.join("\n");
|
|
4865
|
+
if (!text.endsWith("\n")) text += "\n";
|
|
4866
|
+
return text;
|
|
4867
|
+
}
|
|
4868
|
+
function restrictPermissions(path5) {
|
|
4869
|
+
if (process.platform === "win32") return null;
|
|
4870
|
+
try {
|
|
4871
|
+
chmodSync(path5, 384);
|
|
4872
|
+
return null;
|
|
4873
|
+
} catch (error) {
|
|
4874
|
+
return error instanceof Error ? error.message : String(error);
|
|
4875
|
+
}
|
|
4876
|
+
}
|
|
4877
|
+
async function keys(options = {}) {
|
|
4878
|
+
const path5 = keysFilePath(process.env);
|
|
4879
|
+
const fileKeys = parseKeysFile(path5);
|
|
4880
|
+
const names = Object.keys(PROVIDERS).sort();
|
|
4881
|
+
const current = names.map((name) => {
|
|
4882
|
+
const preset = PROVIDERS[name];
|
|
4883
|
+
const fromEnv = (process.env[preset.keyEnv] || "").trim();
|
|
4884
|
+
const fromFile = (fileKeys[preset.keyEnv] || "").trim();
|
|
4885
|
+
return {
|
|
4886
|
+
name,
|
|
4887
|
+
preset,
|
|
4888
|
+
value: fromEnv || fromFile,
|
|
4889
|
+
source: fromEnv ? "env" : fromFile ? "file" : null
|
|
4890
|
+
};
|
|
4891
|
+
});
|
|
4892
|
+
if (options.check) {
|
|
4893
|
+
const configured = current.filter((entry) => entry.value);
|
|
4894
|
+
if (!configured.length) {
|
|
4895
|
+
process.stdout.write(`no provider keys configured (looked in $ENV and ${path5})
|
|
4896
|
+
`);
|
|
4897
|
+
return 1;
|
|
4898
|
+
}
|
|
4899
|
+
let bad = 0;
|
|
4900
|
+
for (const entry of configured) {
|
|
4901
|
+
const probe = await probeKey(entry.preset.baseUrl, entry.preset.model, entry.value);
|
|
4902
|
+
const label = probe.ok ? color.green("ok") : probe.rejected ? color.red("REJECTED") : color.yellow("unverified");
|
|
4903
|
+
process.stdout.write(` ${entry.name.padEnd(12)} ${label} ${probe.detail}
|
|
4904
|
+
`);
|
|
4905
|
+
if (probe.rejected) bad += 1;
|
|
4906
|
+
}
|
|
4907
|
+
return bad ? 1 : 0;
|
|
4908
|
+
}
|
|
4909
|
+
Ie("caddis keys");
|
|
4910
|
+
process.stdout.write(` keys file: ${path5}
|
|
4911
|
+
|
|
4912
|
+
`);
|
|
4913
|
+
for (const entry of current) {
|
|
4914
|
+
const state = entry.source ? `${color.green("present")} (${entry.source}) ${color.dim(maskKey(entry.value))}` : color.dim("missing");
|
|
4915
|
+
process.stdout.write(` ${entry.name.padEnd(12)} ${state}
|
|
4916
|
+
`);
|
|
4917
|
+
}
|
|
4918
|
+
process.stdout.write("\n");
|
|
4919
|
+
const collected = {};
|
|
4920
|
+
for (const entry of current) {
|
|
4921
|
+
if (entry.source === "env") {
|
|
4922
|
+
process.stdout.write(
|
|
4923
|
+
color.dim(` ${entry.name}: set via $${entry.preset.keyEnv}; the environment wins, skipping
|
|
4924
|
+
`)
|
|
4925
|
+
);
|
|
4926
|
+
continue;
|
|
4927
|
+
}
|
|
4928
|
+
if (entry.value && !options.yes) {
|
|
4929
|
+
const replace = await ye({
|
|
4930
|
+
message: `${entry.name}: a key is already saved. Replace it?`,
|
|
4931
|
+
initialValue: false
|
|
4932
|
+
});
|
|
4933
|
+
if (pD(replace)) {
|
|
4934
|
+
xe("cancelled \u2014 nothing written");
|
|
4935
|
+
return 1;
|
|
4936
|
+
}
|
|
4937
|
+
if (!replace) continue;
|
|
4938
|
+
} else if (entry.value) {
|
|
4939
|
+
continue;
|
|
4940
|
+
}
|
|
4941
|
+
const entered = await ge({
|
|
4942
|
+
message: `${entry.name} key (${entry.preset.keyEnv}) \u2014 Enter to skip`
|
|
4943
|
+
});
|
|
4944
|
+
if (pD(entered)) {
|
|
4945
|
+
xe("cancelled \u2014 nothing written");
|
|
4946
|
+
return 1;
|
|
4947
|
+
}
|
|
4948
|
+
const value = String(entered || "").trim();
|
|
4949
|
+
if (!value) continue;
|
|
4950
|
+
const probe = await probeKey(entry.preset.baseUrl, entry.preset.model, value);
|
|
4951
|
+
if (probe.rejected) {
|
|
4952
|
+
process.stdout.write(color.red(` ${entry.name}: ${probe.detail} \u2014 not saved
|
|
4953
|
+
`));
|
|
4954
|
+
continue;
|
|
4955
|
+
}
|
|
4956
|
+
if (!probe.ok) {
|
|
4957
|
+
process.stdout.write(color.yellow(` ${entry.name}: ${probe.detail} \u2014 saving anyway
|
|
4958
|
+
`));
|
|
4959
|
+
} else {
|
|
4960
|
+
process.stdout.write(color.green(` ${entry.name}: validated
|
|
4961
|
+
`));
|
|
4962
|
+
}
|
|
4963
|
+
collected[entry.preset.keyEnv] = value;
|
|
4964
|
+
}
|
|
4965
|
+
if (!Object.keys(collected).length) {
|
|
4966
|
+
Se("nothing to write");
|
|
4967
|
+
return 0;
|
|
4968
|
+
}
|
|
4969
|
+
if (options.dryRun) {
|
|
4970
|
+
Se(`dry run \u2014 would write ${Object.keys(collected).join(", ")} to ${path5}`);
|
|
4971
|
+
return 0;
|
|
4972
|
+
}
|
|
4973
|
+
let existing = "";
|
|
4974
|
+
try {
|
|
4975
|
+
existing = readFileSync5(path5, "utf8");
|
|
4976
|
+
} catch {
|
|
4977
|
+
existing = "";
|
|
4978
|
+
}
|
|
4979
|
+
mkdirSync2(dirname(path5), { recursive: true });
|
|
4980
|
+
writeFileSync2(path5, upsertKeyLines(existing, collected), { encoding: "utf8" });
|
|
4981
|
+
const permWarning = restrictPermissions(path5);
|
|
4982
|
+
process.stdout.write(`
|
|
4983
|
+
wrote ${Object.keys(collected).join(", ")} to ${path5}
|
|
4984
|
+
`);
|
|
4985
|
+
if (permWarning) process.stdout.write(color.yellow(` could not set 0600 on the keys file: ${permWarning}
|
|
4986
|
+
`));
|
|
4987
|
+
Se("lanes ready \u2014 try `claude-glm --print-config`");
|
|
4988
|
+
return 0;
|
|
4989
|
+
}
|
|
4990
|
+
var init_keys = __esm({
|
|
4991
|
+
"src/commands/keys.ts"() {
|
|
4992
|
+
"use strict";
|
|
4993
|
+
init_dist2();
|
|
4994
|
+
init_log();
|
|
4995
|
+
init_resolve();
|
|
4996
|
+
}
|
|
4997
|
+
});
|
|
4998
|
+
|
|
4687
4999
|
// src/commands/update.ts
|
|
4688
5000
|
var update_exports = {};
|
|
4689
5001
|
__export(update_exports, {
|
|
@@ -4699,7 +5011,10 @@ async function update(options) {
|
|
|
4699
5011
|
item("info", `${entry.adapter.name} \u2014 detected, not yet supported (v0.2)`);
|
|
4700
5012
|
}
|
|
4701
5013
|
}
|
|
4702
|
-
const targets = actionable(report,
|
|
5014
|
+
const targets = actionable(report, {
|
|
5015
|
+
includeCurrent: options.force === true,
|
|
5016
|
+
allowDowngrade: options.force === true
|
|
5017
|
+
});
|
|
4703
5018
|
if (targets.length === 0) {
|
|
4704
5019
|
const supportedPresent = report.agents.filter((e2) => e2.detection.present && e2.adapter.supported);
|
|
4705
5020
|
const ahead = report.agents.filter((e2) => e2.drift === "ahead");
|
|
@@ -4792,13 +5107,13 @@ function renderEnvironment(report, problems) {
|
|
|
4792
5107
|
function renderAgents(report, problems) {
|
|
4793
5108
|
heading("Agents");
|
|
4794
5109
|
for (const entry of report.agents) {
|
|
4795
|
-
const { adapter, detection, status:
|
|
5110
|
+
const { adapter, detection, status: status5 } = entry;
|
|
4796
5111
|
item(markFor(entry.drift), `${color.bold(adapter.name)} \u2014 ${describe(entry, report.poolVersion)}`);
|
|
4797
5112
|
if (detection.path) detail(detection.path);
|
|
4798
5113
|
if (detection.agentVersion) detail(`agent version ${detection.agentVersion}`);
|
|
4799
|
-
if (
|
|
4800
|
-
if (
|
|
4801
|
-
if (detection.note && detection.note !==
|
|
5114
|
+
if (status5.source) detail(`read from ${status5.source}`);
|
|
5115
|
+
if (status5.note) detail(status5.note);
|
|
5116
|
+
if (detection.note && detection.note !== status5.note) detail(detection.note);
|
|
4802
5117
|
if (entry.extrasDrift) detail(describeExtras(entry, report.extrasVersion));
|
|
4803
5118
|
const problem = problemFor(entry, report.poolVersion);
|
|
4804
5119
|
if (problem) {
|
|
@@ -4991,18 +5306,18 @@ function renderTable(headers, rows) {
|
|
|
4991
5306
|
(header, i) => Math.max(visibleWidth(header), ...rows.map((row) => visibleWidth(row[i] ?? "")))
|
|
4992
5307
|
);
|
|
4993
5308
|
const out = [];
|
|
4994
|
-
out.push(` ${headers.map((h2, i) => pad(
|
|
4995
|
-
out.push(` ${widths.map((w2) =>
|
|
5309
|
+
out.push(` ${headers.map((h2, i) => pad(import_picocolors4.default.bold(h2), widths[i] ?? 0)).join(" ")}`.trimEnd());
|
|
5310
|
+
out.push(` ${widths.map((w2) => import_picocolors4.default.dim("\u2500".repeat(w2))).join(" ")}`);
|
|
4996
5311
|
for (const row of rows) {
|
|
4997
5312
|
out.push(` ${row.map((cell, i) => pad(cell ?? "", widths[i] ?? 0)).join(" ")}`.trimEnd());
|
|
4998
5313
|
}
|
|
4999
5314
|
return out.join("\n");
|
|
5000
5315
|
}
|
|
5001
|
-
var
|
|
5316
|
+
var import_picocolors4, ANSI;
|
|
5002
5317
|
var init_table = __esm({
|
|
5003
5318
|
"src/util/table.ts"() {
|
|
5004
5319
|
"use strict";
|
|
5005
|
-
|
|
5320
|
+
import_picocolors4 = __toESM(require_picocolors(), 1);
|
|
5006
5321
|
ANSI = /\[[0-9;]*m/g;
|
|
5007
5322
|
}
|
|
5008
5323
|
});
|
|
@@ -5010,9 +5325,9 @@ var init_table = __esm({
|
|
|
5010
5325
|
// src/commands/status.ts
|
|
5011
5326
|
var status_exports = {};
|
|
5012
5327
|
__export(status_exports, {
|
|
5013
|
-
status: () =>
|
|
5328
|
+
status: () => status4
|
|
5014
5329
|
});
|
|
5015
|
-
async function
|
|
5330
|
+
async function status4(options) {
|
|
5016
5331
|
const report = await gather(options.adapters);
|
|
5017
5332
|
if (options.json) {
|
|
5018
5333
|
line(JSON.stringify(toJson2(report), null, 2));
|
|
@@ -5145,8 +5460,8 @@ function parsePluginList(stdout, plugin = PLUGIN) {
|
|
|
5145
5460
|
if (version?.[1] && entry.version === void 0) {
|
|
5146
5461
|
entry.version = version[1] === "unknown" ? void 0 : version[1];
|
|
5147
5462
|
}
|
|
5148
|
-
const
|
|
5149
|
-
if (
|
|
5463
|
+
const status5 = line2.match(/^\s*Status\s*:\s*(.+?)\s*$/i);
|
|
5464
|
+
if (status5?.[1]) entry.disabled = /disabled/i.test(status5[1]);
|
|
5150
5465
|
}
|
|
5151
5466
|
return entry;
|
|
5152
5467
|
}
|
|
@@ -5423,32 +5738,170 @@ var agyAdapter = {
|
|
|
5423
5738
|
};
|
|
5424
5739
|
|
|
5425
5740
|
// src/agents/codex.ts
|
|
5741
|
+
init_exec();
|
|
5742
|
+
import { cpSync as cpSync2, existsSync as existsSync3, mkdirSync, readFileSync as readFileSync3, rmSync as rmSync2, writeFileSync } from "fs";
|
|
5426
5743
|
import os2 from "os";
|
|
5427
5744
|
import path3 from "path";
|
|
5745
|
+
init_pkg();
|
|
5746
|
+
var BIN3 = "codex";
|
|
5747
|
+
var BUNDLE2 = "codex";
|
|
5748
|
+
function caddisSkillsDir(home = os2.homedir()) {
|
|
5749
|
+
return path3.join(home, ".codex", "skills", "caddis");
|
|
5750
|
+
}
|
|
5751
|
+
function versionFile(home = os2.homedir()) {
|
|
5752
|
+
return path3.join(caddisSkillsDir(home), ".caddis-version");
|
|
5753
|
+
}
|
|
5754
|
+
async function detect3() {
|
|
5755
|
+
const binPath = await findBin(BIN3);
|
|
5756
|
+
if (!binPath) {
|
|
5757
|
+
const configDir = path3.join(os2.homedir(), ".codex");
|
|
5758
|
+
if (existsSync3(configDir)) {
|
|
5759
|
+
return { present: false, path: configDir, note: "no `codex` binary on PATH, but ~/.codex exists" };
|
|
5760
|
+
}
|
|
5761
|
+
return { present: false, note: "no `codex` binary on PATH" };
|
|
5762
|
+
}
|
|
5763
|
+
const version = await run(BIN3, ["--version"], { timeout: 2e4 });
|
|
5764
|
+
return {
|
|
5765
|
+
present: true,
|
|
5766
|
+
path: binPath,
|
|
5767
|
+
// `codex --version` prints "codex-cli 0.150.1"; take the trailing token.
|
|
5768
|
+
agentVersion: version.ok ? version.stdout.trim().split(/\s+/).pop() || void 0 : void 0,
|
|
5769
|
+
note: version.ok ? void 0 : "binary found but `codex --version` failed"
|
|
5770
|
+
};
|
|
5771
|
+
}
|
|
5772
|
+
function shortenHome2(target) {
|
|
5773
|
+
const home = os2.homedir();
|
|
5774
|
+
return target.startsWith(home) ? path3.join("~", target.slice(home.length)) : target;
|
|
5775
|
+
}
|
|
5776
|
+
function statusFromHome2(home) {
|
|
5777
|
+
const marker = versionFile(home);
|
|
5778
|
+
const dir = caddisSkillsDir(home);
|
|
5779
|
+
if (existsSync3(marker)) {
|
|
5780
|
+
try {
|
|
5781
|
+
const version = readFileSync3(marker, "utf8").trim();
|
|
5782
|
+
if (version) return { installed: true, version, source: shortenHome2(marker) };
|
|
5783
|
+
} catch {
|
|
5784
|
+
}
|
|
5785
|
+
return { installed: true, source: shortenHome2(marker), note: "version marker present but unreadable" };
|
|
5786
|
+
}
|
|
5787
|
+
if (existsSync3(dir)) {
|
|
5788
|
+
return {
|
|
5789
|
+
installed: true,
|
|
5790
|
+
source: shortenHome2(dir),
|
|
5791
|
+
note: "skills present but no version marker \u2014 installed by hand, or by a caddis older than this one"
|
|
5792
|
+
};
|
|
5793
|
+
}
|
|
5794
|
+
return { installed: false, source: shortenHome2(dir), note: "caddis skills not installed into codex" };
|
|
5795
|
+
}
|
|
5796
|
+
async function status3() {
|
|
5797
|
+
const detected = await detect3();
|
|
5798
|
+
if (!detected.present) return { installed: false, note: "agent not installed" };
|
|
5799
|
+
return statusFromHome2(os2.homedir());
|
|
5800
|
+
}
|
|
5801
|
+
async function drive3(action, options) {
|
|
5802
|
+
const detected = await detect3();
|
|
5803
|
+
if (!detected.present) {
|
|
5804
|
+
return { ok: true, skipped: true, steps: [], message: "codex not installed \u2014 skipped" };
|
|
5805
|
+
}
|
|
5806
|
+
const bundle = bundlePath(BUNDLE2, { requireManifest: false });
|
|
5807
|
+
if (!bundle) {
|
|
5808
|
+
return {
|
|
5809
|
+
ok: false,
|
|
5810
|
+
skipped: false,
|
|
5811
|
+
steps: [],
|
|
5812
|
+
message: `the ${BUNDLE2} bundle is missing from this package \u2014 reinstall @caddis/cli`
|
|
5813
|
+
};
|
|
5814
|
+
}
|
|
5815
|
+
const source = path3.join(bundle, ".codex", "skills");
|
|
5816
|
+
if (!existsSync3(source)) {
|
|
5817
|
+
return {
|
|
5818
|
+
ok: false,
|
|
5819
|
+
skipped: false,
|
|
5820
|
+
steps: [],
|
|
5821
|
+
message: `the ${BUNDLE2} bundle has no .codex/skills directory \u2014 the export shape changed`
|
|
5822
|
+
};
|
|
5823
|
+
}
|
|
5824
|
+
const home = os2.homedir();
|
|
5825
|
+
const dest = caddisSkillsDir(home);
|
|
5826
|
+
const version = bundleManifest().poolVersion || "unknown";
|
|
5827
|
+
const label = `copy ${BUNDLE2} skills -> ${shortenHome2(dest)}`;
|
|
5828
|
+
const steps2 = [];
|
|
5829
|
+
if (options.dryRun) {
|
|
5830
|
+
return {
|
|
5831
|
+
ok: true,
|
|
5832
|
+
skipped: true,
|
|
5833
|
+
steps: [{ command: label, ok: true, code: 0 }],
|
|
5834
|
+
message: `dry run \u2014 would ${action} caddis ${version} into ${shortenHome2(dest)}`
|
|
5835
|
+
};
|
|
5836
|
+
}
|
|
5837
|
+
try {
|
|
5838
|
+
if (existsSync3(dest)) rmSync2(dest, { recursive: true, force: true });
|
|
5839
|
+
mkdirSync(path3.dirname(dest), { recursive: true });
|
|
5840
|
+
cpSync2(source, dest, { recursive: true });
|
|
5841
|
+
writeFileSync(versionFile(home), `${version}
|
|
5842
|
+
`, "utf8");
|
|
5843
|
+
steps2.push({ command: label, ok: true, code: 0 });
|
|
5844
|
+
} catch (error) {
|
|
5845
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
5846
|
+
steps2.push({ command: label, ok: false, code: null, output: message });
|
|
5847
|
+
return { ok: false, skipped: false, steps: steps2, message: `could not install into codex: ${message}` };
|
|
5848
|
+
}
|
|
5849
|
+
const notes = [];
|
|
5850
|
+
for (const asset of ["AGENTS.md", path3.join(".codex", "config.toml.example")]) {
|
|
5851
|
+
const from = path3.join(bundle, asset);
|
|
5852
|
+
if (!existsSync3(from)) continue;
|
|
5853
|
+
const to = path3.join(dest, `caddis-${path3.basename(asset)}`);
|
|
5854
|
+
try {
|
|
5855
|
+
cpSync2(from, to);
|
|
5856
|
+
notes.push(path3.basename(to));
|
|
5857
|
+
} catch {
|
|
5858
|
+
}
|
|
5859
|
+
}
|
|
5860
|
+
const extrasNote = options.extras ? " (--extras has no codex bundle yet; core only)" : "";
|
|
5861
|
+
const referenceNote = notes.length ? ` Reference copies beside it: ${notes.join(", ")} \u2014 config.toml is NEVER merged for you.` : "";
|
|
5862
|
+
return {
|
|
5863
|
+
ok: true,
|
|
5864
|
+
skipped: false,
|
|
5865
|
+
steps: steps2,
|
|
5866
|
+
message: `caddis ${version} ${action === "install" ? "installed" : "updated"} in ${shortenHome2(dest)}.${referenceNote}${extrasNote}`
|
|
5867
|
+
};
|
|
5868
|
+
}
|
|
5869
|
+
var codexAdapter = {
|
|
5870
|
+
id: "codex",
|
|
5871
|
+
name: "Codex",
|
|
5872
|
+
supported: true,
|
|
5873
|
+
summary: "copy the caddis skill pool into ~/.codex/skills/caddis/ (config.toml never merged)",
|
|
5874
|
+
detect: detect3,
|
|
5875
|
+
drive: drive3,
|
|
5876
|
+
status: status3
|
|
5877
|
+
};
|
|
5878
|
+
|
|
5879
|
+
// src/agents/copilot.ts
|
|
5880
|
+
import path4 from "path";
|
|
5428
5881
|
|
|
5429
5882
|
// src/agents/stub.ts
|
|
5430
|
-
import { existsSync as
|
|
5883
|
+
import { existsSync as existsSync4 } from "fs";
|
|
5431
5884
|
var NOT_YET_SUPPORTED = "not yet supported (v0.2)";
|
|
5432
5885
|
function createStubAdapter(spec) {
|
|
5433
|
-
async function
|
|
5886
|
+
async function detect4() {
|
|
5434
5887
|
for (const bin of spec.bins) {
|
|
5435
5888
|
const found = await findBin(bin);
|
|
5436
5889
|
if (found) return { present: true, path: found, note: NOT_YET_SUPPORTED };
|
|
5437
5890
|
}
|
|
5438
5891
|
for (const configPath of spec.configPaths) {
|
|
5439
|
-
if (
|
|
5892
|
+
if (existsSync4(configPath)) return { present: true, path: configPath, note: NOT_YET_SUPPORTED };
|
|
5440
5893
|
}
|
|
5441
5894
|
return { present: false, note: `no ${spec.bins.map((b3) => `\`${b3}\``).join(" / ")} binary or config found` };
|
|
5442
5895
|
}
|
|
5443
|
-
async function
|
|
5444
|
-
const detected = await
|
|
5896
|
+
async function status5() {
|
|
5897
|
+
const detected = await detect4();
|
|
5445
5898
|
return {
|
|
5446
5899
|
installed: false,
|
|
5447
5900
|
note: detected.present ? NOT_YET_SUPPORTED : "agent not installed"
|
|
5448
5901
|
};
|
|
5449
5902
|
}
|
|
5450
|
-
async function
|
|
5451
|
-
const detected = await
|
|
5903
|
+
async function drive4(_action, _options) {
|
|
5904
|
+
const detected = await detect4();
|
|
5452
5905
|
return {
|
|
5453
5906
|
ok: true,
|
|
5454
5907
|
skipped: true,
|
|
@@ -5461,23 +5914,13 @@ function createStubAdapter(spec) {
|
|
|
5461
5914
|
name: spec.name,
|
|
5462
5915
|
supported: false,
|
|
5463
5916
|
summary: spec.summary,
|
|
5464
|
-
detect:
|
|
5465
|
-
drive:
|
|
5466
|
-
status:
|
|
5917
|
+
detect: detect4,
|
|
5918
|
+
drive: drive4,
|
|
5919
|
+
status: status5
|
|
5467
5920
|
};
|
|
5468
5921
|
}
|
|
5469
5922
|
|
|
5470
|
-
// src/agents/codex.ts
|
|
5471
|
-
var codexAdapter = createStubAdapter({
|
|
5472
|
-
id: "codex",
|
|
5473
|
-
name: "Codex",
|
|
5474
|
-
bins: ["codex"],
|
|
5475
|
-
configPaths: [path3.join(os2.homedir(), ".codex")],
|
|
5476
|
-
summary: "merge the caddis pool into ~/.codex + AGENTS.md (v0.2)"
|
|
5477
|
-
});
|
|
5478
|
-
|
|
5479
5923
|
// src/agents/copilot.ts
|
|
5480
|
-
import path4 from "path";
|
|
5481
5924
|
var copilotAdapter = createStubAdapter({
|
|
5482
5925
|
id: "copilot",
|
|
5483
5926
|
name: "GitHub Copilot",
|
|
@@ -5531,6 +5974,15 @@ withGlobalFlags(program2.command("init")).description("first run: detect your ag
|
|
|
5531
5974
|
})
|
|
5532
5975
|
);
|
|
5533
5976
|
});
|
|
5977
|
+
withGlobalFlags(program2.command("keys")).description("set up provider API keys for the model lanes (GLM, DeepSeek)").option("--check", "validate configured keys and exit non-zero on failure; never prompts", false).action(async (options) => {
|
|
5978
|
+
const flags = mergeFlags(options);
|
|
5979
|
+
const { keys: keys2 } = await Promise.resolve().then(() => (init_keys(), keys_exports));
|
|
5980
|
+
process.exitCode = await keys2({
|
|
5981
|
+
check: options.check === true,
|
|
5982
|
+
dryRun: flags.dryRun,
|
|
5983
|
+
yes: flags.yes
|
|
5984
|
+
});
|
|
5985
|
+
});
|
|
5534
5986
|
withGlobalFlags(program2.command("update")).description("update every detected agent to the caddis version shipped in this CLI").option("-f, --force", "re-drive agents that already report the shipped version", false).option("--extras", "also install the optional caddis-extras long-tail skills", false).action(async (options) => {
|
|
5535
5987
|
const flags = mergeFlags(options);
|
|
5536
5988
|
const { update: update2 } = await Promise.resolve().then(() => (init_update(), update_exports));
|
|
@@ -5551,8 +6003,8 @@ withGlobalFlags(program2.command("doctor")).description("full health report: eve
|
|
|
5551
6003
|
});
|
|
5552
6004
|
withGlobalFlags(program2.command("status")).description("compact table: cli version, pool version, per-agent version, drift").option("--json", "machine-readable output", false).action(async (options) => {
|
|
5553
6005
|
const flags = mergeFlags(options);
|
|
5554
|
-
const { status:
|
|
5555
|
-
finish(await
|
|
6006
|
+
const { status: status5 } = await Promise.resolve().then(() => (init_status(), status_exports));
|
|
6007
|
+
finish(await status5({ adapters: resolveAdapters(flags), json: options.json }));
|
|
5556
6008
|
});
|
|
5557
6009
|
program2.addHelpText(
|
|
5558
6010
|
"after",
|
|
@@ -5598,8 +6050,8 @@ async function maybeNotify(enabled) {
|
|
|
5598
6050
|
}
|
|
5599
6051
|
async function main() {
|
|
5600
6052
|
if (process.argv.slice(2).length === 0) {
|
|
5601
|
-
const { status:
|
|
5602
|
-
finish(await
|
|
6053
|
+
const { status: status5 } = await Promise.resolve().then(() => (init_status(), status_exports));
|
|
6054
|
+
finish(await status5({ adapters: selectAdapters() }));
|
|
5603
6055
|
await maybeNotify(true);
|
|
5604
6056
|
return;
|
|
5605
6057
|
}
|