@rse/ase 0.9.44 → 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-setup.js +50 -0
- package/package.json +1 -1
- 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-lint.md +11 -0
- package/plugin/agents/ase-docs-proofread.md +8 -0
- package/plugin/agents/ase-meta-chat.md +13 -7
- package/plugin/agents/ase-meta-search.md +0 -1
- package/plugin/meta/ase-common-task.md +145 -0
- package/plugin/meta/ase-constitution.md +4 -1
- package/plugin/meta/ase-dialog.md +5 -5
- package/plugin/meta/ase-format-arch.md +4 -4
- package/plugin/meta/ase-format-spec.md +23 -23
- package/plugin/meta/ase-format-task.md +1 -1
- package/plugin/meta/ase-persona.md +3 -3
- package/plugin/meta/ase-skill.md +2 -2
- package/plugin/meta/ase-tenets.md +4 -4
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-arch-analyze/SKILL.md +2 -3
- package/plugin/skills/ase-code-craft/SKILL.md +7 -7
- package/plugin/skills/ase-code-lint/SKILL.md +19 -3
- package/plugin/skills/ase-code-refactor/SKILL.md +7 -7
- package/plugin/skills/ase-code-resolve/SKILL.md +6 -6
- package/plugin/skills/ase-docs-distill/SKILL.md +6 -6
- package/plugin/skills/ase-docs-proofread/SKILL.md +18 -3
- package/plugin/skills/ase-meta-changelog/SKILL.md +5 -2
- package/plugin/skills/ase-meta-commit/SKILL.md +4 -4
- package/plugin/skills/ase-meta-compat/SKILL.md +3 -3
- package/plugin/skills/ase-meta-diaboli/SKILL.md +2 -2
- package/plugin/skills/ase-meta-evaluate/SKILL.md +6 -9
- package/plugin/skills/ase-meta-quorum/SKILL.md +33 -4
- package/plugin/skills/ase-meta-search/SKILL.md +1 -1
- package/plugin/skills/ase-meta-steelman/SKILL.md +3 -3
- package/plugin/skills/ase-meta-why/SKILL.md +1 -1
- package/plugin/skills/ase-sync-export/SKILL.md +7 -7
- package/plugin/skills/ase-sync-import/SKILL.md +20 -16
- package/plugin/skills/ase-sync-reconcile/SKILL.md +9 -9
- package/plugin/skills/ase-task-condense/SKILL.md +34 -79
- package/plugin/skills/ase-task-edit/SKILL.md +41 -49
- package/plugin/skills/ase-task-grill/SKILL.md +10 -12
- 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-list/SKILL.md +3 -0
- package/plugin/skills/ase-task-preflight/SKILL.md +22 -115
- package/plugin/skills/ase-task-reboot/SKILL.md +27 -63
- package/plugin/skills/ase-task-view/SKILL.md +7 -7
package/dst/ase-setup.js
CHANGED
|
@@ -453,6 +453,29 @@ export default class SetupCommand {
|
|
|
453
453
|
await this.mcpRemove(tool, spec.server, scope);
|
|
454
454
|
};
|
|
455
455
|
}
|
|
456
|
+
/* build a chat-model MCP handler which bridges to a locally
|
|
457
|
+
installed AI agent harness CLI via the mcp-to-harness stdio
|
|
458
|
+
scaffold; the API key environment variable carries no key at all,
|
|
459
|
+
but instead the harness model identifier, with the special value
|
|
460
|
+
"default" selecting the default model of the harness */
|
|
461
|
+
harnessMcpHandler(harness) {
|
|
462
|
+
return async (spec, tool, scope, action, _envKey, envVal) => {
|
|
463
|
+
if (action === "activate")
|
|
464
|
+
await this.mcpAdd(tool, spec.server, {}, {
|
|
465
|
+
type: "stdio", command: [
|
|
466
|
+
"npx", "-y", "mcp-to-harness",
|
|
467
|
+
"--service", spec.name,
|
|
468
|
+
"--mcp-tool", "query",
|
|
469
|
+
"--harness", harness,
|
|
470
|
+
...(envVal !== "default" ? [
|
|
471
|
+
"--harness-model", envVal
|
|
472
|
+
] : [])
|
|
473
|
+
]
|
|
474
|
+
}, scope);
|
|
475
|
+
else
|
|
476
|
+
await this.mcpRemove(tool, spec.server, scope);
|
|
477
|
+
};
|
|
478
|
+
}
|
|
456
479
|
/* registry of pre-defined MCP servers: maps each server id onto its
|
|
457
480
|
dedicated handler which performs the activate/deactivate operation */
|
|
458
481
|
mcpServers = [
|
|
@@ -510,6 +533,33 @@ export default class SetupCommand {
|
|
|
510
533
|
skills: ["ase-meta-chat", "ase-meta-quorum"],
|
|
511
534
|
handler: this.chatMcpHandler({ url: "https://api.z.ai/api/paas/v4/", api: "completion", model: "glm-5.1" }, { model: "z-ai/glm-5.1" })
|
|
512
535
|
},
|
|
536
|
+
{
|
|
537
|
+
id: "anthropic-claude",
|
|
538
|
+
name: "Anthropic Claude",
|
|
539
|
+
version: "latest",
|
|
540
|
+
env: ["ANTHROPIC_CLAUDE"],
|
|
541
|
+
server: "chat-anthropic-claude",
|
|
542
|
+
skills: ["ase-meta-chat", "ase-meta-quorum"],
|
|
543
|
+
handler: this.harnessMcpHandler("claude")
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
id: "openai-codex",
|
|
547
|
+
name: "OpenAI Codex",
|
|
548
|
+
version: "latest",
|
|
549
|
+
env: ["OPENAI_CODEX"],
|
|
550
|
+
server: "chat-openai-codex",
|
|
551
|
+
skills: ["ase-meta-chat", "ase-meta-quorum"],
|
|
552
|
+
handler: this.harnessMcpHandler("codex")
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
id: "github-copilot",
|
|
556
|
+
name: "GitHub Copilot",
|
|
557
|
+
version: "latest",
|
|
558
|
+
env: ["GITHUB_COPILOT"],
|
|
559
|
+
server: "chat-github-copilot",
|
|
560
|
+
skills: ["ase-meta-chat", "ase-meta-quorum"],
|
|
561
|
+
handler: this.harnessMcpHandler("copilot")
|
|
562
|
+
},
|
|
513
563
|
{
|
|
514
564
|
id: "brave",
|
|
515
565
|
name: "Brave",
|
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.45",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -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/>
|
|
@@ -42,6 +42,14 @@ Workflow
|
|
|
42
42
|
should be changed. Set <new-text/> to the lines of the
|
|
43
43
|
new text which will replace it.
|
|
44
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.
|
|
52
|
+
|
|
45
53
|
4. Set <description/> to an ultra-brief and concise
|
|
46
54
|
Markdown-formatted description of the problem with
|
|
47
55
|
a hint of what is wrong and why it is wrong. In
|
|
@@ -9,6 +9,9 @@ tools:
|
|
|
9
9
|
- "mcp__chat-xai-grok__query"
|
|
10
10
|
- "mcp__chat-zai-glm__query"
|
|
11
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
|
|
|
@@ -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>
|
|
@@ -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.
|
|
@@ -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,7 +134,7 @@ 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>
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -285,9 +285,6 @@ over time.
|
|
|
285
285
|
- <spec-cj-step-name/> is a summary (5-10 words) of the *step* at its
|
|
286
286
|
<spec-cj-step-touchpoint/>.
|
|
287
287
|
|
|
288
|
-
- <spec-cj-step-actor/> is a `SPEC-PE-<spec-pe-persona-id/>` reference to the
|
|
289
|
-
corresponding **Aspect** of the Personas **Artifact**.
|
|
290
|
-
|
|
291
288
|
- <spec-cj-step-stage/> is one of:
|
|
292
289
|
|
|
293
290
|
- `Awareness`: Customer is not aware of solution, but has a need.
|
|
@@ -297,6 +294,9 @@ over time.
|
|
|
297
294
|
- `Retention`: Customer in the long-term stays a customer.
|
|
298
295
|
- `Advocacy`: Customer is a fan of solution and tells the tribe.
|
|
299
296
|
|
|
297
|
+
- <spec-cj-step-actor/> is a `SPEC-PE-<spec-pe-persona-id/>` reference to the
|
|
298
|
+
corresponding **Aspect** of the Personas **Artifact**.
|
|
299
|
+
|
|
300
300
|
- <spec-cj-step-goal/> is what the actor wants to achieve at this step.
|
|
301
301
|
|
|
302
302
|
- <spec-cj-step-touchpoint/> is where or how the interaction happens
|
|
@@ -311,7 +311,7 @@ over time.
|
|
|
311
311
|
actor encounters at this step (optional).
|
|
312
312
|
|
|
313
313
|
- In case a <spec-cj-step/> has no pain point at all, the
|
|
314
|
-
entire `-
|
|
314
|
+
entire `- Pain Point:` bullet point is omitted.
|
|
315
315
|
|
|
316
316
|
Functional Requirements (FR)
|
|
317
317
|
----------------------------
|
|
@@ -518,7 +518,7 @@ constraining the Functional and Non-Functional Requirements.
|
|
|
518
518
|
business rule.
|
|
519
519
|
|
|
520
520
|
- In case the rule constrains no specific requirement, the
|
|
521
|
-
entire `-
|
|
521
|
+
entire `- Constrains:` bullet point is omitted.
|
|
522
522
|
|
|
523
523
|
- In case the rationale is not present, the
|
|
524
524
|
entire `, **BECAUSE** [...]` clause is omitted.
|
|
@@ -656,24 +656,24 @@ manages, defining how information is organized and connected.
|
|
|
656
656
|
|
|
657
657
|
With:
|
|
658
658
|
|
|
659
|
-
-
|
|
660
|
-
|
|
661
|
-
|
|
659
|
+
- <export-table-1/> is a Markdown table for the attributes with one
|
|
660
|
+
row per <spec-dm-attribute-id/>, sorted by <spec-dm-attribute-id/>
|
|
661
|
+
-- with the columns:
|
|
662
662
|
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
663
|
+
- `Attribute` (`**<spec-dm-attribute-id/>**`)
|
|
664
|
+
- `Type` (`<spec-dm-attribute-qualifier/><spec-dm-attribute-type/>`)
|
|
665
|
+
- `Description` (`<spec-dm-attribute-description/>, **BECAUSE** <spec-dm-attribute-rationale/>.`)
|
|
666
666
|
|
|
667
|
-
-
|
|
668
|
-
|
|
669
|
-
|
|
667
|
+
- <export-table-2/> is a Markdown table for the relation with one
|
|
668
|
+
row per <spec-dm-relation-id/>, sorted by <spec-dm-relation-id/> --
|
|
669
|
+
with the columns:
|
|
670
670
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
671
|
+
- `Relation` (`**<spec-dm-relation-id/>**`)
|
|
672
|
+
- `Target` (`[<spec-dm-relation-target/>](#<spec-dm-relation-target-id/>) (<spec-dm-relation-cardinality/>)`)
|
|
673
|
+
- `Description` (`<spec-dm-relation-description/>, **BECAUSE** <spec-dm-relation-rationale/>.`)
|
|
674
674
|
|
|
675
|
-
-
|
|
676
|
-
|
|
675
|
+
- In case a <spec-dm-entity/> has no relations at all, the
|
|
676
|
+
entire `### RELATIONS` block (including <export-table-2/>) is omitted.
|
|
677
677
|
|
|
678
678
|
- Export: `export.svg`
|
|
679
679
|
|
|
@@ -853,7 +853,7 @@ ambiguities to avoid, shared consistently across all Artifacts.
|
|
|
853
853
|
<spec-gl-term-name/> where helpful.
|
|
854
854
|
|
|
855
855
|
- In case a term has no synonyms, the
|
|
856
|
-
entire `-
|
|
856
|
+
entire `- Synonyms:` bullet point is omitted.
|
|
857
857
|
|
|
858
858
|
Use Cases (UC)
|
|
859
859
|
--------------
|
|
@@ -932,7 +932,7 @@ for main, alternative, and exceptional paths.
|
|
|
932
932
|
**SCENARIO** blocks of this use case).
|
|
933
933
|
|
|
934
934
|
- In case the use case realizes no specific functional requirement,
|
|
935
|
-
the entire `-
|
|
935
|
+
the entire `- Requirements:` bullet point is omitted.
|
|
936
936
|
|
|
937
937
|
- In case a precondition or postcondition is not present, the
|
|
938
938
|
respective bullet point is omitted.
|
|
@@ -1271,13 +1271,13 @@ turn.
|
|
|
1271
1271
|
|
|
1272
1272
|
- <spec-ds-storyboard-usecase/> is a
|
|
1273
1273
|
`SPEC-UC-<spec-uc-usecase-id/>` reference to the corresponding
|
|
1274
|
-
**Aspect** of the Use
|
|
1274
|
+
**Aspect** of the Use Cases **Artifact** the storyboard
|
|
1275
1275
|
visualizes (optional).
|
|
1276
1276
|
|
|
1277
1277
|
- <spec-ds-storyboard-scenario/> is a
|
|
1278
1278
|
`SPEC-UC-<spec-uc-usecase-id/>-<spec-uc-usecase-scenario-id/>`
|
|
1279
1279
|
reference to the corresponding scenario **Aspect** of the Use
|
|
1280
|
-
|
|
1280
|
+
Cases **Artifact** the storyboard visualizes (optional).
|
|
1281
1281
|
|
|
1282
1282
|
- <spec-ds-frame-name/>: a short (2-5 word) label for the screen,
|
|
1283
1283
|
turn, or state depicted by the storyboard frame. Frames are
|
|
@@ -59,7 +59,7 @@ You *MUST* honor the following hints on this *task* format:
|
|
|
59
59
|
- The <title/> is a short summary of the <summary-what/>, no longer than
|
|
60
60
|
50 characters.
|
|
61
61
|
|
|
62
|
-
- The sections `## CHANGES` and `## VERIFICATION`
|
|
62
|
+
- The sections `## CHANGES` and `## VERIFICATION` are each just a short
|
|
63
63
|
list of 1-5 bullet points. Each bullet point is formatted as
|
|
64
64
|
`- **<aspect/>**: <specification/>` where <aspect/> indicates
|
|
65
65
|
the aspect of the section and <specification/> is 1-3 sentences
|
|
@@ -18,7 +18,7 @@ requested communication style at any time during a session.
|
|
|
18
18
|
- If <ase-persona-style/> is `caveman`:
|
|
19
19
|
You *MUST* use the terse, rough, and stuttering communication style of a *caveman*.
|
|
20
20
|
|
|
21
|
-
- If <ase-persona-style/> is `writer`, `engineer`, `journalist`, `telegrapher
|
|
21
|
+
- If <ase-persona-style/> is `writer`, `engineer`, `journalist`, `telegrapher`, or `caveman`:
|
|
22
22
|
- You *MUST* *always keep* technical terms exactly, independent of other persona rules below.
|
|
23
23
|
- You *MUST* *always keep* errors quoted exactly, independent of other persona rules below.
|
|
24
24
|
- You *MUST* *always keep* code blocks unchanged, independent of other persona rules below.
|
|
@@ -28,7 +28,7 @@ requested communication style at any time during a session.
|
|
|
28
28
|
- You *MUST* bundle related aspects into paragraphs.
|
|
29
29
|
- You *MUST* output blank lines between paragraphs.
|
|
30
30
|
|
|
31
|
-
- If <ase-persona-style/> is `engineer`, `journalist`, `telegrapher
|
|
31
|
+
- If <ase-persona-style/> is `engineer`, `journalist`, `telegrapher`, or `caveman`:
|
|
32
32
|
- You *MUST* use `○` as the bullet point marker symbol in bullet point lists.
|
|
33
33
|
- You *MUST* *drop* filler words
|
|
34
34
|
("just", "really", "basically", "actually", "simply", etc).
|
|
@@ -62,7 +62,7 @@ requested communication style at any time during a session.
|
|
|
62
62
|
- <keywords/> is only one to four keywords summarizing the <details/>
|
|
63
63
|
- <details/> is one to four prose sentences explaining the aspect
|
|
64
64
|
|
|
65
|
-
- If <ase-persona-style/> is `telegrapher
|
|
65
|
+
- If <ase-persona-style/> is `telegrapher`, or `caveman`:
|
|
66
66
|
- You *MUST* *use only* bullet point lists without blank lines between bullet points.
|
|
67
67
|
- You *MUST* *use only* one bullet point per explanation aspect.
|
|
68
68
|
- You *MUST* *use* shorter synonyms
|
package/plugin/meta/ase-skill.md
CHANGED
|
@@ -299,7 +299,7 @@ Template Patterns
|
|
|
299
299
|
|
|
300
300
|
<template>
|
|
301
301
|
|
|
302
|
-
|
|
302
|
+
╭───────────────────────────────────────────────────────────────────┈┈┈┈┈┈┈┈┈┈
|
|
303
303
|
|
|
304
304
|
</template>
|
|
305
305
|
|
|
@@ -330,7 +330,7 @@ Template Patterns
|
|
|
330
330
|
<raw-title-len/> is the number of characters in <raw-title/>,
|
|
331
331
|
and <bar/> is the `─` character repeated exactly max(0, 67 -
|
|
332
332
|
<raw-title-len/>) times -- clamped to zero so an over-long title
|
|
333
|
-
never yields a negative count
|
|
333
|
+
never yields a negative count):
|
|
334
334
|
|
|
335
335
|
<template>
|
|
336
336
|
|
|
@@ -5,7 +5,7 @@ ASE Tenets
|
|
|
5
5
|
The following are the **ASE Tenets** -- the guiding principles you
|
|
6
6
|
*MUST* internalize when requested. They are organized into *Generic
|
|
7
7
|
Tenets*, which always apply, and *Operation-Specific Tenets*, which
|
|
8
|
-
apply only to a particular kind of operation (Crafting,
|
|
8
|
+
apply only to a particular kind of operation (Crafting, Reconciling,
|
|
9
9
|
Refactoring, Resolving).
|
|
10
10
|
|
|
11
11
|
GENERIC TENETS
|
|
@@ -80,7 +80,7 @@ CRAFTING TENETS
|
|
|
80
80
|
---------------
|
|
81
81
|
|
|
82
82
|
When *crafting* from scratch a new artifact, a feature, or an aspect,
|
|
83
|
-
you *MUST* honor the following so-called
|
|
83
|
+
you *MUST* honor the following so-called **CRAFTING TENETS**:
|
|
84
84
|
|
|
85
85
|
- **Clear Minimal Scope**:
|
|
86
86
|
Establish explicit boundaries for the new feature.
|
|
@@ -167,7 +167,7 @@ REFACTORING TENETS
|
|
|
167
167
|
------------------
|
|
168
168
|
|
|
169
169
|
When *refactoring* existing artifacts or aspects,
|
|
170
|
-
you *MUST* honor the following so-called **REFACTORING TENETS
|
|
170
|
+
you *MUST* honor the following so-called **REFACTORING TENETS**:
|
|
171
171
|
|
|
172
172
|
- **Behavior Preservation**:
|
|
173
173
|
Refactoring changes only re-structure, never change any
|
|
@@ -200,7 +200,7 @@ RESOLVING TENETS
|
|
|
200
200
|
----------------
|
|
201
201
|
|
|
202
202
|
When *resolving* a problem or challenge (bug-fixing),
|
|
203
|
-
you *MUST* honor the following so-called **RESOLVING TENETS
|
|
203
|
+
you *MUST* honor the following so-called **RESOLVING TENETS**:
|
|
204
204
|
|
|
205
205
|
- **No Cleanups**:
|
|
206
206
|
Strictly focus on resolving the problem and do not mix the task with
|
package/plugin/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.45",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|