@rse/ase 0.9.55 → 0.9.56
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-setup.js +4 -2
- package/dst/ase-statusline.js +6 -8
- package/dst/ase-task.js +36 -11
- package/package.json +5 -5
- 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-code-analyze.md +1 -1
- package/plugin/agents/ase-code-lint.md +4 -4
- package/plugin/agents/ase-meta-chat.md +1 -1
- package/plugin/agents/ase-meta-proximity.md +1 -1
- package/plugin/meta/ase-common-code.md +164 -1
- package/plugin/meta/ase-common-task.md +14 -13
- package/plugin/meta/ase-constitution.md +3 -3
- package/plugin/meta/ase-control.md +7 -7
- package/plugin/meta/ase-dialog.md +5 -4
- package/plugin/meta/ase-format-arch.md +7 -8
- package/plugin/meta/ase-format-spec.md +10 -11
- package/plugin/meta/ase-format-task.md +2 -2
- package/plugin/meta/ase-getopt.md +1 -1
- package/plugin/meta/ase-persona.md +3 -3
- package/plugin/meta/ase-skill.md +14 -24
- package/plugin/meta/ase-tenets.md +5 -5
- package/plugin/package.json +2 -2
- package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-arch-analyze/help.md +1 -1
- package/plugin/skills/ase-arch-discover/SKILL.md +8 -6
- package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-code-analyze/help.md +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +2 -153
- package/plugin/skills/ase-code-craft/help.md +1 -1
- package/plugin/skills/ase-code-explain/SKILL.md +3 -3
- package/plugin/skills/ase-code-insight/SKILL.md +9 -7
- package/plugin/skills/ase-code-lint/SKILL.md +7 -5
- package/plugin/skills/ase-code-refactor/SKILL.md +4 -155
- package/plugin/skills/ase-code-resolve/SKILL.md +8 -159
- package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
- package/plugin/skills/ase-docs-distill/help.md +1 -1
- package/plugin/skills/ase-docs-proofread/SKILL.md +7 -3
- package/plugin/skills/ase-help-intent/SKILL.md +33 -9
- package/plugin/skills/ase-help-skill/SKILL.md +1 -1
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +11 -2
- package/plugin/skills/ase-meta-changelog/SKILL.md +12 -8
- package/plugin/skills/ase-meta-commit/SKILL.md +11 -1
- package/plugin/skills/ase-meta-compat/SKILL.md +2 -2
- package/plugin/skills/ase-meta-config/help.md +1 -1
- package/plugin/skills/ase-meta-diaboli/SKILL.md +12 -3
- package/plugin/skills/ase-meta-diff/SKILL.md +11 -13
- package/plugin/skills/ase-meta-eli5/SKILL.md +3 -3
- package/plugin/skills/ase-meta-eli5/help.md +1 -1
- package/plugin/skills/ase-meta-evaluate/SKILL.md +3 -3
- package/plugin/skills/ase-meta-quorum/SKILL.md +17 -17
- package/plugin/skills/ase-meta-quotes/SKILL.md +1 -1
- package/plugin/skills/ase-meta-review/SKILL.md +7 -5
- package/plugin/skills/ase-meta-review/help.md +2 -2
- package/plugin/skills/ase-meta-search/SKILL.md +18 -0
- package/plugin/skills/ase-meta-steelman/SKILL.md +11 -2
- package/plugin/skills/ase-meta-why/SKILL.md +15 -6
- package/plugin/skills/ase-meta-why/help.md +3 -3
- package/plugin/skills/ase-sync-export/SKILL.md +2 -1
- package/plugin/skills/ase-sync-export/help.md +1 -1
- package/plugin/skills/ase-sync-reconcile/SKILL.md +16 -2
- package/plugin/skills/ase-task-condense/SKILL.md +13 -67
- package/plugin/skills/ase-task-delete/SKILL.md +1 -1
- package/plugin/skills/ase-task-dissect/SKILL.md +5 -18
- package/plugin/skills/ase-task-edit/SKILL.md +49 -22
- package/plugin/skills/ase-task-grill/SKILL.md +31 -129
- package/plugin/skills/ase-task-id/SKILL.md +12 -2
- package/plugin/skills/ase-task-implement/SKILL.md +11 -7
- package/plugin/skills/ase-task-implement/help.md +1 -1
- package/plugin/skills/ase-task-list/SKILL.md +9 -0
- package/plugin/skills/ase-task-preflight/SKILL.md +13 -7
- package/plugin/skills/ase-task-reboot/SKILL.md +18 -61
- package/plugin/skills/ase-task-reboot/help.md +1 -1
- package/plugin/skills/ase-task-view/SKILL.md +4 -2
- package/dst/ase-guidance.js +0 -89
- package/dst/ase-persona.js +0 -87
- package/dst/ase-stdout.js +0 -18
package/dst/ase-setup.js
CHANGED
|
@@ -808,9 +808,11 @@ export default class SetupCommand {
|
|
|
808
808
|
/* default for --dev derived from ASE_SETUP_DEV environment variable */
|
|
809
809
|
const envDev = process.env.ASE_SETUP_DEV ?? "";
|
|
810
810
|
const devDflt = envDev !== "" && envDev !== "0" && envDev.toLowerCase() !== "false";
|
|
811
|
-
/* default for --tool derived from ASE_TOOL environment variable
|
|
811
|
+
/* default for --tool derived from ASE_TOOL environment variable
|
|
812
|
+
(validated lazily by "parseTool" in each action, so an invalid
|
|
813
|
+
value cannot break unrelated "ase" commands at startup) */
|
|
812
814
|
const envTool = process.env.ASE_TOOL ?? "";
|
|
813
|
-
const toolDflt = envTool !== "" ?
|
|
815
|
+
const toolDflt = envTool !== "" ? envTool : "claude";
|
|
814
816
|
/* register CLI top-level command "ase setup" */
|
|
815
817
|
const setupCmd = program
|
|
816
818
|
.command("setup")
|
package/dst/ase-statusline.js
CHANGED
|
@@ -388,25 +388,23 @@ export default class StatuslineCommand {
|
|
|
388
388
|
/* ==== RATE LIMITS ==== */
|
|
389
389
|
S: () => {
|
|
390
390
|
const pct5h = data.rate_limits?.five_hour?.used_percentage;
|
|
391
|
-
|
|
392
|
-
|
|
391
|
+
const s = pct5h !== undefined ? `${pct5h.toFixed(1)}%` : "-";
|
|
392
|
+
emit(`${prefix("⏲", "5h-usage")}${c.bold(s)}`);
|
|
393
393
|
},
|
|
394
394
|
D: () => {
|
|
395
395
|
const until5h = data.rate_limits?.five_hour?.resets_at;
|
|
396
396
|
const s = formatTimeUntil(until5h);
|
|
397
|
-
|
|
398
|
-
emit(`${prefix("⏱", "session-resets")}${c.bold(s)}`);
|
|
397
|
+
emit(`${prefix("⏱", "5h-resets")}${c.bold(s !== "" ? s : "-")}`);
|
|
399
398
|
},
|
|
400
399
|
W: () => {
|
|
401
400
|
const pctWk = data.rate_limits?.seven_day?.used_percentage;
|
|
402
|
-
|
|
403
|
-
|
|
401
|
+
const s = pctWk !== undefined ? `${pctWk.toFixed(1)}%` : "-";
|
|
402
|
+
emit(`${prefix("⏲", "7d-usage")}${c.bold(s)}`);
|
|
404
403
|
},
|
|
405
404
|
Q: () => {
|
|
406
405
|
const untilWk = data.rate_limits?.seven_day?.resets_at;
|
|
407
406
|
const s = formatTimeUntil(untilWk);
|
|
408
|
-
|
|
409
|
-
emit(`${prefix("⏱", "weekly-resets")}${c.bold(s)}`);
|
|
407
|
+
emit(`${prefix("⏱", "7d-resets")}${c.bold(s !== "" ? s : "-")}`);
|
|
410
408
|
},
|
|
411
409
|
/* ==== COSTS ==== */
|
|
412
410
|
H: () => {
|
package/dst/ase-task.js
CHANGED
|
@@ -529,15 +529,33 @@ export class TaskMCP {
|
|
|
529
529
|
title: "ASE task load",
|
|
530
530
|
description: "Load a previously persisted task by `id`. " +
|
|
531
531
|
"Returns the task as `text`, normalized into the current Markdown frontmatter shape; " +
|
|
532
|
-
"returns an empty string if no task exists for the `id`."
|
|
532
|
+
"returns an empty string if no task exists for the `id`. " +
|
|
533
|
+
"The `variant` argument selects the returned form of the plan: " +
|
|
534
|
+
"`source` (the default) is the *authoring* form and the *only* form which may be " +
|
|
535
|
+
"edited and passed back into `ase_task_save`; " +
|
|
536
|
+
"`render` is the *rendering-prepared* form, which is for *display only* and " +
|
|
537
|
+
"MUST NOT be persisted; " +
|
|
538
|
+
"`both` returns the source form enclosed in `<task-plan-source>` delimiter lines, " +
|
|
539
|
+
"followed by the render form enclosed in `<task-plan-render>` delimiter lines.",
|
|
533
540
|
inputSchema: {
|
|
534
541
|
id: z.string()
|
|
535
|
-
.describe("task identifier (allowed characters: A-Z, a-z, 0-9, '_', '-')")
|
|
542
|
+
.describe("task identifier (allowed characters: A-Z, a-z, 0-9, '_', '-')"),
|
|
543
|
+
variant: z.enum(["source", "render", "both"]).optional()
|
|
544
|
+
.describe("returned form of the plan: `source` (authoring form, the default), " +
|
|
545
|
+
"`render` (rendering-prepared form, display only), or `both` " +
|
|
546
|
+
"(both forms, each enclosed in its delimiter lines)")
|
|
536
547
|
}
|
|
537
548
|
}, async (args) => {
|
|
538
549
|
try {
|
|
539
|
-
const
|
|
540
|
-
const
|
|
550
|
+
const source = Task.load(this.log, args.id);
|
|
551
|
+
const variant = args.variant ?? "source";
|
|
552
|
+
let text = source;
|
|
553
|
+
if (source !== "" && variant === "render")
|
|
554
|
+
text = Markdown.prepare(source);
|
|
555
|
+
else if (source !== "" && variant === "both")
|
|
556
|
+
text =
|
|
557
|
+
`<task-plan-source>\n${source}\n</task-plan-source>\n\n` +
|
|
558
|
+
`<task-plan-render>\n${Markdown.prepare(source)}\n</task-plan-render>\n`;
|
|
541
559
|
return {
|
|
542
560
|
content: [{ type: "text", text }]
|
|
543
561
|
};
|
|
@@ -550,21 +568,28 @@ export class TaskMCP {
|
|
|
550
568
|
mcp.registerTool("ase_task_save", {
|
|
551
569
|
title: "ASE task save",
|
|
552
570
|
description: "Persist a task as `text` under `id`. " +
|
|
553
|
-
"
|
|
554
|
-
"
|
|
571
|
+
"The `text` MUST be the *authoring* form of the plan (as returned by the " +
|
|
572
|
+
"`source` variant of `ase_task_load`) and hence MUST NOT carry any rendering " +
|
|
573
|
+
"artifacts. Overwrites any existing task for the same `id`. " +
|
|
574
|
+
"Returns a status `text` by default, or, if `render` is `true`, the " +
|
|
575
|
+
"*rendering-prepared* form of the just-saved plan, for display purposes only.",
|
|
555
576
|
inputSchema: {
|
|
556
577
|
id: z.string()
|
|
557
578
|
.describe("task identifier (allowed characters: A-Z, a-z, 0-9, '_', '-')"),
|
|
558
579
|
text: z.string()
|
|
559
|
-
.describe("text content of the task")
|
|
580
|
+
.describe("text content of the task, in its authoring form"),
|
|
581
|
+
render: z.boolean().optional()
|
|
582
|
+
.describe("if true, return the rendering-prepared form of the just-saved " +
|
|
583
|
+
"plan instead of a status message (default: false)")
|
|
560
584
|
}
|
|
561
585
|
}, async (args) => {
|
|
562
586
|
try {
|
|
563
587
|
Task.save(this.log, args.id, args.text);
|
|
564
|
-
/* return the prepared content, so a caller
|
|
565
|
-
just-saved plan
|
|
566
|
-
|
|
567
|
-
|
|
588
|
+
/* return the rendering-prepared content on demand, so a caller
|
|
589
|
+
displaying the just-saved plan does not have to re-load it */
|
|
590
|
+
const text = (args.render ?? false) ?
|
|
591
|
+
Markdown.prepare(args.text) :
|
|
592
|
+
`OK: saved task "${args.id}"`;
|
|
568
593
|
return {
|
|
569
594
|
content: [{ type: "text", text }]
|
|
570
595
|
};
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "https://ase.tools",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "https://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.56",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -18,12 +18,12 @@
|
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"eslint": "9.39.4",
|
|
20
20
|
"@eslint/js": "9.39.4",
|
|
21
|
-
"@typescript-eslint/parser": "8.
|
|
22
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
21
|
+
"@typescript-eslint/parser": "8.66.0",
|
|
22
|
+
"@typescript-eslint/eslint-plugin": "8.66.0",
|
|
23
23
|
"eslint-plugin-promise": "7.3.0",
|
|
24
24
|
"eslint-plugin-import": "2.32.0",
|
|
25
25
|
"neostandard": "0.13.0",
|
|
26
|
-
"globals": "17.
|
|
26
|
+
"globals": "17.9.0",
|
|
27
27
|
"typescript": "6.0.3",
|
|
28
28
|
|
|
29
29
|
"@rse/stx": "1.1.6",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"commander": "15.0.0",
|
|
45
|
-
"@dotenvx/dotenvx": "2.19.
|
|
45
|
+
"@dotenvx/dotenvx": "2.19.2",
|
|
46
46
|
"yaml": "2.9.0",
|
|
47
47
|
"valibot": "1.4.2",
|
|
48
48
|
"execa": "10.0.1",
|
|
@@ -63,7 +63,7 @@ Workflow
|
|
|
63
63
|
- incorrect short-circuit evaluation or operator precedence
|
|
64
64
|
- logical vs. bitwise operator confusion
|
|
65
65
|
- negation mistakes in compound predicates
|
|
66
|
-
- wrong comparison operator (`==` instead of `===`, `<` vs. `<=`, etc)
|
|
66
|
+
- wrong comparison operator (`==` instead of `===`, `<` vs. `<=`, etc.)
|
|
67
67
|
- inverted condition or swapped if/else branches
|
|
68
68
|
- dead or duplicated conditional branches
|
|
69
69
|
- fall-through where a break or return was intended
|
|
@@ -65,10 +65,10 @@ Workflow
|
|
|
65
65
|
identifiers, string literals and comments.
|
|
66
66
|
|
|
67
67
|
Especially, for comments ensure English language only and
|
|
68
|
-
prefer short very brief one-line descriptions.
|
|
68
|
+
prefer short, very brief one-line descriptions.
|
|
69
69
|
|
|
70
70
|
- **A05 - COMPLEXITY**:
|
|
71
|
-
Check for extremely long functions
|
|
71
|
+
Check for extremely long functions and deeply nested code
|
|
72
72
|
constructs.
|
|
73
73
|
|
|
74
74
|
Especially, for functions prefer fewer than 100 lines, and for
|
|
@@ -185,8 +185,8 @@ Workflow
|
|
|
185
185
|
- **A15 - PERFORMANCE**:
|
|
186
186
|
Check for bad performance and inefficiency issues.
|
|
187
187
|
|
|
188
|
-
Especially, check for code constructs with a high (i.e., not
|
|
189
|
-
constant/O(1), or linear/O(n)
|
|
188
|
+
Especially, check for code constructs with a high complexity (i.e., not
|
|
189
|
+
constant/O(1), or linear/O(n)) in their execution time
|
|
190
190
|
and/or memory consumption.
|
|
191
191
|
|
|
192
192
|
- **A16 - SECURITY**:
|
|
@@ -56,5 +56,5 @@ tools:
|
|
|
56
56
|
4. Now call the MCP tool `query(prompt: <query/>)` from the MCP server
|
|
57
57
|
<server/> and then return its result `text` *verbatim* and *without
|
|
58
58
|
any modifications* as the last message. Especially, do *NOT* add or
|
|
59
|
-
remove any text to the MCP server response on your own and do not
|
|
59
|
+
remove any text to or from the MCP server response on your own and do not
|
|
60
60
|
interpret the result in any way.
|
|
@@ -102,7 +102,7 @@ store those facts in the placeholder named `<arg2/>`.
|
|
|
102
102
|
<child-4/>.
|
|
103
103
|
|
|
104
104
|
<expand name="gather-facts"
|
|
105
|
-
arg1="the
|
|
105
|
+
arg1="the CHILD topics (narrower topics that are specializations) of the following topic: <topic/>"
|
|
106
106
|
arg2="facts-children"></expand>
|
|
107
107
|
|
|
108
108
|
Ground the determination of the canonical names of the most
|
|
@@ -4,7 +4,7 @@ Code Skill Common Steps
|
|
|
4
4
|
|
|
5
5
|
<define name="code-tenets">
|
|
6
6
|
|
|
7
|
-
You *MUST* internalize and strictly honor the **GENERIC TENETS
|
|
7
|
+
You *MUST* internalize and strictly honor the **GENERIC TENETS** and
|
|
8
8
|
the **<arg1/> TENETS** of the **ASE Tenets** in the following creation
|
|
9
9
|
and updating of code. Do not output anything.
|
|
10
10
|
|
|
@@ -32,3 +32,166 @@ Then honor the tenet sets of <task-kind/>:
|
|
|
32
32
|
<expand name="code-tenets" arg1="<task-kind/>"></expand>
|
|
33
33
|
|
|
34
34
|
</define>
|
|
35
|
+
|
|
36
|
+
<define name="code-approaches">
|
|
37
|
+
|
|
38
|
+
You *MUST* perform the following sub-steps *internally* and *without
|
|
39
|
+
any output* until and including the recommendation decision. Only
|
|
40
|
+
sub-steps 4-7 below are allowed to produce output; sub-steps 4-6 only if
|
|
41
|
+
<getopt-option-auto/> is equal `false` *and* <ase-project-boxing/>
|
|
42
|
+
is *not* equal `black`.
|
|
43
|
+
|
|
44
|
+
If <getopt-option-auto/> is equal `true` or <ase-project-boxing/> is
|
|
45
|
+
equal `black`, *skip* the reporting sub-steps 4-6 entirely (they
|
|
46
|
+
perform no output at all) to speed up processing.
|
|
47
|
+
|
|
48
|
+
1. *Propose* a corresponding *<arg1/> approach*, optionally including
|
|
49
|
+
some *alternative* <arg1/> approaches. Do *not* output anything
|
|
50
|
+
in this sub-step.
|
|
51
|
+
|
|
52
|
+
2. *Reflect* on and *critique* the proposed approaches by deriving,
|
|
53
|
+
per approach, a small set of concrete *pros* and *cons*. Do
|
|
54
|
+
*not* output anything in this sub-step.
|
|
55
|
+
|
|
56
|
+
3. Based on the reflection, *decide* which approach to recommend
|
|
57
|
+
and annotate it with an <annotation/> of
|
|
58
|
+
` ⚝ **RECOMMENDATION** ⚝`. All other approaches receive an
|
|
59
|
+
empty <annotation/>. Do *not* output anything in this sub-step.
|
|
60
|
+
|
|
61
|
+
4. Indicate start of reporting by showing the following <template/>:
|
|
62
|
+
|
|
63
|
+
<template>
|
|
64
|
+
<ase-tpl-head title="APPROACHES"/>
|
|
65
|
+
</template>
|
|
66
|
+
|
|
67
|
+
5. Now report each approach with the following <template/>,
|
|
68
|
+
inlining its pros/cons derived in sub-step 2, and do not output
|
|
69
|
+
anything else in this step:
|
|
70
|
+
|
|
71
|
+
<template>
|
|
72
|
+
● **APPROACH A<n/>**<annotation/>: **<summary/>**
|
|
73
|
+
○ [...]
|
|
74
|
+
⊕ *PRO*: [...]
|
|
75
|
+
⊖ *CON*: [...]
|
|
76
|
+
</template>
|
|
77
|
+
|
|
78
|
+
Hints:
|
|
79
|
+
|
|
80
|
+
- Give a short one-sentence <summary/> of the <arg1/> approach
|
|
81
|
+
plus *precise* and *ultra brief and concise* <arg1/>
|
|
82
|
+
information. Try to keep the number of bullet points
|
|
83
|
+
(`○ [...]`) in the range of 1-4.
|
|
84
|
+
|
|
85
|
+
6. Indicate end of reporting by showing the following <template/>:
|
|
86
|
+
|
|
87
|
+
<template>
|
|
88
|
+
<ase-tpl-foot title="APPROACHES"/>
|
|
89
|
+
</template>
|
|
90
|
+
|
|
91
|
+
7. <if condition="<getopt-option-auto/> is not equal `true` and <ase-project-boxing/> is not equal `black`">
|
|
92
|
+
|
|
93
|
+
In the following, you *MUST* *NOT* use your built-in
|
|
94
|
+
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
95
|
+
custom dialog according to the expanded `custom-dialog`
|
|
96
|
+
definition. You *MUST* closely follow this definition.
|
|
97
|
+
|
|
98
|
+
Let the user choose the preferred approach A<n/> by raising
|
|
99
|
+
a question with the following custom dialog, where per
|
|
100
|
+
approach A<n/>, you determine an ultra brief summary
|
|
101
|
+
<short-summary/> and then use the answer option `A<n/>:
|
|
102
|
+
⚝ **RECOMMENDATION** ⚝ - <short-summary/>` for your
|
|
103
|
+
recommended approach plus zero or more answer options `A<n/>:
|
|
104
|
+
<short-summary/>` for all other approaches:
|
|
105
|
+
|
|
106
|
+
<expand name="custom-dialog" arg1="--no-other">
|
|
107
|
+
Select Approach: Select your preferred <arg2/> approach to follow?
|
|
108
|
+
A<n/>: <short-summary/>
|
|
109
|
+
[...]
|
|
110
|
+
</expand>
|
|
111
|
+
|
|
112
|
+
</if>
|
|
113
|
+
<else>
|
|
114
|
+
|
|
115
|
+
Set <n/> to the number of the <arg1/> approach A<n/> you recommend.
|
|
116
|
+
Output a hint with the following <template/>:
|
|
117
|
+
|
|
118
|
+
<template>
|
|
119
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **auto-chosen approach A<n/>**
|
|
120
|
+
</template>
|
|
121
|
+
|
|
122
|
+
</else>
|
|
123
|
+
|
|
124
|
+
</define>
|
|
125
|
+
|
|
126
|
+
<define name="code-next-dispatch">
|
|
127
|
+
|
|
128
|
+
Treat <getopt-option-next/> as a comma-separated chronological
|
|
129
|
+
list of pre-selected next-step tokens. *Peek* the *first* token
|
|
130
|
+
as <head/> (or `none` if the list is `none`/empty).
|
|
131
|
+
Set <args>--int-reuse-task</args>.
|
|
132
|
+
|
|
133
|
+
1. <if condition="<head/> is equal `DONE`">
|
|
134
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
135
|
+
tokens (joined back with `,`, or `none` if empty). `DONE`
|
|
136
|
+
means the freshly composed plan is finalized as-is, so do
|
|
137
|
+
*not* hand off to `ase-task-edit`. Only output the following
|
|
138
|
+
<template/> and then *STOP*. Do *not* implement the plan.
|
|
139
|
+
|
|
140
|
+
<template>
|
|
141
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- done**
|
|
142
|
+
</template>
|
|
143
|
+
</if>
|
|
144
|
+
|
|
145
|
+
2. <elseif condition="<head/> is equal `IMPLEMENT`">
|
|
146
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
147
|
+
tokens (joined back with `,`, or `none` if empty).
|
|
148
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
149
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
150
|
+
</if>
|
|
151
|
+
Call the tool `Skill(skill: "ase:ase-task-implement", args: "<args/>")`
|
|
152
|
+
to *implement* the freshly composed plan, bypassing `ase-task-edit`.
|
|
153
|
+
</elseif>
|
|
154
|
+
|
|
155
|
+
3. <elseif condition="<head/> is equal `PREFLIGHT`">
|
|
156
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
157
|
+
tokens (joined back with `,`, or `none` if empty).
|
|
158
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
159
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
160
|
+
</if>
|
|
161
|
+
Call the tool `Skill(skill: "ase:ase-task-preflight", args: "<args/>")`
|
|
162
|
+
to *preflight* the freshly composed plan, bypassing `ase-task-edit`.
|
|
163
|
+
</elseif>
|
|
164
|
+
|
|
165
|
+
4. <elseif condition="<head/> is equal `GRILL`">
|
|
166
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
167
|
+
tokens (joined back with `,`, or `none` if empty). `GRILL`
|
|
168
|
+
is this skill's own dispatch token, *not* part of
|
|
169
|
+
`ase-task-grill`'s `--next` vocabulary, so it must be
|
|
170
|
+
stripped here rather than forwarded. All remaining tokens are
|
|
171
|
+
`ase-task-grill`'s own vocabulary and are forwarded verbatim.
|
|
172
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
173
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
174
|
+
</if>
|
|
175
|
+
Call the tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
|
|
176
|
+
to *grill* the freshly composed plan, bypassing `ase-task-edit`.
|
|
177
|
+
</elseif>
|
|
178
|
+
|
|
179
|
+
5. <else>
|
|
180
|
+
Hand off to `ase-task-edit`.
|
|
181
|
+
<if condition="<head/> is equal `EDIT`">
|
|
182
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
183
|
+
tokens (joined back with `,`, or `none` if empty). `EDIT`
|
|
184
|
+
is this skill's own dispatch token, *not* part of
|
|
185
|
+
`ase-task-edit`'s `--next` vocabulary, so it must be
|
|
186
|
+
stripped here rather than forwarded.
|
|
187
|
+
</if>
|
|
188
|
+
All remaining tokens are `ase-task-edit`'s own vocabulary
|
|
189
|
+
and are forwarded verbatim, so `ase-task-edit` consumes its
|
|
190
|
+
own head itself.
|
|
191
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
192
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
193
|
+
</if>
|
|
194
|
+
Then call the tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`.
|
|
195
|
+
</else>
|
|
196
|
+
|
|
197
|
+
</define>
|
|
@@ -62,29 +62,30 @@ Task Skill Common Steps
|
|
|
62
62
|
|
|
63
63
|
<if condition="
|
|
64
64
|
<getopt-option-int-reuse-task/> is equal `true`
|
|
65
|
-
*and*
|
|
65
|
+
*and* an `ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
66
66
|
exists earlier in the current session
|
|
67
67
|
">
|
|
68
|
-
Set <text/> to the `text` *
|
|
68
|
+
Set <text/> to the `text` *argument* of the most recent
|
|
69
69
|
`ase_task_save(id: '<ase-task-id/>', ...)` tool call -- this is
|
|
70
|
-
the
|
|
71
|
-
with the `text` *
|
|
70
|
+
the *authoring form* of the plan and *MUST NOT* be confused
|
|
71
|
+
with the `text` *output* field of that call -- *without*
|
|
72
72
|
calling `ase_task_load` again. Set <status>plan
|
|
73
73
|
reused</status>. Do not output anything.
|
|
74
74
|
</if>
|
|
75
75
|
<else>
|
|
76
76
|
Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
|
|
77
|
-
`ase` MCP server to load the current task plan content
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
call.
|
|
77
|
+
`ase` MCP server to load the current task plan content in its
|
|
78
|
+
*authoring form* -- the `variant` argument defaults to `source`
|
|
79
|
+
-- and set <text/> to the `text` output field of this
|
|
80
|
+
`ase_task_load` tool call. Do not output anything related to
|
|
81
|
+
this MCP tool call. Set <status>plan loaded</status>.
|
|
81
82
|
</else>
|
|
82
83
|
|
|
83
84
|
- If <text/> starts with `ERROR:` or `WARNING:`:
|
|
84
85
|
Set <task-content></task-content> (set task content to empty).
|
|
85
86
|
Set <words/> to "0".
|
|
86
87
|
|
|
87
|
-
- If <text/>
|
|
88
|
+
- If <text/> does NOT start with `ERROR:` and NOT with `WARNING:`:
|
|
88
89
|
Set <task-content><text/></task-content> (set task content to text).
|
|
89
90
|
Calculate the number of words <words/> of <task-content/>.
|
|
90
91
|
|
|
@@ -101,7 +102,7 @@ Only output the following <template/>:
|
|
|
101
102
|
Update <timestamp-modified/> with the current time in ISO-style
|
|
102
103
|
format, which has to be determined by calling the
|
|
103
104
|
`ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
|
|
104
|
-
MCP server and
|
|
105
|
+
MCP server and using the `text` field of its response. If
|
|
105
106
|
<timestamp-created/> is still unset (because the plan content
|
|
106
107
|
had no `Created:` frontmatter key), set
|
|
107
108
|
<timestamp-created><timestamp-modified/></timestamp-created>
|
|
@@ -113,8 +114,8 @@ the number of words <words/> of <task-content/>.
|
|
|
113
114
|
|
|
114
115
|
Call the `ase_task_save(id: "<ase-task-id/>", text:
|
|
115
116
|
"<task-content/>")` tool of the `ase` MCP server to save the task
|
|
116
|
-
plan content
|
|
117
|
-
except the following <template/>:
|
|
117
|
+
plan content in its *authoring form*. Do not output anything
|
|
118
|
+
related to this MCP call except the following <template/>:
|
|
118
119
|
|
|
119
120
|
<template>
|
|
120
121
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<arg1/>**
|
|
@@ -143,7 +144,7 @@ except the following <template/>:
|
|
|
143
144
|
⧉ **ASE**: ☻ skill: **<arg1/>**, ▶ ERROR: invalid `--next` token: **<head/>**
|
|
144
145
|
</template>
|
|
145
146
|
|
|
146
|
-
-
|
|
147
|
+
- Else, i.e. <getopt-option-next/> was *originally* equal to `none`:
|
|
147
148
|
|
|
148
149
|
In the following, you *MUST* *NOT* use your built-in
|
|
149
150
|
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
@@ -13,7 +13,7 @@ which boosts you to an expert-level Software Engineering AI agent.
|
|
|
13
13
|
- Do *not* use braces around single-statement blocks in "if" and "while" constructs unless the language requires them.
|
|
14
14
|
- Do *not* insist on early "return" in "if" blocks, if an "else" block exists.
|
|
15
15
|
- Do *not* remove any whitespace in the code formatting -- keep whitespace aligned with code base.
|
|
16
|
-
- Do *not* produce any trailing
|
|
16
|
+
- Do *not* produce any trailing whitespace on any lines.
|
|
17
17
|
- Do *not* guess missing tool call parameters or fill them with invented placeholder values.
|
|
18
18
|
|
|
19
19
|
## Commandments
|
|
@@ -24,7 +24,7 @@ which boosts you to an expert-level Software Engineering AI agent.
|
|
|
24
24
|
- Assume your *internal knowledge of dependencies* (libraries, frameworks, tools, and their implementations)
|
|
25
25
|
is *outdated*; always verify the current API, version, and usage pattern against the local sources
|
|
26
26
|
or the web before writing any code against them.
|
|
27
|
-
- Before proposing any code changes, explain *WHAT* the proposed changes do and *WHY*
|
|
27
|
+
- Before proposing any code changes, explain *WHAT* the proposed changes do and *WHY* they are necessary.
|
|
28
28
|
- Use *concise* and *type-safe code* only.
|
|
29
29
|
- Use *precise* and *surgical code changes* only.
|
|
30
30
|
- Be very *pedantic* on code style.
|
|
@@ -36,7 +36,7 @@ which boosts you to an expert-level Software Engineering AI agent.
|
|
|
36
36
|
- Always use *parentheses around arrow function parameters*, even for a single parameter.
|
|
37
37
|
- Make a line break before the keywords "else", "catch", and "finally".
|
|
38
38
|
- Try to *vertically align similar operators* on consecutive, similar lines.
|
|
39
|
-
- Place spaces after opening and before closing
|
|
39
|
+
- Place spaces after opening and before closing square brackets
|
|
40
40
|
(except for array access and array types) and braces (except for regular expression ranges).
|
|
41
41
|
- Use *double-quotes* (`"[...]"`) instead of single-quotes (`'[...]'`) for all strings.
|
|
42
42
|
- Use K&R coding style with *opening braces* at the end of lines and *closing braces* at the beginning of lines.
|
|
@@ -6,9 +6,9 @@ Control Flow Constructs
|
|
|
6
6
|
<define name="<define-name/>"><define-body/></define>:
|
|
7
7
|
|
|
8
8
|
This specifies a *reusable definition* named <define-name/> and
|
|
9
|
-
|
|
9
|
+
a <define-body/> which can contain arbitrary information with
|
|
10
10
|
optional `<args/>` (or alternatively, individual `<arg1/>`,
|
|
11
|
-
`<arg2/>`, etc) and optional `<content/>` references from
|
|
11
|
+
`<arg2/>`, etc.) and optional `<content/>` references from
|
|
12
12
|
subsequent <expand/> calls.
|
|
13
13
|
This construct is expanded into nothing.
|
|
14
14
|
Do not output anything.
|
|
@@ -20,7 +20,7 @@ Control Flow Constructs
|
|
|
20
20
|
construct is expanded to the <define-body/> of <define/> with
|
|
21
21
|
`<args/>` substituted with `<expand-arg1/> <expand-arg2/> [...]`,
|
|
22
22
|
`<arg1/>` substituted with <expand-arg1/>, `<arg2/>` substituted
|
|
23
|
-
with <expand-arg2/>, etc
|
|
23
|
+
with <expand-arg2/>, etc., and `<content/>` substituted with
|
|
24
24
|
<expand-content/>. Do not output anything else.
|
|
25
25
|
|
|
26
26
|
- *IMPORTANT*: You *MUST* honor the following control flow construct:
|
|
@@ -47,7 +47,7 @@ Control Flow Constructs
|
|
|
47
47
|
<if condition="<if-condition/>"><if-body/></if>:
|
|
48
48
|
|
|
49
49
|
This specifies a simple condition which is expanded to <if-body/>
|
|
50
|
-
if <if-condition/> is met, or to empty string if <if-condition/> is
|
|
50
|
+
if <if-condition/> is met, or to the empty string if <if-condition/> is
|
|
51
51
|
*not* met. It can be optionally followed by one or more <elseif/>
|
|
52
52
|
constructs and/or one final <else/> construct. Do not output anything else.
|
|
53
53
|
|
|
@@ -112,11 +112,11 @@ Control Flow Constructs
|
|
|
112
112
|
anything else.
|
|
113
113
|
|
|
114
114
|
- *IMPORTANT*: You *MUST* honor the following control flow construct:
|
|
115
|
-
<agent-consolidation [group=<agent-group/>]
|
|
115
|
+
<agent-consolidation [group=<agent-group/>]/>:
|
|
116
116
|
|
|
117
117
|
This specifies the merging of all the Git WorkTrees created by the
|
|
118
|
-
<agent/> calls
|
|
119
|
-
<agent-group/> or
|
|
118
|
+
<agent/> calls which either are identified with the unique group
|
|
119
|
+
<agent-group/> or occur in the last <parallel/> section
|
|
120
120
|
of the context. After merging a single Git WorkTree, remove the Git
|
|
121
121
|
WorkTree.
|
|
122
122
|
|
|
@@ -63,7 +63,7 @@ following procedure:
|
|
|
63
63
|
|
|
64
64
|
<text>
|
|
65
65
|
<text/>
|
|
66
|
-
<
|
|
66
|
+
<label-key/> ▶ <label-text/><label-pad/> <description/>
|
|
67
67
|
</text>
|
|
68
68
|
|
|
69
69
|
<if condition="<keys/> is empty">
|
|
@@ -82,7 +82,7 @@ following procedure:
|
|
|
82
82
|
</else>
|
|
83
83
|
|
|
84
84
|
<if condition="<opts/> contains `--other` and does *not* contain `--no-other`">
|
|
85
|
-
Set <hint>Please choose *one* option by typing <keys/>, or other free-text instruction.</hint>.
|
|
85
|
+
Set <hint>Please choose *one* option by typing <keys/>, or any other free-text instruction.</hint>.
|
|
86
86
|
</if>
|
|
87
87
|
<else>
|
|
88
88
|
Set <hint>Please choose *one* option by typing <keys/>.</hint>.
|
|
@@ -93,7 +93,7 @@ following procedure:
|
|
|
93
93
|
<text>
|
|
94
94
|
<ase-tpl-boxed title="DIALOG" subtitle="<question-label/>">
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
**<question-description/>**
|
|
97
97
|
|
|
98
98
|
<text/>
|
|
99
99
|
|
|
@@ -125,7 +125,8 @@ following procedure:
|
|
|
125
125
|
otherwise indicates that the user doesn't want to proceed,
|
|
126
126
|
or the user declined to answer the question, or that
|
|
127
127
|
the dialog was cancelled, rejected or skipped, set
|
|
128
|
-
<result>CANCEL</result
|
|
128
|
+
<result>CANCEL</result> and *SKIP* all remaining steps
|
|
129
|
+
2.3.3 - 2.3.4 of this dispatch.
|
|
129
130
|
|
|
130
131
|
3. Otherwise, determine the selected <label/>
|
|
131
132
|
by mapping the <result/> (usually containing one of the
|