@rse/ase 0.0.52 → 0.0.54
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-config.js +3 -3
- package/dst/ase-diagram.js +1 -1
- package/dst/ase-getopt.js +1 -1
- package/dst/ase-hello.js +27 -0
- package/dst/ase-kv.js +5 -5
- package/dst/ase-persona.js +1 -1
- package/dst/ase-service.js +5 -5
- package/dst/ase-setup.js +1 -1
- package/dst/ase-skills.js +2 -2
- package/dst/ase-statusline.js +1 -1
- package/dst/ase-task.js +10 -9
- package/dst/ase-timestamp.js +1 -1
- package/package.json +1 -1
- package/plugin/.claude/settings.local.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/agents/ase-meta-chat.md +1 -1
- package/plugin/agents/ase-meta-diagram.md +5 -5
- package/plugin/agents/ase-meta-search.md +2 -6
- package/plugin/meta/ase-getopt.md +2 -2
- package/plugin/meta/ase-plan.md +2 -2
- package/plugin/meta/ase-skill.md +3 -3
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-arch-analyze/SKILL.md +4 -4
- package/plugin/skills/ase-arch-discover/SKILL.md +4 -2
- package/plugin/skills/ase-code-analyze/SKILL.md +2 -2
- package/plugin/skills/ase-code-craft/SKILL.md +10 -10
- package/plugin/skills/ase-code-explain/SKILL.md +2 -0
- package/plugin/skills/ase-code-insight/SKILL.md +3 -1
- package/plugin/skills/ase-code-lint/SKILL.md +3 -3
- package/plugin/skills/ase-code-refactor/SKILL.md +10 -10
- package/plugin/skills/ase-code-resolve/SKILL.md +17 -17
- package/plugin/skills/ase-docs-proofread/SKILL.md +3 -3
- package/plugin/skills/ase-meta-changes/SKILL.md +133 -62
- package/plugin/skills/ase-meta-commit/SKILL.md +19 -10
- package/plugin/skills/ase-meta-evaluate/SKILL.md +2 -2
- package/plugin/skills/ase-meta-persona/SKILL.md +5 -4
- package/plugin/skills/ase-meta-quorum/SKILL.md +1 -1
- package/plugin/skills/ase-meta-search/SKILL.md +1 -1
- package/plugin/skills/ase-meta-why/SKILL.md +2 -0
- package/plugin/skills/ase-task-delete/SKILL.md +7 -5
- package/plugin/skills/ase-task-edit/SKILL.md +19 -17
- package/plugin/skills/ase-task-id/SKILL.md +4 -4
- package/plugin/skills/ase-task-implement/SKILL.md +9 -7
- package/plugin/skills/ase-task-list/SKILL.md +2 -2
- package/plugin/skills/ase-task-preflight/SKILL.md +13 -11
- package/plugin/skills/ase-task-reboot/SKILL.md +12 -10
- package/plugin/skills/ase-task-rename/SKILL.md +8 -5
- package/plugin/skills/ase-task-view/SKILL.md +5 -3
- package/plugin/commands/ase-code-lint/complete.md +0 -9
- package/plugin/commands/ase-code-lint/explain.md +0 -9
- package/plugin/commands/ase-code-lint/nope.md +0 -11
- package/plugin/commands/ase-code-lint/reassess.md +0 -15
- package/plugin/commands/ase-code-lint/recheck.md +0 -9
- package/plugin/commands/ase-code-lint/refine.md +0 -9
package/dst/ase-config.js
CHANGED
|
@@ -635,7 +635,7 @@ export class ConfigMCP {
|
|
|
635
635
|
/* register the MCP tools */
|
|
636
636
|
register(mcp) {
|
|
637
637
|
/* config get */
|
|
638
|
-
mcp.registerTool("
|
|
638
|
+
mcp.registerTool("ase_config_get", {
|
|
639
639
|
title: "ASE config get",
|
|
640
640
|
description: "Read the effective value of a dotted configuration `key` from the layered " +
|
|
641
641
|
"configuration, cascading through default/user/project/task/session chain up to and " +
|
|
@@ -665,7 +665,7 @@ export class ConfigMCP {
|
|
|
665
665
|
}
|
|
666
666
|
});
|
|
667
667
|
/* config set */
|
|
668
|
-
mcp.registerTool("
|
|
668
|
+
mcp.registerTool("ase_config_set", {
|
|
669
669
|
title: "ASE config set",
|
|
670
670
|
description: "Write `val` to a dotted configuration `key` at the target `scope` " +
|
|
671
671
|
"(the strongest scope term in the chain). The value is validated against " +
|
|
@@ -695,7 +695,7 @@ export class ConfigMCP {
|
|
|
695
695
|
}
|
|
696
696
|
});
|
|
697
697
|
/* config delete */
|
|
698
|
-
mcp.registerTool("
|
|
698
|
+
mcp.registerTool("ase_config_delete", {
|
|
699
699
|
title: "ASE config delete",
|
|
700
700
|
description: "Delete the value at a dotted configuration `key` from the target `scope` " +
|
|
701
701
|
"(the strongest scope term in the chain). No-op if the key is not present.",
|
package/dst/ase-diagram.js
CHANGED
|
@@ -272,7 +272,7 @@ export default class DiagramCommand {
|
|
|
272
272
|
/* MCP registration entry point for diagram tools */
|
|
273
273
|
export class DiagramMCP {
|
|
274
274
|
register(mcp) {
|
|
275
|
-
mcp.registerTool("
|
|
275
|
+
mcp.registerTool("ase_diagram", {
|
|
276
276
|
title: "ASE diagram render",
|
|
277
277
|
description: "Render a Mermaid diagram as Unicode/ASCII art. " +
|
|
278
278
|
"Use for visualizing " +
|
package/dst/ase-getopt.js
CHANGED
|
@@ -9,7 +9,7 @@ import { parse as shParse, quote as shQuote } from "shell-quote";
|
|
|
9
9
|
/* MCP registration entry point for the option-parser tool */
|
|
10
10
|
export class GetoptMCP {
|
|
11
11
|
register(mcp) {
|
|
12
|
-
mcp.registerTool("
|
|
12
|
+
mcp.registerTool("ase_getopt", {
|
|
13
13
|
title: "ASE option parser",
|
|
14
14
|
description: "Parse `args` against the options specification in " +
|
|
15
15
|
"`spec` of the form `--<long>[|-<short>][=<default>] ...` " +
|
package/dst/ase-hello.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*
|
|
2
|
+
** Agentic Software Engineering (ASE)
|
|
3
|
+
** Copyright (c) 2025-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
4
|
+
** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
|
|
5
|
+
*/
|
|
6
|
+
import { Chalk } from "chalk";
|
|
7
|
+
/* forced-color chalk instance: stdout is a pipe under Claude Code,
|
|
8
|
+
so chalk auto-detection would yield level 0; force level 1 to keep
|
|
9
|
+
emitting ANSI sequences */
|
|
10
|
+
const c = new Chalk({ level: 1 });
|
|
11
|
+
/* command-line handling */
|
|
12
|
+
export default class HelloCommand {
|
|
13
|
+
log;
|
|
14
|
+
constructor(log) {
|
|
15
|
+
this.log = log;
|
|
16
|
+
}
|
|
17
|
+
/* register commands */
|
|
18
|
+
register(program) {
|
|
19
|
+
program
|
|
20
|
+
.command("hello")
|
|
21
|
+
.description("Print a friendly \"Hello World\" greeting in red")
|
|
22
|
+
.action(async () => {
|
|
23
|
+
this.log.write("debug", "hello: printing greeting");
|
|
24
|
+
process.stdout.write(c.red("Hello World") + "\n");
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
package/dst/ase-kv.js
CHANGED
|
@@ -66,7 +66,7 @@ export class KV {
|
|
|
66
66
|
export class KVMCP {
|
|
67
67
|
register(mcp) {
|
|
68
68
|
/* key/value get */
|
|
69
|
-
mcp.registerTool("
|
|
69
|
+
mcp.registerTool("ase_kv_get", {
|
|
70
70
|
title: "ASE key/value get",
|
|
71
71
|
description: "Get a value from the in-memory key/value store by `key`. " +
|
|
72
72
|
"Returns the value as JSON-encoded `text`; returns an empty string if no value is stored.",
|
|
@@ -88,7 +88,7 @@ export class KVMCP {
|
|
|
88
88
|
}
|
|
89
89
|
});
|
|
90
90
|
/* key/value set */
|
|
91
|
-
mcp.registerTool("
|
|
91
|
+
mcp.registerTool("ase_kv_set", {
|
|
92
92
|
title: "ASE key/value set",
|
|
93
93
|
description: "Store a `val` under the given `key` in the in-memory key/value store. " +
|
|
94
94
|
"Overwrites any existing value for the same `key`. " +
|
|
@@ -110,7 +110,7 @@ export class KVMCP {
|
|
|
110
110
|
}
|
|
111
111
|
});
|
|
112
112
|
/* key/value clear */
|
|
113
|
-
mcp.registerTool("
|
|
113
|
+
mcp.registerTool("ase_kv_clear", {
|
|
114
114
|
title: "ASE key/value clear",
|
|
115
115
|
description: "Remove all keys from the in-memory key/value store. " +
|
|
116
116
|
"Returns a status `text` indicating how many keys were removed.",
|
|
@@ -126,7 +126,7 @@ export class KVMCP {
|
|
|
126
126
|
}
|
|
127
127
|
});
|
|
128
128
|
/* key/value delete */
|
|
129
|
-
mcp.registerTool("
|
|
129
|
+
mcp.registerTool("ase_kv_delete", {
|
|
130
130
|
title: "ASE key/value delete",
|
|
131
131
|
description: "Delete a value from the in-memory key/value store by `key`. " +
|
|
132
132
|
"Returns a status `text` indicating whether a value existed and was removed.",
|
|
@@ -148,7 +148,7 @@ export class KVMCP {
|
|
|
148
148
|
}
|
|
149
149
|
});
|
|
150
150
|
/* key/value batch */
|
|
151
|
-
mcp.registerTool("
|
|
151
|
+
mcp.registerTool("ase_kv_batch", {
|
|
152
152
|
title: "ASE key/value batch",
|
|
153
153
|
description: "Execute an array of in-memory key/value `commands` in a single MCP call. " +
|
|
154
154
|
"Each entry is an object `{ command: \"clear\"|\"set\"|\"get\"|\"delete\", key?, val? }` " +
|
package/dst/ase-persona.js
CHANGED
|
@@ -43,7 +43,7 @@ export default class PersonaMCP {
|
|
|
43
43
|
this.log = log;
|
|
44
44
|
}
|
|
45
45
|
register(mcp) {
|
|
46
|
-
mcp.registerTool("
|
|
46
|
+
mcp.registerTool("ase_persona", {
|
|
47
47
|
title: "ASE persona style get/set",
|
|
48
48
|
description: "Get or set the active ASE agent persona `style`. " +
|
|
49
49
|
"If `style` is provided, it sets the persona style, " +
|
package/dst/ase-service.js
CHANGED
|
@@ -140,10 +140,10 @@ export class Service {
|
|
|
140
140
|
const n = Math.min(CHUNK, pos);
|
|
141
141
|
pos -= n;
|
|
142
142
|
fs.readSync(fd, buf, 0, n, pos);
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
for (let i = 0; i <
|
|
146
|
-
if (
|
|
143
|
+
const chunk = buf.toString("utf8", 0, n);
|
|
144
|
+
tail = chunk + tail;
|
|
145
|
+
for (let i = 0; i < chunk.length; i++)
|
|
146
|
+
if (chunk.charCodeAt(i) === 10)
|
|
147
147
|
count++;
|
|
148
148
|
}
|
|
149
149
|
const all = tail.split("\n").filter((l) => l.length > 0);
|
|
@@ -165,7 +165,7 @@ export class ServiceMCP {
|
|
|
165
165
|
this.ctx = ctx;
|
|
166
166
|
}
|
|
167
167
|
register(mcp) {
|
|
168
|
-
mcp.registerTool("
|
|
168
|
+
mcp.registerTool("ase_ping", {
|
|
169
169
|
title: "ASE service ping",
|
|
170
170
|
description: "Return ASE service identity, port, and uptime.",
|
|
171
171
|
inputSchema: {}
|
package/dst/ase-setup.js
CHANGED
|
@@ -667,7 +667,7 @@ export default class SetupCommand {
|
|
|
667
667
|
const devDflt = envDev !== "" && envDev !== "0" && envDev.toLowerCase() !== "false";
|
|
668
668
|
/* default for --tool derived from ASE_TOOL environment variable */
|
|
669
669
|
const envTool = process.env.ASE_TOOL ?? "";
|
|
670
|
-
const toolDflt = envTool !== "" ? envTool : "claude";
|
|
670
|
+
const toolDflt = envTool !== "" ? this.parseTool(envTool) : "claude";
|
|
671
671
|
/* register CLI top-level command "ase setup" */
|
|
672
672
|
const setupCmd = program
|
|
673
673
|
.command("setup")
|
package/dst/ase-skills.js
CHANGED
|
@@ -292,7 +292,7 @@ export class Skills {
|
|
|
292
292
|
/* MCP registration entry point for various skill helper tools */
|
|
293
293
|
export class SkillsMCP {
|
|
294
294
|
register(mcp) {
|
|
295
|
-
mcp.registerTool("
|
|
295
|
+
mcp.registerTool("ase_component_info", {
|
|
296
296
|
title: "ASE component info",
|
|
297
297
|
description: "Gather metadata for a list of packages with maximum parallelism, " +
|
|
298
298
|
"dispatching on the technology `stack`. For `JavaScript`/`TypeScript`, " +
|
|
@@ -330,7 +330,7 @@ export class SkillsMCP {
|
|
|
330
330
|
};
|
|
331
331
|
}
|
|
332
332
|
});
|
|
333
|
-
mcp.registerTool("
|
|
333
|
+
mcp.registerTool("ase_decision_matrix", {
|
|
334
334
|
title: "ASE decision matrix",
|
|
335
335
|
description: "Compute the per-alternative product-sum (rating) row of a weighted " +
|
|
336
336
|
"multi-criteria decision matrix. The input `matrix` is an array of rows, " +
|
package/dst/ase-statusline.js
CHANGED
|
@@ -182,7 +182,7 @@ export default class StatuslineCommand {
|
|
|
182
182
|
register(program) {
|
|
183
183
|
/* default for --tool derived from ASE_TOOL environment variable */
|
|
184
184
|
const envTool = process.env.ASE_TOOL ?? "";
|
|
185
|
-
const toolDflt = envTool !== "" ? envTool : "claude";
|
|
185
|
+
const toolDflt = envTool !== "" ? this.parseTool(envTool) : "claude";
|
|
186
186
|
program
|
|
187
187
|
.command("statusline")
|
|
188
188
|
.description("Render Claude Code or GitHub Copilot CLI statusline from stdin JSON")
|
package/dst/ase-task.js
CHANGED
|
@@ -295,7 +295,7 @@ export class TaskMCP {
|
|
|
295
295
|
/* register MCP tools */
|
|
296
296
|
register(mcp) {
|
|
297
297
|
/* task list */
|
|
298
|
-
mcp.registerTool("
|
|
298
|
+
mcp.registerTool("ase_task_list", {
|
|
299
299
|
title: "ASE task list",
|
|
300
300
|
description: "List all persisted tasks. " +
|
|
301
301
|
"Returns a `tasks` array (in lexicographic `id` order) where each item has the " +
|
|
@@ -335,7 +335,7 @@ export class TaskMCP {
|
|
|
335
335
|
}
|
|
336
336
|
});
|
|
337
337
|
/* task load */
|
|
338
|
-
mcp.registerTool("
|
|
338
|
+
mcp.registerTool("ase_task_load", {
|
|
339
339
|
title: "ASE task load",
|
|
340
340
|
description: "Load a previously persisted task by `id`. " +
|
|
341
341
|
"Returns the task as `text`; returns an empty string if no task exists for the `id`.",
|
|
@@ -359,7 +359,7 @@ export class TaskMCP {
|
|
|
359
359
|
}
|
|
360
360
|
});
|
|
361
361
|
/* task save */
|
|
362
|
-
mcp.registerTool("
|
|
362
|
+
mcp.registerTool("ase_task_save", {
|
|
363
363
|
title: "ASE task save",
|
|
364
364
|
description: "Persist a task as `text` under `id`. " +
|
|
365
365
|
"Overwrites any existing task for the same `id`.",
|
|
@@ -384,7 +384,8 @@ export class TaskMCP {
|
|
|
384
384
|
};
|
|
385
385
|
}
|
|
386
386
|
});
|
|
387
|
-
|
|
387
|
+
/* task delete */
|
|
388
|
+
mcp.registerTool("ase_task_delete", {
|
|
388
389
|
title: "ASE task delete",
|
|
389
390
|
description: "Delete a previously persisted task by `id`. " +
|
|
390
391
|
"Returns a status `text` indicating whether a task existed and was removed.",
|
|
@@ -396,8 +397,8 @@ export class TaskMCP {
|
|
|
396
397
|
try {
|
|
397
398
|
const removed = Task.delete(args.id);
|
|
398
399
|
const msg = removed ?
|
|
399
|
-
|
|
400
|
-
|
|
400
|
+
`task_delete: OK: removed task "${args.id}"` :
|
|
401
|
+
`task_delete: WARNING: no task "${args.id}" to remove`;
|
|
401
402
|
return {
|
|
402
403
|
content: [{ type: "text", text: msg }]
|
|
403
404
|
};
|
|
@@ -411,7 +412,7 @@ export class TaskMCP {
|
|
|
411
412
|
}
|
|
412
413
|
});
|
|
413
414
|
/* task rename */
|
|
414
|
-
mcp.registerTool("
|
|
415
|
+
mcp.registerTool("ase_task_rename", {
|
|
415
416
|
title: "ASE task rename",
|
|
416
417
|
description: "Rename a previously persisted task from `old` to `new` by atomically moving the " +
|
|
417
418
|
"task home directory. Returns a status `text` indicating whether the rename succeeded. " +
|
|
@@ -427,7 +428,7 @@ export class TaskMCP {
|
|
|
427
428
|
const renamed = Task.rename(args.old, args.new);
|
|
428
429
|
const msg = renamed ?
|
|
429
430
|
`task_rename: OK: renamed task "${args.old}" to "${args.new}"` :
|
|
430
|
-
|
|
431
|
+
`task_rename: WARNING: no task "${args.old}" to rename`;
|
|
431
432
|
return {
|
|
432
433
|
content: [{ type: "text", text: msg }]
|
|
433
434
|
};
|
|
@@ -441,7 +442,7 @@ export class TaskMCP {
|
|
|
441
442
|
}
|
|
442
443
|
});
|
|
443
444
|
/* task id get/set */
|
|
444
|
-
mcp.registerTool("
|
|
445
|
+
mcp.registerTool("ase_task_id", {
|
|
445
446
|
title: "ASE task id get/set",
|
|
446
447
|
description: "Get or set the active ASE task `id` for a given `session`. " +
|
|
447
448
|
"If `id` is provided, it sets the task id in the given `session`, " +
|
package/dst/ase-timestamp.js
CHANGED
|
@@ -8,7 +8,7 @@ import { DateTime } from "luxon";
|
|
|
8
8
|
/* MCP registration entry point for timestamp tool */
|
|
9
9
|
export class TimestampMCP {
|
|
10
10
|
register(mcp) {
|
|
11
|
-
mcp.registerTool("
|
|
11
|
+
mcp.registerTool("ase_timestamp", {
|
|
12
12
|
title: "ASE timestamp",
|
|
13
13
|
description: "Return the current local date/time formatted via a Luxon format string. " +
|
|
14
14
|
"Pass the Luxon format tokens as `format` (default: `yyyy-LL-dd HH:mm`). " +
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "http://github.com/rse/ase",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "http://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.54",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -47,7 +47,7 @@ tools:
|
|
|
47
47
|
ERROR: LLM `<llm/>` requires MCP server `<server/>`, but it is (currently) not available!
|
|
48
48
|
</template>
|
|
49
49
|
|
|
50
|
-
4. Now call the MCP tool `query(
|
|
50
|
+
4. Now call the MCP tool `query(prompt: <query/>)` from the MCP server
|
|
51
51
|
<server/> and then return its result `text` *verbatim* and
|
|
52
52
|
*without any modifications*. Especially, do *NOT* add or remove
|
|
53
53
|
any text to the MCP server response on your own and do not
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
name: ase-meta-diagram
|
|
3
3
|
description: "Diagram Rendering"
|
|
4
4
|
tools:
|
|
5
|
-
- "
|
|
5
|
+
- "mcp__plugin_ase_ase__ase_diagram"
|
|
6
6
|
effort: high
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
Your role is to render a *single* diagram, with *deterministic* and
|
|
10
10
|
*clean* output. Your objective is to produce a beautifully rendered
|
|
11
11
|
diagram, derived from the *Mermaid* diagram specification passed in
|
|
12
|
-
`$ARGUMENTS`, which is rendered with the `
|
|
13
|
-
MCP
|
|
12
|
+
`$ARGUMENTS`, which is rendered with the `ase_diagram` tool of the `ase`
|
|
13
|
+
MCP server. The rendered diagram is returned to the caller, who
|
|
14
14
|
reproduces it directly in the user-visible response text.
|
|
15
15
|
|
|
16
16
|
Rules
|
|
@@ -33,7 +33,7 @@ Rules
|
|
|
33
33
|
Other Mermaid diagram types are *not* supported by the renderer.
|
|
34
34
|
|
|
35
35
|
- RENDER:
|
|
36
|
-
You *MUST* always use the `
|
|
36
|
+
You *MUST* always use the `ase_diagram` tool from the `ase` MCP server
|
|
37
37
|
to render the diagram!
|
|
38
38
|
|
|
39
39
|
Pass the Mermaid diagram specification from `$ARGUMENTS` in the
|
|
@@ -45,7 +45,7 @@ Rules
|
|
|
45
45
|
token-by-token are *forbidden* as your own output.
|
|
46
46
|
|
|
47
47
|
- OUTPUT:
|
|
48
|
-
You *MUST* return *exclusively* the `text` output of the `
|
|
48
|
+
You *MUST* return *exclusively* the `text` output of the `ase_diagram`
|
|
49
49
|
tool, reproduced *verbatim* into a single Markdown-fenced code block
|
|
50
50
|
(triple backticks). Do *not* return any other output, especially no
|
|
51
51
|
prose, no preamble, no summary, and no Mermaid specification.
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-meta-search
|
|
3
3
|
description: Query the Web
|
|
4
|
-
tools:
|
|
5
|
-
- "mcp__perplexity__perplexity_search"
|
|
6
|
-
- "mcp__brave__brave_web_search"
|
|
7
|
-
- "WebSearch"
|
|
8
4
|
model: sonnet
|
|
9
5
|
effort: low
|
|
10
6
|
tools:
|
|
11
|
-
- "
|
|
12
|
-
- "
|
|
7
|
+
- "mcp__perplexity__perplexity_search"
|
|
8
|
+
- "mcp__brave__brave_web_search"
|
|
13
9
|
- "mcp__search-exa__web_search_exa"
|
|
14
10
|
- "WebSearch"
|
|
15
11
|
---
|
|
@@ -20,8 +20,8 @@ set placeholders into the context as a side-effect.
|
|
|
20
20
|
then just silently *SKIP* the following steps 3-7!
|
|
21
21
|
|
|
22
22
|
3. **MCP Call**:
|
|
23
|
-
Call the `
|
|
24
|
-
<getopt-args/>)` tool of the `ase` MCP
|
|
23
|
+
Call the `ase_getopt(name: <getopt-skill/>, spec: <getopt-spec/>, args:
|
|
24
|
+
<getopt-args/>)` tool of the `ase` MCP server and set <text/> to the
|
|
25
25
|
`text` output field of this tool call. The `spec` syntax for each
|
|
26
26
|
option token is `--<long>[|-<short>][=<default>|=(<c1>|<c2>|...)]`,
|
|
27
27
|
where `=<default>` declares a value-taking option with a default,
|
package/plugin/meta/ase-plan.md
CHANGED
|
@@ -53,8 +53,8 @@ You *MUST* honor the following hints on this *task plan* format:
|
|
|
53
53
|
<timestamp-modified/> is the timestamp when this feature
|
|
54
54
|
specification was last modified. Both use an ISO-style format
|
|
55
55
|
value. The value of both can be determined by
|
|
56
|
-
a call to the `
|
|
57
|
-
tool of the `ase` MCP
|
|
56
|
+
a call to the `ase_timestamp(format: "yyyy-LL-dd HH:mm")`
|
|
57
|
+
tool of the `ase` MCP server and use the `text` field of
|
|
58
58
|
its response.
|
|
59
59
|
|
|
60
60
|
- The <title/> is a short summary of the <summary-what/>, no longer than
|
package/plugin/meta/ase-skill.md
CHANGED
|
@@ -128,15 +128,15 @@ Skill Sequential Processing
|
|
|
128
128
|
MCP Tool Calls
|
|
129
129
|
--------------
|
|
130
130
|
|
|
131
|
-
- *IMPORTANT*: Whenever you call *any* tool from the `ase` MCP
|
|
131
|
+
- *IMPORTANT*: Whenever you call *any* tool from the `ase` MCP server,
|
|
132
132
|
you *MUST* check the response immediately:
|
|
133
133
|
|
|
134
|
-
- If the call fails because the `ase` MCP
|
|
134
|
+
- If the call fails because the `ase` MCP server is not running
|
|
135
135
|
(tool not found, connection refused, server not connected, internal
|
|
136
136
|
error), output the following and stop immediately:
|
|
137
137
|
|
|
138
138
|
<template>
|
|
139
|
-
⧉ **ASE**: **ERROR:** MCP
|
|
139
|
+
⧉ **ASE**: **ERROR:** MCP server not running — please start it via `ase service start` and reconnect via `/mcp`, then retry.
|
|
140
140
|
</template>
|
|
141
141
|
|
|
142
142
|
- If the call fails for any other reason (timeout, transport error,
|
package/plugin/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "http://github.com/rse/ase",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "http://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.54",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -5,7 +5,7 @@ description: Review software architecture, including package cohesion and inter-
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: false
|
|
7
7
|
model: opus
|
|
8
|
-
effort:
|
|
8
|
+
effort: high
|
|
9
9
|
allowed-tools:
|
|
10
10
|
- "Bash(wc:*)"
|
|
11
11
|
- "Bash(ls:*)"
|
|
@@ -431,10 +431,10 @@ interface quality, quality attributes, and architecture governance.
|
|
|
431
431
|
for the same aspect, and never emit both halves of a
|
|
432
432
|
tension pair as separate PROBLEMs.
|
|
433
433
|
|
|
434
|
-
- *Additionally*, first call the `
|
|
435
|
-
MCP
|
|
434
|
+
- *Additionally*, first call the `ase_kv_clear()` tool of the `ase`
|
|
435
|
+
MCP server to clear the in-memory key/value store, and then,
|
|
436
436
|
for *every* reported PROBLEM and TRADEOFF, persist its finding
|
|
437
|
-
result via the `
|
|
437
|
+
result via the `ase_kv_set` tool of the `ase` MCP server, using
|
|
438
438
|
`key` set to `ase-issue-P<n/>` (for PROBLEMs) or
|
|
439
439
|
`ase-issue-T<n/>` (for TRADEOFFs) and `val` set to
|
|
440
440
|
`<title/>: <description/>`.
|
|
@@ -24,8 +24,10 @@ Discover Components
|
|
|
24
24
|
Discover Components
|
|
25
25
|
</skill>
|
|
26
26
|
|
|
27
|
+
<role>
|
|
27
28
|
Your role is an experienced, *expert-level software architect*,
|
|
28
29
|
specialized in *finding components* (libraries/frameworks) for the technology stack.
|
|
30
|
+
</role>
|
|
29
31
|
|
|
30
32
|
<objective>
|
|
31
33
|
*Discover* additional, *third-party components* (libraries/frameworks)
|
|
@@ -129,9 +131,9 @@ for the technology stack to *provide* the *needed functionality*
|
|
|
129
131
|
into the already existing result set, but deduplicate
|
|
130
132
|
entries by Maven coordinate.
|
|
131
133
|
|
|
132
|
-
- Call the `
|
|
134
|
+
- Call the `ase_component_info(stack: <stack/>, components:
|
|
133
135
|
[ <package-1/>, ..., <package-N/> ])` tool of the `ase` MCP
|
|
134
|
-
|
|
136
|
+
server *once* for the entire set of discovered packages.
|
|
135
137
|
The tool dispatches internally on <stack/> and fetches all
|
|
136
138
|
metadata in maximum parallel and returns an array of objects `{
|
|
137
139
|
name, version, time, repository, stars, downloads }`. For each
|
|
@@ -5,7 +5,7 @@ description: >
|
|
|
5
5
|
Analyze the source code for problems in the logic and semantics and its related control flow.
|
|
6
6
|
user-invocable: true
|
|
7
7
|
disable-model-invocation: false
|
|
8
|
-
effort:
|
|
8
|
+
effort: high
|
|
9
9
|
allowed-tools:
|
|
10
10
|
- "Agent"
|
|
11
11
|
---
|
|
@@ -88,7 +88,7 @@ code, for problems in its *logic* and *semantics* and its related
|
|
|
88
88
|
<template>HIGH</template>.
|
|
89
89
|
|
|
90
90
|
- *Additionally*, persist all reported problems in a *single*
|
|
91
|
-
`
|
|
91
|
+
`ase_kv_batch` call to the `ase` MCP server with `transactional`
|
|
92
92
|
set to `true`. The `commands` parameter array of this call
|
|
93
93
|
starts with one `{ command: "clear" }` entry, followed by one
|
|
94
94
|
`{ command: "set", key: "ase-issue-P<n/>", val: "<title/>:
|
|
@@ -52,7 +52,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
52
52
|
|
|
53
53
|
You *MUST* *NOT* call `Edit`, `Write`, `NotebookEdit`, or any
|
|
54
54
|
filesystem-modifying tool during this entire skill. The *only*
|
|
55
|
-
permitted way to persist artifacts is via `
|
|
55
|
+
permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
56
56
|
|
|
57
57
|
1. **Reason About Feature**:
|
|
58
58
|
|
|
@@ -61,8 +61,8 @@ permitted way to persist artifacts is via `task_save(...)`.
|
|
|
61
61
|
">
|
|
62
62
|
Set <ase-task-id><feature/></ase-task-id> (set task id to feature)
|
|
63
63
|
and <feature></feature> (set feature empty), call the
|
|
64
|
-
`
|
|
65
|
-
from the `ase` MCP
|
|
64
|
+
`ase_task_id(id: <ase-task-id/>, session: <ase-session-id/>)` tool
|
|
65
|
+
from the `ase` MCP server to switch the task, and then only
|
|
66
66
|
output the following <template/>:
|
|
67
67
|
|
|
68
68
|
<template>
|
|
@@ -73,8 +73,8 @@ permitted way to persist artifacts is via `task_save(...)`.
|
|
|
73
73
|
2. If <feature/> has the format `<id/>: <text/>` where <id/> matches
|
|
74
74
|
the regexp `^[a-zA-Z][a-zA-Z0-9_-]+$`, then set
|
|
75
75
|
<feature><text/></feature> and <ase-task-id><id/></ase-task-id>
|
|
76
|
-
and call the `
|
|
77
|
-
<ase-session-id/>)` tool from the `ase` MCP
|
|
76
|
+
and call the `ase_task_id(id: <ase-task-id/>, session:
|
|
77
|
+
<ase-session-id/>)` tool from the `ase` MCP server to
|
|
78
78
|
implicitly switch the task. Do not output anything.
|
|
79
79
|
|
|
80
80
|
3. If <feature/> is empty,
|
|
@@ -91,8 +91,8 @@ permitted way to persist artifacts is via `task_save(...)`.
|
|
|
91
91
|
">
|
|
92
92
|
Set <ase-task-id/> to a unique task id, derived from <feature/>,
|
|
93
93
|
which consists of two lower-case words concatenated with a
|
|
94
|
-
`-` character. Then call the `
|
|
95
|
-
session: <ase-session-id/>)` tool from the `ase` MCP
|
|
94
|
+
`-` character. Then call the `ase_task_id(id: <ase-task-id/>,
|
|
95
|
+
session: <ase-session-id/>)` tool from the `ase` MCP server to
|
|
96
96
|
implicitly switch the task. Do not output anything.
|
|
97
97
|
</if>
|
|
98
98
|
|
|
@@ -271,15 +271,15 @@ permitted way to persist artifacts is via `task_save(...)`.
|
|
|
271
271
|
You *MUST* *NOT* call `Edit`, `Write`, `NotebookEdit`, or any
|
|
272
272
|
filesystem-modifying tool during this step.
|
|
273
273
|
|
|
274
|
-
2. Call the `
|
|
275
|
-
`ase` MCP
|
|
274
|
+
2. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
275
|
+
`ase` MCP server and use the `text` field of its response for
|
|
276
276
|
<timestamp-created/> and <timestamp-modified/> information. Then
|
|
277
277
|
insert the current <ase-task-id/>, <timestamp-created/>, and
|
|
278
278
|
<timestamp-modified/> information and calculate the number of
|
|
279
279
|
words <words/> of <content/>.
|
|
280
280
|
|
|
281
281
|
3. You *MUST* *save* the resulting plan content with the
|
|
282
|
-
`
|
|
282
|
+
`ase_task_save(id: <ase-task-id/>, text: <content/>)`.
|
|
283
283
|
|
|
284
284
|
4. Output a hint with the following <template/>:
|
|
285
285
|
|
|
@@ -22,8 +22,10 @@ Explain Source Code
|
|
|
22
22
|
Explain Source Code
|
|
23
23
|
</skill>
|
|
24
24
|
|
|
25
|
+
<role>
|
|
25
26
|
Your role is an experienced, *expert-level software developer*,
|
|
26
27
|
specialized in *explaining source code*.
|
|
28
|
+
</role>
|
|
27
29
|
|
|
28
30
|
<objective>
|
|
29
31
|
*Analyze* the source code of $ARGUMENTS, and its directly related source
|
|
@@ -5,7 +5,7 @@ description: >
|
|
|
5
5
|
Give insights into the source code.
|
|
6
6
|
user-invocable: true
|
|
7
7
|
disable-model-invocation: false
|
|
8
|
-
effort:
|
|
8
|
+
effort: medium
|
|
9
9
|
allowed-tools:
|
|
10
10
|
- "Bash(git)"
|
|
11
11
|
- "Bash(sort)"
|
|
@@ -25,8 +25,10 @@ Project Insight
|
|
|
25
25
|
Project Insight
|
|
26
26
|
</skill>
|
|
27
27
|
|
|
28
|
+
<role>
|
|
28
29
|
Your role is an experienced, *expert-level software developer*,
|
|
29
30
|
specialized in *analyzing source code* and giving insights.
|
|
31
|
+
</role>
|
|
30
32
|
|
|
31
33
|
<objective>
|
|
32
34
|
Give *insights* into the project through the source code of $ARGUMENTS.
|
|
@@ -6,7 +6,7 @@ description: >
|
|
|
6
6
|
Use when the user wants to "lint" or "check" source code.
|
|
7
7
|
user-invocable: true
|
|
8
8
|
disable-model-invocation: false
|
|
9
|
-
effort:
|
|
9
|
+
effort: high
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
@@ -100,7 +100,7 @@ related to a set of code quality aspects.
|
|
|
100
100
|
|
|
101
101
|
3. <step id="STEP 3: Correction">
|
|
102
102
|
|
|
103
|
-
1. You *MUST* call the MCP tool `
|
|
103
|
+
1. You *MUST* call the MCP tool `ase_config_set(key: "agent.skill", val:
|
|
104
104
|
"ase-docs-proofread", scope: "session:<ase-session-id/>")` of the
|
|
105
105
|
`ase` MCP server. You *MUST* *NOT* output anything related to
|
|
106
106
|
this.
|
|
@@ -249,7 +249,7 @@ related to a set of code quality aspects.
|
|
|
249
249
|
|
|
250
250
|
</for>
|
|
251
251
|
|
|
252
|
-
3. You *MUST* call the MCP tool `
|
|
252
|
+
3. You *MUST* call the MCP tool `ase_config_delete(key: "agent.skill",
|
|
253
253
|
scope: "session:<ase-session-id/>")` of the `ase` MCP server.
|
|
254
254
|
You *MUST* *NOT* output anything related to this.
|
|
255
255
|
|