agentplane 0.3.12 → 0.3.14
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/assets/RUNNER.md +1 -1
- package/assets/agents/ORCHESTRATOR.json +1 -1
- package/assets/agents/SKILL_EXTRACTOR.json +31 -0
- package/assets/codex-plugin/assets/header.png +0 -0
- package/assets/codex-plugin/assets/icon.svg +1 -0
- package/assets/codex-plugin/assets/logo.svg +1 -0
- package/assets/codex-plugin/skills/agentplane/SKILL.md +35 -0
- package/assets/framework.manifest.json +7 -0
- package/assets/policy/governance.md +4 -2
- package/assets/policy/incidents.md +4 -19
- package/assets/policy/workflow.branch_pr.md +10 -5
- package/assets/policy/workflow.release.md +5 -2
- package/dist/.build-manifest.json +409 -219
- package/dist/cli/exit-codes.d.ts.map +1 -1
- package/dist/cli/exit-codes.js +1 -0
- package/dist/cli/output.d.ts +29 -0
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +33 -0
- package/dist/cli/reason-codes.d.ts +1 -1
- package/dist/cli/reason-codes.d.ts.map +1 -1
- package/dist/cli/reason-codes.js +12 -0
- package/dist/cli/run-cli/command-catalog/core.d.ts +1 -1
- package/dist/cli/run-cli/command-catalog/core.d.ts.map +1 -1
- package/dist/cli/run-cli/command-catalog/core.js +36 -78
- package/dist/cli/run-cli/command-catalog/lifecycle.d.ts.map +1 -1
- package/dist/cli/run-cli/command-catalog/lifecycle.js +4 -12
- package/dist/cli/run-cli/command-catalog/project.d.ts +1 -1
- package/dist/cli/run-cli/command-catalog/project.d.ts.map +1 -1
- package/dist/cli/run-cli/command-catalog/project.js +27 -31
- package/dist/cli/run-cli/command-catalog/shared.d.ts +9 -6
- package/dist/cli/run-cli/command-catalog/shared.d.ts.map +1 -1
- package/dist/cli/run-cli/command-catalog/shared.js +23 -6
- package/dist/cli/run-cli/command-catalog/task.d.ts.map +1 -1
- package/dist/cli/run-cli/command-catalog/task.js +6 -18
- package/dist/cli/run-cli/command-catalog.d.ts +1 -1
- package/dist/cli/run-cli/command-catalog.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/codex.d.ts +14 -0
- package/dist/cli/run-cli/commands/codex.d.ts.map +1 -0
- package/dist/cli/run-cli/commands/codex.js +100 -0
- package/dist/cli/run-cli/commands/core.d.ts +1 -0
- package/dist/cli/run-cli/commands/core.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/core.js +1 -0
- package/dist/cli/run-cli/commands/init/recipes.d.ts +9 -1
- package/dist/cli/run-cli/commands/init/recipes.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/init/recipes.js +33 -22
- package/dist/cli/run-cli/commands/init.d.ts.map +1 -1
- package/dist/cli/run-cli/commands/init.js +26 -21
- package/dist/cli/run-cli/error-guidance.js +20 -0
- package/dist/cli/run-cli.js +1 -1
- package/dist/cli/run-cli.test-helpers.d.ts +1 -74
- package/dist/cli/run-cli.test-helpers.d.ts.map +1 -1
- package/dist/cli/run-cli.test-helpers.js +1 -766
- package/dist/commands/branch/cleanup-merged.d.ts.map +1 -1
- package/dist/commands/branch/cleanup-merged.js +5 -9
- package/dist/commands/branch/work-start.command.d.ts.map +1 -1
- package/dist/commands/branch/work-start.command.js +1 -0
- package/dist/commands/codex/plugin-install.d.ts +26 -0
- package/dist/commands/codex/plugin-install.d.ts.map +1 -0
- package/dist/commands/codex/plugin-install.js +209 -0
- package/dist/commands/commit.spec.d.ts.map +1 -1
- package/dist/commands/commit.spec.js +2 -0
- package/dist/commands/doctor/branch-pr.d.ts +1 -1
- package/dist/commands/doctor/branch-pr.d.ts.map +1 -1
- package/dist/commands/doctor/branch-pr.js +5 -2
- package/dist/commands/guard/impl/commands.d.ts.map +1 -1
- package/dist/commands/guard/impl/commands.js +4 -1
- package/dist/commands/guard/impl/comment-commit.d.ts.map +1 -1
- package/dist/commands/guard/impl/comment-commit.js +2 -1
- package/dist/commands/guard/impl/env.d.ts +6 -0
- package/dist/commands/guard/impl/env.d.ts.map +1 -1
- package/dist/commands/guard/impl/env.js +41 -0
- package/dist/commands/pr/integrate/cmd.d.ts.map +1 -1
- package/dist/commands/pr/integrate/cmd.js +81 -5
- package/dist/commands/pr/integrate/internal/prepare.d.ts.map +1 -1
- package/dist/commands/pr/integrate/internal/prepare.js +38 -7
- package/dist/commands/pr/internal/auto-commit.d.ts.map +1 -1
- package/dist/commands/pr/internal/auto-commit.js +13 -7
- package/dist/commands/pr/internal/sync-branch.d.ts +36 -0
- package/dist/commands/pr/internal/sync-branch.d.ts.map +1 -0
- package/dist/commands/pr/internal/sync-branch.js +113 -0
- package/dist/commands/pr/internal/sync-github.d.ts +28 -0
- package/dist/commands/pr/internal/sync-github.d.ts.map +1 -0
- package/dist/commands/pr/internal/sync-github.js +178 -0
- package/dist/commands/pr/internal/sync-model.d.ts +36 -0
- package/dist/commands/pr/internal/sync-model.d.ts.map +1 -0
- package/dist/commands/pr/internal/sync-model.js +1 -0
- package/dist/commands/pr/internal/sync-open-step.d.ts +10 -0
- package/dist/commands/pr/internal/sync-open-step.d.ts.map +1 -0
- package/dist/commands/pr/internal/sync-open-step.js +128 -0
- package/dist/commands/pr/internal/sync-support.d.ts +7 -0
- package/dist/commands/pr/internal/sync-support.d.ts.map +1 -0
- package/dist/commands/pr/internal/sync-support.js +29 -0
- package/dist/commands/pr/internal/sync-update-step.d.ts +6 -0
- package/dist/commands/pr/internal/sync-update-step.d.ts.map +1 -0
- package/dist/commands/pr/internal/sync-update-step.js +68 -0
- package/dist/commands/pr/internal/sync.d.ts +2 -6
- package/dist/commands/pr/internal/sync.d.ts.map +1 -1
- package/dist/commands/pr/internal/sync.js +83 -525
- package/dist/commands/pr/open.d.ts.map +1 -1
- package/dist/commands/pr/open.js +62 -7
- package/dist/commands/pr/pr.command.d.ts.map +1 -1
- package/dist/commands/pr/pr.command.js +7 -2
- package/dist/commands/recipes/active.command.d.ts +7 -0
- package/dist/commands/recipes/active.command.d.ts.map +1 -0
- package/dist/commands/recipes/active.command.js +12 -0
- package/dist/commands/recipes/add.command.d.ts +8 -0
- package/dist/commands/recipes/add.command.d.ts.map +1 -0
- package/dist/commands/recipes/add.command.js +33 -0
- package/dist/commands/recipes/detach.command.d.ts +7 -0
- package/dist/commands/recipes/detach.command.d.ts.map +1 -0
- package/dist/commands/recipes/detach.command.js +19 -0
- package/dist/commands/recipes/disable.command.d.ts +7 -0
- package/dist/commands/recipes/disable.command.d.ts.map +1 -0
- package/dist/commands/recipes/disable.command.js +10 -0
- package/dist/commands/recipes/enable.command.d.ts +7 -0
- package/dist/commands/recipes/enable.command.d.ts.map +1 -0
- package/dist/commands/recipes/enable.command.js +10 -0
- package/dist/commands/recipes/explain-active.command.d.ts +5 -0
- package/dist/commands/recipes/explain-active.command.d.ts.map +1 -0
- package/dist/commands/recipes/explain-active.command.js +11 -0
- package/dist/commands/recipes/explain.command.d.ts.map +1 -1
- package/dist/commands/recipes/explain.command.js +4 -2
- package/dist/commands/recipes/impl/apply.d.ts +1 -1
- package/dist/commands/recipes/impl/apply.d.ts.map +1 -1
- package/dist/commands/recipes/impl/apply.js +34 -16
- package/dist/commands/recipes/impl/commands/active.d.ts +6 -0
- package/dist/commands/recipes/impl/commands/active.d.ts.map +1 -0
- package/dist/commands/recipes/impl/commands/active.js +47 -0
- package/dist/commands/recipes/impl/commands/add.d.ts +8 -0
- package/dist/commands/recipes/impl/commands/add.d.ts.map +1 -0
- package/dist/commands/recipes/impl/commands/add.js +105 -0
- package/dist/commands/recipes/impl/commands/detach.d.ts +6 -0
- package/dist/commands/recipes/impl/commands/detach.d.ts.map +1 -0
- package/dist/commands/recipes/impl/commands/detach.js +99 -0
- package/dist/commands/recipes/impl/commands/disable.d.ts +6 -0
- package/dist/commands/recipes/impl/commands/disable.d.ts.map +1 -0
- package/dist/commands/recipes/impl/commands/disable.js +23 -0
- package/dist/commands/recipes/impl/commands/enable.d.ts +6 -0
- package/dist/commands/recipes/impl/commands/enable.d.ts.map +1 -0
- package/dist/commands/recipes/impl/commands/enable.js +41 -0
- package/dist/commands/recipes/impl/commands/explain-active.d.ts +5 -0
- package/dist/commands/recipes/impl/commands/explain-active.d.ts.map +1 -0
- package/dist/commands/recipes/impl/commands/explain-active.js +20 -0
- package/dist/commands/recipes/impl/commands/explain.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/explain.js +83 -36
- package/dist/commands/recipes/impl/commands/info.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/info.js +39 -22
- package/dist/commands/recipes/impl/commands/install.d.ts +1 -1
- package/dist/commands/recipes/impl/commands/install.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/install.js +35 -42
- package/dist/commands/recipes/impl/commands/list-remote.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/list-remote.js +2 -3
- package/dist/commands/recipes/impl/commands/list.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/list.js +13 -12
- package/dist/commands/recipes/impl/commands/remove.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands/remove.js +12 -2
- package/dist/commands/recipes/impl/commands/update.d.ts +7 -0
- package/dist/commands/recipes/impl/commands/update.d.ts.map +1 -0
- package/dist/commands/recipes/impl/commands/update.js +107 -0
- package/dist/commands/recipes/impl/commands.d.ts +7 -0
- package/dist/commands/recipes/impl/commands.d.ts.map +1 -1
- package/dist/commands/recipes/impl/commands.js +7 -0
- package/dist/commands/recipes/impl/constants.d.ts +1 -14
- package/dist/commands/recipes/impl/constants.d.ts.map +1 -1
- package/dist/commands/recipes/impl/constants.js +1 -18
- package/dist/commands/recipes/impl/index.d.ts +1 -1
- package/dist/commands/recipes/impl/index.d.ts.map +1 -1
- package/dist/commands/recipes/impl/installed-recipes.d.ts +1 -1
- package/dist/commands/recipes/impl/installed-recipes.d.ts.map +1 -1
- package/dist/commands/recipes/impl/installed-recipes.js +1 -2
- package/dist/commands/recipes/impl/mutation-transaction.d.ts +7 -0
- package/dist/commands/recipes/impl/mutation-transaction.d.ts.map +1 -0
- package/dist/commands/recipes/impl/mutation-transaction.js +47 -0
- package/dist/commands/recipes/impl/overlay-project.d.ts +48 -0
- package/dist/commands/recipes/impl/overlay-project.d.ts.map +1 -0
- package/dist/commands/recipes/impl/overlay-project.js +320 -0
- package/dist/commands/recipes/impl/paths.d.ts +17 -2
- package/dist/commands/recipes/impl/paths.d.ts.map +1 -1
- package/dist/commands/recipes/impl/paths.js +20 -5
- package/dist/commands/recipes/impl/project-installed-recipes.d.ts +5 -4
- package/dist/commands/recipes/impl/project-installed-recipes.d.ts.map +1 -1
- package/dist/commands/recipes/impl/project-installed-recipes.js +34 -76
- package/dist/commands/recipes/impl/project-recipe-state.d.ts +18 -0
- package/dist/commands/recipes/impl/project-recipe-state.d.ts.map +1 -0
- package/dist/commands/recipes/impl/project-recipe-state.js +94 -0
- package/dist/commands/recipes/impl/project-registry.d.ts +24 -0
- package/dist/commands/recipes/impl/project-registry.d.ts.map +1 -0
- package/dist/commands/recipes/impl/project-registry.js +124 -0
- package/dist/commands/recipes/impl/resolver.d.ts +1 -1
- package/dist/commands/recipes/impl/resolver.d.ts.map +1 -1
- package/dist/commands/recipes/impl/resolver.js +6 -4
- package/dist/commands/recipes/impl/types.d.ts +1 -240
- package/dist/commands/recipes/impl/types.d.ts.map +1 -1
- package/dist/commands/recipes/impl/version.d.ts +5 -0
- package/dist/commands/recipes/impl/version.d.ts.map +1 -0
- package/dist/commands/recipes/impl/version.js +9 -0
- package/dist/commands/recipes/info.command.js +2 -2
- package/dist/commands/recipes/install.spec.js +4 -4
- package/dist/commands/recipes/list.command.js +4 -4
- package/dist/commands/recipes/remove.command.js +2 -2
- package/dist/commands/recipes/update.command.d.ts +8 -0
- package/dist/commands/recipes/update.command.d.ts.map +1 -0
- package/dist/commands/recipes/update.command.js +35 -0
- package/dist/commands/recipes.d.ts +10 -6
- package/dist/commands/recipes.d.ts.map +1 -1
- package/dist/commands/recipes.js +8 -5
- package/dist/commands/recipes.test-helpers.d.ts +3 -3
- package/dist/commands/recipes.test-helpers.d.ts.map +1 -1
- package/dist/commands/recipes.test-helpers.js +105 -15
- package/dist/commands/release/apply.command.d.ts +1 -1
- package/dist/commands/release/apply.command.d.ts.map +1 -1
- package/dist/commands/release/apply.command.js +15 -379
- package/dist/commands/release/apply.mutation.d.ts +1 -0
- package/dist/commands/release/apply.mutation.d.ts.map +1 -1
- package/dist/commands/release/apply.mutation.js +24 -1
- package/dist/commands/release/apply.pipeline.d.ts +22 -0
- package/dist/commands/release/apply.pipeline.d.ts.map +1 -0
- package/dist/commands/release/apply.pipeline.js +371 -0
- package/dist/commands/release/apply.preflight.d.ts +2 -0
- package/dist/commands/release/apply.preflight.d.ts.map +1 -1
- package/dist/commands/release/apply.preflight.js +13 -4
- package/dist/commands/release/apply.types.d.ts +27 -0
- package/dist/commands/release/apply.types.d.ts.map +1 -1
- package/dist/commands/release.test-helpers.d.ts +4 -0
- package/dist/commands/release.test-helpers.d.ts.map +1 -1
- package/dist/commands/release.test-helpers.js +7 -0
- package/dist/commands/scenario/execute.command.js +4 -4
- package/dist/commands/scenario/impl/commands.js +4 -4
- package/dist/commands/scenario/info.command.js +4 -4
- package/dist/commands/scenario/list.command.js +3 -3
- package/dist/commands/scenario/run.command.js +5 -5
- package/dist/commands/scenario/scenario.command.js +7 -7
- package/dist/commands/shared/reconcile-check.d.ts.map +1 -1
- package/dist/commands/shared/reconcile-check.js +2 -2
- package/dist/commands/shared/task-backend.d.ts +6 -1
- package/dist/commands/shared/task-backend.d.ts.map +1 -1
- package/dist/commands/shared/task-backend.js +34 -2
- package/dist/commands/shared/task-handoff.d.ts +2 -1
- package/dist/commands/shared/task-handoff.d.ts.map +1 -1
- package/dist/commands/shared/task-handoff.js +15 -0
- package/dist/commands/shared/task-mutation.d.ts.map +1 -1
- package/dist/commands/shared/task-mutation.js +4 -4
- package/dist/commands/shared/task-store/intents.d.ts +34 -0
- package/dist/commands/shared/task-store/intents.d.ts.map +1 -0
- package/dist/commands/shared/task-store/intents.js +265 -0
- package/dist/commands/shared/task-store/readme.d.ts +28 -0
- package/dist/commands/shared/task-store/readme.d.ts.map +1 -0
- package/dist/commands/shared/task-store/readme.js +125 -0
- package/dist/commands/shared/task-store/store.d.ts +26 -0
- package/dist/commands/shared/task-store/store.d.ts.map +1 -0
- package/dist/commands/shared/task-store/store.js +105 -0
- package/dist/commands/shared/task-store/types.d.ts +94 -0
- package/dist/commands/shared/task-store/types.d.ts.map +1 -0
- package/dist/commands/shared/task-store/types.js +1 -0
- package/dist/commands/shared/task-store.d.ts +3 -109
- package/dist/commands/shared/task-store.d.ts.map +1 -1
- package/dist/commands/shared/task-store.js +2 -493
- package/dist/commands/task/block.d.ts.map +1 -1
- package/dist/commands/task/block.js +7 -2
- package/dist/commands/task/comment.d.ts.map +1 -1
- package/dist/commands/task/comment.js +7 -2
- package/dist/commands/task/finish-shared.d.ts.map +1 -1
- package/dist/commands/task/finish-shared.js +3 -3
- package/dist/commands/task/finish.d.ts.map +1 -1
- package/dist/commands/task/finish.js +102 -15
- package/dist/commands/task/handoff-show.command.d.ts.map +1 -1
- package/dist/commands/task/handoff-show.command.js +24 -0
- package/dist/commands/task/hosted-merge-sync.d.ts.map +1 -1
- package/dist/commands/task/hosted-merge-sync.js +9 -4
- package/dist/commands/task/list.run.d.ts.map +1 -1
- package/dist/commands/task/list.run.js +14 -4
- package/dist/commands/task/new.command.d.ts.map +1 -1
- package/dist/commands/task/new.command.js +16 -2
- package/dist/commands/task/new.js +2 -2
- package/dist/commands/task/show.d.ts.map +1 -1
- package/dist/commands/task/show.js +3 -3
- package/dist/commands/task/update.d.ts.map +1 -1
- package/dist/commands/task/update.js +11 -3
- package/dist/runner/adapters/codex.d.ts.map +1 -1
- package/dist/runner/adapters/codex.js +3 -33
- package/dist/runner/adapters/custom.d.ts.map +1 -1
- package/dist/runner/adapters/custom.js +3 -30
- package/dist/runner/adapters/runtime-shared.d.ts +14 -0
- package/dist/runner/adapters/runtime-shared.d.ts.map +1 -0
- package/dist/runner/adapters/runtime-shared.js +36 -0
- package/dist/runner/context/base-prompt-sources.d.ts +30 -0
- package/dist/runner/context/base-prompt-sources.d.ts.map +1 -0
- package/dist/runner/context/base-prompt-sources.js +144 -0
- package/dist/runner/context/base-prompts.d.ts +5 -23
- package/dist/runner/context/base-prompts.d.ts.map +1 -1
- package/dist/runner/context/base-prompts.js +10 -358
- package/dist/runner/context/overlay-prompt-blocks.d.ts +7 -0
- package/dist/runner/context/overlay-prompt-blocks.d.ts.map +1 -0
- package/dist/runner/context/overlay-prompt-blocks.js +72 -0
- package/dist/runner/context/prompt-block-shared.d.ts +54 -0
- package/dist/runner/context/prompt-block-shared.d.ts.map +1 -0
- package/dist/runner/context/prompt-block-shared.js +106 -0
- package/dist/runner/context/recipe-context.d.ts +2 -1
- package/dist/runner/context/recipe-context.d.ts.map +1 -1
- package/dist/runner/context/recipe-context.js +41 -8
- package/dist/runner/context/recipe-prompt-blocks.d.ts +6 -0
- package/dist/runner/context/recipe-prompt-blocks.d.ts.map +1 -0
- package/dist/runner/context/recipe-prompt-blocks.js +143 -0
- package/dist/runner/types.d.ts +4 -0
- package/dist/runner/types.d.ts.map +1 -1
- package/dist/runner/usecases/scenario-materialize-task.js +2 -2
- package/dist/runner/usecases/task-run-inspect.js +2 -2
- package/dist/runner/usecases/task-run-lifecycle-shared.js +2 -2
- package/dist/runner/usecases/task-run.d.ts.map +1 -1
- package/dist/runner/usecases/task-run.js +6 -3
- package/dist/runtime/behavior/resolve.d.ts +2 -1
- package/dist/runtime/behavior/resolve.d.ts.map +1 -1
- package/dist/runtime/behavior/resolve.js +25 -5
- package/dist/runtime/behavior/types.d.ts +1 -0
- package/dist/runtime/behavior/types.d.ts.map +1 -1
- package/dist/runtime/capabilities/recipe.d.ts +2 -1
- package/dist/runtime/capabilities/recipe.d.ts.map +1 -1
- package/dist/runtime/capabilities/recipe.js +88 -28
- package/dist/runtime/execution-context.d.ts +63 -0
- package/dist/runtime/execution-context.d.ts.map +1 -0
- package/dist/{usecases/context/resolve-context.js → runtime/execution-context.js} +23 -26
- package/dist/runtime/incidents/advice-strategy.d.ts +15 -0
- package/dist/runtime/incidents/advice-strategy.d.ts.map +1 -0
- package/dist/runtime/incidents/advice-strategy.js +54 -0
- package/dist/runtime/incidents/plan-strategy.d.ts +9 -0
- package/dist/runtime/incidents/plan-strategy.d.ts.map +1 -0
- package/dist/runtime/incidents/plan-strategy.js +205 -0
- package/dist/runtime/incidents/registry-strategy.d.ts +6 -0
- package/dist/runtime/incidents/registry-strategy.d.ts.map +1 -0
- package/dist/runtime/incidents/registry-strategy.js +280 -0
- package/dist/runtime/incidents/resolve.d.ts +3 -25
- package/dist/runtime/incidents/resolve.d.ts.map +1 -1
- package/dist/runtime/incidents/resolve.js +3 -683
- package/dist/runtime/incidents/shared.d.ts +34 -0
- package/dist/runtime/incidents/shared.d.ts.map +1 -0
- package/dist/runtime/incidents/shared.js +171 -0
- package/dist/shared/errors.d.ts +1 -1
- package/dist/shared/errors.d.ts.map +1 -1
- package/dist/shared/runtime-source.d.ts.map +1 -1
- package/dist/shared/runtime-source.js +8 -3
- package/dist/testing/cli-harness/recipe-archives.d.ts +28 -0
- package/dist/testing/cli-harness/recipe-archives.d.ts.map +1 -0
- package/dist/testing/cli-harness/recipe-archives.js +374 -0
- package/dist/testing/cli-harness/stdio.d.ts +26 -0
- package/dist/testing/cli-harness/stdio.d.ts.map +1 -0
- package/dist/testing/cli-harness/stdio.js +84 -0
- package/dist/testing/cli-harness.d.ts +25 -0
- package/dist/testing/cli-harness.d.ts.map +1 -0
- package/dist/testing/cli-harness.js +313 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +1 -0
- package/package.json +7 -3
- package/dist/cli/recipes-bundled.d.ts +0 -10
- package/dist/cli/recipes-bundled.d.ts.map +0 -1
- package/dist/cli/recipes-bundled.js +0 -36
- package/dist/commands/recipes/impl/manifest.d.ts +0 -4
- package/dist/commands/recipes/impl/manifest.d.ts.map +0 -1
- package/dist/commands/recipes/impl/manifest.js +0 -229
- package/dist/commands/recipes/impl/normalize.d.ts +0 -8
- package/dist/commands/recipes/impl/normalize.d.ts.map +0 -1
- package/dist/commands/recipes/impl/normalize.js +0 -54
- package/dist/commands/recipes/impl/scenario.d.ts +0 -16
- package/dist/commands/recipes/impl/scenario.d.ts.map +0 -1
- package/dist/commands/recipes/impl/scenario.js +0 -262
- package/dist/recipes/bundled-recipes.d.ts +0 -17
- package/dist/recipes/bundled-recipes.d.ts.map +0 -1
- package/dist/recipes/bundled-recipes.js +0 -15
- package/dist/usecases/context/resolve-context.d.ts +0 -68
- package/dist/usecases/context/resolve-context.d.ts.map +0 -1
- package/dist/usecases/task/task-list-usecase.d.ts +0 -9
- package/dist/usecases/task/task-list-usecase.d.ts.map +0 -1
- package/dist/usecases/task/task-list-usecase.js +0 -17
- package/dist/usecases/task/task-new-usecase.d.ts +0 -9
- package/dist/usecases/task/task-new-usecase.d.ts.map +0 -1
- package/dist/usecases/task/task-new-usecase.js +0 -17
|
@@ -51,14 +51,10 @@ import { requireCanonicalCommandInvocation } from "../../command-invocations.js"
|
|
|
51
51
|
import { entry } from "./shared.js";
|
|
52
52
|
export const TASK_COMMANDS = [
|
|
53
53
|
entry(taskSpec, () => import("../../../commands/task/task.command.js").then((m) => m.runTask), {
|
|
54
|
-
|
|
55
|
-
needsLoadedConfig: false,
|
|
56
|
-
needsTaskContext: false,
|
|
54
|
+
needs: "none",
|
|
57
55
|
}),
|
|
58
56
|
entry(taskHandoffSpec, () => import("../../../commands/task/handoff.command.js").then((m) => m.runTaskHandoff), {
|
|
59
|
-
|
|
60
|
-
needsLoadedConfig: false,
|
|
61
|
-
needsTaskContext: false,
|
|
57
|
+
needs: "none",
|
|
62
58
|
}),
|
|
63
59
|
entry(taskHandoffRecordSpec, () => import("../../../commands/task/handoff-record.command.js").then((m) => m.runTaskHandoffRecord)),
|
|
64
60
|
entry(taskHandoffShowSpec, () => import("../../../commands/task/handoff-show.command.js").then((m) => m.runTaskHandoffShow)),
|
|
@@ -89,15 +85,11 @@ export const TASK_COMMANDS = [
|
|
|
89
85
|
entry(taskCommentSpec, (deps) => import("../../../commands/task/comment.command.js").then((m) => m.makeRunTaskCommentHandler(deps.getCtx))),
|
|
90
86
|
entry(taskSetStatusSpec, (deps) => import("../../../commands/task/set-status.command.js").then((m) => m.makeRunTaskSetStatusHandler(deps.getCtx))),
|
|
91
87
|
entry(taskFindingsSpec, () => import("../../../commands/task/findings.command.js").then((m) => m.runTaskFindings), {
|
|
92
|
-
|
|
93
|
-
needsLoadedConfig: false,
|
|
94
|
-
needsTaskContext: false,
|
|
88
|
+
needs: "none",
|
|
95
89
|
}),
|
|
96
90
|
entry(taskFindingsAddSpec, (deps) => import("../../../commands/task/findings-add.command.js").then((m) => m.makeRunTaskFindingsAddHandler(deps.getCtx))),
|
|
97
91
|
entry(taskDocSpec, () => import("../../../commands/task/doc.command.js").then((m) => m.runTaskDoc), {
|
|
98
|
-
|
|
99
|
-
needsLoadedConfig: false,
|
|
100
|
-
needsTaskContext: false,
|
|
92
|
+
needs: "none",
|
|
101
93
|
}),
|
|
102
94
|
entry(taskDocShowSpec, (deps) => import("../../../commands/task/doc-show.command.js").then((m) => m.makeRunTaskDocShowHandler(deps.getCtx))),
|
|
103
95
|
entry(taskDocSetSpec, (deps) => import("../../../commands/task/doc-set.command.js").then((m) => m.makeRunTaskDocSetHandler(deps.getCtx))),
|
|
@@ -109,17 +101,13 @@ export const TASK_COMMANDS = [
|
|
|
109
101
|
entry(taskMigrateSpec, (deps) => import("../../../commands/task/migrate.command.js").then((m) => m.makeRunTaskMigrateHandler(deps.getCtx))),
|
|
110
102
|
entry(taskMigrateDocSpec, () => import("../../../commands/task/migrate-doc.command.js").then((m) => m.runTaskMigrateDoc)),
|
|
111
103
|
entry(taskPlanSpec, () => import("../../../commands/task/plan.command.js").then((m) => m.runTaskPlan), {
|
|
112
|
-
|
|
113
|
-
needsLoadedConfig: false,
|
|
114
|
-
needsTaskContext: false,
|
|
104
|
+
needs: "none",
|
|
115
105
|
}),
|
|
116
106
|
entry(taskPlanSetSpec, (deps) => import("../../../commands/task/plan-set.command.js").then((m) => m.makeRunTaskPlanSetHandler(deps.getCtx)), { invocation: requireCanonicalCommandInvocation(["task", "plan", "set"]) }),
|
|
117
107
|
entry(taskPlanApproveSpec, (deps) => import("../../../commands/task/plan-approve.command.js").then((m) => m.makeRunTaskPlanApproveHandler(deps.getCtx)), { invocation: requireCanonicalCommandInvocation(["task", "plan", "approve"]) }),
|
|
118
108
|
entry(taskPlanRejectSpec, (deps) => import("../../../commands/task/plan-reject.command.js").then((m) => m.makeRunTaskPlanRejectHandler(deps.getCtx))),
|
|
119
109
|
entry(taskVerifySpec, () => import("../../../commands/task/verify.command.js").then((m) => m.runTaskVerify), {
|
|
120
|
-
|
|
121
|
-
needsLoadedConfig: false,
|
|
122
|
-
needsTaskContext: false,
|
|
110
|
+
needs: "none",
|
|
123
111
|
}),
|
|
124
112
|
entry(taskVerifyOkSpec, (deps) => import("../../../commands/task/verify-ok.command.js").then((m) => m.makeRunTaskVerifyOkHandler(deps.getCtx))),
|
|
125
113
|
entry(taskVerifyReworkSpec, (deps) => import("../../../commands/task/verify-rework.command.js").then((m) => m.makeRunTaskVerifyReworkHandler(deps.getCtx))),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CommandId } from "../spec/spec.js";
|
|
2
2
|
import type { CommandEntry } from "./command-catalog/shared.js";
|
|
3
3
|
export type { CommandEntry, RunDeps } from "./command-catalog/shared.js";
|
|
4
|
-
export declare const COMMANDS: readonly [CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry];
|
|
4
|
+
export declare const COMMANDS: readonly [CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry, CommandEntry];
|
|
5
5
|
export type CatalogMatch = {
|
|
6
6
|
entry: (typeof COMMANDS)[number];
|
|
7
7
|
consumed: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-catalog.d.ts","sourceRoot":"","sources":["../../../src/cli/run-cli/command-catalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAOhE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEzE,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"command-catalog.d.ts","sourceRoot":"","sources":["../../../src/cli/run-cli/command-catalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAOhE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEzE,eAAO,MAAM,QAAQ,+1DAKuB,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAYlF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,GAAG,IAAI,CAGlF;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,SAAS,GAAG,YAAY,GAAG,IAAI,CAEnE;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,GAAE,SAAc,GAAG,SAAS,YAAY,EAAE,CAE9F;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,GAAE,SAAc,GAAG,SAAS,MAAM,EAAE,CAEtF;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,CAM1D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type GroupCommandParsed } from "../../group-command.js";
|
|
2
|
+
import type { CommandHandler, CommandSpec } from "../../spec/spec.js";
|
|
3
|
+
import { type CodexPluginInstallScope } from "../../../commands/codex/plugin-install.js";
|
|
4
|
+
import type { RunDeps } from "../command-catalog.js";
|
|
5
|
+
export type CodexPluginInstallParsed = {
|
|
6
|
+
scope: CodexPluginInstallScope;
|
|
7
|
+
};
|
|
8
|
+
export declare const codexSpec: CommandSpec<GroupCommandParsed>;
|
|
9
|
+
export declare const codexPluginSpec: CommandSpec<GroupCommandParsed>;
|
|
10
|
+
export declare const codexPluginInstallSpec: CommandSpec<CodexPluginInstallParsed>;
|
|
11
|
+
export declare const runCodex: CommandHandler<GroupCommandParsed>;
|
|
12
|
+
export declare const runCodexPlugin: CommandHandler<GroupCommandParsed>;
|
|
13
|
+
export declare function makeRunCodexPluginInstallHandler(deps: RunDeps): CommandHandler<CodexPluginInstallParsed>;
|
|
14
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/commands/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAMrD,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,uBAAuB,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,WAAW,CAAC,kBAAkB,CAOrD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,kBAAkB,CAO3D,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,wBAAwB,CAgCxE,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,cAAc,CAAC,kBAAkB,CASvD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,kBAAkB,CAS7D,CAAC;AAEF,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,OAAO,GACZ,cAAc,CAAC,wBAAwB,CAAC,CAkC1C"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { loadDirectSubcommandNames, parseGroupCommand, throwGroupCommandUsage, } from "../../group-command.js";
|
|
2
|
+
import { createCliEmitter } from "../../output.js";
|
|
3
|
+
import { installBundledCodexPlugin, resolveCodexInstallRoot, } from "../../../commands/codex/plugin-install.js";
|
|
4
|
+
import { wrapCommand } from "./wrap-command.js";
|
|
5
|
+
const output = createCliEmitter();
|
|
6
|
+
export const codexSpec = {
|
|
7
|
+
id: ["codex"],
|
|
8
|
+
group: "Codex",
|
|
9
|
+
summary: "Codex integration commands.",
|
|
10
|
+
synopsis: ["agentplane codex <subcommand> [options]"],
|
|
11
|
+
args: [{ name: "subcommand", required: false, variadic: true, valueHint: "<subcommand>" }],
|
|
12
|
+
parse: (raw) => parseGroupCommand(raw, "subcommand"),
|
|
13
|
+
};
|
|
14
|
+
export const codexPluginSpec = {
|
|
15
|
+
id: ["codex", "plugin"],
|
|
16
|
+
group: "Codex",
|
|
17
|
+
summary: "Install and inspect bundled Codex plugin integrations.",
|
|
18
|
+
synopsis: ["agentplane codex plugin <subcommand> [options]"],
|
|
19
|
+
args: [{ name: "subcommand", required: false, variadic: true, valueHint: "<subcommand>" }],
|
|
20
|
+
parse: (raw) => parseGroupCommand(raw, "subcommand"),
|
|
21
|
+
};
|
|
22
|
+
export const codexPluginInstallSpec = {
|
|
23
|
+
id: ["codex", "plugin", "install"],
|
|
24
|
+
group: "Codex",
|
|
25
|
+
summary: "Install the bundled AgentPlane plugin into a local Codex marketplace.",
|
|
26
|
+
options: [
|
|
27
|
+
{
|
|
28
|
+
kind: "string",
|
|
29
|
+
name: "scope",
|
|
30
|
+
valueHint: "<user|repo>",
|
|
31
|
+
choices: ["user", "repo"],
|
|
32
|
+
default: "user",
|
|
33
|
+
description: "Install to the user home marketplace or the current repository marketplace.",
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
examples: [
|
|
37
|
+
{
|
|
38
|
+
cmd: "agentplane codex plugin install",
|
|
39
|
+
why: "Install AgentPlane into the user-local Codex marketplace under ~/.agents/plugins.",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
cmd: "agentplane codex plugin install --scope repo",
|
|
43
|
+
why: "Install AgentPlane into the current repository marketplace for local testing.",
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
notes: [
|
|
47
|
+
"User scope writes `~/plugins/agentplane` plus `~/.agents/plugins/marketplace.json` by default.",
|
|
48
|
+
"Repo scope writes `<repo>/plugins/agentplane` plus `<repo>/.agents/plugins/marketplace.json`.",
|
|
49
|
+
"OpenAI's public self-serve Plugin Directory is not available yet; local marketplaces are the supported route today.",
|
|
50
|
+
],
|
|
51
|
+
parse: (raw) => ({
|
|
52
|
+
scope: raw.opts.scope ?? "user",
|
|
53
|
+
}),
|
|
54
|
+
};
|
|
55
|
+
export const runCodex = async (_ctx, p) => {
|
|
56
|
+
throwGroupCommandUsage({
|
|
57
|
+
spec: codexSpec,
|
|
58
|
+
cmd: p.cmd,
|
|
59
|
+
subcommands: await loadDirectSubcommandNames(["codex"]),
|
|
60
|
+
command: "codex",
|
|
61
|
+
missingMessage: "Missing Codex subcommand.",
|
|
62
|
+
unknownMessage: (subcommand) => `Unknown Codex subcommand: ${subcommand}.`,
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
export const runCodexPlugin = async (_ctx, p) => {
|
|
66
|
+
throwGroupCommandUsage({
|
|
67
|
+
spec: codexPluginSpec,
|
|
68
|
+
cmd: p.cmd,
|
|
69
|
+
subcommands: await loadDirectSubcommandNames(["codex", "plugin"]),
|
|
70
|
+
command: "codex plugin",
|
|
71
|
+
missingMessage: "Missing Codex plugin subcommand.",
|
|
72
|
+
unknownMessage: (subcommand) => `Unknown Codex plugin subcommand: ${subcommand}.`,
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
export function makeRunCodexPluginInstallHandler(deps) {
|
|
76
|
+
return async (ctx, p) => wrapCommand({ command: "codex plugin install", rootOverride: ctx.rootOverride }, async () => {
|
|
77
|
+
const resolvedProject = p.scope === "repo" ? await deps.getResolvedProject("codex plugin install") : null;
|
|
78
|
+
const installRoot = p.scope === "repo"
|
|
79
|
+
? resolveCodexInstallRoot({
|
|
80
|
+
scope: "repo",
|
|
81
|
+
repoRoot: resolvedProject?.gitRoot,
|
|
82
|
+
})
|
|
83
|
+
: resolveCodexInstallRoot({ scope: "user" });
|
|
84
|
+
const result = await installBundledCodexPlugin({
|
|
85
|
+
scope: p.scope,
|
|
86
|
+
installRoot,
|
|
87
|
+
});
|
|
88
|
+
output.report([
|
|
89
|
+
{ label: "Scope", value: result.scope },
|
|
90
|
+
{ label: "Install root", value: result.installRoot },
|
|
91
|
+
{ label: "Plugin root", value: result.pluginRoot },
|
|
92
|
+
{ label: "Manifest", value: result.manifestPath },
|
|
93
|
+
{ label: "Marketplace", value: result.marketplacePath },
|
|
94
|
+
], { header: "Installed Codex plugin" });
|
|
95
|
+
output.line(p.scope === "repo"
|
|
96
|
+
? "Next: open Codex in this repository and install AgentPlane from the repo marketplace."
|
|
97
|
+
: "Next: open Codex, open Plugins, and install AgentPlane from the local marketplace.");
|
|
98
|
+
return 0;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { agentsSpec, makeRunAgentsHandler } from "./core/agents.js";
|
|
2
|
+
export { codexPluginInstallSpec, codexPluginSpec, codexSpec, makeRunCodexPluginInstallHandler, runCodex, runCodexPlugin, } from "./codex.js";
|
|
2
3
|
export { preflightSpec, runPreflight } from "./core/preflight.js";
|
|
3
4
|
export { quickstartSpec, runQuickstart } from "./core/quickstart.js";
|
|
4
5
|
export { roleSpec, runRole } from "./core/role.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/commands/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/commands/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,SAAS,EACT,gCAAgC,EAChC,QAAQ,EACR,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { agentsSpec, makeRunAgentsHandler } from "./core/agents.js";
|
|
2
|
+
export { codexPluginInstallSpec, codexPluginSpec, codexSpec, makeRunCodexPluginInstallHandler, runCodex, runCodexPlugin, } from "./codex.js";
|
|
2
3
|
export { preflightSpec, runPreflight } from "./core/preflight.js";
|
|
3
4
|
export { quickstartSpec, runQuickstart } from "./core/quickstart.js";
|
|
4
5
|
export { roleSpec, runRole } from "./core/role.js";
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type CachedRecipeInfo = {
|
|
2
|
+
id: string;
|
|
3
|
+
summary: string;
|
|
4
|
+
version: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function listCachedRecipes(): Promise<CachedRecipeInfo[]>;
|
|
7
|
+
export declare function renderCachedRecipesHint(recipes: CachedRecipeInfo[]): string;
|
|
8
|
+
export declare function validateCachedRecipesSelection(recipes: string[]): Promise<void>;
|
|
9
|
+
export declare function maybeAddCachedRecipes(opts: {
|
|
2
10
|
recipes: string[];
|
|
3
11
|
cwd: string;
|
|
4
12
|
rootOverride?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../../../../src/cli/run-cli/commands/init/recipes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../../../../src/cli/run-cli/commands/init/recipes.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAOrE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAK3E;AAED,wBAAsB,8BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrF;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhB"}
|
|
@@ -1,31 +1,42 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { infoMessage } from "../../../output.js";
|
|
3
|
-
import { getBundledRecipeSourcePath, listBundledRecipes } from "../../../recipes-bundled.js";
|
|
1
|
+
import { cmdRecipeAddParsed, readInstalledRecipesFile, resolveInstalledRecipesPath, } from "../../../../commands/recipes.js";
|
|
4
2
|
import { CliError } from "../../../../shared/errors.js";
|
|
5
|
-
export async function
|
|
6
|
-
|
|
3
|
+
export async function listCachedRecipes() {
|
|
4
|
+
const cached = await readInstalledRecipesFile(resolveInstalledRecipesPath());
|
|
5
|
+
return cached.recipes.map((recipe) => ({
|
|
6
|
+
id: recipe.id,
|
|
7
|
+
summary: recipe.manifest.summary,
|
|
8
|
+
version: recipe.version,
|
|
9
|
+
}));
|
|
10
|
+
}
|
|
11
|
+
export function renderCachedRecipesHint(recipes) {
|
|
12
|
+
if (recipes.length === 0) {
|
|
13
|
+
return "Cached recipes: none. Use `agentplane recipes install <id>` before selecting recipes during init.";
|
|
14
|
+
}
|
|
15
|
+
return `Cached recipes: ${recipes.map((entry) => entry.id).join(", ")}`;
|
|
16
|
+
}
|
|
17
|
+
export async function validateCachedRecipesSelection(recipes) {
|
|
18
|
+
if (recipes.length === 0)
|
|
7
19
|
return;
|
|
8
|
-
|
|
9
|
-
|
|
20
|
+
const cached = await listCachedRecipes();
|
|
21
|
+
const available = new Set(cached.map((entry) => entry.id));
|
|
22
|
+
const missing = recipes.filter((recipe) => !available.has(recipe));
|
|
23
|
+
if (missing.length === 0)
|
|
24
|
+
return;
|
|
25
|
+
throw new CliError({
|
|
26
|
+
exitCode: 2,
|
|
27
|
+
code: "E_USAGE",
|
|
28
|
+
message: `Unknown cached recipe id(s): ${missing.join(", ")}. ${renderCachedRecipesHint(cached)}`,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
export async function maybeAddCachedRecipes(opts) {
|
|
32
|
+
if (opts.recipes.length === 0)
|
|
10
33
|
return;
|
|
11
|
-
}
|
|
12
34
|
for (const recipeId of opts.recipes) {
|
|
13
|
-
|
|
14
|
-
if (!sourcePath) {
|
|
15
|
-
throw new CliError({
|
|
16
|
-
exitCode: 3,
|
|
17
|
-
code: "E_VALIDATION",
|
|
18
|
-
message: `Bundled recipe ${recipeId} is missing source_path in bundled catalog`,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
await cmdRecipeInstall({
|
|
35
|
+
await cmdRecipeAddParsed({
|
|
22
36
|
cwd: opts.cwd,
|
|
23
37
|
rootOverride: opts.rootOverride,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
refresh: false,
|
|
27
|
-
onConflict: "overwrite",
|
|
28
|
-
yes: true,
|
|
38
|
+
recipeRef: recipeId,
|
|
39
|
+
activate: true,
|
|
29
40
|
});
|
|
30
41
|
}
|
|
31
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/commands/init.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItE,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAa7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAG7E,KAAK,SAAS,GAAG;IACf,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACtC,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF,KAAK,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAC;AAoF9D,KAAK,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5D,eAAO,MAAM,QAAQ,EAAE,WAAW,CAAC,UAAU,CAyM5C,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,cAAc,CAAC,UAAU,CACmB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import path from "node:path";
|
|
|
2
2
|
import { mapCoreError } from "../../error-map.js";
|
|
3
3
|
import { promptChoice, promptInput, promptYesNo } from "../../prompts.js";
|
|
4
4
|
import { invalidValueForFlag } from "../../output.js";
|
|
5
|
-
import {
|
|
5
|
+
import { listCachedRecipes, maybeAddCachedRecipes, renderCachedRecipesHint, validateCachedRecipesSelection, } from "./init/recipes.js";
|
|
6
6
|
import { usageError } from "../../spec/errors.js";
|
|
7
7
|
import { CliError } from "../../../shared/errors.js";
|
|
8
8
|
import { getVersion } from "../../../meta/version.js";
|
|
@@ -12,7 +12,6 @@ import { resolveInitBaseBranchForInit } from "./init/base-branch.js";
|
|
|
12
12
|
import { collectInitConflicts, handleInitConflicts } from "./init/conflicts.js";
|
|
13
13
|
import { ensureGitRoot } from "./init/git.js";
|
|
14
14
|
import { maybeSyncIde } from "./init/ide-sync.js";
|
|
15
|
-
import { maybeInstallBundledRecipes } from "./init/recipes.js";
|
|
16
15
|
import { ensureInitWorkflow } from "./init/write-workflow.js";
|
|
17
16
|
import { ensureAgentplaneDirs, writeBackendStubs, writeInitConfig } from "./init/write-config.js";
|
|
18
17
|
import { ensureAgentsFiles } from "./init/write-agents.js";
|
|
@@ -186,7 +185,7 @@ export const initSpec = {
|
|
|
186
185
|
kind: "string",
|
|
187
186
|
name: "recipes",
|
|
188
187
|
valueHint: "<none|id1,id2,...>",
|
|
189
|
-
description: "Optional
|
|
188
|
+
description: "Optional cached recipes to vendor during init (comma-separated), or 'none'.",
|
|
190
189
|
},
|
|
191
190
|
{
|
|
192
191
|
kind: "boolean",
|
|
@@ -407,25 +406,31 @@ async function cmdInit(opts) {
|
|
|
407
406
|
if (flags.requireNetworkApproval === undefined) {
|
|
408
407
|
requireNetworkApproval = await askYesNo("Require explicit approval for network actions?", requireNetworkApproval);
|
|
409
408
|
}
|
|
410
|
-
process.stdout.write(renderInitSection("Recipes", "Optional:
|
|
409
|
+
process.stdout.write(renderInitSection("Recipes", "Optional: materialize cached recipes now (comma-separated IDs) or choose none."));
|
|
411
410
|
if (!flags.recipes) {
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
: "none";
|
|
416
|
-
const answer = await askInput(`Install optional recipes (comma separated, or none) [default: ${defaultRecipesLabel}]: `);
|
|
417
|
-
const normalized = answer.trim().toLowerCase();
|
|
418
|
-
if (normalized === "") {
|
|
419
|
-
recipes = [...selectedPreset.defaultRecipes];
|
|
420
|
-
}
|
|
421
|
-
else if (normalized === "none") {
|
|
411
|
+
const cachedRecipes = await listCachedRecipes();
|
|
412
|
+
process.stdout.write(`${renderCachedRecipesHint(cachedRecipes)}\n`);
|
|
413
|
+
if (cachedRecipes.length === 0) {
|
|
422
414
|
recipes = [];
|
|
423
415
|
}
|
|
424
416
|
else {
|
|
425
|
-
|
|
426
|
-
.
|
|
427
|
-
|
|
428
|
-
|
|
417
|
+
const defaultRecipesLabel = selectedPreset.defaultRecipes.length > 0
|
|
418
|
+
? selectedPreset.defaultRecipes.join(", ")
|
|
419
|
+
: "none";
|
|
420
|
+
const answer = await askInput(`Materialize cached recipes (comma separated, or none) [default: ${defaultRecipesLabel}]: `);
|
|
421
|
+
const normalized = answer.trim().toLowerCase();
|
|
422
|
+
if (normalized === "") {
|
|
423
|
+
recipes = [...selectedPreset.defaultRecipes];
|
|
424
|
+
}
|
|
425
|
+
else if (normalized === "none") {
|
|
426
|
+
recipes = [];
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
recipes = answer
|
|
430
|
+
.split(",")
|
|
431
|
+
.map((item) => item.trim())
|
|
432
|
+
.filter(Boolean);
|
|
433
|
+
}
|
|
429
434
|
}
|
|
430
435
|
}
|
|
431
436
|
}
|
|
@@ -438,7 +443,7 @@ async function cmdInit(opts) {
|
|
|
438
443
|
flags.requireVerifyApproval ?? selectedPreset.defaultRequireVerifyApproval;
|
|
439
444
|
executionProfile = flags.executionProfile ?? selectedPreset.defaultExecutionProfile;
|
|
440
445
|
strictUnsafeConfirm = flags.strictUnsafeConfirm ?? selectedPreset.defaultStrictUnsafeConfirm;
|
|
441
|
-
process.stdout.write(renderInitSection("Defaults Applied", `Using compact ${setupProfilePreset} defaults for approvals, execution profile, and
|
|
446
|
+
process.stdout.write(renderInitSection("Defaults Applied", `Using compact ${setupProfilePreset} defaults for approvals, execution profile, and cached recipe selection. Hooks: ${hooks ? "enabled" : "disabled"}.`));
|
|
442
447
|
}
|
|
443
448
|
}
|
|
444
449
|
if (flags.yes) {
|
|
@@ -456,7 +461,7 @@ async function cmdInit(opts) {
|
|
|
456
461
|
executionProfile = flags.executionProfile ?? yesPreset.defaultExecutionProfile;
|
|
457
462
|
strictUnsafeConfirm = flags.strictUnsafeConfirm ?? yesPreset.defaultStrictUnsafeConfirm;
|
|
458
463
|
}
|
|
459
|
-
|
|
464
|
+
await validateCachedRecipesSelection(recipes);
|
|
460
465
|
try {
|
|
461
466
|
const initRoot = path.resolve(opts.rootOverride ?? opts.cwd);
|
|
462
467
|
const baseBranchFallback = "main";
|
|
@@ -566,7 +571,7 @@ async function cmdInit(opts) {
|
|
|
566
571
|
gitRoot: resolved.gitRoot,
|
|
567
572
|
});
|
|
568
573
|
installPaths.push(...ideRes.installPaths);
|
|
569
|
-
await
|
|
574
|
+
await maybeAddCachedRecipes({
|
|
570
575
|
recipes,
|
|
571
576
|
cwd: opts.cwd,
|
|
572
577
|
rootOverride: opts.rootOverride,
|
|
@@ -83,6 +83,16 @@ function resolveErrorGuidance(err) {
|
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
85
|
case "E_GIT": {
|
|
86
|
+
if (reasonCode === "integrate_base_checkout_required") {
|
|
87
|
+
return withExplicit({
|
|
88
|
+
hint: "Integrate must run from the base checkout, not from the task branch worktree.",
|
|
89
|
+
nextAction: {
|
|
90
|
+
command: "git worktree list",
|
|
91
|
+
reason: "locate the registered base checkout if the rerun command is not already provided",
|
|
92
|
+
reasonCode,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
}
|
|
86
96
|
if (reasonCode === "reconcile_git_state_unreadable") {
|
|
87
97
|
return withExplicit({
|
|
88
98
|
hint: "Reconcile check could not read git state.",
|
|
@@ -122,6 +132,16 @@ function resolveErrorGuidance(err) {
|
|
|
122
132
|
},
|
|
123
133
|
});
|
|
124
134
|
}
|
|
135
|
+
case "E_HANDOFF": {
|
|
136
|
+
return withExplicit({
|
|
137
|
+
hint: "This is an intentional handoff route, not a local mutation failure.",
|
|
138
|
+
nextAction: {
|
|
139
|
+
command: command === "integrate" ? "agentplane task handoff show <task-id>" : usage,
|
|
140
|
+
reason: "inspect the persisted finalize route and continue through the external handoff path",
|
|
141
|
+
reasonCode: "protected_base_integrate_handoff",
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
}
|
|
125
145
|
case "E_NETWORK": {
|
|
126
146
|
return withExplicit({
|
|
127
147
|
hint: "Check network access and credentials.",
|
package/dist/cli/run-cli.js
CHANGED
|
@@ -3,7 +3,7 @@ import { mapCoreError } from "./error-map.js";
|
|
|
3
3
|
import { exitCodeForError } from "./exit-codes.js";
|
|
4
4
|
import { loadDotEnv } from "../shared/env.js";
|
|
5
5
|
import { CliError } from "../shared/errors.js";
|
|
6
|
-
import { resolveCommandContext } from "../
|
|
6
|
+
import { resolveCommandContext } from "../runtime/execution-context.js";
|
|
7
7
|
import { getVersion } from "../meta/version.js";
|
|
8
8
|
import { getApprovalRequirements } from "../commands/shared/approval-requirements.js";
|
|
9
9
|
import { parseCommandArgv } from "./spec/parse.js";
|
|
@@ -1,75 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import type { TaskBackend } from "../backends/task-backend.js";
|
|
3
|
-
export declare function registerAgentplaneHome(): void;
|
|
4
|
-
export declare function installRunCliIntegrationHarness(): void;
|
|
5
|
-
export declare function getAgentplaneHome(): string | null;
|
|
6
|
-
export declare function captureStdIO(): {
|
|
7
|
-
readonly stdout: string;
|
|
8
|
-
readonly stderr: string;
|
|
9
|
-
restore(): void;
|
|
10
|
-
};
|
|
11
|
-
export type AgentJsonEnvelope = {
|
|
12
|
-
schema_version?: number;
|
|
13
|
-
mode?: string;
|
|
14
|
-
command?: string;
|
|
15
|
-
ok?: boolean;
|
|
16
|
-
exit_code?: number;
|
|
17
|
-
stdout?: string;
|
|
18
|
-
stderr?: string;
|
|
19
|
-
data?: unknown;
|
|
20
|
-
};
|
|
21
|
-
export declare function splitOutputLines(text: string): string[];
|
|
22
|
-
export declare function parseAgentJsonEnvelope(stdout: string): AgentJsonEnvelope;
|
|
23
|
-
export declare function expectAgentJsonEnvelope(payload: AgentJsonEnvelope, opts: {
|
|
24
|
-
command: string;
|
|
25
|
-
ok: boolean;
|
|
26
|
-
exitCode: number;
|
|
27
|
-
hasData?: boolean;
|
|
28
|
-
}): void;
|
|
29
|
-
export declare function silenceStdIO(): () => void;
|
|
30
|
-
export declare function stubTaskBackend(overrides?: Partial<TaskBackend>): TaskBackend;
|
|
31
|
-
export declare function runCliSilent(args: string[]): Promise<number>;
|
|
32
|
-
export declare function mkGitRepoRoot(): Promise<string>;
|
|
33
|
-
export declare function mkTempDir(): Promise<string>;
|
|
34
|
-
export declare function writeDefaultConfig(root: string): Promise<void>;
|
|
35
|
-
export declare function writeAndConfigureRoot(): Promise<string>;
|
|
36
|
-
export declare function approveTaskPlan(root: string, taskId: string): Promise<void>;
|
|
37
|
-
export declare function recordVerificationOk(root: string, taskId: string): Promise<void>;
|
|
38
|
-
export declare function writeConfig(root: string, config: ReturnType<typeof defaultConfig>): Promise<void>;
|
|
39
|
-
export declare function resetAgentplaneHomeRecipes(): Promise<void>;
|
|
40
|
-
export declare function createRecipeArchive(opts?: {
|
|
41
|
-
id?: string;
|
|
42
|
-
version?: string;
|
|
43
|
-
name?: string;
|
|
44
|
-
summary?: string;
|
|
45
|
-
description?: string;
|
|
46
|
-
tags?: string[];
|
|
47
|
-
format?: "tar" | "zip";
|
|
48
|
-
wrapDir?: boolean;
|
|
49
|
-
}): Promise<{
|
|
50
|
-
archivePath: string;
|
|
51
|
-
manifest: Record<string, unknown>;
|
|
52
|
-
}>;
|
|
53
|
-
export declare function createRecipeArchiveWithManifest(opts: {
|
|
54
|
-
manifest: Record<string, unknown>;
|
|
55
|
-
files?: Record<string, string>;
|
|
56
|
-
format?: "tar" | "zip";
|
|
57
|
-
wrapDir?: boolean;
|
|
58
|
-
}): Promise<string>;
|
|
59
|
-
export declare function createUnsafeRecipeArchive(opts: {
|
|
60
|
-
format: "tar" | "zip";
|
|
61
|
-
entryPath?: string;
|
|
62
|
-
}): Promise<string>;
|
|
63
|
-
export declare function createUpgradeBundle(files: Record<string, string>): Promise<{
|
|
64
|
-
bundlePath: string;
|
|
65
|
-
checksumPath: string;
|
|
66
|
-
}>;
|
|
67
|
-
export declare function mkGitRepoRootWithBranch(branch: string): Promise<string>;
|
|
68
|
-
export declare function configureGitUser(root: string): Promise<void>;
|
|
69
|
-
export declare function cleanGitEnv(): NodeJS.ProcessEnv;
|
|
70
|
-
export declare function pathExists(filePath: string): Promise<boolean>;
|
|
71
|
-
export declare function gitBranchExists(root: string, branch: string): Promise<boolean>;
|
|
72
|
-
export declare function commitAll(root: string, message: string): Promise<void>;
|
|
73
|
-
export declare function commitPathsIfChanged(root: string, paths: string[], message: string): Promise<boolean>;
|
|
74
|
-
export declare function stageGitignoreIfPresent(root: string): Promise<void>;
|
|
1
|
+
export * from "../testing/index.js";
|
|
75
2
|
//# sourceMappingURL=run-cli.test-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-cli.test-helpers.d.ts","sourceRoot":"","sources":["../../src/cli/run-cli.test-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-cli.test-helpers.d.ts","sourceRoot":"","sources":["../../src/cli/run-cli.test-helpers.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|