@rse/ase 1.0.7 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/dst/ase-agent-definition-api.d.ts +184 -0
  2. package/dst/ase-agent-definition-api.js +6 -0
  3. package/dst/ase-agent-definition-builtin/condenser.js +42 -0
  4. package/dst/ase-agent-definition-builtin/editor.js +45 -0
  5. package/dst/ase-agent-definition-builtin/estimator.js +98 -0
  6. package/dst/ase-agent-definition-builtin/implementer.js +121 -0
  7. package/dst/ase-agent-definition-builtin/integrator.js +56 -0
  8. package/dst/ase-agent-definition-builtin/qualifier.js +61 -0
  9. package/dst/ase-agent-definition-builtin/rebooter.js +41 -0
  10. package/dst/ase-agent-definition-builtin/researcher.js +77 -0
  11. package/dst/ase-agent-definition-core.js +827 -0
  12. package/dst/ase-agent-fleet.js +772 -0
  13. package/dst/ase-agent-process.js +232 -0
  14. package/dst/ase-agent-relay-client.js +509 -0
  15. package/dst/ase-agent-relay-core.js +213 -0
  16. package/dst/ase-agent-relay-server-bind.js +242 -0
  17. package/dst/ase-agent-relay-server-cli.js +50 -0
  18. package/dst/ase-agent-runtime-claim.js +189 -0
  19. package/dst/ase-agent-runtime-engine.js +1100 -0
  20. package/dst/ase-agent-runtime-exec.js +275 -0
  21. package/dst/ase-agent-runtime-phase.js +581 -0
  22. package/dst/ase-agent-runtime-request.js +272 -0
  23. package/dst/ase-agent-runtime-tool.js +207 -0
  24. package/dst/ase-agent-runtime.js +1316 -0
  25. package/dst/ase-agent.js +65 -0
  26. package/dst/ase-artifact.js +6 -5
  27. package/dst/ase-config-core.js +465 -0
  28. package/dst/ase-config-schema.js +357 -0
  29. package/dst/ase-config-scope.js +172 -0
  30. package/dst/ase-config.js +25 -585
  31. package/dst/ase-hook.js +228 -111
  32. package/dst/ase-lib-daemon-cli.js +130 -0
  33. package/dst/ase-lib-hash.js +20 -0
  34. package/dst/{ase-log.js → ase-lib-log.js} +40 -7
  35. package/dst/ase-lib-server-bind.js +115 -0
  36. package/dst/ase-lib-server-cli.js +474 -0
  37. package/dst/{ase-table.js → ase-lib-table.js} +1 -1
  38. package/dst/{ase-version.js → ase-lib-version.js} +8 -1
  39. package/dst/ase-man.js +96 -0
  40. package/dst/ase-mcp.js +166 -13
  41. package/dst/{ase-getopt.js → ase-service-getopt.js} +82 -80
  42. package/dst/{ase-markdown.js → ase-service-markdown.js} +18 -11
  43. package/dst/ase-service-otel.js +1246 -0
  44. package/dst/{ase-skills.js → ase-service-skills.js} +29 -64
  45. package/dst/ase-service-state.js +101 -0
  46. package/dst/ase-service.js +269 -81
  47. package/dst/ase-setup-common.js +141 -0
  48. package/dst/ase-setup-mcp.js +359 -0
  49. package/dst/ase-setup-settings.js +837 -0
  50. package/dst/ase-setup.js +113 -869
  51. package/dst/ase-spec.js +31 -19
  52. package/dst/ase-statusline.js +108 -43
  53. package/dst/ase-task-board-core.js +739 -0
  54. package/dst/ase-task-board-filter.js +127 -0
  55. package/dst/ase-task-board-flow.js +237 -0
  56. package/dst/ase-task-board-graph.js +497 -0
  57. package/dst/ase-task-board-stats.js +263 -0
  58. package/dst/ase-task-board-tui-control.js +775 -0
  59. package/dst/ase-task-board-tui-model.js +1008 -0
  60. package/dst/ase-task-board-tui-popup.js +626 -0
  61. package/dst/ase-task-board-tui-style.js +106 -0
  62. package/dst/ase-task-board-tui-view.js +847 -0
  63. package/dst/ase-task-board-tui.js +189 -0
  64. package/dst/ase-task-board-web-client.css +1 -0
  65. package/dst/ase-task-board-web-client.html +20 -0
  66. package/dst/ase-task-board-web-client.js +81 -0
  67. package/dst/ase-task-board-web-server.js +823 -0
  68. package/dst/ase-task-board.js +134 -0
  69. package/dst/ase-task-format.js +757 -0
  70. package/dst/ase-task-request.js +208 -0
  71. package/dst/ase-task-store-client.js +495 -0
  72. package/dst/ase-task-store-core.js +804 -0
  73. package/dst/ase-task-store-issues.js +237 -0
  74. package/dst/ase-task-store-plugin-api.js +6 -0
  75. package/dst/ase-task-store-plugin-ase.js +484 -0
  76. package/dst/ase-task-store-plugin-delegate.js +137 -0
  77. package/dst/ase-task-store-plugin-gitea.js +666 -0
  78. package/dst/ase-task-store-plugin-github.js +696 -0
  79. package/dst/ase-task-store-plugin-gitlab.js +668 -0
  80. package/dst/ase-task-store-server-bind.js +538 -0
  81. package/dst/ase-task-store-server-cli.js +154 -0
  82. package/dst/ase-task.js +1335 -357
  83. package/dst/{ase-compat.js → ase-util-compat.js} +2 -2
  84. package/dst/{ase-diagram.js → ase-util-diagram.js} +107 -32
  85. package/dst/{ase-meta.js → ase-util-meta.js} +2 -2
  86. package/dst/{ase-metric.js → ase-util-metric.js} +2 -2
  87. package/dst/{ase-mint.js → ase-util-mint.js} +19 -12
  88. package/dst/{ase-worktree.js → ase-util-worktree.js} +30 -19
  89. package/dst/ase-util.js +20 -0
  90. package/dst/ase.js +108 -32
  91. package/dst/man/ase-agent-adhoc.1 +515 -0
  92. package/dst/man/ase-agent-condenser.1 +193 -0
  93. package/dst/man/ase-agent-editor.1 +212 -0
  94. package/dst/man/ase-agent-estimator.1 +214 -0
  95. package/dst/man/ase-agent-fleet.1 +185 -0
  96. package/dst/man/ase-agent-implementer.1 +233 -0
  97. package/dst/man/ase-agent-integrator.1 +213 -0
  98. package/dst/man/ase-agent-qualifier.1 +214 -0
  99. package/dst/man/ase-agent-rebooter.1 +193 -0
  100. package/dst/man/ase-agent-relay.1 +128 -0
  101. package/dst/man/ase-agent-researcher.1 +217 -0
  102. package/dst/man/ase-agent.1 +264 -0
  103. package/dst/man/ase-artifact-list.1 +38 -0
  104. package/dst/man/ase-artifact-name.1 +39 -0
  105. package/dst/man/ase-artifact.1 +56 -0
  106. package/dst/man/ase-config-delete.1 +45 -0
  107. package/dst/man/ase-config-edit.1 +48 -0
  108. package/dst/man/ase-config-get.1 +46 -0
  109. package/dst/man/ase-config-init.1 +60 -0
  110. package/dst/man/ase-config-list.1 +42 -0
  111. package/dst/man/ase-config-set.1 +52 -0
  112. package/dst/man/ase-config.1 +231 -0
  113. package/dst/man/ase-hook-permission-request.1 +36 -0
  114. package/dst/man/ase-hook-pre-tool-use.1 +59 -0
  115. package/dst/man/ase-hook-session-end.1 +47 -0
  116. package/dst/man/ase-hook-session-persona.1 +37 -0
  117. package/dst/man/ase-hook-session-start.1 +81 -0
  118. package/dst/man/ase-hook-stop.1 +34 -0
  119. package/dst/man/ase-hook-user-prompt-submit.1 +34 -0
  120. package/dst/man/ase-hook.1 +51 -0
  121. package/dst/man/ase-man.1 +67 -0
  122. package/dst/man/ase-mcp.1 +61 -0
  123. package/dst/man/ase-service-log.1 +43 -0
  124. package/dst/man/ase-service-send.1 +47 -0
  125. package/dst/man/ase-service-start.1 +54 -0
  126. package/dst/man/ase-service-status.1 +46 -0
  127. package/dst/man/ase-service-stop.1 +37 -0
  128. package/dst/man/ase-service.1 +85 -0
  129. package/dst/man/ase-setup-disable.1 +44 -0
  130. package/dst/man/ase-setup-enable.1 +45 -0
  131. package/dst/man/ase-setup-install.1 +73 -0
  132. package/dst/man/ase-setup-mcp.1 +124 -0
  133. package/dst/man/ase-setup-status.1 +60 -0
  134. package/dst/man/ase-setup-statusline.1 +92 -0
  135. package/dst/man/ase-setup-telemetry.1 +92 -0
  136. package/dst/man/ase-setup-uninstall.1 +59 -0
  137. package/dst/man/ase-setup-update.1 +64 -0
  138. package/dst/man/ase-setup.1 +93 -0
  139. package/dst/man/ase-spec-export.1 +62 -0
  140. package/dst/man/ase-spec-lint.1 +40 -0
  141. package/dst/man/ase-spec-preview.1 +40 -0
  142. package/dst/man/ase-spec.1 +46 -0
  143. package/dst/man/ase-statusline.1 +189 -0
  144. package/dst/man/ase-task-assign.1 +71 -0
  145. package/dst/man/ase-task-board.1 +384 -0
  146. package/dst/man/ase-task-delete.1 +35 -0
  147. package/dst/man/ase-task-edit.1 +46 -0
  148. package/dst/man/ase-task-idscheme.1 +65 -0
  149. package/dst/man/ase-task-lifecycle.1 +57 -0
  150. package/dst/man/ase-task-list.1 +47 -0
  151. package/dst/man/ase-task-load.1 +36 -0
  152. package/dst/man/ase-task-newid.1 +61 -0
  153. package/dst/man/ase-task-purge.1 +37 -0
  154. package/dst/man/ase-task-rename.1 +44 -0
  155. package/dst/man/ase-task-request.1 +61 -0
  156. package/dst/man/ase-task-save.1 +48 -0
  157. package/dst/man/ase-task-status.1 +55 -0
  158. package/dst/man/ase-task-store.1 +194 -0
  159. package/dst/man/ase-task-view.1 +40 -0
  160. package/dst/man/ase-task.1 +160 -0
  161. package/dst/man/ase-util-compat.1 +25 -0
  162. package/dst/man/ase-util-diagram.1 +76 -0
  163. package/dst/man/ase-util-meta.1 +45 -0
  164. package/dst/man/ase-util-metric.1 +54 -0
  165. package/dst/man/ase-util-mint.1 +59 -0
  166. package/dst/man/ase-util-worktree.1 +72 -0
  167. package/dst/man/ase-util.1 +50 -0
  168. package/dst/man/ase.1 +124 -0
  169. package/package.json +81 -21
  170. package/plugin/.claude-plugin/plugin.json +1 -1
  171. package/plugin/.codex-plugin/plugin.json +1 -1
  172. package/plugin/.github/plugin/plugin.json +1 -1
  173. package/plugin/agents/ase-meta-diagram.md +12 -8
  174. package/plugin/agents/ase-repo-review.md +322 -0
  175. package/plugin/hooks/hooks-codex.json +5 -0
  176. package/plugin/hooks/hooks-copilot.json +5 -0
  177. package/plugin/hooks/hooks.json +8 -0
  178. package/plugin/meta/ase-common-approach.md +117 -0
  179. package/plugin/meta/ase-common-changeset.md +256 -0
  180. package/plugin/meta/ase-common-code.md +10 -173
  181. package/plugin/meta/ase-common-grill.md +317 -0
  182. package/plugin/meta/ase-common-resolve.md +305 -0
  183. package/plugin/meta/ase-common-task.md +83 -4
  184. package/plugin/meta/ase-constitution.md +0 -2
  185. package/plugin/meta/ase-format-specbook.md +208 -25
  186. package/plugin/meta/ase-format-specbook.yaml +242 -851
  187. package/plugin/meta/ase-format-task.md +669 -125
  188. package/plugin/meta/ase-persona.md +3 -4
  189. package/plugin/meta/ase-skill.md +9 -0
  190. package/plugin/mods/ase-mods.ts +409 -0
  191. package/plugin/mods/claude-code.d.ts +13417 -0
  192. package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
  193. package/plugin/skills/ase-arch-analyze/help.md +2 -2
  194. package/plugin/skills/ase-code-analyze/SKILL.md +59 -8
  195. package/plugin/skills/ase-code-analyze/help.md +29 -4
  196. package/plugin/skills/ase-code-edit/SKILL.md +107 -181
  197. package/plugin/skills/ase-code-edit/help.md +118 -31
  198. package/plugin/skills/ase-code-lint/SKILL.md +64 -13
  199. package/plugin/skills/ase-code-lint/help.md +32 -2
  200. package/plugin/skills/ase-docs-proofread/SKILL.md +4 -4
  201. package/plugin/skills/ase-docs-proofread/help.md +1 -1
  202. package/plugin/skills/ase-docs-refine/SKILL.md +4 -4
  203. package/plugin/skills/ase-docs-shorten/SKILL.md +4 -4
  204. package/plugin/skills/ase-help-intent/data.md +2164 -1087
  205. package/plugin/skills/ase-help-intent/help.md +1 -1
  206. package/plugin/skills/ase-help-skill/catalog.md +12 -9
  207. package/plugin/skills/ase-meta-brainstorm/SKILL.md +1 -1
  208. package/plugin/skills/ase-meta-config/SKILL.md +3 -4
  209. package/plugin/skills/ase-meta-config/help.md +31 -10
  210. package/plugin/skills/ase-meta-mint/SKILL.md +5 -5
  211. package/plugin/skills/ase-meta-mint/help.md +10 -5
  212. package/plugin/skills/ase-meta-why/help.md +1 -1
  213. package/plugin/skills/ase-meta-workflow/SKILL.md +7 -7
  214. package/plugin/skills/ase-meta-workflow/help.md +4 -4
  215. package/plugin/skills/ase-meta-workflow/sample.md +3 -3
  216. package/plugin/skills/ase-meta-workflow/workflow.txt +22 -18
  217. package/plugin/skills/{ase-meta-changelog → ase-repo-changelog}/SKILL.md +4 -3
  218. package/plugin/skills/{ase-meta-changelog → ase-repo-changelog}/help.md +5 -5
  219. package/plugin/skills/{ase-meta-commit → ase-repo-commit}/SKILL.md +6 -6
  220. package/plugin/skills/{ase-meta-commit → ase-repo-commit}/help.md +5 -5
  221. package/plugin/skills/{ase-meta-diff → ase-repo-diff}/SKILL.md +6 -6
  222. package/plugin/skills/{ase-meta-diff → ase-repo-diff}/help.md +8 -8
  223. package/plugin/skills/{ase-code-dissect → ase-repo-dissect}/SKILL.md +19 -19
  224. package/plugin/skills/{ase-code-dissect → ase-repo-dissect}/help.md +10 -12
  225. package/plugin/skills/ase-repo-merge/SKILL.md +346 -0
  226. package/plugin/skills/ase-repo-merge/help.md +107 -0
  227. package/plugin/skills/ase-repo-resolve/SKILL.md +158 -0
  228. package/plugin/skills/ase-repo-resolve/help.md +102 -0
  229. package/plugin/skills/ase-repo-review/SKILL.md +406 -0
  230. package/plugin/skills/ase-repo-review/help.md +181 -0
  231. package/plugin/skills/ase-spec-edit/SKILL.md +117 -183
  232. package/plugin/skills/ase-spec-edit/help.md +107 -26
  233. package/plugin/skills/ase-sync-reconcile/help.md +1 -1
  234. package/plugin/skills/ase-task-assign/SKILL.md +111 -0
  235. package/plugin/skills/ase-task-assign/help.md +119 -0
  236. package/plugin/skills/ase-task-condense/SKILL.md +21 -21
  237. package/plugin/skills/ase-task-condense/help.md +12 -10
  238. package/plugin/skills/ase-task-delete/SKILL.md +1 -1
  239. package/plugin/skills/ase-task-dissect/SKILL.md +71 -48
  240. package/plugin/skills/ase-task-dissect/help.md +10 -9
  241. package/plugin/skills/ase-task-edit/SKILL.md +379 -94
  242. package/plugin/skills/ase-task-edit/help.md +95 -22
  243. package/plugin/skills/ase-task-estimate/SKILL.md +492 -0
  244. package/plugin/skills/ase-task-estimate/help.md +158 -0
  245. package/plugin/skills/ase-task-grill/SKILL.md +246 -138
  246. package/plugin/skills/ase-task-grill/help.md +129 -26
  247. package/plugin/skills/ase-task-id/SKILL.md +8 -1
  248. package/plugin/skills/ase-task-id/help.md +6 -3
  249. package/plugin/skills/ase-task-implement/SKILL.md +535 -145
  250. package/plugin/skills/ase-task-implement/help.md +138 -47
  251. package/plugin/skills/ase-task-integrate/SKILL.md +549 -0
  252. package/plugin/skills/ase-task-integrate/help.md +187 -0
  253. package/plugin/skills/ase-task-list/SKILL.md +55 -23
  254. package/plugin/skills/ase-task-list/help.md +45 -21
  255. package/plugin/skills/ase-task-reboot/SKILL.md +84 -43
  256. package/plugin/skills/ase-task-reboot/help.md +28 -8
  257. package/plugin/skills/ase-task-rename/SKILL.md +10 -2
  258. package/plugin/skills/ase-task-research/SKILL.md +386 -0
  259. package/plugin/skills/ase-task-research/help.md +102 -0
  260. package/plugin/skills/ase-task-status/SKILL.md +137 -0
  261. package/plugin/skills/ase-task-status/help.md +80 -0
  262. package/plugin/skills/ase-task-view/SKILL.md +49 -24
  263. package/plugin/skills/ase-task-view/help.md +19 -9
  264. package/plugin/agents/ase-meta-review.md +0 -187
  265. package/plugin/skills/ase-code-craft/SKILL.md +0 -264
  266. package/plugin/skills/ase-code-craft/help.md +0 -122
  267. package/plugin/skills/ase-code-refactor/SKILL.md +0 -232
  268. package/plugin/skills/ase-code-refactor/help.md +0 -109
  269. package/plugin/skills/ase-code-resolve/SKILL.md +0 -289
  270. package/plugin/skills/ase-code-resolve/help.md +0 -116
  271. package/plugin/skills/ase-meta-review/SKILL.md +0 -210
  272. package/plugin/skills/ase-meta-review/help.md +0 -96
  273. package/plugin/skills/ase-task-preflight/SKILL.md +0 -166
  274. package/plugin/skills/ase-task-preflight/help.md +0 -82
  275. /package/dst/{ase-ignore.js → ase-lib-ignore.js} +0 -0
  276. /package/dst/{ase-stdio.js → ase-lib-stdio.js} +0 -0
  277. /package/dst/{ase-kv.js → ase-service-kv.js} +0 -0
  278. /package/dst/{ase-sleep.js → ase-service-sleep.js} +0 -0
  279. /package/dst/{ase-timestamp.js → ase-service-timestamp.js} +0 -0
