@rse/ase 0.9.43 → 0.9.45
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-artifact.js +28 -24
- package/dst/ase-config.js +27 -36
- package/dst/ase-diagram.js +15 -35
- package/dst/ase-getopt.js +10 -15
- package/dst/ase-hook.js +29 -27
- package/dst/ase-kv.js +24 -29
- package/dst/ase-log.js +10 -3
- package/dst/ase-markdown.js +135 -102
- package/dst/ase-mcp.js +3 -10
- package/dst/ase-meta.js +6 -4
- package/dst/ase-persona.js +7 -11
- package/dst/ase-service.js +28 -28
- package/dst/ase-setup.js +65 -28
- package/dst/ase-skills.js +2 -2
- package/dst/ase-statusline.js +26 -34
- package/dst/ase-task.js +60 -63
- package/dst/ase-version.js +2 -1
- package/dst/ase.js +7 -11
- package/package.json +12 -10
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +2 -2
- package/plugin/agents/ase-code-lint.md +15 -4
- package/plugin/agents/ase-docs-proofread.md +9 -1
- package/plugin/agents/ase-meta-chat.md +19 -13
- package/plugin/agents/ase-meta-diagram.md +1 -1
- package/plugin/agents/ase-meta-search.md +1 -2
- package/plugin/etc/eslint.mjs +0 -2
- package/plugin/meta/ase-common-task.md +145 -0
- package/plugin/meta/ase-constitution.md +5 -2
- package/plugin/meta/ase-control.md +1 -1
- package/plugin/meta/ase-dialog.md +7 -7
- package/plugin/meta/ase-format-arch.md +12 -12
- package/plugin/meta/ase-format-spec.md +23 -23
- package/plugin/meta/ase-format-task.md +9 -11
- package/plugin/meta/ase-getopt.md +1 -1
- package/plugin/meta/ase-persona.md +3 -3
- package/plugin/meta/ase-skill.md +3 -3
- package/plugin/meta/ase-tenets.md +4 -4
- package/plugin/package.json +8 -8
- package/plugin/skills/ase-arch-analyze/SKILL.md +2 -3
- package/plugin/skills/ase-arch-analyze/help.md +2 -2
- package/plugin/skills/ase-arch-discover/SKILL.md +2 -2
- package/plugin/skills/ase-arch-discover/help.md +3 -2
- package/plugin/skills/ase-code-analyze/SKILL.md +0 -1
- package/plugin/skills/ase-code-craft/SKILL.md +11 -11
- package/plugin/skills/ase-code-lint/SKILL.md +31 -13
- package/plugin/skills/ase-code-refactor/SKILL.md +13 -13
- package/plugin/skills/ase-code-refactor/help.md +1 -1
- package/plugin/skills/ase-code-resolve/SKILL.md +10 -10
- package/plugin/skills/ase-code-resolve/help.md +1 -1
- package/plugin/skills/ase-docs-distill/SKILL.md +6 -6
- package/plugin/skills/ase-docs-distill/help.md +6 -4
- package/plugin/skills/ase-docs-proofread/SKILL.md +23 -8
- package/plugin/skills/ase-meta-brainstorm/help.md +1 -1
- package/plugin/skills/ase-meta-changelog/SKILL.md +9 -5
- package/plugin/skills/ase-meta-commit/SKILL.md +8 -6
- package/plugin/skills/ase-meta-compat/SKILL.md +14 -5
- package/plugin/skills/ase-meta-diaboli/SKILL.md +6 -6
- package/plugin/skills/ase-meta-diff/SKILL.md +10 -10
- package/plugin/skills/ase-meta-evaluate/SKILL.md +6 -9
- package/plugin/skills/ase-meta-persona/SKILL.md +1 -1
- package/plugin/skills/ase-meta-quorum/SKILL.md +43 -12
- package/plugin/skills/ase-meta-search/SKILL.md +1 -1
- package/plugin/skills/ase-meta-search/help.md +4 -2
- package/plugin/skills/ase-meta-steelman/SKILL.md +5 -5
- package/plugin/skills/ase-meta-steelman/help.md +5 -3
- package/plugin/skills/ase-meta-why/SKILL.md +2 -2
- package/plugin/skills/ase-meta-why/help.md +3 -1
- package/plugin/skills/ase-sync-export/SKILL.md +20 -17
- package/plugin/skills/ase-sync-import/SKILL.md +20 -16
- package/plugin/skills/ase-sync-import/help.md +2 -2
- package/plugin/skills/ase-sync-reconcile/SKILL.md +10 -10
- package/plugin/skills/ase-sync-reconcile/help.md +1 -1
- package/plugin/skills/ase-task-condense/SKILL.md +39 -85
- package/plugin/skills/ase-task-delete/SKILL.md +1 -1
- package/plugin/skills/ase-task-edit/SKILL.md +43 -51
- package/plugin/skills/ase-task-grill/SKILL.md +11 -13
- package/plugin/skills/ase-task-id/SKILL.md +7 -3
- package/plugin/skills/ase-task-implement/SKILL.md +18 -111
- package/plugin/skills/ase-task-implement/help.md +2 -2
- package/plugin/skills/ase-task-list/SKILL.md +3 -0
- package/plugin/skills/ase-task-preflight/SKILL.md +22 -115
- package/plugin/skills/ase-task-reboot/SKILL.md +39 -71
- package/plugin/skills/ase-task-reboot/help.md +2 -1
- package/plugin/skills/ase-task-view/SKILL.md +7 -7
package/dst/ase.js
CHANGED
|
@@ -6,17 +6,17 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { Command, CommanderError, Option } from "commander";
|
|
8
8
|
import Log from "./ase-log.js";
|
|
9
|
+
import SetupCommand from "./ase-setup.js";
|
|
9
10
|
import ConfigCommand from "./ase-config.js";
|
|
10
|
-
import ServiceCommand from "./ase-service.js";
|
|
11
11
|
import MCPCommand from "./ase-mcp.js";
|
|
12
|
+
import ServiceCommand from "./ase-service.js";
|
|
12
13
|
import HookCommand from "./ase-hook.js";
|
|
13
|
-
import DiagramCommand from "./ase-diagram.js";
|
|
14
|
-
import SetupCommand from "./ase-setup.js";
|
|
15
14
|
import StatuslineCommand from "./ase-statusline.js";
|
|
16
15
|
import TaskCommand from "./ase-task.js";
|
|
17
16
|
import ArtifactCommand from "./ase-artifact.js";
|
|
18
17
|
import MetaCommand from "./ase-meta.js";
|
|
19
18
|
import CompatCommand from "./ase-compat.js";
|
|
19
|
+
import DiagramCommand from "./ase-diagram.js";
|
|
20
20
|
import pkg from "../package.json" with { type: "json" };
|
|
21
21
|
/* globally initialize logger */
|
|
22
22
|
const log = new Log("ase", "info", "-");
|
|
@@ -37,8 +37,8 @@ const main = async () => {
|
|
|
37
37
|
.showHelpAfterError()
|
|
38
38
|
.enablePositionalOptions()
|
|
39
39
|
.exitOverride();
|
|
40
|
-
/*
|
|
41
|
-
|
|
40
|
+
/* apply parsed global options to the logger
|
|
41
|
+
before any subcommand action */
|
|
42
42
|
program.hook("preAction", async () => {
|
|
43
43
|
const opts = program.opts();
|
|
44
44
|
log.logLevel(opts.logLevel);
|
|
@@ -62,12 +62,8 @@ const main = async () => {
|
|
|
62
62
|
process.exit(0);
|
|
63
63
|
};
|
|
64
64
|
main().catch((err) => {
|
|
65
|
-
if (err instanceof CommanderError)
|
|
66
|
-
|
|
67
|
-
process.exit(err.exitCode);
|
|
68
|
-
else
|
|
69
|
-
process.exit(0);
|
|
70
|
-
}
|
|
65
|
+
if (err instanceof CommanderError)
|
|
66
|
+
process.exit(err.exitCode);
|
|
71
67
|
const message = err instanceof Error ? err.message : String(err);
|
|
72
68
|
log.write("error", message);
|
|
73
69
|
process.exit(1);
|
package/package.json
CHANGED
|
@@ -3,23 +3,23 @@
|
|
|
3
3
|
"description": "Agentic Software Engineering (ASE)",
|
|
4
4
|
"publishConfig": { "access": "public" },
|
|
5
5
|
"keywords": [ "agentic", "ai", "coding", "tool", "cli", "software", "engineering" ],
|
|
6
|
-
"homepage": "
|
|
6
|
+
"homepage": "https://ase.tools",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
|
-
"bugs": { "url": "
|
|
9
|
-
"version": "0.9.
|
|
8
|
+
"bugs": { "url": "https://github.com/rse/ase/issues" },
|
|
9
|
+
"version": "0.9.45",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
13
13
|
"email": "rse@engelschall.com",
|
|
14
|
-
"url": "
|
|
14
|
+
"url": "https://engelschall.com"
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"bin": { "ase": "bin/ase" },
|
|
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.65.0",
|
|
22
|
+
"@typescript-eslint/eslint-plugin": "8.65.0",
|
|
23
23
|
"eslint-plugin-promise": "7.3.0",
|
|
24
24
|
"eslint-plugin-import": "2.32.0",
|
|
25
25
|
"neostandard": "0.13.0",
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"commander": "15.0.0",
|
|
45
|
-
"@dotenvx/dotenvx": "2.
|
|
45
|
+
"@dotenvx/dotenvx": "2.15.1",
|
|
46
46
|
"yaml": "2.9.0",
|
|
47
47
|
"valibot": "1.4.2",
|
|
48
|
-
"execa": "
|
|
48
|
+
"execa": "10.0.0",
|
|
49
49
|
"mkdirp": "3.0.1",
|
|
50
50
|
"@hapi/hapi": "21.4.9",
|
|
51
51
|
"beautiful-mermaid": "1.1.3",
|
|
@@ -58,15 +58,17 @@
|
|
|
58
58
|
"zod": "4.4.3",
|
|
59
59
|
"which": "7.0.0",
|
|
60
60
|
"update-notifier": "7.3.1",
|
|
61
|
-
"shell-quote": "1.
|
|
61
|
+
"shell-quote": "1.10.0",
|
|
62
62
|
"get-stdin": "10.0.0",
|
|
63
63
|
"proper-lockfile": "4.1.2",
|
|
64
64
|
"write-file-atomic": "8.0.0",
|
|
65
65
|
"pacote": "22.0.0",
|
|
66
66
|
"ofetch": "1.5.1",
|
|
67
|
-
"picomatch": "4.0.5"
|
|
67
|
+
"picomatch": "4.0.5",
|
|
68
|
+
"lru-cache": "11.5.2"
|
|
68
69
|
},
|
|
69
70
|
"allowScripts": {
|
|
71
|
+
"fsevents": true
|
|
70
72
|
},
|
|
71
73
|
"engines": {
|
|
72
74
|
"npm": ">=10.0.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ase",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.45",
|
|
4
4
|
"description": "Agentic Software Engineering (ASE)",
|
|
5
5
|
"keywords": [ "agentic", "software", "engineering" ],
|
|
6
6
|
"homepage": "https://ase.tools",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"email": "rse@engelschall.com",
|
|
12
12
|
"url": "https://engelschall.com"
|
|
13
13
|
},
|
|
14
|
-
"hooks": "hooks/hooks-copilot.json",
|
|
14
|
+
"hooks": "./hooks/hooks-copilot.json",
|
|
15
15
|
"mcpServers": {
|
|
16
16
|
"ase": {
|
|
17
17
|
"command": "ase",
|
|
@@ -50,7 +50,7 @@ Workflow
|
|
|
50
50
|
- **A03 - CLEANLINESS**:
|
|
51
51
|
Check for unclean code and inconsistent code.
|
|
52
52
|
|
|
53
|
-
For unclean code, especially detect
|
|
53
|
+
For unclean code, especially detect outdated code construct
|
|
54
54
|
patterns. For inconsistent code, especially detect code
|
|
55
55
|
variations for equal intentions.
|
|
56
56
|
|
|
@@ -246,7 +246,7 @@ Workflow
|
|
|
246
246
|
*masks* another bug (e.g., unreachable code after a misplaced
|
|
247
247
|
`return` that skips cleanup logic).
|
|
248
248
|
|
|
249
|
-
Be conservative
|
|
249
|
+
Be conservative - only report clear, well-grounded issues
|
|
250
250
|
that require an actual *code change*. Think twice to avoid
|
|
251
251
|
*false positives*.
|
|
252
252
|
|
|
@@ -303,6 +303,17 @@ Workflow
|
|
|
303
303
|
which should be changed. Set <new-text/> to the lines of the
|
|
304
304
|
new code in <file/> which will replace it.
|
|
305
305
|
|
|
306
|
+
Keep the hunk *minimal*: <old-text/> and <new-text/>
|
|
307
|
+
*MUST* *NOT* share any common leading or trailing
|
|
308
|
+
lines - *strip* such lines, as they are *unchanged*
|
|
309
|
+
context and not part of the change. When two changed
|
|
310
|
+
regions are separated by unchanged lines, emit *two
|
|
311
|
+
separate* change hunks instead of one large hunk which
|
|
312
|
+
re-states the unchanged lines. Render a *moved* block
|
|
313
|
+
as one pure-deletion hunk at its old location plus one
|
|
314
|
+
pure-insertion hunk at its new location - *never* by
|
|
315
|
+
deleting and re-adding the unchanged lines in between.
|
|
316
|
+
|
|
306
317
|
3. Set <context-before/> to exactly *up to two* lines of
|
|
307
318
|
*unchanged* code context which occurs in <file/>
|
|
308
319
|
directly *before* <old-text/>, i.e., the lines (<line/>
|
|
@@ -314,9 +325,9 @@ Workflow
|
|
|
314
325
|
4. Set <context-after/> to exactly *up to two* lines of
|
|
315
326
|
*unchanged* code content which occurs in <file/>
|
|
316
327
|
directly *after* <old-text/>, i.e., the lines (<line/>
|
|
317
|
-
+ <n/>
|
|
328
|
+
+ <n/>) and (<line/> + <n/> + 1), where <n/> is the
|
|
318
329
|
number of lines in <old-text/>. Reduce to just one line
|
|
319
|
-
(<line/> + <n/>
|
|
330
|
+
(<line/> + <n/>) if <old-text/> is the second-last
|
|
320
331
|
line of the file. Set <context-after/> to empty if
|
|
321
332
|
<old-text/> is the last line in the file.
|
|
322
333
|
|
|
@@ -40,7 +40,15 @@ Workflow
|
|
|
40
40
|
|
|
41
41
|
3. Set <old-text/> to the lines of the old text which
|
|
42
42
|
should be changed. Set <new-text/> to the lines of the
|
|
43
|
-
new text which will
|
|
43
|
+
new text which will replace it.
|
|
44
|
+
|
|
45
|
+
Keep the change *minimal*: <old-text/> and <new-text/>
|
|
46
|
+
*MUST* *NOT* share any common leading or trailing
|
|
47
|
+
lines - *strip* such lines, as they are *unchanged*
|
|
48
|
+
context and not part of the change. When two changed
|
|
49
|
+
regions are separated by unchanged lines, report them
|
|
50
|
+
as *two separate* problems instead of one large change
|
|
51
|
+
which re-states the unchanged lines.
|
|
44
52
|
|
|
45
53
|
4. Set <description/> to an ultra-brief and concise
|
|
46
54
|
Markdown-formatted description of the problem with
|
|
@@ -3,12 +3,15 @@ name: ase-meta-chat
|
|
|
3
3
|
description: "Query Foreign LLM for Chat via MCP Tool"
|
|
4
4
|
effort: high
|
|
5
5
|
tools:
|
|
6
|
-
- mcp__chat-openai-chatgpt__query
|
|
7
|
-
- mcp__chat-google-gemini__query
|
|
8
|
-
- mcp__chat-deepseek__query
|
|
9
|
-
- mcp__chat-xai-grok__query
|
|
10
|
-
- mcp__chat-zai-glm__query
|
|
11
|
-
- mcp__chat-alibaba-qwen__query
|
|
6
|
+
- "mcp__chat-openai-chatgpt__query"
|
|
7
|
+
- "mcp__chat-google-gemini__query"
|
|
8
|
+
- "mcp__chat-deepseek__query"
|
|
9
|
+
- "mcp__chat-xai-grok__query"
|
|
10
|
+
- "mcp__chat-zai-glm__query"
|
|
11
|
+
- "mcp__chat-alibaba-qwen__query"
|
|
12
|
+
- "mcp__chat-anthropic-claude__query"
|
|
13
|
+
- "mcp__chat-openai-codex__query"
|
|
14
|
+
- "mcp__chat-github-copilot__query"
|
|
12
15
|
---
|
|
13
16
|
|
|
14
17
|
@../meta/ase-control.md
|
|
@@ -20,19 +23,22 @@ tools:
|
|
|
20
23
|
|
|
21
24
|
2. Set <server></server> (set to empty).
|
|
22
25
|
|
|
23
|
-
<if condition="<llm/> is equal 'chatgpt'"> <server>chat-openai-chatgpt</server
|
|
24
|
-
<if condition="<llm/> is equal 'gemini'"> <server>chat-google-gemini</server>
|
|
25
|
-
<if condition="<llm/> is equal 'deepseek'"><server>chat-deepseek</server>
|
|
26
|
-
<if condition="<llm/> is equal 'grok'"> <server>chat-xai-grok</server>
|
|
27
|
-
<if condition="<llm/> is equal 'glm'"> <server>chat-zai-glm</server>
|
|
28
|
-
<if condition="<llm/> is equal 'qwen'"> <server>chat-alibaba-qwen</server>
|
|
26
|
+
<if condition="<llm/> is equal 'chatgpt'"> <server>chat-openai-chatgpt</server> </if>
|
|
27
|
+
<if condition="<llm/> is equal 'gemini'"> <server>chat-google-gemini</server> </if>
|
|
28
|
+
<if condition="<llm/> is equal 'deepseek'"><server>chat-deepseek</server> </if>
|
|
29
|
+
<if condition="<llm/> is equal 'grok'"> <server>chat-xai-grok</server> </if>
|
|
30
|
+
<if condition="<llm/> is equal 'glm'"> <server>chat-zai-glm</server> </if>
|
|
31
|
+
<if condition="<llm/> is equal 'qwen'"> <server>chat-alibaba-qwen</server> </if>
|
|
32
|
+
<if condition="<llm/> is equal 'claude'"> <server>chat-anthropic-claude</server></if>
|
|
33
|
+
<if condition="<llm/> is equal 'codex'"> <server>chat-openai-codex</server> </if>
|
|
34
|
+
<if condition="<llm/> is equal 'copilot'"> <server>chat-github-copilot</server> </if>
|
|
29
35
|
|
|
30
36
|
<if condition="<server/> is empty">
|
|
31
37
|
You *MUST* output the following <template/> and immediately *STOP* processing
|
|
32
38
|
(do *NOT* continue with any further step and do *NOT* call any MCP tool):
|
|
33
39
|
|
|
34
40
|
<template>
|
|
35
|
-
ERROR: unknown LLM `<llm/>` (has to be one of: chatgpt, gemini, deepseek, grok, glm, qwen)
|
|
41
|
+
ERROR: unknown LLM `<llm/>` (has to be one of: chatgpt, gemini, deepseek, grok, glm, qwen, claude, codex, copilot)
|
|
36
42
|
</template>
|
|
37
43
|
</if>
|
|
38
44
|
|
package/plugin/etc/eslint.mjs
CHANGED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
|
|
2
|
+
Task Skill Common Steps
|
|
3
|
+
=======================
|
|
4
|
+
|
|
5
|
+
<define name="task-react-id">
|
|
6
|
+
|
|
7
|
+
1. <if condition="
|
|
8
|
+
<instruction/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
|
|
9
|
+
">
|
|
10
|
+
Set <ase-task-id><instruction/></ase-task-id> (set task
|
|
11
|
+
id to instruction) and <instruction></instruction> (set
|
|
12
|
+
instruction empty), call the `ase_task_id(id: "<ase-task-id/>",
|
|
13
|
+
session: "<ase-session-id/>")` tool from the `ase` MCP
|
|
14
|
+
server to switch the task, and then only output the
|
|
15
|
+
following <template/>:
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
19
|
+
</template>
|
|
20
|
+
</if>
|
|
21
|
+
|
|
22
|
+
2. <elseif condition="
|
|
23
|
+
<instruction/> has the format `<id/>: <text/>` where
|
|
24
|
+
<id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
|
|
25
|
+
<text/> is *empty*
|
|
26
|
+
">
|
|
27
|
+
Set <instruction></instruction> (set instruction to empty)
|
|
28
|
+
and <ase-task-id><id/></ase-task-id> (set task id to
|
|
29
|
+
id) and call the `ase_task_id(id: "<ase-task-id/>", session:
|
|
30
|
+
"<ase-session-id/>")` tool from the `ase` MCP server to
|
|
31
|
+
switch the task, and then only output the following
|
|
32
|
+
<template/>:
|
|
33
|
+
|
|
34
|
+
<template>
|
|
35
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
36
|
+
</template>
|
|
37
|
+
</elseif>
|
|
38
|
+
|
|
39
|
+
3. <elseif condition="<instruction/> is NOT empty">
|
|
40
|
+
The argument is neither empty nor a valid task id. As this
|
|
41
|
+
skill only accepts an optional `[<id>]` argument and *never*
|
|
42
|
+
a free-text instruction, only output the following <template/>
|
|
43
|
+
and then immediately *STOP* processing the entire current skill:
|
|
44
|
+
|
|
45
|
+
<template>
|
|
46
|
+
⧉ **ASE**: ☻ skill: **<arg1/>**, ▶ ERROR: expected single `[<id>]` argument
|
|
47
|
+
</template>
|
|
48
|
+
</elseif>
|
|
49
|
+
|
|
50
|
+
</define>
|
|
51
|
+
|
|
52
|
+
<define name="task-load-content">
|
|
53
|
+
|
|
54
|
+
<if condition="
|
|
55
|
+
<getopt-option-int-reuse-task/> is equal `true`
|
|
56
|
+
*and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
57
|
+
exists earlier in the current session
|
|
58
|
+
">
|
|
59
|
+
Set <text/> to the `text` argument of the most recent
|
|
60
|
+
`ase_task_save(id: '<ase-task-id/>', ...)` tool call,
|
|
61
|
+
*without* calling `ase_task_load` again. Set <status>plan
|
|
62
|
+
reused</status>. Do not output anything.
|
|
63
|
+
</if>
|
|
64
|
+
<else>
|
|
65
|
+
Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
|
|
66
|
+
`ase` MCP server to load the current task plan content and
|
|
67
|
+
set <text/> to the `text` output field of this `ase_task_load`
|
|
68
|
+
tool call. Do not output anything related to this MCP tool
|
|
69
|
+
call. Set <status>plan loaded</status>.
|
|
70
|
+
</else>
|
|
71
|
+
|
|
72
|
+
- If <text/> starts with `ERROR:` or `WARNING:`:
|
|
73
|
+
Set <task-content></task-content> (set task content to empty).
|
|
74
|
+
Set <words/> to "0".
|
|
75
|
+
|
|
76
|
+
- If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
|
|
77
|
+
Set <task-content><text/></task-content> (set task content to text).
|
|
78
|
+
Calculate the number of words <words/> of <task-content/>.
|
|
79
|
+
|
|
80
|
+
Only output the following <template/>:
|
|
81
|
+
|
|
82
|
+
<template>
|
|
83
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
|
|
84
|
+
</template>
|
|
85
|
+
|
|
86
|
+
</define>
|
|
87
|
+
|
|
88
|
+
<define name="task-save-content">
|
|
89
|
+
|
|
90
|
+
Update <timestamp-modified/> with the current time in ISO-style
|
|
91
|
+
format, which has to be determined by calling the
|
|
92
|
+
`ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
|
|
93
|
+
MCP server and use the `text` field of its response. If
|
|
94
|
+
<timestamp-created/> is still unset (because the plan content
|
|
95
|
+
had no `Created:` line), set
|
|
96
|
+
<timestamp-created><timestamp-modified/></timestamp-created>
|
|
97
|
+
(fall back to the modified timestamp). Re-insert the current
|
|
98
|
+
<ase-task-id/>, the original <timestamp-created/>, and the
|
|
99
|
+
refreshed <timestamp-modified/> into <task-content/> and calculate
|
|
100
|
+
the number of words <words/> of <task-content/>.
|
|
101
|
+
|
|
102
|
+
Call the `ase_task_save(id: "<ase-task-id/>", text:
|
|
103
|
+
"<task-content/>")` tool of the `ase` MCP server to save the task
|
|
104
|
+
plan content. Do not output anything related to this MCP call
|
|
105
|
+
except the following <template/>:
|
|
106
|
+
|
|
107
|
+
<template>
|
|
108
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<arg1/>**
|
|
109
|
+
</template>
|
|
110
|
+
|
|
111
|
+
</define>
|
|
112
|
+
|
|
113
|
+
<define name="task-next-select">
|
|
114
|
+
|
|
115
|
+
- If <getopt-option-next/> is not equal to `none`:
|
|
116
|
+
Treat <getopt-option-next/> as a comma-separated chronological
|
|
117
|
+
list of pre-selected next-step tokens. *Split* it on `,`,
|
|
118
|
+
take the *first* token as <head/>, and store the remaining
|
|
119
|
+
tokens (joined back with `,`, or `none` if empty) into
|
|
120
|
+
<getopt-option-next/> so downstream skills can consume the tail.
|
|
121
|
+
|
|
122
|
+
- If <head/> matches the regex `^(<arg2/>)$`:
|
|
123
|
+
Honor the pre-selected token.
|
|
124
|
+
Set <result><head/></result>.
|
|
125
|
+
|
|
126
|
+
- else:
|
|
127
|
+
Only output the following <template/> and then immediately
|
|
128
|
+
*STOP* processing the entire current skill:
|
|
129
|
+
|
|
130
|
+
<template>
|
|
131
|
+
⧉ **ASE**: ☻ skill: **<arg1/>**, ▶ ERROR: invalid `--next` token: **<head/>**
|
|
132
|
+
</template>
|
|
133
|
+
|
|
134
|
+
- If <getopt-option-next/> is equal to `none`:
|
|
135
|
+
|
|
136
|
+
In the following, you *MUST* *NOT* use your built-in
|
|
137
|
+
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
138
|
+
custom dialog according to the expanded `custom-dialog`
|
|
139
|
+
definition. You *MUST* closely follow this definition:
|
|
140
|
+
|
|
141
|
+
<expand name="custom-dialog" arg1="--no-other">
|
|
142
|
+
<content/>
|
|
143
|
+
</expand>
|
|
144
|
+
|
|
145
|
+
</define>
|
|
@@ -6,7 +6,7 @@ You are an expert-level AI coding assistant.
|
|
|
6
6
|
You have the **Agentic Software Engineering (ASE)** companion toolkit enabled,
|
|
7
7
|
which boosts you to an expert-level Software Engineering AI agent.
|
|
8
8
|
|
|
9
|
-
If ((<ase-agent-tool/> is equal `codex`) *AND* (<ase-headless/> is empty
|
|
9
|
+
If ((<ase-agent-tool/> is equal to `codex`) *AND* (<ase-headless/> is empty
|
|
10
10
|
or not set)) you *MUST* output the following <template/> *exactly once*
|
|
11
11
|
as the very *first* thing in your *first* response of this session --
|
|
12
12
|
*before* any other text, *before* any tool call, and *before* entering
|
|
@@ -34,6 +34,8 @@ Commandments
|
|
|
34
34
|
------------
|
|
35
35
|
|
|
36
36
|
- Be *honest* and *transparent* in all your responses.
|
|
37
|
+
- *Ground* factual and technical claims in verifiable evidence (code base, local files, or web)
|
|
38
|
+
with a reference, rather than unverified model knowledge; state explicitly when a claim cannot be verified.
|
|
37
39
|
- Before proposing any code changes, explain *WHAT* the proposed changes do and *WHY* it is necessary.
|
|
38
40
|
- Use *concise* and *type-safe code* only.
|
|
39
41
|
- Use *precise* and *surgical code changes* only.
|
|
@@ -45,7 +47,8 @@ Commandments
|
|
|
45
47
|
- Always use *parentheses around arrow function parameters*, even for a single parameter.
|
|
46
48
|
- Make a line break before the keywords "else", "catch", and "finally".
|
|
47
49
|
- Try to *vertically align similar operators* on consecutive, similar lines.
|
|
48
|
-
- Place spaces after opening and before closing angle brackets
|
|
50
|
+
- Place spaces after opening and before closing angle brackets
|
|
51
|
+
(except for array access and array types) and braces (except for regular expression ranges).
|
|
49
52
|
- Use *double-quotes* (`"[...]"`) instead of single-quotes (`'[...]'`) for all strings.
|
|
50
53
|
- Use K&R coding style with *opening braces* at the end of lines and *closing braces* at the beginning of lines.
|
|
51
54
|
- When a language has a *more strongly-typed variant*, prefer that variant.
|
|
@@ -93,5 +93,5 @@ Control Flow Constructs
|
|
|
93
93
|
This specifies an *early termination* of the innermost enclosing
|
|
94
94
|
<while/> or <for/> repetition: when reached, the current repetition
|
|
95
95
|
is finished and no further repetitions are performed. This construct
|
|
96
|
-
is expanded into nothing. Do not output anything
|
|
96
|
+
is expanded into nothing. Do not output anything.
|
|
97
97
|
|
|
@@ -3,13 +3,13 @@ User Dialog
|
|
|
3
3
|
===========
|
|
4
4
|
|
|
5
5
|
<user-dialog-tool>unknown</user-dialog-tool>
|
|
6
|
-
<if condition="<ase-agent-tool/> is
|
|
6
|
+
<if condition="<ase-agent-tool/> is `claude`">
|
|
7
7
|
<user-dialog-tool>AskUserQuestion</user-dialog-tool>
|
|
8
8
|
</if>
|
|
9
|
-
<if condition="<ase-agent-tool/> is
|
|
9
|
+
<if condition="<ase-agent-tool/> is `copilot`">
|
|
10
10
|
<user-dialog-tool>ask_user</user-dialog-tool>
|
|
11
11
|
</if>
|
|
12
|
-
<if condition="<ase-agent-tool/> is
|
|
12
|
+
<if condition="<ase-agent-tool/> is `codex`">
|
|
13
13
|
<user-dialog-tool>none</user-dialog-tool>
|
|
14
14
|
</if>
|
|
15
15
|
|
|
@@ -81,7 +81,7 @@ following procedure:
|
|
|
81
81
|
Set <keys><keys/>/**CANCEL**</keys>.
|
|
82
82
|
</else>
|
|
83
83
|
|
|
84
|
-
<if condition="<opts/> contains `--other`">
|
|
84
|
+
<if condition="<opts/> contains `--other` and does *not* contain `--no-other`">
|
|
85
85
|
Set <hint>Please choose *one* option by typing <keys/>, or other free-text instruction.</hint>.
|
|
86
86
|
</if>
|
|
87
87
|
<else>
|
|
@@ -134,14 +134,14 @@ following procedure:
|
|
|
134
134
|
|
|
135
135
|
4. If <result/> is then *NEITHER* one of the "key"
|
|
136
136
|
*NOR* "label" values from <spec/>:
|
|
137
|
-
<if condition="<opts/> contains `--other`">
|
|
137
|
+
<if condition="<opts/> contains `--other` and does *not* contain `--no-other`">
|
|
138
138
|
Set <result>OTHER: <result/></result>
|
|
139
139
|
(prefix result with `OTHER: `).
|
|
140
140
|
</if>
|
|
141
141
|
<else>
|
|
142
142
|
Output the following <template/> and then *START OVER*
|
|
143
|
-
by *GOING* to step 2.2
|
|
144
|
-
<text/> from step 2.
|
|
143
|
+
by *GOING* to step 2.2 above, reusing the already-built
|
|
144
|
+
<text/> from step 2.1 unchanged (do *NOT* re-enter step 2.1
|
|
145
145
|
and do *NOT* rebuild <text/>, <keys/>, <n/>, or <width/>).
|
|
146
146
|
|
|
147
147
|
<template>
|
|
@@ -209,7 +209,7 @@ at runtime.
|
|
|
209
209
|
- Kind: <arch-fv-component-kind/>
|
|
210
210
|
- Responsibility: <arch-fv-component-responsibility/>
|
|
211
211
|
- Interface: <arch-fv-component-interface/>
|
|
212
|
-
- Depends On: <arch-fv-component-dependency
|
|
212
|
+
- Depends On: <arch-fv-component-dependency/>[, ...]
|
|
213
213
|
|
|
214
214
|
<arch-fv-component-description/>,
|
|
215
215
|
**BECAUSE** <arch-fv-component-rationale/>.
|
|
@@ -286,7 +286,7 @@ flow.
|
|
|
286
286
|
## ASPECT: <arch-iv-aspect-name/> <a id="ARCH-IV-<arch-iv-aspect-id/>"></a>
|
|
287
287
|
|
|
288
288
|
- Concern: <arch-iv-aspect-concern/>
|
|
289
|
-
- Entities: <arch-iv-aspect-entity
|
|
289
|
+
- Entities: <arch-iv-aspect-entity/>[, ...]
|
|
290
290
|
- Owner: <arch-iv-aspect-owner/>
|
|
291
291
|
- Lifecycle: <arch-iv-aspect-lifecycle/>
|
|
292
292
|
|
|
@@ -364,7 +364,7 @@ communicate.
|
|
|
364
364
|
## UNIT: <arch-co-unit-name/> <a id="ARCH-CO-<arch-co-unit-id/>"></a>
|
|
365
365
|
|
|
366
366
|
- Kind: <arch-co-unit-kind/>
|
|
367
|
-
- Hosts: <arch-co-unit-element
|
|
367
|
+
- Hosts: <arch-co-unit-element/>[, ...]
|
|
368
368
|
- Multiplicity: <arch-co-unit-multiplicity/>
|
|
369
369
|
- Coordination: <arch-co-unit-coordination/>
|
|
370
370
|
|
|
@@ -411,7 +411,7 @@ communicate.
|
|
|
411
411
|
the chosen concurrency structure.
|
|
412
412
|
|
|
413
413
|
- In case the unit hosts no functional components, the
|
|
414
|
-
entire `-
|
|
414
|
+
entire `- Hosts:` bullet point is omitted.
|
|
415
415
|
|
|
416
416
|
- In case the rationale is not present, the
|
|
417
417
|
entire `, **BECAUSE** [...]` clause is omitted.
|
|
@@ -507,7 +507,7 @@ elements to the runtime platform, hardware, and network topology.
|
|
|
507
507
|
|
|
508
508
|
- Kind: <arch-dp-node-kind/>
|
|
509
509
|
- Platform: <arch-dp-node-platform/>
|
|
510
|
-
- Hosts: <arch-dp-node-element
|
|
510
|
+
- Hosts: <arch-dp-node-element/>[, ...]
|
|
511
511
|
- Network: <arch-dp-node-network/>
|
|
512
512
|
|
|
513
513
|
<arch-dp-node-description/>,
|
|
@@ -551,7 +551,7 @@ elements to the runtime platform, hardware, and network topology.
|
|
|
551
551
|
the node's placement and platform choice.
|
|
552
552
|
|
|
553
553
|
- In case the node hosts no functional components, the
|
|
554
|
-
entire `-
|
|
554
|
+
entire `- Hosts:` bullet point is omitted.
|
|
555
555
|
|
|
556
556
|
- In case the rationale is not present, the
|
|
557
557
|
entire `, **BECAUSE** [...]` clause is omitted.
|
|
@@ -584,7 +584,7 @@ production, defining installation, monitoring, and management concerns.
|
|
|
584
584
|
## CONCERN: <arch-ov-concern-name/> <a id="ARCH-OV-<arch-ov-concern-id/>"></a>
|
|
585
585
|
|
|
586
586
|
- Category: <arch-ov-concern-category/>
|
|
587
|
-
- Element: <arch-ov-concern-element
|
|
587
|
+
- Element: <arch-ov-concern-element/>[, ...]
|
|
588
588
|
|
|
589
589
|
<arch-ov-concern-description/>,
|
|
590
590
|
**BECAUSE** <arch-ov-concern-rationale/>.
|
|
@@ -619,7 +619,7 @@ production, defining installation, monitoring, and management concerns.
|
|
|
619
619
|
for the operational approach.
|
|
620
620
|
|
|
621
621
|
- In case the element reference is not present, the
|
|
622
|
-
entire `-
|
|
622
|
+
entire `- Element:` bullet point is omitted.
|
|
623
623
|
|
|
624
624
|
- In case the rationale is not present, the
|
|
625
625
|
entire `, **BECAUSE** [...]` clause is omitted.
|
|
@@ -651,9 +651,9 @@ How the Non-Functional Requirements (NR) are addressed.
|
|
|
651
651
|
## PERSPECTIVE: <arch-qp-perspective-name/> <a id="ARCH-QP-<arch-qp-perspective-id/>"></a>
|
|
652
652
|
|
|
653
653
|
- Quality: <arch-qp-perspective-quality/>
|
|
654
|
-
- Addresses: <arch-qp-perspective-requirement
|
|
654
|
+
- Addresses: <arch-qp-perspective-requirement/>[, ...]
|
|
655
655
|
- Tactic: <arch-qp-perspective-tactic/>
|
|
656
|
-
- Affects: <arch-qp-perspective-element
|
|
656
|
+
- Affects: <arch-qp-perspective-element/>[, ...]
|
|
657
657
|
|
|
658
658
|
<arch-qp-perspective-description/>,
|
|
659
659
|
**BECAUSE** <arch-qp-perspective-rationale/>.
|
|
@@ -707,7 +707,7 @@ How the Non-Functional Requirements (NR) are addressed.
|
|
|
707
707
|
("why") for the chosen tactic over alternatives.
|
|
708
708
|
|
|
709
709
|
- In case the element reference is not present, the
|
|
710
|
-
entire `-
|
|
710
|
+
entire `- Affects:` bullet point is omitted.
|
|
711
711
|
|
|
712
712
|
- In case the rationale is not present, the
|
|
713
713
|
entire `, **BECAUSE** [...]` clause is omitted.
|
|
@@ -740,7 +740,7 @@ forces at play, the chosen response, and the reasoning that justifies it.
|
|
|
740
740
|
## DECISION: <arch-dr-decision-name/> <a id="ARCH-DR-<arch-dr-decision-id/>"></a>
|
|
741
741
|
|
|
742
742
|
- Status: <arch-dr-decision-status/>
|
|
743
|
-
- Affects: <arch-dr-decision-element
|
|
743
|
+
- Affects: <arch-dr-decision-element/>[, ...]
|
|
744
744
|
- Superseded-By: <arch-dr-decision-superseded-by/>
|
|
745
745
|
- Created: <arch-dr-decision-created/>
|
|
746
746
|
- Modified: <arch-dr-decision-modified/>
|