@ag-eco/agentplate-cli 0.13.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/LICENSE +21 -0
- package/README.md +462 -0
- package/agents/ap-co-creation.md +90 -0
- package/agents/builder.md +144 -0
- package/agents/coordinator.md +377 -0
- package/agents/lead.md +435 -0
- package/agents/merger.md +164 -0
- package/agents/monitor.md +214 -0
- package/agents/orchestrator.md +239 -0
- package/agents/reviewer.md +140 -0
- package/agents/scout.md +125 -0
- package/agents/supervisor.md +427 -0
- package/package.json +66 -0
- package/src/agents/capabilities.test.ts +85 -0
- package/src/agents/capabilities.ts +125 -0
- package/src/agents/checkpoint.test.ts +88 -0
- package/src/agents/checkpoint.ts +101 -0
- package/src/agents/copilot-hooks-deployer.test.ts +162 -0
- package/src/agents/copilot-hooks-deployer.ts +93 -0
- package/src/agents/guard-rules.test.ts +372 -0
- package/src/agents/guard-rules.ts +97 -0
- package/src/agents/headless-mail-injector.test.ts +709 -0
- package/src/agents/headless-mail-injector.ts +377 -0
- package/src/agents/headless-prompt.test.ts +102 -0
- package/src/agents/headless-prompt.ts +68 -0
- package/src/agents/hooks-deployer.test.ts +3119 -0
- package/src/agents/hooks-deployer.ts +804 -0
- package/src/agents/identity.test.ts +604 -0
- package/src/agents/identity.ts +384 -0
- package/src/agents/lifecycle.test.ts +196 -0
- package/src/agents/lifecycle.ts +183 -0
- package/src/agents/mail-poll-detect.test.ts +153 -0
- package/src/agents/mail-poll-detect.ts +73 -0
- package/src/agents/manifest.test.ts +1026 -0
- package/src/agents/manifest.ts +376 -0
- package/src/agents/overlay.test.ts +1058 -0
- package/src/agents/overlay.ts +490 -0
- package/src/agents/scope-detect.test.ts +190 -0
- package/src/agents/scope-detect.ts +146 -0
- package/src/agents/turn-lock.test.ts +181 -0
- package/src/agents/turn-lock.ts +235 -0
- package/src/agents/turn-runner-dispatch.test.ts +182 -0
- package/src/agents/turn-runner-dispatch.ts +105 -0
- package/src/agents/turn-runner.test.ts +2312 -0
- package/src/agents/turn-runner.ts +1383 -0
- package/src/beads/client.test.ts +217 -0
- package/src/beads/client.ts +230 -0
- package/src/beads/molecules.test.ts +338 -0
- package/src/beads/molecules.ts +198 -0
- package/src/commands/agents.test.ts +328 -0
- package/src/commands/agents.ts +299 -0
- package/src/commands/clean.test.ts +797 -0
- package/src/commands/clean.ts +791 -0
- package/src/commands/completions.test.ts +348 -0
- package/src/commands/completions.ts +981 -0
- package/src/commands/coordinator.test.ts +2975 -0
- package/src/commands/coordinator.ts +1841 -0
- package/src/commands/costs.test.ts +1183 -0
- package/src/commands/costs.ts +599 -0
- package/src/commands/dashboard.test.ts +954 -0
- package/src/commands/dashboard.ts +1212 -0
- package/src/commands/discover.test.ts +288 -0
- package/src/commands/discover.ts +202 -0
- package/src/commands/doctor.test.ts +303 -0
- package/src/commands/doctor.ts +311 -0
- package/src/commands/ecosystem.test.ts +226 -0
- package/src/commands/ecosystem.ts +248 -0
- package/src/commands/errors.test.ts +654 -0
- package/src/commands/errors.ts +197 -0
- package/src/commands/feed.test.ts +709 -0
- package/src/commands/feed.ts +260 -0
- package/src/commands/group.test.ts +475 -0
- package/src/commands/group.ts +546 -0
- package/src/commands/hooks.test.ts +458 -0
- package/src/commands/hooks.ts +263 -0
- package/src/commands/init.test.ts +1011 -0
- package/src/commands/init.ts +967 -0
- package/src/commands/inspect.test.ts +1239 -0
- package/src/commands/inspect.ts +648 -0
- package/src/commands/log.test.ts +1913 -0
- package/src/commands/log.ts +958 -0
- package/src/commands/logs.test.ts +801 -0
- package/src/commands/logs.ts +483 -0
- package/src/commands/mail.test.ts +1501 -0
- package/src/commands/mail.ts +848 -0
- package/src/commands/merge.test.ts +864 -0
- package/src/commands/merge.ts +381 -0
- package/src/commands/metrics.test.ts +458 -0
- package/src/commands/metrics.ts +129 -0
- package/src/commands/monitor.test.ts +191 -0
- package/src/commands/monitor.ts +409 -0
- package/src/commands/nudge.test.ts +579 -0
- package/src/commands/nudge.ts +646 -0
- package/src/commands/orchestrator.ts +42 -0
- package/src/commands/prime.test.ts +612 -0
- package/src/commands/prime.ts +359 -0
- package/src/commands/replay.test.ts +757 -0
- package/src/commands/replay.ts +231 -0
- package/src/commands/run.test.ts +469 -0
- package/src/commands/run.ts +353 -0
- package/src/commands/serve/agent-actions.test.ts +210 -0
- package/src/commands/serve/agent-actions.ts +192 -0
- package/src/commands/serve/build.test.ts +202 -0
- package/src/commands/serve/build.ts +206 -0
- package/src/commands/serve/coordinator-actions.test.ts +339 -0
- package/src/commands/serve/coordinator-actions.ts +410 -0
- package/src/commands/serve/dev.test.ts +168 -0
- package/src/commands/serve/dev.ts +117 -0
- package/src/commands/serve/mail-actions.test.ts +312 -0
- package/src/commands/serve/mail-actions.ts +167 -0
- package/src/commands/serve/rest.test.ts +1680 -0
- package/src/commands/serve/rest.ts +1130 -0
- package/src/commands/serve/static.ts +51 -0
- package/src/commands/serve/ws.test.ts +361 -0
- package/src/commands/serve/ws.ts +332 -0
- package/src/commands/serve.test.ts +459 -0
- package/src/commands/serve.ts +654 -0
- package/src/commands/sling.test.ts +1583 -0
- package/src/commands/sling.ts +1351 -0
- package/src/commands/spec.test.ts +179 -0
- package/src/commands/spec.ts +105 -0
- package/src/commands/status.test.ts +614 -0
- package/src/commands/status.ts +403 -0
- package/src/commands/stop.test.ts +964 -0
- package/src/commands/stop.ts +319 -0
- package/src/commands/supervisor.test.ts +185 -0
- package/src/commands/supervisor.ts +537 -0
- package/src/commands/trace.test.ts +762 -0
- package/src/commands/trace.ts +205 -0
- package/src/commands/update.test.ts +466 -0
- package/src/commands/update.ts +263 -0
- package/src/commands/upgrade.test.ts +48 -0
- package/src/commands/upgrade.ts +240 -0
- package/src/commands/watch.test.ts +257 -0
- package/src/commands/watch.ts +308 -0
- package/src/commands/worktree.test.ts +1297 -0
- package/src/commands/worktree.ts +451 -0
- package/src/config.test.ts +1535 -0
- package/src/config.ts +1064 -0
- package/src/doctor/agents.test.ts +523 -0
- package/src/doctor/agents.ts +399 -0
- package/src/doctor/config-check.test.ts +191 -0
- package/src/doctor/config-check.ts +183 -0
- package/src/doctor/consistency.test.ts +807 -0
- package/src/doctor/consistency.ts +347 -0
- package/src/doctor/databases.test.ts +350 -0
- package/src/doctor/databases.ts +243 -0
- package/src/doctor/dependencies.test.ts +296 -0
- package/src/doctor/dependencies.ts +272 -0
- package/src/doctor/ecosystem.test.ts +308 -0
- package/src/doctor/ecosystem.ts +156 -0
- package/src/doctor/logs.test.ts +253 -0
- package/src/doctor/logs.ts +295 -0
- package/src/doctor/merge-queue.test.ts +315 -0
- package/src/doctor/merge-queue.ts +167 -0
- package/src/doctor/providers.test.ts +409 -0
- package/src/doctor/providers.ts +250 -0
- package/src/doctor/serve.test.ts +95 -0
- package/src/doctor/serve.ts +86 -0
- package/src/doctor/structure.test.ts +423 -0
- package/src/doctor/structure.ts +285 -0
- package/src/doctor/types.ts +43 -0
- package/src/doctor/version.test.ts +241 -0
- package/src/doctor/version.ts +132 -0
- package/src/doctor/watchdog.test.ts +167 -0
- package/src/doctor/watchdog.ts +214 -0
- package/src/e2e/init-sling-lifecycle.test.ts +283 -0
- package/src/errors.test.ts +350 -0
- package/src/errors.ts +217 -0
- package/src/events/store.test.ts +660 -0
- package/src/events/store.ts +369 -0
- package/src/events/tailer.test.ts +719 -0
- package/src/events/tailer.ts +332 -0
- package/src/events/tool-filter.test.ts +330 -0
- package/src/events/tool-filter.ts +126 -0
- package/src/index.ts +533 -0
- package/src/insights/analyzer.test.ts +466 -0
- package/src/insights/analyzer.ts +203 -0
- package/src/insights/quality-gates.test.ts +141 -0
- package/src/insights/quality-gates.ts +156 -0
- package/src/json.test.ts +72 -0
- package/src/json.ts +53 -0
- package/src/loam/client.test.ts +752 -0
- package/src/loam/client.ts +664 -0
- package/src/logging/color.test.ts +252 -0
- package/src/logging/color.ts +105 -0
- package/src/logging/format.test.ts +110 -0
- package/src/logging/format.ts +255 -0
- package/src/logging/logger.test.ts +814 -0
- package/src/logging/logger.ts +266 -0
- package/src/logging/reporter.test.ts +259 -0
- package/src/logging/reporter.ts +110 -0
- package/src/logging/sanitizer.test.ts +190 -0
- package/src/logging/sanitizer.ts +57 -0
- package/src/logging/theme.ts +140 -0
- package/src/mail/broadcast.test.ts +204 -0
- package/src/mail/broadcast.ts +92 -0
- package/src/mail/client.test.ts +774 -0
- package/src/mail/client.ts +236 -0
- package/src/mail/store.test.ts +898 -0
- package/src/mail/store.ts +425 -0
- package/src/merge/lock.test.ts +149 -0
- package/src/merge/lock.ts +140 -0
- package/src/merge/predict.test.ts +387 -0
- package/src/merge/predict.ts +249 -0
- package/src/merge/queue.test.ts +426 -0
- package/src/merge/queue.ts +246 -0
- package/src/merge/resolver.test.ts +1993 -0
- package/src/merge/resolver.ts +926 -0
- package/src/metrics/pricing.test.ts +258 -0
- package/src/metrics/pricing.ts +135 -0
- package/src/metrics/store.test.ts +978 -0
- package/src/metrics/store.ts +501 -0
- package/src/metrics/summary.test.ts +398 -0
- package/src/metrics/summary.ts +178 -0
- package/src/metrics/transcript.test.ts +483 -0
- package/src/metrics/transcript.ts +114 -0
- package/src/runtimes/__fixtures__/claude-stream-fixture.ts +22 -0
- package/src/runtimes/aider.test.ts +124 -0
- package/src/runtimes/aider.ts +147 -0
- package/src/runtimes/amp.test.ts +164 -0
- package/src/runtimes/amp.ts +154 -0
- package/src/runtimes/claude.test.ts +1474 -0
- package/src/runtimes/claude.ts +579 -0
- package/src/runtimes/codex.test.ts +805 -0
- package/src/runtimes/codex.ts +273 -0
- package/src/runtimes/connections.test.ts +214 -0
- package/src/runtimes/connections.ts +103 -0
- package/src/runtimes/copilot.test.ts +707 -0
- package/src/runtimes/copilot.ts +316 -0
- package/src/runtimes/cursor.test.ts +497 -0
- package/src/runtimes/cursor.ts +205 -0
- package/src/runtimes/gemini.test.ts +537 -0
- package/src/runtimes/gemini.ts +243 -0
- package/src/runtimes/goose.test.ts +133 -0
- package/src/runtimes/goose.ts +157 -0
- package/src/runtimes/headless-connection.test.ts +264 -0
- package/src/runtimes/headless-connection.ts +158 -0
- package/src/runtimes/opencode.test.ts +325 -0
- package/src/runtimes/opencode.ts +188 -0
- package/src/runtimes/pi-guards.test.ts +486 -0
- package/src/runtimes/pi-guards.ts +367 -0
- package/src/runtimes/pi.test.ts +789 -0
- package/src/runtimes/pi.ts +305 -0
- package/src/runtimes/registry.test.ts +196 -0
- package/src/runtimes/registry.ts +99 -0
- package/src/runtimes/sapling.test.ts +1267 -0
- package/src/runtimes/sapling.ts +710 -0
- package/src/runtimes/types.ts +266 -0
- package/src/schema-consistency.test.ts +246 -0
- package/src/sessions/compat.test.ts +281 -0
- package/src/sessions/compat.ts +105 -0
- package/src/sessions/store.test.ts +1748 -0
- package/src/sessions/store.ts +858 -0
- package/src/test-helpers.test.ts +124 -0
- package/src/test-helpers.ts +145 -0
- package/src/test-setup.test.ts +31 -0
- package/src/test-setup.ts +28 -0
- package/src/tools/loam/api.ts +368 -0
- package/src/tools/loam/cli.ts +278 -0
- package/src/tools/loam/commands/add.ts +52 -0
- package/src/tools/loam/commands/archive.ts +214 -0
- package/src/tools/loam/commands/audit.ts +276 -0
- package/src/tools/loam/commands/compact.ts +1062 -0
- package/src/tools/loam/commands/completions.ts +79 -0
- package/src/tools/loam/commands/config.ts +381 -0
- package/src/tools/loam/commands/delete-domain.ts +121 -0
- package/src/tools/loam/commands/delete.ts +316 -0
- package/src/tools/loam/commands/diff.ts +200 -0
- package/src/tools/loam/commands/doctor.ts +1113 -0
- package/src/tools/loam/commands/edit.ts +226 -0
- package/src/tools/loam/commands/init.ts +31 -0
- package/src/tools/loam/commands/learn.ts +179 -0
- package/src/tools/loam/commands/move.ts +323 -0
- package/src/tools/loam/commands/onboard.ts +374 -0
- package/src/tools/loam/commands/outcome.ts +185 -0
- package/src/tools/loam/commands/prime.ts +688 -0
- package/src/tools/loam/commands/prune.ts +614 -0
- package/src/tools/loam/commands/query.ts +218 -0
- package/src/tools/loam/commands/rank.ts +180 -0
- package/src/tools/loam/commands/ready.ts +189 -0
- package/src/tools/loam/commands/record.ts +1210 -0
- package/src/tools/loam/commands/restore.ts +166 -0
- package/src/tools/loam/commands/search.ts +327 -0
- package/src/tools/loam/commands/setup.ts +887 -0
- package/src/tools/loam/commands/status.ts +103 -0
- package/src/tools/loam/commands/sync.ts +298 -0
- package/src/tools/loam/commands/update.ts +19 -0
- package/src/tools/loam/commands/upgrade.ts +93 -0
- package/src/tools/loam/commands/validate.ts +190 -0
- package/src/tools/loam/index.ts +62 -0
- package/src/tools/loam/log.ts +127 -0
- package/src/tools/loam/registry/builtins.ts +409 -0
- package/src/tools/loam/registry/custom.ts +431 -0
- package/src/tools/loam/registry/init.ts +55 -0
- package/src/tools/loam/registry/template.ts +40 -0
- package/src/tools/loam/registry/type-registry.ts +113 -0
- package/src/tools/loam/schemas/config-schema.ts +489 -0
- package/src/tools/loam/schemas/config.ts +245 -0
- package/src/tools/loam/schemas/index.ts +18 -0
- package/src/tools/loam/schemas/record-schema.ts +191 -0
- package/src/tools/loam/schemas/record.ts +115 -0
- package/src/tools/loam/utils/active-work.ts +205 -0
- package/src/tools/loam/utils/anchor-validity.ts +80 -0
- package/src/tools/loam/utils/archive.ts +146 -0
- package/src/tools/loam/utils/audit.ts +667 -0
- package/src/tools/loam/utils/bm25.ts +238 -0
- package/src/tools/loam/utils/budget.ts +142 -0
- package/src/tools/loam/utils/config.ts +344 -0
- package/src/tools/loam/utils/dir-anchors.ts +62 -0
- package/src/tools/loam/utils/domain-rules.ts +114 -0
- package/src/tools/loam/utils/expertise.ts +393 -0
- package/src/tools/loam/utils/format-helpers.ts +96 -0
- package/src/tools/loam/utils/format.ts +1234 -0
- package/src/tools/loam/utils/git-context.ts +50 -0
- package/src/tools/loam/utils/git.ts +183 -0
- package/src/tools/loam/utils/hooks.ts +299 -0
- package/src/tools/loam/utils/index.ts +52 -0
- package/src/tools/loam/utils/json-output.ts +13 -0
- package/src/tools/loam/utils/lock.ts +76 -0
- package/src/tools/loam/utils/markers.ts +48 -0
- package/src/tools/loam/utils/numeric-flags.ts +20 -0
- package/src/tools/loam/utils/palette.ts +44 -0
- package/src/tools/loam/utils/prime-ranking.ts +135 -0
- package/src/tools/loam/utils/recipe-discovery.ts +195 -0
- package/src/tools/loam/utils/runtime-flags.ts +28 -0
- package/src/tools/loam/utils/scoring.ts +94 -0
- package/src/tools/loam/utils/version.ts +116 -0
- package/src/tools/sprout/commands/block.ts +64 -0
- package/src/tools/sprout/commands/blocked.ts +86 -0
- package/src/tools/sprout/commands/close.ts +129 -0
- package/src/tools/sprout/commands/completions.ts +198 -0
- package/src/tools/sprout/commands/config.ts +238 -0
- package/src/tools/sprout/commands/create.ts +164 -0
- package/src/tools/sprout/commands/dep.ts +148 -0
- package/src/tools/sprout/commands/doctor.ts +979 -0
- package/src/tools/sprout/commands/init.ts +83 -0
- package/src/tools/sprout/commands/label.ts +178 -0
- package/src/tools/sprout/commands/list.ts +210 -0
- package/src/tools/sprout/commands/migrate.ts +133 -0
- package/src/tools/sprout/commands/onboard.ts +207 -0
- package/src/tools/sprout/commands/plan-show.ts +278 -0
- package/src/tools/sprout/commands/plan.ts +2526 -0
- package/src/tools/sprout/commands/prime.ts +399 -0
- package/src/tools/sprout/commands/ready.ts +245 -0
- package/src/tools/sprout/commands/search.ts +221 -0
- package/src/tools/sprout/commands/show.ts +277 -0
- package/src/tools/sprout/commands/stats.ts +146 -0
- package/src/tools/sprout/commands/sync.ts +134 -0
- package/src/tools/sprout/commands/tpl.ts +364 -0
- package/src/tools/sprout/commands/unblock.ts +115 -0
- package/src/tools/sprout/commands/update.ts +257 -0
- package/src/tools/sprout/commands/upgrade.ts +91 -0
- package/src/tools/sprout/config-schema.ts +152 -0
- package/src/tools/sprout/config.ts +355 -0
- package/src/tools/sprout/filter.ts +107 -0
- package/src/tools/sprout/format.ts +43 -0
- package/src/tools/sprout/id.ts +22 -0
- package/src/tools/sprout/index.ts +204 -0
- package/src/tools/sprout/log.ts +76 -0
- package/src/tools/sprout/markers.ts +22 -0
- package/src/tools/sprout/output.ts +121 -0
- package/src/tools/sprout/plan-backref.ts +93 -0
- package/src/tools/sprout/plan-context.ts +81 -0
- package/src/tools/sprout/plan-domain.ts +139 -0
- package/src/tools/sprout/plan-lifecycle.ts +65 -0
- package/src/tools/sprout/plan-loam.ts +207 -0
- package/src/tools/sprout/plan-schema.ts +209 -0
- package/src/tools/sprout/sort.ts +31 -0
- package/src/tools/sprout/store.ts +172 -0
- package/src/tools/sprout/types.ts +118 -0
- package/src/tools/sprout/validation.ts +119 -0
- package/src/tools/sprout/version.ts +1 -0
- package/src/tools/sprout/yaml.ts +387 -0
- package/src/tools/trellis/commands/archive.ts +87 -0
- package/src/tools/trellis/commands/completions.ts +610 -0
- package/src/tools/trellis/commands/config.ts +382 -0
- package/src/tools/trellis/commands/create.ts +252 -0
- package/src/tools/trellis/commands/diff.ts +150 -0
- package/src/tools/trellis/commands/doctor.ts +771 -0
- package/src/tools/trellis/commands/emit.ts +365 -0
- package/src/tools/trellis/commands/history.ts +83 -0
- package/src/tools/trellis/commands/import.ts +198 -0
- package/src/tools/trellis/commands/init.ts +81 -0
- package/src/tools/trellis/commands/list.ts +103 -0
- package/src/tools/trellis/commands/onboard.ts +156 -0
- package/src/tools/trellis/commands/pin.ts +172 -0
- package/src/tools/trellis/commands/prime.ts +193 -0
- package/src/tools/trellis/commands/render.ts +122 -0
- package/src/tools/trellis/commands/schema.ts +353 -0
- package/src/tools/trellis/commands/show.ts +115 -0
- package/src/tools/trellis/commands/stats.ts +65 -0
- package/src/tools/trellis/commands/sync.ts +112 -0
- package/src/tools/trellis/commands/tree.ts +123 -0
- package/src/tools/trellis/commands/update.ts +330 -0
- package/src/tools/trellis/commands/upgrade.ts +95 -0
- package/src/tools/trellis/commands/validate.ts +166 -0
- package/src/tools/trellis/config-schema.ts +81 -0
- package/src/tools/trellis/config.ts +108 -0
- package/src/tools/trellis/frontmatter.ts +348 -0
- package/src/tools/trellis/id.ts +24 -0
- package/src/tools/trellis/index.ts +209 -0
- package/src/tools/trellis/markers.ts +28 -0
- package/src/tools/trellis/output.ts +84 -0
- package/src/tools/trellis/render.ts +212 -0
- package/src/tools/trellis/store.ts +144 -0
- package/src/tools/trellis/types.ts +82 -0
- package/src/tools/trellis/validate.ts +199 -0
- package/src/tools/trellis/yaml.ts +309 -0
- package/src/tracker/beads.test.ts +454 -0
- package/src/tracker/beads.ts +56 -0
- package/src/tracker/factory.test.ts +90 -0
- package/src/tracker/factory.ts +65 -0
- package/src/tracker/sprout.test.ts +461 -0
- package/src/tracker/sprout.ts +182 -0
- package/src/tracker/types.ts +52 -0
- package/src/trellis/client.test.ts +107 -0
- package/src/trellis/client.ts +179 -0
- package/src/types.ts +970 -0
- package/src/utils/bin.test.ts +10 -0
- package/src/utils/bin.ts +37 -0
- package/src/utils/browser.test.ts +49 -0
- package/src/utils/browser.ts +48 -0
- package/src/utils/fs.test.ts +119 -0
- package/src/utils/fs.ts +62 -0
- package/src/utils/pid.test.ts +152 -0
- package/src/utils/pid.ts +130 -0
- package/src/utils/process-scan.test.ts +53 -0
- package/src/utils/process-scan.ts +76 -0
- package/src/utils/time.test.ts +43 -0
- package/src/utils/time.ts +37 -0
- package/src/utils/version.test.ts +33 -0
- package/src/utils/version.ts +70 -0
- package/src/version.ts +5 -0
- package/src/watchdog/daemon.test.ts +3721 -0
- package/src/watchdog/daemon.ts +1257 -0
- package/src/watchdog/health.test.ts +830 -0
- package/src/watchdog/health.ts +434 -0
- package/src/watchdog/triage.test.ts +205 -0
- package/src/watchdog/triage.ts +205 -0
- package/src/worktree/manager.test.ts +720 -0
- package/src/worktree/manager.ts +405 -0
- package/src/worktree/process.test.ts +172 -0
- package/src/worktree/process.ts +131 -0
- package/src/worktree/tmux.test.ts +1616 -0
- package/src/worktree/tmux.ts +721 -0
- package/templates/CLAUDE.md.tmpl +100 -0
- package/templates/copilot-hooks.json.tmpl +13 -0
- package/templates/hooks.json.tmpl +109 -0
- package/templates/overlay.md.tmpl +88 -0
- package/ui/dist/apple-touch-icon-bdy6teep.png +0 -0
- package/ui/dist/chunk-8s31f05k.css +1 -0
- package/ui/dist/chunk-vm5rz679.js +300 -0
- package/ui/dist/favicon-nzb39vza.svg +4 -0
- package/ui/dist/index.html +17 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI command: ap update [--agents] [--manifest] [--hooks] [--dry-run] [--json]
|
|
3
|
+
*
|
|
4
|
+
* Refreshes .agentplate/ managed files from the installed npm package without
|
|
5
|
+
* requiring a full `ap init`. Distinct from `ap upgrade` (which updates the
|
|
6
|
+
* npm package itself).
|
|
7
|
+
*
|
|
8
|
+
* Managed files refreshed:
|
|
9
|
+
* - Agent definitions (.agentplate/agent-defs/*.md)
|
|
10
|
+
* - agent-manifest.json
|
|
11
|
+
* - hooks.json
|
|
12
|
+
* - .gitignore
|
|
13
|
+
* - README.md
|
|
14
|
+
*
|
|
15
|
+
* Does NOT touch: config.yaml, config.local.yaml, SQLite databases,
|
|
16
|
+
* agents/, worktrees/, specs/, logs/, or .claude/settings.local.json.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { mkdir, readdir } from "node:fs/promises";
|
|
20
|
+
import { join } from "node:path";
|
|
21
|
+
import { Command } from "commander";
|
|
22
|
+
import { ValidationError } from "../errors.ts";
|
|
23
|
+
import { jsonOutput } from "../json.ts";
|
|
24
|
+
import { printHint, printSuccess } from "../logging/color.ts";
|
|
25
|
+
import {
|
|
26
|
+
AGENTPLATE_GITIGNORE,
|
|
27
|
+
AGENTPLATE_README,
|
|
28
|
+
buildAgentManifest,
|
|
29
|
+
buildHooksJson,
|
|
30
|
+
writeAgentplateGitignore,
|
|
31
|
+
writeAgentplateReadme,
|
|
32
|
+
} from "./init.ts";
|
|
33
|
+
|
|
34
|
+
export interface UpdateOptions {
|
|
35
|
+
agents?: boolean;
|
|
36
|
+
manifest?: boolean;
|
|
37
|
+
hooks?: boolean;
|
|
38
|
+
dryRun?: boolean;
|
|
39
|
+
json?: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Agent def files to exclude (deprecated). */
|
|
43
|
+
const EXCLUDED_AGENT_DEFS = new Set(["supervisor.md"]);
|
|
44
|
+
|
|
45
|
+
interface UpdateResult {
|
|
46
|
+
agentDefs: { updated: string[]; unchanged: string[] };
|
|
47
|
+
manifest: { updated: boolean };
|
|
48
|
+
hooks: { updated: boolean };
|
|
49
|
+
gitignore: { updated: boolean };
|
|
50
|
+
readme: { updated: boolean };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Entry point for `ap update [flags]`.
|
|
55
|
+
*/
|
|
56
|
+
export async function executeUpdate(opts: UpdateOptions): Promise<void> {
|
|
57
|
+
const json = opts.json ?? false;
|
|
58
|
+
const dryRun = opts.dryRun ?? false;
|
|
59
|
+
|
|
60
|
+
const projectRoot = process.cwd();
|
|
61
|
+
const agentplateDir = join(projectRoot, ".agentplate");
|
|
62
|
+
|
|
63
|
+
// Verify .agentplate/config.yaml exists (already initialized)
|
|
64
|
+
const configFile = Bun.file(join(agentplateDir, "config.yaml"));
|
|
65
|
+
if (!(await configFile.exists())) {
|
|
66
|
+
throw new ValidationError("Not initialized. Run 'ap init' first to set up .agentplate/.", {
|
|
67
|
+
field: "config.yaml",
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Determine what to refresh. No flags = refresh all.
|
|
72
|
+
const hasGranularFlags = opts.agents || opts.manifest || opts.hooks;
|
|
73
|
+
const doAgents = hasGranularFlags ? (opts.agents ?? false) : true;
|
|
74
|
+
const doManifest = hasGranularFlags ? (opts.manifest ?? false) : true;
|
|
75
|
+
const doHooks = hasGranularFlags ? (opts.hooks ?? false) : true;
|
|
76
|
+
const doGitignore = !hasGranularFlags;
|
|
77
|
+
const doReadme = !hasGranularFlags;
|
|
78
|
+
|
|
79
|
+
const result: UpdateResult = {
|
|
80
|
+
agentDefs: { updated: [], unchanged: [] },
|
|
81
|
+
manifest: { updated: false },
|
|
82
|
+
hooks: { updated: false },
|
|
83
|
+
gitignore: { updated: false },
|
|
84
|
+
readme: { updated: false },
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// 1. Refresh agent definitions
|
|
88
|
+
if (doAgents) {
|
|
89
|
+
const sourceDir = join(import.meta.dir, "..", "..", "agents");
|
|
90
|
+
const targetDir = join(agentplateDir, "agent-defs");
|
|
91
|
+
|
|
92
|
+
await mkdir(targetDir, { recursive: true });
|
|
93
|
+
|
|
94
|
+
const sourceFiles = await readdir(sourceDir);
|
|
95
|
+
for (const fileName of sourceFiles) {
|
|
96
|
+
if (!fileName.endsWith(".md")) continue;
|
|
97
|
+
if (EXCLUDED_AGENT_DEFS.has(fileName)) continue;
|
|
98
|
+
|
|
99
|
+
const sourceContent = await Bun.file(join(sourceDir, fileName)).text();
|
|
100
|
+
const targetPath = join(targetDir, fileName);
|
|
101
|
+
const targetFile = Bun.file(targetPath);
|
|
102
|
+
|
|
103
|
+
let needsUpdate = true;
|
|
104
|
+
if (await targetFile.exists()) {
|
|
105
|
+
const existing = await targetFile.text();
|
|
106
|
+
if (existing === sourceContent) {
|
|
107
|
+
needsUpdate = false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (needsUpdate) {
|
|
112
|
+
if (!dryRun) {
|
|
113
|
+
await Bun.write(targetPath, sourceContent);
|
|
114
|
+
}
|
|
115
|
+
result.agentDefs.updated.push(fileName);
|
|
116
|
+
} else {
|
|
117
|
+
result.agentDefs.unchanged.push(fileName);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// 2. Refresh agent-manifest.json
|
|
123
|
+
if (doManifest) {
|
|
124
|
+
const manifestPath = join(agentplateDir, "agent-manifest.json");
|
|
125
|
+
const newContent = `${JSON.stringify(buildAgentManifest(), null, "\t")}\n`;
|
|
126
|
+
const manifestFile = Bun.file(manifestPath);
|
|
127
|
+
|
|
128
|
+
let needsUpdate = true;
|
|
129
|
+
if (await manifestFile.exists()) {
|
|
130
|
+
const existing = await manifestFile.text();
|
|
131
|
+
if (existing === newContent) {
|
|
132
|
+
needsUpdate = false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (needsUpdate) {
|
|
137
|
+
if (!dryRun) {
|
|
138
|
+
await Bun.write(manifestPath, newContent);
|
|
139
|
+
}
|
|
140
|
+
result.manifest.updated = true;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// 3. Refresh hooks.json
|
|
145
|
+
if (doHooks) {
|
|
146
|
+
const hooksPath = join(agentplateDir, "hooks.json");
|
|
147
|
+
const newContent = buildHooksJson();
|
|
148
|
+
const hooksFile = Bun.file(hooksPath);
|
|
149
|
+
|
|
150
|
+
let needsUpdate = true;
|
|
151
|
+
if (await hooksFile.exists()) {
|
|
152
|
+
const existing = await hooksFile.text();
|
|
153
|
+
if (existing === newContent) {
|
|
154
|
+
needsUpdate = false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (needsUpdate) {
|
|
159
|
+
if (!dryRun) {
|
|
160
|
+
await Bun.write(hooksPath, newContent);
|
|
161
|
+
}
|
|
162
|
+
result.hooks.updated = true;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// 4. Refresh .gitignore
|
|
167
|
+
if (doGitignore) {
|
|
168
|
+
const gitignorePath = join(agentplateDir, ".gitignore");
|
|
169
|
+
const gitignoreFile = Bun.file(gitignorePath);
|
|
170
|
+
|
|
171
|
+
let needsUpdate = true;
|
|
172
|
+
if (await gitignoreFile.exists()) {
|
|
173
|
+
const existing = await gitignoreFile.text();
|
|
174
|
+
if (existing === AGENTPLATE_GITIGNORE) {
|
|
175
|
+
needsUpdate = false;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (needsUpdate) {
|
|
180
|
+
if (!dryRun) {
|
|
181
|
+
await writeAgentplateGitignore(agentplateDir);
|
|
182
|
+
}
|
|
183
|
+
result.gitignore.updated = true;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// 5. Refresh README.md
|
|
188
|
+
if (doReadme) {
|
|
189
|
+
const readmePath = join(agentplateDir, "README.md");
|
|
190
|
+
const readmeFile = Bun.file(readmePath);
|
|
191
|
+
|
|
192
|
+
let needsUpdate = true;
|
|
193
|
+
if (await readmeFile.exists()) {
|
|
194
|
+
const existing = await readmeFile.text();
|
|
195
|
+
if (existing === AGENTPLATE_README) {
|
|
196
|
+
needsUpdate = false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (needsUpdate) {
|
|
201
|
+
if (!dryRun) {
|
|
202
|
+
await writeAgentplateReadme(agentplateDir);
|
|
203
|
+
}
|
|
204
|
+
result.readme.updated = true;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Output
|
|
209
|
+
if (json) {
|
|
210
|
+
jsonOutput("update", { dryRun, ...result });
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const prefix = dryRun ? "Would update" : "Updated";
|
|
215
|
+
let anyChanged = false;
|
|
216
|
+
|
|
217
|
+
if (result.agentDefs.updated.length > 0) {
|
|
218
|
+
anyChanged = true;
|
|
219
|
+
for (const f of result.agentDefs.updated) {
|
|
220
|
+
printSuccess(prefix, `agent-defs/${f}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (result.manifest.updated) {
|
|
225
|
+
anyChanged = true;
|
|
226
|
+
printSuccess(prefix, "agent-manifest.json");
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (result.hooks.updated) {
|
|
230
|
+
anyChanged = true;
|
|
231
|
+
printSuccess(prefix, "hooks.json");
|
|
232
|
+
if (!dryRun) {
|
|
233
|
+
printHint("If hooks are deployed, run 'ap hooks install --force' to redeploy");
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (result.gitignore.updated) {
|
|
238
|
+
anyChanged = true;
|
|
239
|
+
printSuccess(prefix, ".gitignore");
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (result.readme.updated) {
|
|
243
|
+
anyChanged = true;
|
|
244
|
+
printSuccess(prefix, "README.md");
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (!anyChanged) {
|
|
248
|
+
printSuccess("Already up to date");
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export function createUpdateCommand(): Command {
|
|
253
|
+
return new Command("update")
|
|
254
|
+
.description("Refresh .agentplate/ managed files from the installed package")
|
|
255
|
+
.option("--agents", "Refresh agent definition files only")
|
|
256
|
+
.option("--manifest", "Refresh agent-manifest.json only")
|
|
257
|
+
.option("--hooks", "Refresh hooks.json only")
|
|
258
|
+
.option("--dry-run", "Show what would change without writing")
|
|
259
|
+
.option("--json", "Output as JSON")
|
|
260
|
+
.action(async (opts: UpdateOptions) => {
|
|
261
|
+
await executeUpdate(opts);
|
|
262
|
+
});
|
|
263
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the ap upgrade command.
|
|
3
|
+
*
|
|
4
|
+
* Structural tests for CLI registration and option parsing.
|
|
5
|
+
* Network calls and subprocess execution happen via real implementations;
|
|
6
|
+
* this file tests command structure and output format rather than side effects.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { describe, expect, test } from "bun:test";
|
|
10
|
+
import { createUpgradeCommand } from "./upgrade.ts";
|
|
11
|
+
|
|
12
|
+
describe("createUpgradeCommand — CLI structure", () => {
|
|
13
|
+
test("command has correct name", () => {
|
|
14
|
+
const cmd = createUpgradeCommand();
|
|
15
|
+
expect(cmd.name()).toBe("upgrade");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
test("description mentions agentplate", () => {
|
|
19
|
+
const cmd = createUpgradeCommand();
|
|
20
|
+
expect(cmd.description().toLowerCase()).toContain("agentplate");
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test("has --check option", () => {
|
|
24
|
+
const cmd = createUpgradeCommand();
|
|
25
|
+
const optionNames = cmd.options.map((o) => o.long);
|
|
26
|
+
expect(optionNames).toContain("--check");
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("has --json option", () => {
|
|
30
|
+
const cmd = createUpgradeCommand();
|
|
31
|
+
const optionNames = cmd.options.map((o) => o.long);
|
|
32
|
+
expect(optionNames).toContain("--json");
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test("has --all option", () => {
|
|
36
|
+
const cmd = createUpgradeCommand();
|
|
37
|
+
const optionNames = cmd.options.map((o) => o.long);
|
|
38
|
+
expect(optionNames).toContain("--all");
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test("returns a Command instance", () => {
|
|
42
|
+
const cmd = createUpgradeCommand();
|
|
43
|
+
// Commander Command instances have a .parse method
|
|
44
|
+
expect(typeof cmd.parse).toBe("function");
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// getCurrentVersion and fetchLatestVersion tests moved to src/utils/version.test.ts
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI command: ap upgrade [--check] [--all] [--json]
|
|
3
|
+
*
|
|
4
|
+
* Upgrades agentplate (and optionally all ag-eco tools) to their latest npm versions.
|
|
5
|
+
* --check: Compare current vs latest without installing.
|
|
6
|
+
* --all: Upgrade all 4 ecosystem tools (agentplate, loam, sprout, trellis).
|
|
7
|
+
* --json: Output result as JSON envelope.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Command } from "commander";
|
|
11
|
+
import { jsonError, jsonOutput } from "../json.ts";
|
|
12
|
+
import { muted, printError, printHint, printSuccess, printWarning } from "../logging/color.ts";
|
|
13
|
+
import { fetchLatestVersion, getCurrentVersion } from "../utils/version.ts";
|
|
14
|
+
|
|
15
|
+
const AGENTPLATE_PACKAGE = "@ag-eco/agentplate-cli";
|
|
16
|
+
|
|
17
|
+
// loam/sprout/trellis are now bundled into @ag-eco/agentplate-cli (their bins
|
|
18
|
+
// lm/sr/tl ship from this package), so there is a single package to upgrade.
|
|
19
|
+
const ALL_PACKAGES = ["@ag-eco/agentplate-cli"] as const;
|
|
20
|
+
|
|
21
|
+
export interface UpgradeOptions {
|
|
22
|
+
check?: boolean;
|
|
23
|
+
all?: boolean;
|
|
24
|
+
json?: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async function runInstall(packageName: string): Promise<number> {
|
|
28
|
+
const proc = Bun.spawn(["bun", "install", "-g", `${packageName}@latest`], {
|
|
29
|
+
stdout: "inherit",
|
|
30
|
+
stderr: "inherit",
|
|
31
|
+
});
|
|
32
|
+
return proc.exited;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
interface PackageResult {
|
|
36
|
+
package: string;
|
|
37
|
+
current: string;
|
|
38
|
+
latest: string;
|
|
39
|
+
upToDate: boolean;
|
|
40
|
+
updated: boolean;
|
|
41
|
+
error?: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async function upgradePackage(packageName: string): Promise<PackageResult> {
|
|
45
|
+
let latest: string;
|
|
46
|
+
try {
|
|
47
|
+
latest = await fetchLatestVersion(packageName);
|
|
48
|
+
} catch (err) {
|
|
49
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
50
|
+
return {
|
|
51
|
+
package: packageName,
|
|
52
|
+
current: "unknown",
|
|
53
|
+
latest: "unknown",
|
|
54
|
+
upToDate: false,
|
|
55
|
+
updated: false,
|
|
56
|
+
error,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const exitCode = await runInstall(packageName);
|
|
61
|
+
if (exitCode !== 0) {
|
|
62
|
+
return {
|
|
63
|
+
package: packageName,
|
|
64
|
+
current: "unknown",
|
|
65
|
+
latest,
|
|
66
|
+
upToDate: false,
|
|
67
|
+
updated: false,
|
|
68
|
+
error: `bun install failed with exit code ${exitCode}`,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return { package: packageName, current: "unknown", latest, upToDate: false, updated: true };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async function executeUpgradeSingle(opts: UpgradeOptions): Promise<void> {
|
|
75
|
+
const json = opts.json ?? false;
|
|
76
|
+
const checkOnly = opts.check ?? false;
|
|
77
|
+
|
|
78
|
+
let current: string;
|
|
79
|
+
let latest: string;
|
|
80
|
+
try {
|
|
81
|
+
[current, latest] = await Promise.all([
|
|
82
|
+
getCurrentVersion(),
|
|
83
|
+
fetchLatestVersion(AGENTPLATE_PACKAGE),
|
|
84
|
+
]);
|
|
85
|
+
} catch (err) {
|
|
86
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
87
|
+
if (json) {
|
|
88
|
+
jsonError("upgrade", msg);
|
|
89
|
+
} else {
|
|
90
|
+
printError("Failed to check for updates", msg);
|
|
91
|
+
}
|
|
92
|
+
process.exitCode = 1;
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const upToDate = current === latest;
|
|
97
|
+
|
|
98
|
+
if (checkOnly) {
|
|
99
|
+
if (json) {
|
|
100
|
+
jsonOutput("upgrade", { current, latest, upToDate });
|
|
101
|
+
} else if (upToDate) {
|
|
102
|
+
printSuccess("Already up to date", current);
|
|
103
|
+
} else {
|
|
104
|
+
printWarning(`Update available: ${current} → ${latest}`);
|
|
105
|
+
printHint("Run 'ap upgrade' to install the latest version");
|
|
106
|
+
process.exitCode = 1;
|
|
107
|
+
}
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (upToDate) {
|
|
112
|
+
if (json) {
|
|
113
|
+
jsonOutput("upgrade", { current, latest, upToDate: true, updated: false });
|
|
114
|
+
} else {
|
|
115
|
+
printSuccess("Already up to date", current);
|
|
116
|
+
}
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (!json) {
|
|
121
|
+
process.stdout.write(
|
|
122
|
+
`${muted(`Upgrading ${AGENTPLATE_PACKAGE} from ${current} to ${latest}...`)}\n`,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const exitCode = await runInstall(AGENTPLATE_PACKAGE);
|
|
127
|
+
|
|
128
|
+
if (exitCode !== 0) {
|
|
129
|
+
if (json) {
|
|
130
|
+
jsonError("upgrade", `bun install failed with exit code ${exitCode}`);
|
|
131
|
+
} else {
|
|
132
|
+
printError("Upgrade failed", `bun install exited with code ${exitCode}`);
|
|
133
|
+
}
|
|
134
|
+
process.exitCode = 1;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (json) {
|
|
139
|
+
jsonOutput("upgrade", { current, latest, upToDate: false, updated: true });
|
|
140
|
+
} else {
|
|
141
|
+
printSuccess("Upgraded to", latest);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async function executeUpgradeAll(opts: UpgradeOptions): Promise<void> {
|
|
146
|
+
const json = opts.json ?? false;
|
|
147
|
+
const checkOnly = opts.check ?? false;
|
|
148
|
+
|
|
149
|
+
// Fetch all latest versions in parallel
|
|
150
|
+
const latestResults = await Promise.allSettled(
|
|
151
|
+
ALL_PACKAGES.map((pkg) => fetchLatestVersion(pkg)),
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
if (checkOnly) {
|
|
155
|
+
// For --check --all, we just report status without installing
|
|
156
|
+
const results: Array<{ package: string; latest: string; error?: string }> = [];
|
|
157
|
+
let anyOutdated = false;
|
|
158
|
+
|
|
159
|
+
for (let i = 0; i < ALL_PACKAGES.length; i++) {
|
|
160
|
+
const pkg = ALL_PACKAGES[i] as string;
|
|
161
|
+
const result = latestResults[i];
|
|
162
|
+
if (result === undefined || result.status === "rejected") {
|
|
163
|
+
const error =
|
|
164
|
+
result?.status === "rejected"
|
|
165
|
+
? result.reason instanceof Error
|
|
166
|
+
? result.reason.message
|
|
167
|
+
: String(result.reason)
|
|
168
|
+
: "unknown error";
|
|
169
|
+
results.push({ package: pkg, latest: "unknown", error });
|
|
170
|
+
anyOutdated = true;
|
|
171
|
+
} else {
|
|
172
|
+
results.push({ package: pkg, latest: result.value });
|
|
173
|
+
// We can't easily get current versions for all tools without spawning them
|
|
174
|
+
// so for --all --check we just report latest versions available
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (json) {
|
|
179
|
+
jsonOutput("upgrade", { packages: results });
|
|
180
|
+
} else {
|
|
181
|
+
for (const r of results) {
|
|
182
|
+
if (r.error) {
|
|
183
|
+
printError(`${r.package}`, r.error);
|
|
184
|
+
} else {
|
|
185
|
+
process.stdout.write(` ${r.package} → ${r.latest}\n`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (anyOutdated) process.exitCode = 1;
|
|
189
|
+
}
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Install all packages
|
|
194
|
+
if (!json) {
|
|
195
|
+
process.stdout.write(`${muted("Upgrading all ag-eco tools to latest...")}\n`);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const results: PackageResult[] = await Promise.all(
|
|
199
|
+
ALL_PACKAGES.map((pkg) => upgradePackage(pkg)),
|
|
200
|
+
);
|
|
201
|
+
|
|
202
|
+
const anyError = results.some((r) => r.error !== undefined);
|
|
203
|
+
|
|
204
|
+
if (json) {
|
|
205
|
+
if (anyError) {
|
|
206
|
+
jsonError("upgrade", `One or more packages failed to upgrade`);
|
|
207
|
+
} else {
|
|
208
|
+
jsonOutput("upgrade", { packages: results, updated: true });
|
|
209
|
+
}
|
|
210
|
+
} else {
|
|
211
|
+
for (const r of results) {
|
|
212
|
+
if (r.error) {
|
|
213
|
+
printError(`Failed to upgrade ${r.package}`, r.error);
|
|
214
|
+
} else {
|
|
215
|
+
printSuccess(`Upgraded ${r.package} to`, r.latest);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (anyError) process.exitCode = 1;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export async function executeUpgrade(opts: UpgradeOptions): Promise<void> {
|
|
224
|
+
if (opts.all) {
|
|
225
|
+
await executeUpgradeAll(opts);
|
|
226
|
+
} else {
|
|
227
|
+
await executeUpgradeSingle(opts);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export function createUpgradeCommand(): Command {
|
|
232
|
+
return new Command("upgrade")
|
|
233
|
+
.description("Upgrade agentplate to the latest version from npm")
|
|
234
|
+
.option("--check", "Check for updates without installing")
|
|
235
|
+
.option("--all", "Upgrade all ag-eco ecosystem tools")
|
|
236
|
+
.option("--json", "Output as JSON")
|
|
237
|
+
.action(async (opts: UpgradeOptions) => {
|
|
238
|
+
await executeUpgrade(opts);
|
|
239
|
+
});
|
|
240
|
+
}
|