@rse/ase 1.0.7 → 2.0.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/dst/ase-agent-definition-api.d.ts +184 -0
- package/dst/ase-agent-definition-api.js +6 -0
- package/dst/ase-agent-definition-builtin/condenser.js +42 -0
- package/dst/ase-agent-definition-builtin/editor.js +45 -0
- package/dst/ase-agent-definition-builtin/estimator.js +98 -0
- package/dst/ase-agent-definition-builtin/implementer.js +121 -0
- package/dst/ase-agent-definition-builtin/integrator.js +56 -0
- package/dst/ase-agent-definition-builtin/qualifier.js +61 -0
- package/dst/ase-agent-definition-builtin/rebooter.js +41 -0
- package/dst/ase-agent-definition-builtin/researcher.js +77 -0
- package/dst/ase-agent-definition-core.js +827 -0
- package/dst/ase-agent-fleet.js +772 -0
- package/dst/ase-agent-process.js +232 -0
- package/dst/ase-agent-relay-client.js +509 -0
- package/dst/ase-agent-relay-core.js +213 -0
- package/dst/ase-agent-relay-server-bind.js +242 -0
- package/dst/ase-agent-relay-server-cli.js +50 -0
- package/dst/ase-agent-runtime-claim.js +189 -0
- package/dst/ase-agent-runtime-engine.js +1100 -0
- package/dst/ase-agent-runtime-exec.js +275 -0
- package/dst/ase-agent-runtime-phase.js +581 -0
- package/dst/ase-agent-runtime-request.js +272 -0
- package/dst/ase-agent-runtime-tool.js +207 -0
- package/dst/ase-agent-runtime.js +1316 -0
- package/dst/ase-agent.js +65 -0
- package/dst/ase-artifact.js +6 -5
- package/dst/ase-config-core.js +465 -0
- package/dst/ase-config-schema.js +351 -0
- package/dst/ase-config-scope.js +172 -0
- package/dst/ase-config.js +25 -585
- package/dst/ase-hook.js +228 -111
- package/dst/ase-lib-daemon-cli.js +130 -0
- package/dst/ase-lib-hash.js +20 -0
- package/dst/{ase-log.js → ase-lib-log.js} +40 -7
- package/dst/ase-lib-server-bind.js +115 -0
- package/dst/ase-lib-server-cli.js +474 -0
- package/dst/{ase-table.js → ase-lib-table.js} +1 -1
- package/dst/{ase-version.js → ase-lib-version.js} +3 -0
- package/dst/ase-man.js +96 -0
- package/dst/ase-mcp.js +166 -13
- package/dst/{ase-getopt.js → ase-service-getopt.js} +82 -80
- package/dst/{ase-markdown.js → ase-service-markdown.js} +18 -11
- package/dst/ase-service-otel.js +1246 -0
- package/dst/{ase-skills.js → ase-service-skills.js} +29 -64
- package/dst/ase-service-state.js +101 -0
- package/dst/ase-service.js +251 -76
- package/dst/ase-setup-common.js +141 -0
- package/dst/ase-setup-mcp.js +359 -0
- package/dst/ase-setup-settings.js +837 -0
- package/dst/ase-setup.js +113 -869
- package/dst/ase-spec.js +31 -19
- package/dst/ase-statusline.js +108 -43
- package/dst/ase-task-board-core.js +739 -0
- package/dst/ase-task-board-filter.js +127 -0
- package/dst/ase-task-board-flow.js +237 -0
- package/dst/ase-task-board-graph.js +497 -0
- package/dst/ase-task-board-stats.js +263 -0
- package/dst/ase-task-board-tui-control.js +775 -0
- package/dst/ase-task-board-tui-model.js +1008 -0
- package/dst/ase-task-board-tui-popup.js +626 -0
- package/dst/ase-task-board-tui-style.js +106 -0
- package/dst/ase-task-board-tui-view.js +847 -0
- package/dst/ase-task-board-tui.js +189 -0
- package/dst/ase-task-board-web-client.css +1 -0
- package/dst/ase-task-board-web-client.html +20 -0
- package/dst/ase-task-board-web-client.js +81 -0
- package/dst/ase-task-board-web-server.js +823 -0
- package/dst/ase-task-board.js +134 -0
- package/dst/ase-task-format.js +757 -0
- package/dst/ase-task-request.js +208 -0
- package/dst/ase-task-store-client.js +495 -0
- package/dst/ase-task-store-core.js +804 -0
- package/dst/ase-task-store-issues.js +237 -0
- package/dst/ase-task-store-plugin-api.js +6 -0
- package/dst/ase-task-store-plugin-ase.js +484 -0
- package/dst/ase-task-store-plugin-delegate.js +137 -0
- package/dst/ase-task-store-plugin-gitea.js +666 -0
- package/dst/ase-task-store-plugin-github.js +696 -0
- package/dst/ase-task-store-plugin-gitlab.js +668 -0
- package/dst/ase-task-store-server-bind.js +538 -0
- package/dst/ase-task-store-server-cli.js +154 -0
- package/dst/ase-task.js +1335 -357
- package/dst/{ase-compat.js → ase-util-compat.js} +2 -2
- package/dst/{ase-diagram.js → ase-util-diagram.js} +107 -32
- package/dst/{ase-meta.js → ase-util-meta.js} +2 -2
- package/dst/{ase-metric.js → ase-util-metric.js} +2 -2
- package/dst/{ase-mint.js → ase-util-mint.js} +19 -12
- package/dst/{ase-worktree.js → ase-util-worktree.js} +30 -19
- package/dst/ase-util.js +20 -0
- package/dst/ase.js +108 -32
- package/dst/man/ase-agent-adhoc.1 +515 -0
- package/dst/man/ase-agent-condenser.1 +193 -0
- package/dst/man/ase-agent-editor.1 +212 -0
- package/dst/man/ase-agent-estimator.1 +214 -0
- package/dst/man/ase-agent-fleet.1 +185 -0
- package/dst/man/ase-agent-implementer.1 +233 -0
- package/dst/man/ase-agent-integrator.1 +213 -0
- package/dst/man/ase-agent-qualifier.1 +214 -0
- package/dst/man/ase-agent-rebooter.1 +193 -0
- package/dst/man/ase-agent-relay.1 +128 -0
- package/dst/man/ase-agent-researcher.1 +217 -0
- package/dst/man/ase-agent.1 +264 -0
- package/dst/man/ase-artifact-list.1 +38 -0
- package/dst/man/ase-artifact-name.1 +39 -0
- package/dst/man/ase-artifact.1 +56 -0
- package/dst/man/ase-config-delete.1 +45 -0
- package/dst/man/ase-config-edit.1 +48 -0
- package/dst/man/ase-config-get.1 +46 -0
- package/dst/man/ase-config-init.1 +60 -0
- package/dst/man/ase-config-list.1 +42 -0
- package/dst/man/ase-config-set.1 +52 -0
- package/dst/man/ase-config.1 +225 -0
- package/dst/man/ase-hook-permission-request.1 +36 -0
- package/dst/man/ase-hook-pre-tool-use.1 +59 -0
- package/dst/man/ase-hook-session-end.1 +47 -0
- package/dst/man/ase-hook-session-persona.1 +37 -0
- package/dst/man/ase-hook-session-start.1 +81 -0
- package/dst/man/ase-hook-stop.1 +34 -0
- package/dst/man/ase-hook-user-prompt-submit.1 +34 -0
- package/dst/man/ase-hook.1 +51 -0
- package/dst/man/ase-man.1 +67 -0
- package/dst/man/ase-mcp.1 +61 -0
- package/dst/man/ase-service-log.1 +43 -0
- package/dst/man/ase-service-send.1 +47 -0
- package/dst/man/ase-service-start.1 +54 -0
- package/dst/man/ase-service-status.1 +46 -0
- package/dst/man/ase-service-stop.1 +37 -0
- package/dst/man/ase-service.1 +85 -0
- package/dst/man/ase-setup-disable.1 +44 -0
- package/dst/man/ase-setup-enable.1 +45 -0
- package/dst/man/ase-setup-install.1 +73 -0
- package/dst/man/ase-setup-mcp.1 +124 -0
- package/dst/man/ase-setup-status.1 +60 -0
- package/dst/man/ase-setup-statusline.1 +92 -0
- package/dst/man/ase-setup-telemetry.1 +92 -0
- package/dst/man/ase-setup-uninstall.1 +59 -0
- package/dst/man/ase-setup-update.1 +64 -0
- package/dst/man/ase-setup.1 +93 -0
- package/dst/man/ase-spec-export.1 +62 -0
- package/dst/man/ase-spec-lint.1 +40 -0
- package/dst/man/ase-spec-preview.1 +40 -0
- package/dst/man/ase-spec.1 +46 -0
- package/dst/man/ase-statusline.1 +189 -0
- package/dst/man/ase-task-assign.1 +71 -0
- package/dst/man/ase-task-board.1 +384 -0
- package/dst/man/ase-task-delete.1 +35 -0
- package/dst/man/ase-task-edit.1 +46 -0
- package/dst/man/ase-task-idscheme.1 +65 -0
- package/dst/man/ase-task-lifecycle.1 +57 -0
- package/dst/man/ase-task-list.1 +47 -0
- package/dst/man/ase-task-load.1 +36 -0
- package/dst/man/ase-task-newid.1 +61 -0
- package/dst/man/ase-task-purge.1 +37 -0
- package/dst/man/ase-task-rename.1 +44 -0
- package/dst/man/ase-task-request.1 +61 -0
- package/dst/man/ase-task-save.1 +48 -0
- package/dst/man/ase-task-status.1 +55 -0
- package/dst/man/ase-task-store.1 +194 -0
- package/dst/man/ase-task-view.1 +40 -0
- package/dst/man/ase-task.1 +160 -0
- package/dst/man/ase-util-compat.1 +25 -0
- package/dst/man/ase-util-diagram.1 +76 -0
- package/dst/man/ase-util-meta.1 +45 -0
- package/dst/man/ase-util-metric.1 +54 -0
- package/dst/man/ase-util-mint.1 +59 -0
- package/dst/man/ase-util-worktree.1 +72 -0
- package/dst/man/ase-util.1 +50 -0
- package/dst/man/ase.1 +124 -0
- package/package.json +79 -21
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/agents/ase-meta-diagram.md +12 -8
- package/plugin/agents/ase-repo-review.md +322 -0
- package/plugin/hooks/hooks-codex.json +5 -0
- package/plugin/hooks/hooks-copilot.json +5 -0
- package/plugin/hooks/hooks.json +8 -0
- package/plugin/meta/ase-common-approach.md +117 -0
- package/plugin/meta/ase-common-changeset.md +256 -0
- package/plugin/meta/ase-common-code.md +10 -173
- package/plugin/meta/ase-common-grill.md +317 -0
- package/plugin/meta/ase-common-resolve.md +305 -0
- package/plugin/meta/ase-common-task.md +83 -4
- package/plugin/meta/ase-constitution.md +0 -2
- package/plugin/meta/ase-format-specbook.md +208 -25
- package/plugin/meta/ase-format-specbook.yaml +242 -851
- package/plugin/meta/ase-format-task.md +669 -125
- package/plugin/meta/ase-persona.md +3 -4
- package/plugin/meta/ase-skill.md +9 -0
- package/plugin/mods/ase-mods.ts +409 -0
- package/plugin/mods/claude-code.d.ts +13417 -0
- package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-arch-analyze/help.md +2 -2
- package/plugin/skills/ase-code-analyze/SKILL.md +59 -8
- package/plugin/skills/ase-code-analyze/help.md +29 -4
- package/plugin/skills/ase-code-edit/SKILL.md +107 -181
- package/plugin/skills/ase-code-edit/help.md +118 -31
- package/plugin/skills/ase-code-lint/SKILL.md +64 -13
- package/plugin/skills/ase-code-lint/help.md +32 -2
- package/plugin/skills/ase-docs-proofread/SKILL.md +4 -4
- package/plugin/skills/ase-docs-proofread/help.md +1 -1
- package/plugin/skills/ase-docs-refine/SKILL.md +4 -4
- package/plugin/skills/ase-docs-shorten/SKILL.md +4 -4
- package/plugin/skills/ase-help-intent/data.md +2164 -1087
- package/plugin/skills/ase-help-intent/help.md +1 -1
- package/plugin/skills/ase-help-skill/catalog.md +12 -9
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +1 -1
- package/plugin/skills/ase-meta-config/SKILL.md +3 -4
- package/plugin/skills/ase-meta-config/help.md +31 -10
- package/plugin/skills/ase-meta-mint/SKILL.md +5 -5
- package/plugin/skills/ase-meta-mint/help.md +10 -5
- package/plugin/skills/ase-meta-why/help.md +1 -1
- package/plugin/skills/ase-meta-workflow/SKILL.md +7 -7
- package/plugin/skills/ase-meta-workflow/help.md +4 -4
- package/plugin/skills/ase-meta-workflow/sample.md +3 -3
- package/plugin/skills/ase-meta-workflow/workflow.txt +22 -18
- package/plugin/skills/{ase-meta-changelog → ase-repo-changelog}/SKILL.md +4 -3
- package/plugin/skills/{ase-meta-changelog → ase-repo-changelog}/help.md +5 -5
- package/plugin/skills/{ase-meta-commit → ase-repo-commit}/SKILL.md +6 -6
- package/plugin/skills/{ase-meta-commit → ase-repo-commit}/help.md +5 -5
- package/plugin/skills/{ase-meta-diff → ase-repo-diff}/SKILL.md +6 -6
- package/plugin/skills/{ase-meta-diff → ase-repo-diff}/help.md +8 -8
- package/plugin/skills/{ase-code-dissect → ase-repo-dissect}/SKILL.md +19 -19
- package/plugin/skills/{ase-code-dissect → ase-repo-dissect}/help.md +10 -12
- package/plugin/skills/ase-repo-merge/SKILL.md +346 -0
- package/plugin/skills/ase-repo-merge/help.md +107 -0
- package/plugin/skills/ase-repo-resolve/SKILL.md +158 -0
- package/plugin/skills/ase-repo-resolve/help.md +102 -0
- package/plugin/skills/ase-repo-review/SKILL.md +406 -0
- package/plugin/skills/ase-repo-review/help.md +181 -0
- package/plugin/skills/ase-spec-edit/SKILL.md +117 -183
- package/plugin/skills/ase-spec-edit/help.md +107 -26
- package/plugin/skills/ase-sync-reconcile/help.md +1 -1
- package/plugin/skills/ase-task-assign/SKILL.md +111 -0
- package/plugin/skills/ase-task-assign/help.md +119 -0
- package/plugin/skills/ase-task-condense/SKILL.md +21 -21
- package/plugin/skills/ase-task-condense/help.md +12 -10
- package/plugin/skills/ase-task-delete/SKILL.md +1 -1
- package/plugin/skills/ase-task-dissect/SKILL.md +71 -48
- package/plugin/skills/ase-task-dissect/help.md +10 -9
- package/plugin/skills/ase-task-edit/SKILL.md +379 -94
- package/plugin/skills/ase-task-edit/help.md +95 -22
- package/plugin/skills/ase-task-estimate/SKILL.md +492 -0
- package/plugin/skills/ase-task-estimate/help.md +158 -0
- package/plugin/skills/ase-task-grill/SKILL.md +246 -138
- package/plugin/skills/ase-task-grill/help.md +129 -26
- package/plugin/skills/ase-task-id/SKILL.md +8 -1
- package/plugin/skills/ase-task-id/help.md +6 -3
- package/plugin/skills/ase-task-implement/SKILL.md +535 -145
- package/plugin/skills/ase-task-implement/help.md +138 -47
- package/plugin/skills/ase-task-integrate/SKILL.md +549 -0
- package/plugin/skills/ase-task-integrate/help.md +187 -0
- package/plugin/skills/ase-task-list/SKILL.md +55 -23
- package/plugin/skills/ase-task-list/help.md +45 -21
- package/plugin/skills/ase-task-reboot/SKILL.md +84 -43
- package/plugin/skills/ase-task-reboot/help.md +28 -8
- package/plugin/skills/ase-task-rename/SKILL.md +10 -2
- package/plugin/skills/ase-task-research/SKILL.md +386 -0
- package/plugin/skills/ase-task-research/help.md +102 -0
- package/plugin/skills/ase-task-status/SKILL.md +137 -0
- package/plugin/skills/ase-task-status/help.md +80 -0
- package/plugin/skills/ase-task-view/SKILL.md +49 -24
- package/plugin/skills/ase-task-view/help.md +19 -9
- package/plugin/agents/ase-meta-review.md +0 -187
- package/plugin/skills/ase-code-craft/SKILL.md +0 -264
- package/plugin/skills/ase-code-craft/help.md +0 -122
- package/plugin/skills/ase-code-refactor/SKILL.md +0 -232
- package/plugin/skills/ase-code-refactor/help.md +0 -109
- package/plugin/skills/ase-code-resolve/SKILL.md +0 -289
- package/plugin/skills/ase-code-resolve/help.md +0 -116
- package/plugin/skills/ase-meta-review/SKILL.md +0 -210
- package/plugin/skills/ase-meta-review/help.md +0 -96
- package/plugin/skills/ase-task-preflight/SKILL.md +0 -166
- package/plugin/skills/ase-task-preflight/help.md +0 -82
- /package/dst/{ase-ignore.js → ase-lib-ignore.js} +0 -0
- /package/dst/{ase-stdio.js → ase-lib-stdio.js} +0 -0
- /package/dst/{ase-kv.js → ase-service-kv.js} +0 -0
- /package/dst/{ase-sleep.js → ase-service-sleep.js} +0 -0
- /package/dst/{ase-timestamp.js → ase-service-timestamp.js} +0 -0
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-task-integrate
|
|
3
|
+
argument-hint: "[--help|-h] [--next|-n <option>[,...]] [--worktree|-w <name>] [--changeset|-c <changeset>] [--draft|-d] [--target|-t <target>] [--mode|-m merge|rebase|squash] [--no-cleanup|-K] [--stateless|-S] [<id>]"
|
|
4
|
+
description: >
|
|
5
|
+
Integrate the change set or implementation draft of the current or given
|
|
6
|
+
task plan into its target. Use when the user calls to "deliver" or
|
|
7
|
+
"apply" the change set or draft of the "task" or "plan". For merging
|
|
8
|
+
a plain Git branch, use `ase-repo-merge` instead.
|
|
9
|
+
user-invocable: true
|
|
10
|
+
disable-model-invocation: false
|
|
11
|
+
effort: high
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
15
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
16
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
17
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
18
|
+
|
|
19
|
+
<purpose name="ase-task-integrate">
|
|
20
|
+
Integrate a Task Change Set
|
|
21
|
+
</purpose>
|
|
22
|
+
|
|
23
|
+
<expand name="getopt"
|
|
24
|
+
arg1="ase-task-integrate"
|
|
25
|
+
arg2="--next|-n=(none|DONE|DELETE)... --worktree|-w= --changeset|-c= --draft|-d --target|-t= --mode|-m=(merge|rebase|squash) --no-cleanup|-K --stateless|-S --int-reuse-task">
|
|
26
|
+
$ARGUMENTS
|
|
27
|
+
</expand>
|
|
28
|
+
|
|
29
|
+
<objective>
|
|
30
|
+
*Integrate* the change set of the task plan from its *changeset*
|
|
31
|
+
location into its *target* through a Git merge.
|
|
32
|
+
</objective>
|
|
33
|
+
|
|
34
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
35
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md
|
|
36
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-changeset.md
|
|
37
|
+
|
|
38
|
+
<define name="integrate-temp-remove">
|
|
39
|
+
If <temp-dir/> is not empty, remove the temporary worktree and branch
|
|
40
|
+
by running the commands `git worktree remove --force "<temp-dir/>"`,
|
|
41
|
+
`git worktree prune`, and `git branch -D "<temp-branch/>"` (taken
|
|
42
|
+
exactly as given), ignoring any failure, and set <temp-dir></temp-dir>
|
|
43
|
+
(empty). Do not output anything.
|
|
44
|
+
</define>
|
|
45
|
+
|
|
46
|
+
Procedure
|
|
47
|
+
---------
|
|
48
|
+
|
|
49
|
+
1. **Determine Task:**
|
|
50
|
+
|
|
51
|
+
1. Set <instruction><getopt-arguments/></instruction> initially, with any
|
|
52
|
+
leading and trailing whitespace stripped, and set <temp-dir></temp-dir>
|
|
53
|
+
(empty). Inherit the always existing <ase-task-id/> from the current
|
|
54
|
+
context. Inherit the always existing <ase-session-id/> from the
|
|
55
|
+
current context. Do not output anything.
|
|
56
|
+
|
|
57
|
+
2. React on task id:
|
|
58
|
+
|
|
59
|
+
<expand name="task-react-id" arg1="ase-task-integrate"></expand>
|
|
60
|
+
|
|
61
|
+
3. Resolve the draft shorthand: if <getopt-option-draft/> is `true`
|
|
62
|
+
and <getopt-option-changeset/> is not empty, only output the
|
|
63
|
+
following <template/> and then immediately *STOP* processing the
|
|
64
|
+
entire current skill:
|
|
65
|
+
|
|
66
|
+
<template>
|
|
67
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: options `--draft` and `--changeset` are mutually exclusive
|
|
68
|
+
</template>
|
|
69
|
+
|
|
70
|
+
Otherwise, if <getopt-option-draft/> is `true`, set
|
|
71
|
+
<getopt-option-changeset>attachment:draft</getopt-option-changeset>,
|
|
72
|
+
so the *implementation draft* in the attachment `draft` of the
|
|
73
|
+
plan is delivered. Do not output anything.
|
|
74
|
+
|
|
75
|
+
2. **Determine Operation:**
|
|
76
|
+
|
|
77
|
+
1. Determine the current task plan content:
|
|
78
|
+
|
|
79
|
+
<expand name="task-load-content"></expand>
|
|
80
|
+
|
|
81
|
+
2. If the <task-content/> is still empty, complain and tell the user to
|
|
82
|
+
use the `ase-task-edit` skill first to create a task plan, and
|
|
83
|
+
`ase-task-implement` to create its change set. Then immediately
|
|
84
|
+
stop processing this skill.
|
|
85
|
+
|
|
86
|
+
3. <if condition="<getopt-option-stateless/> is not equal `true`, the task lifecycle model <ase-project-task-lifecycle/> is `solo`, and the `Status:` frontmatter key of <task-content/> is present and not equal `OPEN`">
|
|
87
|
+
Only an `OPEN` plan can be integrated in the `solo` model, as
|
|
88
|
+
only `OPEN` transitions directly into `CLOSED`. Set <status/> to
|
|
89
|
+
the value of this key. Only output the
|
|
90
|
+
following <template/>, directly followed by the hint, and then
|
|
91
|
+
immediately *STOP* processing the entire current skill, leaving
|
|
92
|
+
the plan and the artifacts *untouched*:
|
|
93
|
+
|
|
94
|
+
<template>
|
|
95
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: plan with status **<status/>** cannot be integrated (expected **OPEN**)
|
|
96
|
+
</template>
|
|
97
|
+
|
|
98
|
+
<ase-tpl-hint level="minimal">
|
|
99
|
+
Run `/ase-task-status OPEN` first to re-open the plan.
|
|
100
|
+
</ase-tpl-hint>
|
|
101
|
+
</if>
|
|
102
|
+
|
|
103
|
+
3. **Prepare Changeset and Target:**
|
|
104
|
+
|
|
105
|
+
The *changeset* (location of the change set) and the *target*
|
|
106
|
+
(place of integration) are controlled by the `Changeset:` and
|
|
107
|
+
`Target:` frontmatter keys of the plan, which the `--changeset` and
|
|
108
|
+
`--target` options override *ad-hoc* without changing the plan.
|
|
109
|
+
The `worktree` value of the changeset refers to the *context
|
|
110
|
+
worktree*, selected by the `--worktree` option, the `worktree` value
|
|
111
|
+
of the target (and of the source it may refer to) to the *origin
|
|
112
|
+
working copy* the skill was started in (both are the same without
|
|
113
|
+
`--worktree`). An integration never creates a context worktree.
|
|
114
|
+
|
|
115
|
+
1. Set <task-changeset/> to <getopt-option-changeset/> if it is not
|
|
116
|
+
empty, otherwise to the value of the `Changeset:` frontmatter key
|
|
117
|
+
of <task-content/>, or to the configured default
|
|
118
|
+
<ase-project-task-default-changeset/> if the key is absent, and
|
|
119
|
+
parse it:
|
|
120
|
+
|
|
121
|
+
<expand name="changeset-value"
|
|
122
|
+
arg1="Changeset"
|
|
123
|
+
arg2="<task-changeset/>"
|
|
124
|
+
arg3="`worktree`, `branch`, `attachment`"
|
|
125
|
+
arg4="◉ task: **<ase-task-id/>**"></expand>
|
|
126
|
+
|
|
127
|
+
Set <changeset-type><value-type/></changeset-type> and
|
|
128
|
+
<changeset-name><value-name/></changeset-name>.
|
|
129
|
+
|
|
130
|
+
2. <if condition="<getopt-option-worktree/> is not empty and <changeset-type/> is not `worktree`">
|
|
131
|
+
The context worktree serves the `worktree` changeset only, so a
|
|
132
|
+
`branch:` or `attachment:` changeset would leave it unused (e.g.
|
|
133
|
+
on a mistyped option). Only output the following <template/> and
|
|
134
|
+
then immediately *STOP* processing the entire current skill,
|
|
135
|
+
leaving the working copy *untouched*:
|
|
136
|
+
|
|
137
|
+
<template>
|
|
138
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: option `--worktree` requires a `worktree` changeset (got **<task-changeset/>**)
|
|
139
|
+
</template>
|
|
140
|
+
</if>
|
|
141
|
+
|
|
142
|
+
Otherwise, prepare the context worktree:
|
|
143
|
+
|
|
144
|
+
<expand name="changeset-context"
|
|
145
|
+
arg1="<getopt-option-worktree/>"
|
|
146
|
+
arg2="◉ task: **<ase-task-id/>**"
|
|
147
|
+
arg3="false"
|
|
148
|
+
arg4="false"></expand>
|
|
149
|
+
|
|
150
|
+
3. Set <task-target/> to <getopt-option-target/> if it is not
|
|
151
|
+
empty, otherwise to the value of the `Target:` frontmatter key of
|
|
152
|
+
<task-content/>, or to the configured default
|
|
153
|
+
<ase-project-task-default-target/> if the key is absent, and parse
|
|
154
|
+
it:
|
|
155
|
+
|
|
156
|
+
<expand name="changeset-value"
|
|
157
|
+
arg1="Target"
|
|
158
|
+
arg2="<task-target/>"
|
|
159
|
+
arg3="`worktree`, `branch`, `source`"
|
|
160
|
+
arg4="◉ task: **<ase-task-id/>**"></expand>
|
|
161
|
+
|
|
162
|
+
Set <target-type><value-type/></target-type> and
|
|
163
|
+
<target-name><value-name/></target-name>. If <target-type/> is
|
|
164
|
+
`source`, the target is whatever the `Source:` frontmatter key of
|
|
165
|
+
<task-content/> refers to (or the configured default
|
|
166
|
+
<ase-project-task-default-source/> if the key is absent):
|
|
167
|
+
set <task-target/> to this value and parse it:
|
|
168
|
+
|
|
169
|
+
<expand name="changeset-value"
|
|
170
|
+
arg1="Source"
|
|
171
|
+
arg2="<task-target/>"
|
|
172
|
+
arg3="`worktree`, `branch`"
|
|
173
|
+
arg4="◉ task: **<ase-task-id/>**"></expand>
|
|
174
|
+
|
|
175
|
+
Set <target-type><value-type/></target-type> and
|
|
176
|
+
<target-name><value-name/></target-name>.
|
|
177
|
+
|
|
178
|
+
4. Determine the *target branch* <target-branch/>: if <target-type/>
|
|
179
|
+
is `worktree`, capture the output of the command
|
|
180
|
+
`git -C "<origin-dir/>" branch --show-current`, otherwise set it
|
|
181
|
+
to <target-name/>. If <target-branch/> is empty (detached `HEAD`)
|
|
182
|
+
or the command
|
|
183
|
+
`git rev-parse --verify --quiet "refs/heads/<target-branch/>"`
|
|
184
|
+
fails, only output the following <template/> and then
|
|
185
|
+
immediately *STOP* processing the entire current skill:
|
|
186
|
+
|
|
187
|
+
<template>
|
|
188
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: target **<task-target/>** is no existing branch
|
|
189
|
+
</template>
|
|
190
|
+
|
|
191
|
+
5. Determine the *merge source branch* <merge-source/> according to
|
|
192
|
+
<changeset-type/>:
|
|
193
|
+
|
|
194
|
+
- `worktree`: Capture the output of the command
|
|
195
|
+
`git -C "<context-dir/>" branch --show-current` into
|
|
196
|
+
<merge-source/>. If it is empty (detached `HEAD`), only output
|
|
197
|
+
the following <template/> and then immediately *STOP*
|
|
198
|
+
processing the entire current skill:
|
|
199
|
+
|
|
200
|
+
<template>
|
|
201
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: worktree **<context-label/>** has no checked-out branch
|
|
202
|
+
</template>
|
|
203
|
+
|
|
204
|
+
- `branch`: Set <merge-source><changeset-name/></merge-source>.
|
|
205
|
+
If the command
|
|
206
|
+
`git rev-parse --verify --quiet "refs/heads/<merge-source/>"`
|
|
207
|
+
fails, only output the following <template/> and then
|
|
208
|
+
immediately *STOP* processing the entire current skill:
|
|
209
|
+
|
|
210
|
+
<template>
|
|
211
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: changeset branch **<merge-source/>** does not exist
|
|
212
|
+
</template>
|
|
213
|
+
|
|
214
|
+
- `attachment`: The change set is materialized on a *temporary*
|
|
215
|
+
branch at the commit it is based on, so that the merge below
|
|
216
|
+
can resolve any drift of the target semantically.
|
|
217
|
+
|
|
218
|
+
1. <if condition="the backmatter of <task-content/> contains NO attachment block with the `Type` key value `text/x-diff; charset=utf-8; kind="<changeset-name/>"`">
|
|
219
|
+
Only output the following <template/>, directly followed
|
|
220
|
+
by the hint, and then immediately *STOP* processing the
|
|
221
|
+
entire current skill:
|
|
222
|
+
|
|
223
|
+
<template>
|
|
224
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: no change set attachment **<changeset-name/>** exists
|
|
225
|
+
</template>
|
|
226
|
+
|
|
227
|
+
<ase-tpl-hint level="minimal">
|
|
228
|
+
Run `/ase-task-implement --changeset <task-changeset/>` first to create the change set attachment.
|
|
229
|
+
</ase-tpl-hint>
|
|
230
|
+
</if>
|
|
231
|
+
|
|
232
|
+
2. <if condition="this attachment block is *stale* according to the plan <format/> (its `Modified` key is absent or older than the `Modified` key of the frontmatter)">
|
|
233
|
+
The change set was created for an *earlier* version of
|
|
234
|
+
the plan, so integrating it would deliver the wrong plan.
|
|
235
|
+
Only output the following <template/>, directly followed
|
|
236
|
+
by the hint, and then immediately *STOP* processing the
|
|
237
|
+
entire current skill, leaving the plan and the artifacts
|
|
238
|
+
*untouched*:
|
|
239
|
+
|
|
240
|
+
<template>
|
|
241
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: change set attachment **<changeset-name/>** is **stale** (older than the plan)
|
|
242
|
+
</template>
|
|
243
|
+
|
|
244
|
+
<ase-tpl-hint level="minimal">
|
|
245
|
+
Run `/ase-task-implement --changeset <task-changeset/>` again or remove the attachment.
|
|
246
|
+
</ase-tpl-hint>
|
|
247
|
+
</if>
|
|
248
|
+
|
|
249
|
+
3. <if condition="the `Desc` key of this attachment block carries a `merged <commit/>` value according to the plan <format/>">
|
|
250
|
+
The change set was already *delivered* by an earlier
|
|
251
|
+
integration, so integrating it again would replay it onto
|
|
252
|
+
a target which already contains it. Set <merged-commit/>
|
|
253
|
+
to this <commit/>, only output the following <template/>,
|
|
254
|
+
directly followed by the hint, and then immediately *STOP*
|
|
255
|
+
processing the entire current skill, leaving the plan and
|
|
256
|
+
the artifacts *untouched*:
|
|
257
|
+
|
|
258
|
+
<template>
|
|
259
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: change set attachment **<changeset-name/>** was already integrated (merged **<merged-commit/>**)
|
|
260
|
+
</template>
|
|
261
|
+
|
|
262
|
+
<ase-tpl-hint level="minimal">
|
|
263
|
+
Run `/ase-task-implement --changeset <task-changeset/>` to create a new change set or remove the attachment.
|
|
264
|
+
</ase-tpl-hint>
|
|
265
|
+
</if>
|
|
266
|
+
|
|
267
|
+
4. Set <temp-base/> to the commit of the `base <commit/>`
|
|
268
|
+
value of the `Desc:` key of this attachment block. If
|
|
269
|
+
the key is absent or the command
|
|
270
|
+
`git rev-parse --verify --quiet "<temp-base/>^{commit}"`
|
|
271
|
+
fails, set <temp-base><target-branch/></temp-base>
|
|
272
|
+
instead.
|
|
273
|
+
|
|
274
|
+
5. Set <temp-hash/> to the first 8 characters of the output
|
|
275
|
+
of the `ase_mint(type: "sha1", hint:
|
|
276
|
+
"<ase-task-id/>:<changeset-name/>:integrate")` tool of the
|
|
277
|
+
`ase` MCP server, which keeps <temp-id/> *unique* per task
|
|
278
|
+
and attachment. Set <temp-id/> to <ase-task-id/> with all
|
|
279
|
+
characters other than `A-Z`, `a-z`, `0-9`, `_`, and `-`
|
|
280
|
+
stripped, followed by
|
|
281
|
+
`-<changeset-name/>-integrate-<temp-hash/>`, and set
|
|
282
|
+
<temp-branch>ase-integrate/<temp-id/></temp-branch>.
|
|
283
|
+
Determine <temp-dir/> by calling the `ase_worktree_path(id:
|
|
284
|
+
"<temp-id/>", temp: true, create: true)` tool of the `ase`
|
|
285
|
+
MCP server, which places it into the namespace of the
|
|
286
|
+
*temporary* worktrees, disjoint from all other worktrees.
|
|
287
|
+
You *MUST* *NEVER* assemble this path yourself.
|
|
288
|
+
|
|
289
|
+
<if condition="<temp-dir/> exists and is *not* a worktree registered according to `git worktree list --porcelain` whose record carries the line `branch refs/heads/<temp-branch/>`">
|
|
290
|
+
It is *not* owned by this skill, so set
|
|
291
|
+
<temp-dir></temp-dir> (empty) to protect it from any
|
|
292
|
+
removal, only output the following <template/>, and then
|
|
293
|
+
immediately *STOP* processing the entire current skill,
|
|
294
|
+
leaving the task plan *untouched*:
|
|
295
|
+
|
|
296
|
+
<template>
|
|
297
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: directory **<temp-id/>** for attachment **<changeset-name/>** exists, but is no temporary worktree
|
|
298
|
+
</template>
|
|
299
|
+
</if>
|
|
300
|
+
|
|
301
|
+
Otherwise, remove any *leftover* of an earlier run which
|
|
302
|
+
stopped before its cleanup by expanding the following, and
|
|
303
|
+
then determine <temp-dir/> once again the same way:
|
|
304
|
+
|
|
305
|
+
<expand name="integrate-temp-remove"></expand>
|
|
306
|
+
|
|
307
|
+
6. Create the temporary worktree and branch by running the
|
|
308
|
+
command
|
|
309
|
+
`git worktree add -b "<temp-branch/>" "<temp-dir/>" "<temp-base/>"`
|
|
310
|
+
(taken exactly as given), and apply the `Data` payload of
|
|
311
|
+
the attachment block inside it *verbatim*. As this payload
|
|
312
|
+
is *elided* in <task-content/>, fetch it via the
|
|
313
|
+
`ase_task_attachment(id: "<ase-task-id/>", type: "text/x-diff;
|
|
314
|
+
charset=utf-8; kind=\"<changeset-name/>\"")` tool of the `ase`
|
|
315
|
+
MCP server, whose `text` output field is the payload
|
|
316
|
+
*verbatim* (without any indentation), and apply it, e.g. via
|
|
317
|
+
`git -C "<temp-dir/>" apply --3way`, re-applying hunks
|
|
318
|
+
which no longer apply manually. You *MUST* *NEVER* modify
|
|
319
|
+
anything *outside* of <temp-dir/>. Leave the change set
|
|
320
|
+
*uncommitted*, as the merge below commits it. Set
|
|
321
|
+
<merge-source><temp-branch/></merge-source>.
|
|
322
|
+
|
|
323
|
+
If any of these sub-steps fails, expand the following:
|
|
324
|
+
|
|
325
|
+
<expand name="integrate-temp-remove"></expand>
|
|
326
|
+
|
|
327
|
+
Then only output the following <template/> and then
|
|
328
|
+
immediately *STOP* processing the entire current skill,
|
|
329
|
+
leaving the task plan *untouched*:
|
|
330
|
+
|
|
331
|
+
<template>
|
|
332
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: change set attachment **<changeset-name/>** failed to materialize
|
|
333
|
+
</template>
|
|
334
|
+
|
|
335
|
+
6. Check that the change set can be delivered at all. Determine the
|
|
336
|
+
*change set directory* <merge-dir/>: for <changeset-type/>
|
|
337
|
+
`worktree` it is <context-dir/>, for `attachment` it is
|
|
338
|
+
<temp-dir/>, and for `branch` it is the directory of the
|
|
339
|
+
registered worktree in which <merge-source/> is checked out
|
|
340
|
+
according to `git worktree list --porcelain` (or empty if there
|
|
341
|
+
is none). Do not output anything, except for the templates
|
|
342
|
+
below.
|
|
343
|
+
|
|
344
|
+
- <if condition="<merge-source/> is equal <target-branch/> and (<changeset-type/> is not `worktree` or <context-dir/> differs from <origin-dir/>)">
|
|
345
|
+
The change set and the target are the very same branch --
|
|
346
|
+
either in a separate context worktree, so nothing would ever
|
|
347
|
+
reach the origin working copy, or selected as `branch:`
|
|
348
|
+
changeset, so a merge would just commit its uncommitted
|
|
349
|
+
changes in place, which only the `worktree` changeset of the
|
|
350
|
+
origin working copy documents. Expand the following, then only
|
|
351
|
+
output the following <template/>, directly followed by the
|
|
352
|
+
hint, and then immediately *STOP* processing the entire
|
|
353
|
+
current skill, leaving the plan and the artifacts *untouched*:
|
|
354
|
+
|
|
355
|
+
<expand name="integrate-temp-remove"></expand>
|
|
356
|
+
|
|
357
|
+
<template>
|
|
358
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: change set and target are the same branch **<target-branch/>**
|
|
359
|
+
</template>
|
|
360
|
+
|
|
361
|
+
<ase-tpl-hint level="minimal">
|
|
362
|
+
Use `--target branch:<name>` to select a different target branch.
|
|
363
|
+
</ase-tpl-hint>
|
|
364
|
+
</if>
|
|
365
|
+
|
|
366
|
+
- <elseif condition="the command `git rev-list --count "<target-branch/>..<merge-source/>"` reports `0` and either <merge-dir/> is empty or the command `git -C "<merge-dir/>" status --porcelain` reports no output">
|
|
367
|
+
The change set carries neither commits beyond the target nor
|
|
368
|
+
uncommitted changes, so an integration would report a
|
|
369
|
+
success without delivering anything. Expand the following,
|
|
370
|
+
then only output the following <template/> and then
|
|
371
|
+
immediately *STOP* processing the entire current skill,
|
|
372
|
+
leaving the plan and the artifacts *untouched*:
|
|
373
|
+
|
|
374
|
+
<expand name="integrate-temp-remove"></expand>
|
|
375
|
+
|
|
376
|
+
<template>
|
|
377
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: nothing to integrate -- change set **<task-changeset/>** carries no changes beyond target **<target-branch/>**
|
|
378
|
+
</template>
|
|
379
|
+
</elseif>
|
|
380
|
+
|
|
381
|
+
4. **Integrate Change Set:**
|
|
382
|
+
|
|
383
|
+
1. <if condition="<getopt-option-stateless/> is not equal `true` and the task lifecycle model <ase-project-task-lifecycle/> defines the state `INTEGRATING` (i.e. `enterprise`)">
|
|
384
|
+
Mark the plan as being integrated: set the `Status:` key of
|
|
385
|
+
<task-content/> to `INTEGRATING` (*creating* the key at its
|
|
386
|
+
position in the key order of the plan <format/> if absent), but
|
|
387
|
+
*only* if `INTEGRATING` is reachable from the current state along
|
|
388
|
+
the transitions of the task lifecycle model -- from `QUALIFIED`
|
|
389
|
+
or `DEFERRED` (via `QUALIFIED`), or from `IMPLEMENTED` (via
|
|
390
|
+
`QUALIFYING` and `QUALIFIED`, as the explicit integration request
|
|
391
|
+
of the user counts as the qualification) -- and persist this
|
|
392
|
+
frontmatter-only change -- without refreshing the `Modified:` key
|
|
393
|
+
-- by calling the `ase_task_save(id: "<ase-task-id/>", text:
|
|
394
|
+
"<task-content/>")` tool of the `ase` MCP server. Do not output
|
|
395
|
+
anything.
|
|
396
|
+
</if>
|
|
397
|
+
|
|
398
|
+
2. Capture the outputs of the commands
|
|
399
|
+
`git rev-parse "refs/heads/<target-branch/>"` and
|
|
400
|
+
`git rev-parse "refs/heads/<target-branch/>^{tree}"` into
|
|
401
|
+
<target-before/> and <target-tree-before/>, the target branch
|
|
402
|
+
and its content *before* the merge. Do not output anything.
|
|
403
|
+
|
|
404
|
+
3. Set <merge-args>--target "<target-branch/>" --mode "<getopt-option-mode/>"</merge-args>,
|
|
405
|
+
which passes the merge mode (`merge`, `rebase`, or `squash`)
|
|
406
|
+
through. If <changeset-type/> is `attachment`, or
|
|
407
|
+
<getopt-option-no-cleanup/> is not equal `true`, append
|
|
408
|
+
` --cleanup` to <merge-args/>, so the merged source branch (and
|
|
409
|
+
its worktree) is removed afterwards. Then merge the change set by
|
|
410
|
+
invoking the `ase-repo-merge` skill, which commits still
|
|
411
|
+
uncommitted changes of the source branch, resolves merge
|
|
412
|
+
conflicts semantically, and checks that the source branch landed:
|
|
413
|
+
|
|
414
|
+
<skill name="ase:ase-repo-merge" args="<merge-args/> <merge-source/>" result="merge-result"/>
|
|
415
|
+
|
|
416
|
+
Set <merge-verdict/> to the `MERGE VERDICT` reported by the
|
|
417
|
+
`ase-repo-merge` skill in <merge-result/> (`MERGED`,
|
|
418
|
+
`CONFLICT`, or `FAILED`), or to `FAILED` if it reported none.
|
|
419
|
+
|
|
420
|
+
4. <if condition="<merge-verdict/> is `MERGED` and the output of the command `git rev-parse "refs/heads/<target-branch/>^{tree}"` equals <target-tree-before/>">
|
|
421
|
+
The merge succeeded, but the content of the target is unchanged,
|
|
422
|
+
as the change set already landed earlier (e.g. on a repeated
|
|
423
|
+
integration), so nothing was delivered: set
|
|
424
|
+
<merge-verdict>NOOP</merge-verdict>. Capture the output of the
|
|
425
|
+
command `git rev-parse "refs/heads/<target-branch/>"` into
|
|
426
|
+
<target-after/>, and if it differs from <target-before/> and the
|
|
427
|
+
output of the command
|
|
428
|
+
`git rev-parse "refs/heads/<target-branch/>^1"` equals
|
|
429
|
+
<target-before/>, drop the resulting empty commit by running
|
|
430
|
+
the command
|
|
431
|
+
`git update-ref "refs/heads/<target-branch/>" "<target-before/>" "<target-after/>"`
|
|
432
|
+
(taken exactly as given), which leaves the index and working tree
|
|
433
|
+
of the target intact, as their content is unchanged. Do not
|
|
434
|
+
output anything.
|
|
435
|
+
</if>
|
|
436
|
+
|
|
437
|
+
5. If <changeset-type/> is `attachment`, expand the following:
|
|
438
|
+
|
|
439
|
+
<expand name="integrate-temp-remove"></expand>
|
|
440
|
+
|
|
441
|
+
6. Update the frontmatter and backmatter of <task-content/> as
|
|
442
|
+
follows, but persist them *only* if anything changed:
|
|
443
|
+
|
|
444
|
+
- <if condition="<getopt-option-stateless/> is not equal `true`">
|
|
445
|
+
If <merge-verdict/> is `MERGED`, set the `Status:` key to
|
|
446
|
+
`CLOSED` for the `solo` model (traversing the transition from
|
|
447
|
+
`OPEN`) or to `INTEGRATED` for the `enterprise` model (if it
|
|
448
|
+
was set to `INTEGRATING` in step 1 above). Otherwise, keep
|
|
449
|
+
the `Status:` key for the `solo` model (`OPEN`), and set it
|
|
450
|
+
to `QUALIFIED` (for <merge-verdict/> `NOOP`) or `DEFERRED`
|
|
451
|
+
(otherwise) for the `enterprise` model (if it was set to
|
|
452
|
+
`INTEGRATING` in step 1 above). The `team` model defines no
|
|
453
|
+
integration states, so its `Status:` key stays *untouched*.
|
|
454
|
+
</if>
|
|
455
|
+
|
|
456
|
+
- <if condition="<changeset-type/> is `attachment` and <merge-verdict/> is `MERGED`">
|
|
457
|
+
The delivered attachment block with the `Type` key value
|
|
458
|
+
`text/x-diff; charset=utf-8; kind="<changeset-name/>"` must
|
|
459
|
+
never be delivered again: if <getopt-option-no-cleanup/> is
|
|
460
|
+
not equal `true`, remove it from the "backmatter". Otherwise,
|
|
461
|
+
keep it, but capture the output of the command
|
|
462
|
+
`git rev-parse "refs/heads/<target-branch/>"` into
|
|
463
|
+
<merged-commit/> and append `, merged <merged-commit/>` to the
|
|
464
|
+
value of its `Desc` key, which marks it as *delivered*
|
|
465
|
+
according to the plan <format/>. Its `Modified` key stays
|
|
466
|
+
*untouched*, as its `Data` payload is not changed.
|
|
467
|
+
</if>
|
|
468
|
+
|
|
469
|
+
The `Modified:` key stays *untouched*, as the "body" is not
|
|
470
|
+
changed. Apart from the above, the plan *MUST* stay *exactly* as
|
|
471
|
+
loaded -- in particular, a *change set snapshot*, which is
|
|
472
|
+
maintained by the `ase agent` agents only, is passed through
|
|
473
|
+
*verbatim*. To persist the plan, call the `ase_task_save(id:
|
|
474
|
+
"<ase-task-id/>", text: "<task-content/>")` tool of the `ase`
|
|
475
|
+
MCP server. This `ase_task_save` MCP tool call is the *only*
|
|
476
|
+
permitted way to persist the plan -- *NEVER* write the plan file
|
|
477
|
+
via `Write`/`Edit` or by executing a shell command. Do not
|
|
478
|
+
output anything in this sub-step.
|
|
479
|
+
|
|
480
|
+
7. <if condition="<merge-verdict/> is `MERGED`">
|
|
481
|
+
Only output the following <template/>:
|
|
482
|
+
|
|
483
|
+
<template>
|
|
484
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇢ changeset: **<task-changeset/>**, ⎇ target: **<target-branch/>**, ▶ status: **plan integrated**
|
|
485
|
+
</template>
|
|
486
|
+
</if>
|
|
487
|
+
<elseif condition="<merge-verdict/> is `NOOP`">
|
|
488
|
+
Only output the following <template/>, directly followed by the
|
|
489
|
+
hint, and then immediately *STOP* processing the entire current
|
|
490
|
+
skill:
|
|
491
|
+
|
|
492
|
+
<template>
|
|
493
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇢ changeset: **<task-changeset/>**, ⎇ target: **<target-branch/>**, ▶ ERROR: nothing integrated -- change set is already contained in target
|
|
494
|
+
</template>
|
|
495
|
+
|
|
496
|
+
<ase-tpl-hint level="minimal">
|
|
497
|
+
Run `/ase-task-implement` first to create a new change set, or select a different one via `--changeset`.
|
|
498
|
+
</ase-tpl-hint>
|
|
499
|
+
</elseif>
|
|
500
|
+
<else>
|
|
501
|
+
Only output the following <template/>, directly followed by the
|
|
502
|
+
hint, and then immediately *STOP* processing the entire current
|
|
503
|
+
skill:
|
|
504
|
+
|
|
505
|
+
<template>
|
|
506
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇢ changeset: **<task-changeset/>**, ⎇ target: **<target-branch/>**, ▶ ERROR: integration failed with verdict **<merge-verdict/>**
|
|
507
|
+
</template>
|
|
508
|
+
|
|
509
|
+
<ase-tpl-hint level="minimal">
|
|
510
|
+
Resolve the reported problem (e.g. commit or stash uncommitted changes of the target, or check out the target branch in a worktree) and run `/ase-task-integrate` again.
|
|
511
|
+
</ase-tpl-hint>
|
|
512
|
+
</else>
|
|
513
|
+
|
|
514
|
+
5. **Decide Next Step:**
|
|
515
|
+
|
|
516
|
+
1. *Determine next step*:
|
|
517
|
+
|
|
518
|
+
<expand name="task-next-select"
|
|
519
|
+
arg1="ase-task-integrate"
|
|
520
|
+
arg2="DONE|DELETE">
|
|
521
|
+
Next Step: How would you like to proceed with the plan?
|
|
522
|
+
DONE: Stop processing and PRESERVE task plan.
|
|
523
|
+
DELETE: Stop processing and DELETE the task plan.
|
|
524
|
+
</expand>
|
|
525
|
+
|
|
526
|
+
2. Check the tool <result/> and dispatch accordingly:
|
|
527
|
+
|
|
528
|
+
- If <result/> is `DONE` or `CANCEL`:
|
|
529
|
+
Only output the following <template/> and then *STOP*.
|
|
530
|
+
|
|
531
|
+
<template>
|
|
532
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan integrated -- done**
|
|
533
|
+
</template>
|
|
534
|
+
|
|
535
|
+
- If <result/> is `DELETE`:
|
|
536
|
+
Set <args></args> (empty). Do *not* forward any remaining
|
|
537
|
+
`--next` list tokens, because the `ase:ase-task-delete`
|
|
538
|
+
skill accepts only an optional `[<id>]` argument and no
|
|
539
|
+
`--next` option; remaining tokens are intentionally discarded.
|
|
540
|
+
Only output the following <template/> and then call the
|
|
541
|
+
tool `Skill(skill: "ase:ase-task-delete", args: "<args/>")`
|
|
542
|
+
to invoke the `ase:ase-task-delete` skill in order to
|
|
543
|
+
*delete* the updated plan. Immediately stop processing the
|
|
544
|
+
current skill once the `Skill` tool was used.
|
|
545
|
+
|
|
546
|
+
<template>
|
|
547
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan integrated -- hand-off to delete task**
|
|
548
|
+
</template>
|
|
549
|
+
|