@@ -0,0 +1,406 @@
1
+ ---
2
+ name: ase-repo-review
3
+ argument-hint: "[--help|-h] [--severity|-S=(AUTO|LOW|MEDIUM|HIGH)] [--thorough|-t] [--staged] [--unstaged] [--branch|-b <branch>] [--commit|-c <commit>]"
4
+ description: >
5
+ Perform a holistic, human-reviewer-style critique of the currently
6
+ staged Git changes (or, with `--unstaged`, of the unstaged and
7
+ untracked changes, with `--branch`, of a branch against its base,
8
+ or, with `--commit`, of a single commit) and emit an approve/reject verdict
9
+ with prioritized, severity-tagged, line-cited findings. Use when the
10
+ user wants the staged diff, a branch, or a commit "reviewed",
11
+ "critiqued", or "code-reviewed".
12
+ user-invocable: true
13
+ disable-model-invocation: false
14
+ effort: high
15
+ allowed-tools:
16
+ - "Bash(git diff *)"
17
+ - "Bash(git ls-files *)"
18
+ - "Bash(git rev-parse *)"
19
+ - "Bash(git for-each-ref *)"
20
+ - "Bash(git rev-list *)"
21
+ - "Bash(git merge-base *)"
22
+ - "Bash(git branch *)"
23
+ - "Bash(git worktree list *)"
24
+ - "Bash(git show *)"
25
+ - "Bash(git -C *)"
26
+ - "Agent"
27
+ ---
28
+
29
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
30
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
31
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
32
+
33
+ <purpose name="ase-repo-review">
34
+ Review Changes
35
+ </purpose>
36
+
37
+ <expand name="getopt"
38
+ arg1="ase-repo-review"
39
+ arg2="--severity|-S=(AUTO|LOW|MEDIUM|HIGH) --thorough|-t --staged --unstaged --branch|-b= --commit|-c=">
40
+ $ARGUMENTS
41
+ </expand>
42
+
43
+ <objective>
44
+ Review the currently staged (and/or unstaged) Git changes, the changes
45
+ of a branch against its base, or a single commit the way an
46
+ *experienced human reviewer* would - judging them *holistically* against
47
+ the change's *own intent* and against *correctness*, *design fit*,
48
+ *clarity*, *robustness*, *propagation*, freedom of *residue*, and
49
+ *project-convention conformance* - and emit a single *approve /
50
+ request-changes verdict* backed by *prioritized*, *severity-tagged*,
51
+ *line-cited* findings. This is a *synthesizing critique*, not a mechanical
52
+ scan: it complements `ase-code-lint` (mechanical quality), `ase-code-analyze`
53
+ (logic/semantics), and `ase-repo-diff` (intent narrative and risk).
54
+ </objective>
55
+
56
+ Procedure
57
+ ---------
58
+
59
+ <flow>
60
+
61
+ 1. <step id="STEP 1: Determine Change Set">
62
+
63
+ 1. <if condition="<getopt-option-commit/> is not empty and (<getopt-option-branch/> is not empty or <getopt-option-staged/> is equal `true` or <getopt-option-unstaged/> is equal `true`)">
64
+ Only output the following <template/> and then *STOP* immediately:
65
+
66
+ <template>
67
+ ⧉ **ASE**: ✪ skill: **ase-repo-review**, ▶ ERROR: option `--commit` cannot be combined with `--branch`, `--staged`, or `--unstaged`
68
+ </template>
69
+ </if>
70
+
71
+ Set <changes/> to the *uncommitted* changes to review: to
72
+ `staged and unstaged` if both <getopt-option-staged/> and
73
+ <getopt-option-unstaged/> are equal `true`, to `staged` if only
74
+ <getopt-option-staged/> is equal `true`, to `unstaged` if only
75
+ <getopt-option-unstaged/> is equal `true`, and to empty otherwise.
76
+ Here, the `unstaged` changes always include the *untracked* files.
77
+
78
+ 2. <if condition="<getopt-option-branch/> is not empty">
79
+ Determine the *base* of the branch:
80
+
81
+ 1. Run the command
82
+ `git rev-parse --verify --quiet "<getopt-option-branch/>^{commit}"`.
83
+ If it fails, only output the following <template/> and then
84
+ *STOP* immediately:
85
+
86
+ <template>
87
+ ⧉ **ASE**: ✪ skill: **ase-repo-review**, ▶ ERROR: branch **<getopt-option-branch/>** does not exist
88
+ </template>
89
+
90
+ 2. Determine the *candidate base branches* by running the command
91
+ `git for-each-ref --format="%(refname:short)" refs/heads/`
92
+ (taken exactly as given), excluding <getopt-option-branch/>
93
+ itself. For each <candidate/>, run the command
94
+ `git rev-list --count "<candidate/>..<getopt-option-branch/>"`
95
+ to count the commits of the branch since its fork point from
96
+ <candidate/>, and *drop* every candidate with a count of `0`,
97
+ as it already contains the branch. Set <base/> to the
98
+ remaining candidate with the *smallest* count (the *nearest*
99
+ fork point); on a tie, prefer the checked-out branch (the
100
+ output of `git branch --show-current`), and then the first
101
+ candidate. If no candidate remains, only output the following
102
+ <template/> and then *STOP* immediately:
103
+
104
+ <template>
105
+ ⧉ **ASE**: ✪ skill: **ase-repo-review**, ▶ ERROR: no base branch determinable for branch **<getopt-option-branch/>**
106
+ </template>
107
+
108
+ 3. Run the command
109
+ `git merge-base "<base/>" "<getopt-option-branch/>"` and
110
+ capture its output into <base-commit/>.
111
+
112
+ 4. Only output the following <template/>:
113
+
114
+ <template>
115
+ ⧉ **ASE**: ✪ skill: **ase-repo-review**, ⎇ branch: **<getopt-option-branch/>**, ⎇ base: **<base/>**
116
+ </template>
117
+
118
+ </if>
119
+ <elseif condition="<getopt-option-commit/> is not empty">
120
+ Run the command
121
+ `git rev-parse --verify --quiet "<getopt-option-commit/>^{commit}"`
122
+ and capture its output into <commit-id/>. If it fails, only output
123
+ the following <template/> and then *STOP* immediately:
124
+
125
+ <template>
126
+ ⧉ **ASE**: ✪ skill: **ase-repo-review**, ▶ ERROR: commit **<getopt-option-commit/>** does not exist
127
+ </template>
128
+ </elseif>
129
+
130
+ 3. Determine *whether there are changes at all* by running the
131
+ corresponding command(s) (taken exactly as given) and capturing
132
+ their combined output - the bare *list of changed file names* -
133
+ into <diff/>. This is a lightweight gate; the full diff is fetched
134
+ by the sub-agent in STEP 2, so capturing only the file-name list
135
+ here is sufficient:
136
+
137
+ <if condition="<getopt-option-branch/> is not empty and <changes/> is not empty">
138
+ Determine the *worktree* of the branch by running the command
139
+ `git worktree list --porcelain` and setting <worktree-dir/> to the
140
+ `worktree` path of the entry whose `branch` line is
141
+ `refs/heads/<getopt-option-branch/>` (or to empty if there is
142
+ none, as a branch not checked out anywhere carries no uncommitted
143
+ changes).
144
+
145
+ If <worktree-dir/> is not empty, set <scope>branch
146
+ <getopt-option-branch/> since base commit <base-commit/> plus the
147
+ <changes/> changes in worktree <worktree-dir/></scope> and run:
148
+
149
+ - If <changes/> is equal `staged and unstaged`:
150
+
151
+ `git -C "<worktree-dir/>" diff --name-only "<base-commit/>"`
152
+
153
+ `git -C "<worktree-dir/>" ls-files --others --exclude-standard`
154
+
155
+ - If <changes/> is equal `staged`:
156
+
157
+ `git -C "<worktree-dir/>" diff --cached --name-only "<base-commit/>"`
158
+
159
+ - If <changes/> is equal `unstaged`:
160
+
161
+ `git diff --name-only "<base-commit/>..<getopt-option-branch/>"`
162
+
163
+ `git -C "<worktree-dir/>" diff --name-only`
164
+
165
+ `git -C "<worktree-dir/>" ls-files --others --exclude-standard`
166
+
167
+ From the output of the `ls-files` command, *skip* every listed
168
+ entry below the `.ase/` directory -- it carries *ASE*'s own
169
+ state, and hence is never part of the user's change set.
170
+
171
+ Otherwise, set <scope>branch <getopt-option-branch/> since base
172
+ commit <base-commit/></scope> and run:
173
+
174
+ `git diff --name-only "<base-commit/>..<getopt-option-branch/>"`
175
+ </if>
176
+ <elseif condition="<getopt-option-branch/> is not empty">
177
+ Set <scope>branch <getopt-option-branch/> since base commit
178
+ <base-commit/></scope> and run:
179
+
180
+ `git diff --name-only "<base-commit/>..<getopt-option-branch/>"`
181
+ </elseif>
182
+ <elseif condition="<getopt-option-commit/> is not empty">
183
+ Set <scope>commit <commit-id/></scope> and run:
184
+
185
+ `git show --format= --name-only --diff-merges=first-parent "<commit-id/>"`
186
+ </elseif>
187
+ <elseif condition="<changes/> is equal `staged and unstaged`">
188
+ Set <scope>staged and unstaged</scope> and run:
189
+
190
+ `git diff --name-only HEAD`
191
+
192
+ `git ls-files --others --exclude-standard`
193
+
194
+ From the output of the second command, *skip* every listed
195
+ entry below the `.ase/` directory -- it carries *ASE*'s own
196
+ state, and hence is never part of the user's change set.
197
+ </elseif>
198
+ <elseif condition="<changes/> is equal `unstaged`">
199
+ Set <scope>unstaged</scope> and run:
200
+
201
+ `git diff --name-only`
202
+
203
+ `git ls-files --others --exclude-standard`
204
+
205
+ From the output of the second command, *skip* every listed
206
+ entry below the `.ase/` directory -- it carries *ASE*'s own
207
+ state, and hence is never part of the user's change set.
208
+ </elseif>
209
+ <else>
210
+ Set <scope>staged</scope> and run:
211
+
212
+ `git diff --cached --name-only HEAD`
213
+ </else>
214
+
215
+ 4. <if condition="<diff/> is empty">
216
+ Only output the following <template/> and then *STOP* immediately:
217
+
218
+ <template>
219
+ ⧉ **ASE**: ✪ skill: **ase-repo-review**, ▶ status: **no changes to review**
220
+ </template>
221
+ </if>
222
+
223
+ </step>
224
+
225
+ 2. <step id="STEP 2: Review Investigation">
226
+
227
+ <if condition="<ase-project-boxing/> is equal `black`">
228
+
229
+ The project source artifacts are classified as a *black box*, so
230
+ the user does *not* want the changes scrutinized or their
231
+ findings surfaced. *Skip* the entire review investigation: do
232
+ *not* invoke the `Agent` tool and do *not* read any change, set
233
+ <findings/> to the *empty* list, set <hidden/> to `0`, set
234
+ <verdict/> to `SKIPPED (boxing: black)`, set <summary/> to a
235
+ *one-line* neutral restatement of the change intent derived solely
236
+ from STEP 1, and proceed *directly* to STEP 3.
237
+
238
+ </if>
239
+
240
+ First, use the following <template/> to give a hint on this step:
241
+
242
+ <template>
243
+ <ase-tpl-bullet-secondary/> **REVIEW INVESTIGATION**
244
+ </template>
245
+
246
+ Dispatch the review investigation to a *sub-agent* via the `Agent`
247
+ tool so that *no* investigation details leak into the user-visible
248
+ transcript. The sub-agent performs the silent reading, the read-only
249
+ repository probing, and the critique; only its final structured return
250
+ value is consumed here.
251
+
252
+ Set <mode>thorough</mode> if <getopt-option-thorough/> is equal
253
+ `true`, and <mode>focused</mode> otherwise.
254
+
255
+ For this, invoke *exactly once* the tool:
256
+
257
+ ```text
258
+ Agent(
259
+ description: "Review Investigation",
260
+ subagent_type: "ase:ase-repo-review",
261
+ prompt: "Review in <mode/> mode the changes of scope: <scope/>",
262
+ run_in_background: false
263
+ )
264
+ ```
265
+
266
+ Parse the single result message of the `Agent` tool as a JSON object,
267
+ set <summary/> to its `summary` field (a single crisp sentence
268
+ reconstructing the change's intent), and set <findings/> to its
269
+ `findings` field (a list).
270
+
271
+ Then *derive* the overall <verdict/> from <findings/>: set
272
+ <verdict/> to `REJECT - DEMANDS CHANGES` if *any* finding in
273
+ <findings/> has a `severity` field of `HIGH`; otherwise set
274
+ <verdict/> to `APPROVE`. The verdict is derived *before* the
275
+ severity floor below, so the floor only affects which findings are
276
+ *rendered*, never the verdict.
277
+
278
+ Then determine the *effective severity floor* <floor/> and its
279
+ origin <floor-origin/>: define the ordinal rank `LOW`=1, `MEDIUM`=2,
280
+ `HIGH`=3.
281
+
282
+ <if condition="<getopt-option-severity/> is equal `AUTO`">
283
+ Set <floor>MEDIUM</floor> and <floor-origin>boxing: grey</floor-origin>
284
+ if <ase-project-boxing/> is equal `grey` (grey boxing surfaces only
285
+ *material* findings of severity `MEDIUM` and above), and
286
+ <floor>LOW</floor> and <floor-origin>default</floor-origin> otherwise.
287
+ </if>
288
+ <else>
289
+ Set <floor><getopt-option-severity/></floor> and
290
+ <floor-origin>--severity <getopt-option-severity/></floor-origin>:
291
+ an *explicitly* given severity floor always *wins* over the boxing.
292
+ </else>
293
+
294
+ Then *apply the effective severity floor* <floor/>: *Keep* a finding
295
+ in <findings/> if and only if its `severity` field is `ACCEPTED` *or*
296
+ `rank(severity)` is greater than or equal to `rank(<floor/>)`;
297
+ *drop* all other findings, but set <hidden/> to the *number* of
298
+ dropped findings. With the floor `LOW`, all findings are kept.
299
+ `ACCEPTED` findings are *never* dropped. The floor affects only which
300
+ findings are *rendered*, never the <verdict/> derived above.
301
+
302
+ You *MUST* *NOT* output anything else in this STEP 2.
303
+
304
+ </step>
305
+
306
+ 3. <step id="STEP 3: Verdict and Findings">
307
+
308
+ 1. Use the following <template/> to output the overall review in
309
+ <verdict/> and the reconstructed intent <summary/>:
310
+
311
+ <template>
312
+
313
+ <ase-tpl-bullet-signal/> **REVIEW VERDICT**: **<verdict/>**
314
+
315
+ <ase-tpl-bullet-normal/> **CHANGE INTENT**: <summary/>
316
+
317
+ </template>
318
+
319
+ You *MUST* *NOT* output anything else in this STEP 3.1.
320
+
321
+ 2. <if condition="<findings/> is empty">
322
+ Only output the following <template/> - with <note/> set to `the
323
+ change was not reviewed` if <verdict/> starts with `SKIPPED`, to
324
+ `no finding reaches severity <floor/>` if <hidden/> is greater
325
+ than `0`, and to `the change is clean` otherwise - and then
326
+ *SKIP* substep 3 of this STEP 3:
327
+
328
+ <template>
329
+
330
+ <ase-tpl-bullet-normal/> **NO FINDINGS**: <note/>, nothing to flag.
331
+
332
+ </template>
333
+ </if>
334
+
335
+ 3. <if condition="<findings/> is NOT empty">
336
+ Sort the findings by <severity/> from highest to lowest in the
337
+ fixed order `HIGH`, `MEDIUM`, `LOW`, `ACCEPTED`. Within the same
338
+ severity, keep the order returned by the sub-agent.
339
+
340
+ Then render a *three-column table* with one row per finding by
341
+ using the following output <template/>. For each finding, repeat
342
+ the third line, set <severity/> to its `severity` field, set
343
+ <dimension/> to its `dimension` field, set <location/> to its
344
+ `location` field, and set <finding/> to its `finding` field.
345
+
346
+ In the <location/> column, mark up the `file:line` reference
347
+ as code (with backticks) and prepend it with `▢ ` - keep the
348
+ sub-agent's own `:N` / `:N-M` line citation intact and do *not*
349
+ append any further line-count decoration.
350
+
351
+ Because the <finding/> text is free-form Markdown, *before*
352
+ emitting any row you *MUST* escape every literal `|` pipe
353
+ character inside <location/> and <finding/> as `\|` so it cannot
354
+ break the table column structure.
355
+
356
+ <template>
357
+ | Severity | Dimension | Finding |
358
+ | --------------- | ------------ | ----------------------- |
359
+ | **<severity/>** | <dimension/> | <location/>: <finding/> |
360
+ </template>
361
+
362
+ Keep the overall report *concise* and *brief*.
363
+ Do *not* output any further explanation.
364
+ </if>
365
+
366
+ 4. <if condition="<hidden/> is greater than `0`">
367
+ Output the following <template/>, so that suppressed findings
368
+ are never mistaken for a clean change:
369
+
370
+ <template>
371
+
372
+ <ase-tpl-bullet-normal/> **HIDDEN FINDINGS**: <hidden/> finding(s) below severity **<floor/>** suppressed (<floor-origin/>).
373
+
374
+ </template>
375
+ </if>
376
+
377
+ 5. Finally, give the closing hints by expanding the following
378
+ (which, depending on the configured <ase-guidance-level/>, may
379
+ expand into nothing and hence emit no output at all):
380
+
381
+ <if condition="<verdict/> starts with `REJECT`">
382
+ <ase-tpl-hint level="normal">
383
+ Use `/ase-task-edit` to derive a solution approach and plan for the findings which demand changes.
384
+ </ase-tpl-hint>
385
+ </if>
386
+
387
+ <if condition="<hidden/> is greater than `0`">
388
+ Set <rerun>/ase-repo-review -S LOW</rerun>, append ` --staged`
389
+ to <rerun/> if <getopt-option-staged/> is equal `true`, append
390
+ ` --unstaged` to <rerun/> if <getopt-option-unstaged/> is equal
391
+ `true`, append
392
+ ` -b <getopt-option-branch/>` to <rerun/> if
393
+ <getopt-option-branch/> is not empty, append
394
+ ` -c <getopt-option-commit/>` to <rerun/> if
395
+ <getopt-option-commit/> is not empty, and
396
+ append ` -t` to <rerun/> if <getopt-option-thorough/> is equal
397
+ `true`, so that the re-run reviews the same scope in the same mode.
398
+
399
+ <ase-tpl-hint level="normal">
400
+ Use `<rerun/>` to re-run the review with all findings shown (a fresh review, so its findings can differ).
401
+ </ase-tpl-hint>
402
+ </if>
403
+
404
+ </step>
405
+
406
+ </flow>
@@ -0,0 +1,181 @@
1
+
2
+ ## NAME
3
+
4
+ `ase-repo-review` - Review Changes
5
+
6
+ ## SYNOPSIS
7
+
8
+ `ase-repo-review`
9
+ [`--help`|`-h`]
10
+ [`--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`)]
11
+ [`--thorough`|`-t`]
12
+ [`--staged`]
13
+ [`--unstaged`]
14
+ [`--branch`|`-b` *branch*]
15
+ [`--commit`|`-c` *commit*]
16
+
17
+ ## DESCRIPTION
18
+
19
+ The `ase-repo-review` skill performs a *holistic*,
20
+ *human-reviewer-style* critique of the *staged* Git changes (or, with
21
+ `--unstaged`, of the *unstaged* and *untracked* changes, with both
22
+ `--staged` and `--unstaged`, of *all* uncommitted changes, with
23
+ `--branch`, of the changes of a *branch* against its *base*, or, with
24
+ `--commit`, of a *single commit*) and emits a single
25
+ *approve* / *reject* **verdict** backed by *prioritized*,
26
+ *severity-tagged*, *line-cited* **findings**. Rather than scanning the
27
+ code mechanically, it first *reconstructs the change's own intent* and
28
+ then judges the diff *as a whole* against that intent - the way an
29
+ experienced reviewer would on a pull request.
30
+
31
+ The critique spans a fixed set of reviewer *dimensions*: **intent**
32
+ (does the diff do what it set out to, without scope creep),
33
+ **propagation** (the change fully and consistently carried over to call
34
+ sites, types, schemas, registries, catalogs, and analogous sibling
35
+ places, with matching contracts and terminology, and without orphans left
36
+ behind), **coverage** (all special and edge cases handled, like empty
37
+ values, boundaries, error paths, and all variants), **residue** (debug
38
+ output, commented-out code, scaffolding, temporary files, build output,
39
+ or secrets which do not belong into the change), **correctness**
40
+ (latent bugs, broken control/data flow), **design** (fit with the surrounding architecture,
41
+ naming, abstraction level), **clarity** (readability and
42
+ self-documentation for a future reader), **robustness** (error handling,
43
+ resource and concurrency safety), **security** and **performance** (risks
44
+ introduced by the change), **convention** (conformance to the
45
+ project's documented conventions - code style and the plan/spec
46
+ formats described in `AGENTS.md` and the `ase-format-*` meta documents),
47
+ **testing** (inadequate coverage for the change - new or fixed behavior
48
+ left untested, adjacent tests not updated, or existing tests silently
49
+ broken, disabled, or weakened), and **documentation** (user- or
50
+ developer-facing docs - `README`, `CHANGELOG`, help text, or AI
51
+ guidance/meta documents - left stale by the change).
52
+
53
+ Each finding carries a *severity* - **HIGH**, **MEDIUM**, **LOW**, or
54
+ **ACCEPTED** (a concern that is contractually addressed or accepted as a
55
+ documented priority conflict) - and is *evidence-grounded*: it cites the
56
+ exact `file:line` location it stems from. The overall verdict is
57
+ **REJECT - DEMANDS CHANGES** when any *HIGH* finding remains, and
58
+ **APPROVE** otherwise. The work is performed by a dedicated `ase-repo-review`
59
+ sub-agent so that the silent reading and read-only repository probing
60
+ never leak into the transcript; only the structured verdict and findings
61
+ are rendered.
62
+
63
+ The skill *complements* rather than duplicates its neighbors:
64
+ `ase-code-lint` flags *mechanical* code-quality issues, `ase-code-analyze`
65
+ inspects *logic and semantics*, `ase-repo-diff` narrates *what changed*
66
+ (with optional coherence, risk, and blast-radius reports), and
67
+ `ase-meta-diaboli` *adversarially challenges a thesis* - whereas
68
+ `ase-repo-review` renders a *reviewer's judgment* on a concrete diff
69
+ before it is committed or merged.
70
+
71
+ ## OPTIONS
72
+
73
+ - `--severity`|`-S`=(`AUTO`|`LOW`|`MEDIUM`|`HIGH`):
74
+ Set the *severity floor* (default `AUTO`): findings below the chosen
75
+ threshold are suppressed, ordered `LOW` < `MEDIUM` < `HIGH`. The
76
+ default `AUTO` means `MEDIUM` for a project with `grey` boxing and
77
+ `LOW` (keep all findings) otherwise; an explicitly given floor always
78
+ wins over the boxing. `ACCEPTED` findings are never suppressed, and
79
+ the number of suppressed findings is always reported. Surviving
80
+ findings are rendered in *descending severity* order `HIGH`,
81
+ `MEDIUM`, `LOW`, `ACCEPTED`. The floor only affects the rendered
82
+ findings table, not the overall *verdict*, which is always derived
83
+ from all findings before the floor is applied.
84
+
85
+ - `--thorough`|`-t`:
86
+ Review *exhaustively* instead of reporting only a *few* high-signal
87
+ findings: report every well-grounded concern, including minor nits,
88
+ and additionally *plausible* concerns whose impact cannot be fully
89
+ proven, marked with "*Plausible:*" and rated at most `MEDIUM`.
90
+
91
+ - `--staged`:
92
+ Review the *staged* changes of the working copy. This is the default
93
+ if neither `--unstaged`, `--branch`, nor `--commit` is given.
94
+ Combined with `--unstaged`, review *all* uncommitted changes.
95
+ Combined with `--branch`, additionally review the staged changes of
96
+ the worktree where the *branch* is checked out.
97
+
98
+ - `--unstaged`:
99
+ Review the *unstaged* changes and the *untracked* files of the
100
+ working copy (except *ASE*'s own state below `.ase/`) instead of the
101
+ *staged* changes. Combined with `--staged`, review *all* uncommitted
102
+ changes. Combined with `--branch`, additionally review the unstaged
103
+ changes and untracked files of the worktree where the *branch* is
104
+ checked out.
105
+
106
+ - `--branch`|`-b` *branch*:
107
+ Review the commits of *branch* (any Git revision) since its fork
108
+ point from its *base*, instead of the *staged* changes. The base is
109
+ determined automatically as the local branch with the *nearest* fork
110
+ point (preferring the checked-out branch on a tie) and is reported
111
+ before the review. The commit messages are checked for mismatches
112
+ against the diff.
113
+
114
+ - `--commit`|`-c` *commit*:
115
+ Review the single *commit* (any Git revision) against its first
116
+ parent, instead of the *staged* changes. Its commit message is
117
+ checked for mismatches against the diff. This option cannot be
118
+ combined with `--branch`, `--staged`, or `--unstaged`.
119
+
120
+ ## ARGUMENTS
121
+
122
+ The `ase-repo-review` skill takes no positional arguments; it reviews the
123
+ currently *staged* Git changes, with `--unstaged` the unstaged and
124
+ untracked changes, with both `--staged` and `--unstaged` all uncommitted
125
+ changes, with `--branch` a branch against its base, or with `--commit` a
126
+ single commit.
127
+
128
+ ## SCENARIOS
129
+
130
+ - You want the staged changes reviewed like a human reviewer would
131
+ - You want an approve or reject verdict before committing
132
+ - You want severity-tagged, line-cited findings on a diff
133
+ - You want a holistic judgment instead of a mechanical lint
134
+ - You want your not yet staged changes reviewed
135
+ - You want an exhaustive review of all uncommitted changes
136
+ - You want a feature branch reviewed before merging it
137
+ - You want a single, already committed change reviewed
138
+
139
+ ## EXAMPLES
140
+
141
+ Review the currently staged changes before committing:
142
+
143
+ ```text
144
+ ❯ /ase-repo-review
145
+ ```
146
+
147
+ Review the staged changes, reporting only `MEDIUM` and `HIGH` findings:
148
+
149
+ ```text
150
+ ❯ /ase-repo-review -S MEDIUM
151
+ ```
152
+
153
+ Review the unstaged and untracked changes only:
154
+
155
+ ```text
156
+ ❯ /ase-repo-review --unstaged
157
+ ```
158
+
159
+ Review all uncommitted changes exhaustively, reporting all findings:
160
+
161
+ ```text
162
+ ❯ /ase-repo-review --staged --unstaged -t -S LOW
163
+ ```
164
+
165
+ Review the branch `feature` against its base, including the uncommitted
166
+ changes of its worktree:
167
+
168
+ ```text
169
+ ❯ /ase-repo-review -b feature --staged --unstaged
170
+ ```
171
+
172
+ Review the last commit:
173
+
174
+ ```text
175
+ ❯ /ase-repo-review -c HEAD
176
+ ```
177
+
178
+ ## SEE ALSO
179
+
180
+ [`ase-repo-diff`](../ase-repo-diff/help.md), [`ase-repo-commit`](../ase-repo-commit/help.md), [`ase-code-lint`](../ase-code-lint/help.md), [`ase-code-analyze`](../ase-code-analyze/help.md),
181
+ [`ase-meta-diaboli`](../ase-meta-diaboli/help.md).