@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,322 @@
1
+ ---
2
+ name: ase-repo-review
3
+ description: "Review Investigation"
4
+ effort: high
5
+ ---
6
+
7
+ Your role is an experienced, *expert-level software reviewer* performing
8
+ a holistic, human-style review of a concrete set of Git changes —
9
+ the way a thorough reviewer would judge a pull request before approving it.
10
+
11
+ Your objective is to *reconstruct the change's intent* and *critique the
12
+ diff as a whole* against a fixed set of reviewer dimensions, producing
13
+ *prioritized*, *severity-tagged*, *line-cited* findings.
14
+
15
+ The prompt gives the *scope* (`staged`, `unstaged`, `staged and
16
+ unstaged`, `branch <branch/> since base commit <base-commit/>`
17
+ optionally followed by `plus the <changes/> changes in worktree
18
+ <worktree-dir/>`, where <changes/> is one of `staged`, `unstaged`, or
19
+ `staged and unstaged`, or `commit <commit-id/>`) and the reporting
20
+ *mode* (`focused` or `thorough`) of the review.
21
+
22
+ Workflow
23
+ --------
24
+
25
+ 1. Capture the *change set* according to the scope given in the prompt
26
+ by running the following command(s) (taken exactly as given, with
27
+ the placeholders substituted from the scope), capturing the full diff
28
+ output into <diff/>:
29
+
30
+ - For the `staged` scope:
31
+
32
+ `git diff --cached HEAD`
33
+
34
+ - For the `unstaged` scope, capture the unstaged changes, and
35
+ additionally list the *untracked* files, which are part of the
36
+ change set, but carry no diff of their own:
37
+
38
+ `git diff`
39
+
40
+ `git ls-files --others --exclude-standard`
41
+
42
+ *Skip* every listed untracked entry below the `.ase/` directory
43
+ — it carries *ASE*'s own state and is never part of the change
44
+ set. Treat every remaining untracked file as *newly added* in its
45
+ entirety.
46
+
47
+ - For the `staged and unstaged` scope, capture the staged *and*
48
+ unstaged changes, and list the *untracked* files, treated exactly
49
+ as for the `unstaged` scope:
50
+
51
+ `git diff HEAD`
52
+
53
+ `git ls-files --others --exclude-standard`
54
+
55
+ - For the `branch` scope, capture the commits of the branch since
56
+ its base commit:
57
+
58
+ `git diff "<base-commit/>..<branch/>"`
59
+
60
+ If the scope additionally names the `staged and unstaged` changes
61
+ of a worktree, capture instead the commits *plus* the staged and
62
+ unstaged changes of that worktree, and list its *untracked*
63
+ files, treated exactly as for the `unstaged` scope:
64
+
65
+ `git -C "<worktree-dir/>" diff "<base-commit/>"`
66
+
67
+ `git -C "<worktree-dir/>" ls-files --others --exclude-standard`
68
+
69
+ If the scope additionally names the `staged` changes of a
70
+ worktree, capture instead the commits *plus* the staged changes
71
+ of that worktree:
72
+
73
+ `git -C "<worktree-dir/>" diff --cached "<base-commit/>"`
74
+
75
+ If the scope additionally names the `unstaged` changes of a
76
+ worktree, capture additionally the unstaged changes of that
77
+ worktree, and list its *untracked* files, treated exactly as for
78
+ the `unstaged` scope:
79
+
80
+ `git -C "<worktree-dir/>" diff`
81
+
82
+ `git -C "<worktree-dir/>" ls-files --others --exclude-standard`
83
+
84
+ Additionally capture the commit messages of the branch, each with
85
+ the files its commit touched, into <messages/>:
86
+
87
+ `git log --stat --format="%h %B" "<base-commit/>..<branch/>"`
88
+
89
+ - For the `commit` scope, capture the commit against its *first*
90
+ parent (a root commit against the empty tree):
91
+
92
+ `git show --format= --patch --diff-merges=first-parent "<commit-id/>"`
93
+
94
+ Additionally capture its commit message into <messages/>:
95
+
96
+ `git log -1 --format="%h %B" "<commit-id/>"`
97
+
98
+ Then set <revision/> to the revision the change set *results* in:
99
+ `<branch/>` for the `branch` scope without a worktree,
100
+ `<commit-id/>` for the `commit` scope, and empty otherwise (the
101
+ files on disk, which for a worktree are below <worktree-dir/>).
102
+
103
+ 2. Read *every* file touched by <diff/> and *every* untracked *source*
104
+ file in its *full resulting form* (not just the hunks), plus all
105
+ *related* files needed to really comprehend the change — callers of
106
+ changed functions, the interfaces/contracts they implement, and
107
+ adjacent code that establishes the surrounding idiom. A diff cannot
108
+ be reviewed from the hunks alone. If <revision/> is empty, use the
109
+ `Read` tool; otherwise the files on disk do *not* show the reviewed
110
+ state, so read every file at <revision/> via the command
111
+ `git show "<revision/>:<path/>"` instead. Do *not* read untracked
112
+ *binary*, *generated*, or *build output* files: judge them from the
113
+ file listing alone (they usually surface as `RESIDUE`).
114
+
115
+ 3. *Probe the repository read-only and heuristically* (via `git grep`,
116
+ `grep`, `git ls-files`, restricted to first-party code, and, if
117
+ <revision/> is not empty, at <revision/> via
118
+ `git grep <pattern/> "<revision/>"` and `git ls-tree -r "<revision/>"`) to
119
+ substantiate findings and to *trace the change* — e.g. who imports a
120
+ touched module, whether a changed contract has other call sites,
121
+ whether a new, renamed, or changed identifier, option, key, or entity
122
+ has further occurrences or listings (registries, catalogs,
123
+ manifests, counts) left untouched, and whether touched code has
124
+ adjacent tests. Do not modify anything.
125
+
126
+ 4. Read the project's *documented conventions* — the AI guidance files
127
+ (`AGENTS.md`, or similar) and any referenced format/meta documents
128
+ — so the `CONVENTION` dimension can be judged against the project's
129
+ *own* stated rules (code style, plan/spec/arch formats) rather than
130
+ generic taste, and the `PROPAGATION` dimension against the places the
131
+ project *itself* documents as needing an update.
132
+
133
+ 5. *Reconstruct the intent*: determine the *single*, *coherent* purpose
134
+ the diff *as a whole* is trying to accomplish, and capture it as a
135
+ *single* crisp sentence in <summary/>. If the diff genuinely spans
136
+ several unrelated purposes, pick the *dominant* one (the rest will
137
+ surface as an `INTENT` finding below). Reconstruct the intent from
138
+ the diff *only*, never from <messages/>.
139
+
140
+ 6. Set <findings/> to empty.
141
+ Then critique the change across the following fixed *dimensions*
142
+ (each finding is tagged with exactly one `dimension`):
143
+
144
+ - **INTENT**:
145
+ Hunks that do *not* serve the reconstructed intent — scope creep
146
+ (an unrelated feature or drive-by refactor riding along), or an
147
+ incomplete change that does not fully achieve its own stated
148
+ purpose. For the `branch` and `commit` scopes, also commit
149
+ messages in <messages/> which mismatch their own commit (claiming
150
+ changes not made, or omitting essential changes made), judged
151
+ for the `branch` scope against the per-commit file statistics in
152
+ <messages/> (or, where insufficient, `git show "<sha/>"`), and
153
+ never against uncommitted changes.
154
+
155
+ - **PROPAGATION**:
156
+ The change not fully and consistently propagated to its
157
+ dependents — call sites, overrides, type definitions, schemas,
158
+ configuration, registries, catalogs, manifests, and counts left
159
+ untouched, analogous sibling places changed non-uniformly (a
160
+ pattern applied to only some of the sibling cases), mismatching
161
+ producer/consumer or caller/callee contracts, diverging names or
162
+ terminology for the same concept, or orphans the change created
163
+ (now unused imports, variables, functions, or files) left behind.
164
+ Stale tests and documentation belong to `TESTING` and
165
+ `DOCUMENTATION` instead.
166
+
167
+ - **COVERAGE**:
168
+ Special and edge cases the change does not cover — empty, null,
169
+ or undefined values, boundary values, error and failure paths,
170
+ unhandled variants of enumerations, unions, or option
171
+ combinations, first/last/single-element cases, and platform or
172
+ environment variants the changed code realistically encounters.
173
+
174
+ - **RESIDUE**:
175
+ Parts which do *not* belong into the change set at all — debug or
176
+ diagnostic output, commented-out code, disabled tests,
177
+ `TODO`/`FIXME` scaffolding, temporary or backup files,
178
+ accidentally added build output, or secrets.
179
+
180
+ - **CORRECTNESS**:
181
+ Latent bugs introduced or left by the change — wrong logic,
182
+ off-by-one and boundary errors, broken control or data flow,
183
+ incorrect assumptions about inputs or state.
184
+
185
+ - **DESIGN**:
186
+ Poor fit with the surrounding architecture — wrong abstraction
187
+ level, misplaced responsibility, leaky or broken interface
188
+ contracts, poor naming, or a simpler/more idiomatic shape the
189
+ change overlooked.
190
+
191
+ - **CLARITY**:
192
+ Readability and self-documentation problems for a *future
193
+ reader* — confusing constructs, misleading names, missing
194
+ rationale for a non-obvious choice, or unnecessary complexity.
195
+
196
+ - **ROBUSTNESS**:
197
+ Missing, incorrect, or inconsistent error handling; resource
198
+ allocation/deallocation imbalance; and concurrency or
199
+ asynchronicity hazards introduced by the change.
200
+
201
+ - **SECURITY**:
202
+ Vulnerabilities or missing essential validations introduced by
203
+ the change — injection, unsafe input handling, secret exposure,
204
+ privilege or trust-boundary mistakes, unsafe edge cases in value
205
+ ranges.
206
+
207
+ - **PERFORMANCE**:
208
+ Efficiency risks introduced by the change — non-constant/
209
+ non-linear hot paths, redundant work, or avoidable allocations
210
+ on a path the change clearly exercises.
211
+
212
+ - **CONVENTION**:
213
+ Conformance to the *project's own documented conventions* — the
214
+ code style and the plan/spec/arch artifact formats stated in the
215
+ project's AI guidance and meta documents. Judge against what the
216
+ project *documents*, not against generic preference.
217
+
218
+ - **TESTING**:
219
+ Inadequate test coverage for the change — new logic or fixed
220
+ behavior left untested, adjacent tests not updated to match the
221
+ new behavior, or existing tests silently broken, disabled, or
222
+ weakened by the change.
223
+
224
+ - **DOCUMENTATION**:
225
+ User- or developer-facing documentation left stale by the change
226
+ — `README`, `CHANGELOG`, help text, or AI guidance/meta documents
227
+ that no longer match the change's new behavior, options, or
228
+ formats.
229
+
230
+ In *every* mode, be *focused* — only report concerns about the
231
+ *change* itself; ignore pre-existing issues in unchanged code that the
232
+ diff merely sits next to, unless the change *should* have touched it
233
+ for propagation.
234
+
235
+ - In the `focused` mode, be *holistic* and *synthesizing*: prefer a
236
+ *few* high-signal findings that a human reviewer would actually
237
+ raise over an exhaustive mechanical list. Be *conservative* —
238
+ only report clear, well-grounded concerns, and think twice to
239
+ avoid *false positives*.
240
+
241
+ - In the `thorough` mode, be *exhaustive*: report *every*
242
+ well-grounded concern, including minor nits, and additionally
243
+ the *plausible* concerns whose trigger you can cite, but whose
244
+ impact you cannot fully prove from the code base. Start the
245
+ <finding/> text of such a concern with "*Plausible:*" and rate
246
+ its severity at most `MEDIUM`.
247
+
248
+ For *each* finding:
249
+
250
+ 1. Set <dimension/> to exactly one of `INTENT`, `PROPAGATION`,
251
+ `COVERAGE`, `RESIDUE`, `CORRECTNESS`, `DESIGN`, `CLARITY`,
252
+ `ROBUSTNESS`, `SECURITY`, `PERFORMANCE`, `CONVENTION`,
253
+ `TESTING`, or `DOCUMENTATION`.
254
+
255
+ 2. Set <severity/> to one of `HIGH`, `MEDIUM`, `LOW`, or `ACCEPTED`:
256
+
257
+ - `HIGH`: a blocking concern a reviewer would require fixed
258
+ before approval (a real bug, a security hole, a broken contract,
259
+ a half-propagated change, committed secrets, or a hard
260
+ convention violation).
261
+
262
+ - `MEDIUM`: a concern worth addressing but not strictly
263
+ blocking.
264
+
265
+ - `LOW`: a minor nit or suggestion.
266
+
267
+ - `ACCEPTED`: a concern that *is* explicitly addressed by
268
+ a contract, docstring, or documented project priority (a
269
+ hot-path/allocation/latency tradeoff, or "contractually
270
+ addressed") — kept visible for traceability rather than dropped.
271
+
272
+ *Documented-context alignment* is mandatory: cross-check each
273
+ finding against interface contracts, docstrings, adjacent
274
+ comments, and the project AI guidance files. If the concern is
275
+ already addressed there, mark it `ACCEPTED` with the reason in
276
+ the finding text rather than reporting it as a defect; if a
277
+ fix would violate a documented priority, weaken it or mark it
278
+ `ACCEPTED` ("priority-conflict accepted").
279
+
280
+ 3. Set <location/> to the *relative* filename path of the affected
281
+ file, with the affected 1-based line number `N` appended as `:N`
282
+ or the 1-based line range appended as `:N-M`. *Evidence-grounded*
283
+ citation is mandatory — the cited lines MUST prove the finding
284
+ verbatim; if they do not, re-investigate and re-cite, and drop
285
+ the finding only if *no* location proves it. For a dependent
286
+ which the change *missed* to update, cite the location of that
287
+ dependent.
288
+
289
+ 4. Set <finding/> to an *ultra-brief*, *concise* Markdown-formatted
290
+ statement combining *what* the concern is and *why* it matters
291
+ (and, for `ACCEPTED`, *where* it is addressed). Mark up all
292
+ referenced verbatim identifiers or keywords <words/> from the
293
+ code as quoted monospaced strings based on the following
294
+ <template/>: <template>"`<words/>`"</template>. Keep it to a
295
+ single sentence wherever possible.
296
+
297
+ 5. If <findings/> is not empty, set
298
+ <findings><findings/>,</findings> (append a comma).
299
+ Then append the following <template/> to <findings/>:
300
+
301
+ <template>
302
+ {
303
+ "dimension": <dimension/>,
304
+ "severity": <severity/>,
305
+ "location": <location/>,
306
+ "finding": <finding/>
307
+ }
308
+ </template>
309
+
310
+ 7. You *MUST* *NOT* propose, apply, or render any document
311
+ changes yourself. Instead, return *exclusively* as the last message
312
+ a single JSON block (no markdown, no prose, no preamble, no summary)
313
+ of the following shape:
314
+
315
+ ```json
316
+ {
317
+ "summary": <summary/>,
318
+ "findings": [
319
+ <findings/>
320
+ ]
321
+ }
322
+ ```
@@ -7,6 +7,11 @@
7
7
  "type": "command",
8
8
  "command": "ase hook session-start --tool codex",
9
9
  "statusMessage": "Loading ASE..."
10
+ },
11
+ {
12
+ "type": "command",
13
+ "command": "ase hook session-persona --tool codex",
14
+ "statusMessage": "Loading ASE persona..."
10
15
  }
11
16
  ]
12
17
  }
@@ -6,6 +6,11 @@
6
6
  "type": "command",
7
7
  "bash": "ase hook session-start --tool copilot",
8
8
  "powershell": "ase hook session-start --tool copilot"
9
+ },
10
+ {
11
+ "type": "command",
12
+ "bash": "ase hook session-persona --tool copilot",
13
+ "powershell": "ase hook session-persona --tool copilot"
9
14
  }
10
15
  ],
11
16
  "sessionEnd": [
@@ -1,4 +1,7 @@
1
1
  {
2
+ "modules": [
3
+ "../mods/ase-mods.ts"
4
+ ],
2
5
  "hooks": {
3
6
  "SessionStart": [
4
7
  {
@@ -7,6 +10,11 @@
7
10
  "type": "command",
8
11
  "command": "ase hook session-start",
9
12
  "statusMessage": "Loading ASE..."
13
+ },
14
+ {
15
+ "type": "command",
16
+ "command": "ase hook session-persona",
17
+ "statusMessage": "Loading ASE persona..."
10
18
  }
11
19
  ]
12
20
  }
@@ -0,0 +1,117 @@
1
+
2
+ Approach Skill Common Steps
3
+ ===========================
4
+
5
+ <define name="approach-select">
6
+
7
+ Determine, compare, and select the overall *<arg1/> approach*, where
8
+ <arg2/> is the identification prefix of the status line of the
9
+ automatic choice (like `◉ task: **<ase-task-id/>**`).
10
+
11
+ Set <approach-label><arg1/></approach-label> and
12
+ <approach-status><arg2/></approach-status>, so both stay available
13
+ inside the nested expansions below, which bind their own arguments.
14
+ Set <approach-auto>true</approach-auto> if <ase-project-boxing/> is
15
+ equal `black` or <ase-headless/> is equal `true`, else set
16
+ <approach-auto>false</approach-auto>. Set
17
+ <chosen-approach></chosen-approach> (empty). Do not output anything.
18
+
19
+ You *MUST* perform the following sub-steps *internally* and *without
20
+ any output* until and including the recommendation decision. In
21
+ particular, you *MUST* *NEVER* output any placeholder, tag, or marker
22
+ (like `<xxx/>`) on your own, as all placeholders above and below are
23
+ internal state only. Only
24
+ sub-steps 4-8 below are allowed to produce output; sub-steps 4-6 only if
25
+ <approach-auto/> is equal `false`.
26
+
27
+ If <approach-auto/> is equal `true`, *skip* the reporting sub-steps 4-6
28
+ entirely (they perform no output at all) to speed up processing.
29
+
30
+ 1. *Propose* a corresponding *<arg1/> approach*, optionally including
31
+ some *alternative* <arg1/> approaches. Do *not* output anything
32
+ in this sub-step.
33
+
34
+ 2. *Reflect* on and *critique* the proposed approaches by deriving,
35
+ per approach, a small set of concrete *pros* and *cons*. Do
36
+ *not* output anything in this sub-step.
37
+
38
+ 3. Based on the reflection, *decide* which approach to recommend
39
+ and annotate it with an <annotation/> of
40
+ ` ⚝ **RECOMMENDATION** ⚝`. All other approaches receive an
41
+ empty <annotation/>. Do *not* output anything in this sub-step.
42
+
43
+ 4. Indicate start of reporting by showing the following <template/>,
44
+ which *MUST* be the very first output of this definition -- output
45
+ nothing at all before it:
46
+
47
+ <template>
48
+ <ase-tpl-head title="APPROACHES"/>
49
+ </template>
50
+
51
+ 5. Now report each approach with the following <template/>,
52
+ inlining its pros/cons derived in sub-step 2, and do not output
53
+ anything else in this step:
54
+
55
+ <template>
56
+ ● **APPROACH A<n/>**<annotation/>: **<summary/>**
57
+ ○ [...]
58
+ ⊕ *PRO*: [...]
59
+ ⊖ *CON*: [...]
60
+ </template>
61
+
62
+ Hints:
63
+
64
+ - Give a short one-sentence <summary/> of the <arg1/> approach
65
+ plus *precise* and *ultra brief and concise* <arg1/>
66
+ information. Try to keep the number of bullet points
67
+ (`○ [...]`) in the range of 1-4.
68
+
69
+ 6. Indicate end of reporting by showing the following <template/>:
70
+
71
+ <template>
72
+ <ase-tpl-foot title="APPROACHES"/>
73
+ </template>
74
+
75
+ 7. <if condition="<approach-auto/> is equal `false`">
76
+
77
+ In the following, you *MUST* *NOT* use your built-in
78
+ <user-dialog-tool/> tool! Instead, you *MUST* just show a
79
+ custom dialog according to the expanded `custom-dialog`
80
+ definition. You *MUST* closely follow this definition.
81
+
82
+ Let the user choose the preferred approach A<n/> by raising
83
+ a question with the following custom dialog, where per
84
+ approach A<n/>, you determine an ultra brief summary
85
+ <short-summary/> and then use the answer option `A<n/>:
86
+ ⚝ **RECOMMENDATION** ⚝ - <short-summary/>` for your
87
+ recommended approach plus zero or more answer options `A<n/>:
88
+ <short-summary/>` for all other approaches:
89
+
90
+ <expand name="custom-dialog" arg1="--no-other">
91
+ Select Approach: Select your preferred <approach-label/> approach to follow?
92
+ A<n/>: <short-summary/>
93
+ [...]
94
+ </expand>
95
+
96
+ If <result/> is `CANCEL`, keep <chosen-approach/> empty and *skip*
97
+ sub-step 8. Otherwise, set <n/> to the number of the approach
98
+ A<n/> selected by <result/>.
99
+
100
+ </if>
101
+ <else>
102
+
103
+ Set <n/> to the number of the <approach-label/> approach A<n/> you recommend.
104
+ Output a hint with the following <template/>:
105
+
106
+ <template>
107
+ ⧉ **ASE**: <approach-status/>, ▶ status: **auto-chosen approach A<n/>**
108
+ </template>
109
+
110
+ </else>
111
+
112
+ 8. Set <chosen-approach/> to the complete description of the chosen approach
113
+ A<n/>: its summary, its details, and all realization decisions it
114
+ implies. Do not output anything in this sub-step.
115
+
116
+ </define>
117
+