@rse/ase 0.9.45 → 0.9.46
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/package.json +3 -3
- 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/etc/stx.conf +6 -1
- package/plugin/meta/ase-dialog.md +2 -2
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +16 -2
- package/plugin/skills/ase-code-craft/help.md +5 -4
- package/plugin/skills/ase-code-refactor/SKILL.md +16 -2
- package/plugin/skills/ase-code-refactor/help.md +5 -4
- package/plugin/skills/ase-code-resolve/SKILL.md +16 -2
- package/plugin/skills/ase-code-resolve/help.md +6 -5
- package/plugin/skills/ase-meta-eli5/SKILL.md +116 -0
- package/plugin/skills/ase-meta-eli5/help.md +61 -0
- package/plugin/skills/ase-meta-intent/SKILL.md +157 -0
- package/plugin/skills/ase-meta-intent/help.md +56 -0
- package/plugin/skills/ase-meta-proximity/SKILL.md +224 -0
- package/plugin/skills/ase-meta-proximity/help.md +78 -0
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.46",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"commander": "15.0.0",
|
|
45
|
-
"@dotenvx/dotenvx": "2.
|
|
45
|
+
"@dotenvx/dotenvx": "2.17.2",
|
|
46
46
|
"yaml": "2.9.0",
|
|
47
47
|
"valibot": "1.4.2",
|
|
48
48
|
"execa": "10.0.0",
|
|
49
49
|
"mkdirp": "3.0.1",
|
|
50
|
-
"@hapi/hapi": "21.4.
|
|
50
|
+
"@hapi/hapi": "21.4.10",
|
|
51
51
|
"beautiful-mermaid": "1.1.3",
|
|
52
52
|
"cli-table3": "0.6.5",
|
|
53
53
|
"chalk": "5.6.2",
|
package/plugin/etc/stx.conf
CHANGED
|
@@ -11,7 +11,12 @@ lint
|
|
|
11
11
|
|
|
12
12
|
# [plugin] build project
|
|
13
13
|
build : lint
|
|
14
|
-
|
|
14
|
+
( for name in $(cd skills; ls -1 | grep -v ase-meta-intent | sort); do
|
|
15
|
+
echo "<skill name=\"$name\">"
|
|
16
|
+
cat skills/$name/help.md | sed -e '/^## SEE ALSO/,$d'
|
|
17
|
+
echo "</skill>"
|
|
18
|
+
done
|
|
19
|
+
) >skills/ase-meta-intent/data.md
|
|
15
20
|
|
|
16
21
|
# [plugin] remove all generated files
|
|
17
22
|
clean
|
|
@@ -50,7 +50,7 @@ following procedure:
|
|
|
50
50
|
excluding the question label on line 1, and stopping at the first missing line --
|
|
51
51
|
the same lines the entry loop below renders).
|
|
52
52
|
|
|
53
|
-
<for items="2 3 4 5 6 7 8 9">
|
|
53
|
+
<for items="2 3 4 5 6 7 8 9 10">
|
|
54
54
|
Take from <spec/> the line number <item/>.
|
|
55
55
|
If this line does not exist, <break/>.
|
|
56
56
|
If this line exists, parse it according to the format `<label/>: <description/>`.
|
|
@@ -103,7 +103,7 @@ following procedure:
|
|
|
103
103
|
</text>
|
|
104
104
|
|
|
105
105
|
If <n/> is less than 2:
|
|
106
|
-
Set <result>ERROR: custom-dialog requires 2-
|
|
106
|
+
Set <result>ERROR: custom-dialog requires 2-9 answer lines, got <n/></result>
|
|
107
107
|
and *SKIP* the following step 2.2 and continue with step 2.3 dispatch.
|
|
108
108
|
|
|
109
109
|
2. Output the following <template/>, end the current turn, wait for the
|
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.46",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -23,7 +23,7 @@ Craft Source Code
|
|
|
23
23
|
|
|
24
24
|
<expand name="getopt"
|
|
25
25
|
arg1="ase-code-craft"
|
|
26
|
-
arg2="--auto|-a --dry|-d --quick|-Q --next|-n=(none|DONE|EDIT|PREFLIGHT|IMPLEMENT)...">
|
|
26
|
+
arg2="--auto|-a --dry|-d --quick|-Q --next|-n=(none|DONE|EDIT|GRILL|PREFLIGHT|IMPLEMENT)...">
|
|
27
27
|
$ARGUMENTS
|
|
28
28
|
</expand>
|
|
29
29
|
|
|
@@ -303,7 +303,21 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
303
303
|
to *preflight* the freshly composed plan, bypassing `ase-task-edit`.
|
|
304
304
|
</elseif>
|
|
305
305
|
|
|
306
|
-
4. <
|
|
306
|
+
4. <elseif condition="<head/> is equal `GRILL`">
|
|
307
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
308
|
+
tokens (joined back with `,`, or `none` if empty). `GRILL`
|
|
309
|
+
is this skill's own dispatch token, *not* part of
|
|
310
|
+
`ase-task-grill`'s `--next` vocabulary, so it must be
|
|
311
|
+
stripped here rather than forwarded. All remaining tokens are
|
|
312
|
+
`ase-task-grill`'s own vocabulary and are forwarded verbatim.
|
|
313
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
314
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
315
|
+
</if>
|
|
316
|
+
Call the tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
|
|
317
|
+
to *grill* the freshly composed plan, bypassing `ase-task-edit`.
|
|
318
|
+
</elseif>
|
|
319
|
+
|
|
320
|
+
5. <else>
|
|
307
321
|
Hand off to `ase-task-edit`.
|
|
308
322
|
<if condition="<head/> is equal `EDIT`">
|
|
309
323
|
Consume the head: set <getopt-option-next/> to the remaining
|
|
@@ -50,15 +50,16 @@ plan via `ase_task_save` and then hands off to `ase-task-edit`,
|
|
|
50
50
|
`--next`|`-n` *option*[,...]:
|
|
51
51
|
Automatically choose the next step after composing the plan.
|
|
52
52
|
*option* is a single token or a *comma-separated chronological
|
|
53
|
-
list* of tokens; an `IMPLEMENT` or `
|
|
54
|
-
consumed by this skill (bypassing `ase-task-edit`), and any
|
|
53
|
+
list* of tokens; an `IMPLEMENT`, `PREFLIGHT`, or `GRILL` head token
|
|
54
|
+
is consumed by this skill (bypassing `ase-task-edit`), and any
|
|
55
55
|
remaining tokens are *forwarded* (via `--next`) to the downstream
|
|
56
56
|
skill. For all other head tokens, the *entire* list is forwarded
|
|
57
57
|
to `ase-task-edit`, which consumes its head itself. This lets an
|
|
58
58
|
entire pipeline be pre-scripted in one shot. Recognized tokens at
|
|
59
59
|
this skill: `none` (default, hand-off to `ase-task-edit`
|
|
60
60
|
interactively), `DONE` (stop), `EDIT` (hand off to
|
|
61
|
-
`ase-task-edit`), `
|
|
61
|
+
`ase-task-edit`), `GRILL` (hand off to `ase-task-grill`),
|
|
62
|
+
`PREFLIGHT` (hand off to `ase-task-preflight`),
|
|
62
63
|
or `IMPLEMENT` (hand off to `ase-task-implement`). Example:
|
|
63
64
|
`--next PREFLIGHT,IMPLEMENT,DONE` crafts the plan, preflights it,
|
|
64
65
|
implements it, and exits without further dialog.
|
|
@@ -87,4 +88,4 @@ Craft a feature under a named task and directly hand off to implementation:
|
|
|
87
88
|
## SEE ALSO
|
|
88
89
|
|
|
89
90
|
[`ase-code-refactor`](../ase-code-refactor/help.md), [`ase-code-resolve`](../ase-code-resolve/help.md), [`ase-task-edit`](../ase-task-edit/help.md),
|
|
90
|
-
[`ase-task-preflight`](../ase-task-preflight/help.md), [`ase-task-implement`](../ase-task-implement/help.md).
|
|
91
|
+
[`ase-task-grill`](../ase-task-grill/help.md), [`ase-task-preflight`](../ase-task-preflight/help.md), [`ase-task-implement`](../ase-task-implement/help.md).
|
|
@@ -23,7 +23,7 @@ Refactor Source Code
|
|
|
23
23
|
|
|
24
24
|
<expand name="getopt"
|
|
25
25
|
arg1="ase-code-refactor"
|
|
26
|
-
arg2="--auto|-a --dry|-d --quick|-Q --next|-n=(none|DONE|EDIT|PREFLIGHT|IMPLEMENT)...">
|
|
26
|
+
arg2="--auto|-a --dry|-d --quick|-Q --next|-n=(none|DONE|EDIT|GRILL|PREFLIGHT|IMPLEMENT)...">
|
|
27
27
|
$ARGUMENTS
|
|
28
28
|
</expand>
|
|
29
29
|
|
|
@@ -303,7 +303,21 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
303
303
|
to *preflight* the freshly composed plan, bypassing `ase-task-edit`.
|
|
304
304
|
</elseif>
|
|
305
305
|
|
|
306
|
-
4. <
|
|
306
|
+
4. <elseif condition="<head/> is equal `GRILL`">
|
|
307
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
308
|
+
tokens (joined back with `,`, or `none` if empty). `GRILL`
|
|
309
|
+
is this skill's own dispatch token, *not* part of
|
|
310
|
+
`ase-task-grill`'s `--next` vocabulary, so it must be
|
|
311
|
+
stripped here rather than forwarded. All remaining tokens are
|
|
312
|
+
`ase-task-grill`'s own vocabulary and are forwarded verbatim.
|
|
313
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
314
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
315
|
+
</if>
|
|
316
|
+
Call the tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
|
|
317
|
+
to *grill* the freshly composed plan, bypassing `ase-task-edit`.
|
|
318
|
+
</elseif>
|
|
319
|
+
|
|
320
|
+
5. <else>
|
|
307
321
|
Hand off to `ase-task-edit`.
|
|
308
322
|
<if condition="<head/> is equal `EDIT`">
|
|
309
323
|
Consume the head: set <getopt-option-next/> to the remaining
|
|
@@ -50,15 +50,16 @@ plan via `ase_task_save` and then hands off to `ase-task-edit`,
|
|
|
50
50
|
`--next`|`-n` *option*[,...]:
|
|
51
51
|
Automatically choose the next step after composing the plan.
|
|
52
52
|
*option* is a single token or a *comma-separated chronological
|
|
53
|
-
list* of tokens; an `IMPLEMENT` or `
|
|
54
|
-
consumed by this skill (bypassing `ase-task-edit`), and any
|
|
53
|
+
list* of tokens; an `IMPLEMENT`, `PREFLIGHT`, or `GRILL` head token
|
|
54
|
+
is consumed by this skill (bypassing `ase-task-edit`), and any
|
|
55
55
|
remaining tokens are *forwarded* (via `--next`) to the downstream
|
|
56
56
|
skill. For all other head tokens, the *entire* list is forwarded
|
|
57
57
|
to `ase-task-edit`, which consumes its head itself. This lets an
|
|
58
58
|
entire pipeline be pre-scripted in one shot. Recognized tokens at
|
|
59
59
|
this skill: `none` (default, hand off to `ase-task-edit`
|
|
60
60
|
interactively), `DONE` (stop), `EDIT` (hand off to
|
|
61
|
-
`ase-task-edit`), `
|
|
61
|
+
`ase-task-edit`), `GRILL` (hand off to `ase-task-grill`),
|
|
62
|
+
`PREFLIGHT` (hand off to `ase-task-preflight`),
|
|
62
63
|
or `IMPLEMENT` (hand off to `ase-task-implement`). Example:
|
|
63
64
|
`--next PREFLIGHT,IMPLEMENT,DONE` refactors, preflights, implements,
|
|
64
65
|
and exits without further dialog.
|
|
@@ -87,4 +88,4 @@ Refactor under a named task and directly hand off to implementation:
|
|
|
87
88
|
## SEE ALSO
|
|
88
89
|
|
|
89
90
|
[`ase-code-craft`](../ase-code-craft/help.md), [`ase-code-resolve`](../ase-code-resolve/help.md), [`ase-task-edit`](../ase-task-edit/help.md),
|
|
90
|
-
[`ase-task-preflight`](../ase-task-preflight/help.md), [`ase-task-implement`](../ase-task-implement/help.md).
|
|
91
|
+
[`ase-task-grill`](../ase-task-grill/help.md), [`ase-task-preflight`](../ase-task-preflight/help.md), [`ase-task-implement`](../ase-task-implement/help.md).
|
|
@@ -23,7 +23,7 @@ Resolve Problem
|
|
|
23
23
|
|
|
24
24
|
<expand name="getopt"
|
|
25
25
|
arg1="ase-code-resolve"
|
|
26
|
-
arg2="--auto|-a --dry|-d --quick|-Q --next|-n=(none|DONE|EDIT|PREFLIGHT|IMPLEMENT)...">
|
|
26
|
+
arg2="--auto|-a --dry|-d --quick|-Q --next|-n=(none|DONE|EDIT|GRILL|PREFLIGHT|IMPLEMENT)...">
|
|
27
27
|
$ARGUMENTS
|
|
28
28
|
</expand>
|
|
29
29
|
|
|
@@ -364,7 +364,21 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
364
364
|
to *preflight* the freshly composed plan, bypassing `ase-task-edit`.
|
|
365
365
|
</elseif>
|
|
366
366
|
|
|
367
|
-
4. <
|
|
367
|
+
4. <elseif condition="<head/> is equal `GRILL`">
|
|
368
|
+
Consume the head: set <getopt-option-next/> to the remaining
|
|
369
|
+
tokens (joined back with `,`, or `none` if empty). `GRILL`
|
|
370
|
+
is this skill's own dispatch token, *not* part of
|
|
371
|
+
`ase-task-grill`'s `--next` vocabulary, so it must be
|
|
372
|
+
stripped here rather than forwarded. All remaining tokens are
|
|
373
|
+
`ase-task-grill`'s own vocabulary and are forwarded verbatim.
|
|
374
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
375
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
376
|
+
</if>
|
|
377
|
+
Call the tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
|
|
378
|
+
to *grill* the freshly composed plan, bypassing `ase-task-edit`.
|
|
379
|
+
</elseif>
|
|
380
|
+
|
|
381
|
+
5. <else>
|
|
368
382
|
Hand off to `ase-task-edit`.
|
|
369
383
|
<if condition="<head/> is equal `EDIT`">
|
|
370
384
|
Consume the head: set <getopt-option-next/> to the remaining
|
|
@@ -55,15 +55,16 @@ plan via `ase_task_save` and then hands off to `ase-task-edit`,
|
|
|
55
55
|
`--next`|`-n` *option*[,...]:
|
|
56
56
|
Automatically choose the next step after composing the plan.
|
|
57
57
|
*option* is a single token or a *comma-separated chronological
|
|
58
|
-
list* of tokens; an `IMPLEMENT` or `
|
|
59
|
-
consumed by this skill (bypassing `ase-task-edit`), and any
|
|
58
|
+
list* of tokens; an `IMPLEMENT`, `PREFLIGHT`, or `GRILL` head token
|
|
59
|
+
is consumed by this skill (bypassing `ase-task-edit`), and any
|
|
60
60
|
remaining tokens are *forwarded* (via `--next`) to the downstream
|
|
61
61
|
skill. For all other head tokens, the *entire* list is forwarded
|
|
62
62
|
to `ase-task-edit`, which consumes its head itself. This lets an
|
|
63
63
|
entire pipeline be pre-scripted in one shot. Recognized tokens at
|
|
64
64
|
this skill: `none` (default, hand off to `ase-task-edit`
|
|
65
65
|
interactively), `DONE` (stop), `EDIT` (hand off to
|
|
66
|
-
`ase-task-edit`), `
|
|
66
|
+
`ase-task-edit`), `GRILL` (hand off to `ase-task-grill`),
|
|
67
|
+
`PREFLIGHT` (hand off to `ase-task-preflight`),
|
|
67
68
|
or `IMPLEMENT` (hand off to `ase-task-implement`). Example:
|
|
68
69
|
`--next IMPLEMENT,DONE` resolves the problem, implements it, and
|
|
69
70
|
exits without further dialog.
|
|
@@ -93,5 +94,5 @@ Resolve a previously analyzed issue and hand off to implementation:
|
|
|
93
94
|
## SEE ALSO
|
|
94
95
|
|
|
95
96
|
[`ase-code-craft`](../ase-code-craft/help.md), [`ase-code-refactor`](../ase-code-refactor/help.md), [`ase-code-analyze`](../ase-code-analyze/help.md),
|
|
96
|
-
[`ase-arch-analyze`](../ase-arch-analyze/help.md), [`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-
|
|
97
|
-
[`ase-task-implement`](../ase-task-implement/help.md).
|
|
97
|
+
[`ase-arch-analyze`](../ase-arch-analyze/help.md), [`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-grill`](../ase-task-grill/help.md),
|
|
98
|
+
[`ase-task-preflight`](../ase-task-preflight/help.md), [`ase-task-implement`](../ase-task-implement/help.md).
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-meta-eli5
|
|
3
|
+
argument-hint: "[--help|-h] [--ground|-g] <topic>"
|
|
4
|
+
description: >
|
|
5
|
+
Explain a topic in "Explain Like I'm 5" (ELI5) style, optionally
|
|
6
|
+
grounded in Internet/Web facts. Use when the user wants a topic
|
|
7
|
+
explained in a very simple, child-friendly way, or mentions "eli5"
|
|
8
|
+
or "explain like I'm 5".
|
|
9
|
+
user-invocable: true
|
|
10
|
+
disable-model-invocation: false
|
|
11
|
+
effort: high
|
|
12
|
+
allowed-tools:
|
|
13
|
+
- "Agent"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
17
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
18
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
19
|
+
|
|
20
|
+
<skill name="ase-meta-eli5">
|
|
21
|
+
Explain a Topic Like I'm 5
|
|
22
|
+
</skill>
|
|
23
|
+
|
|
24
|
+
<expand name="getopt"
|
|
25
|
+
arg1="ase-meta-eli5"
|
|
26
|
+
arg2="--ground|-g">
|
|
27
|
+
$ARGUMENTS
|
|
28
|
+
</expand>
|
|
29
|
+
|
|
30
|
+
<objective>
|
|
31
|
+
*Explain* the following topic in "Explain Like I'm 5" (ELI5) style,
|
|
32
|
+
so that even a five year old child could understand it:
|
|
33
|
+
<topic><getopt-arguments/></topic>
|
|
34
|
+
</objective>
|
|
35
|
+
|
|
36
|
+
<flow>
|
|
37
|
+
|
|
38
|
+
1. <step id="STEP 1: Check Topic">
|
|
39
|
+
|
|
40
|
+
<if condition="<topic/> is empty">
|
|
41
|
+
Only output the following <template/> and then immediately *STOP*
|
|
42
|
+
processing the entire current skill:
|
|
43
|
+
|
|
44
|
+
<template>
|
|
45
|
+
⧉ **ASE**: ✪ skill: **ase-meta-eli5**, ▶ ERROR: expected a `<topic>` argument
|
|
46
|
+
</template>
|
|
47
|
+
</if>
|
|
48
|
+
|
|
49
|
+
Set <facts></facts> (set to empty)
|
|
50
|
+
|
|
51
|
+
</step>
|
|
52
|
+
|
|
53
|
+
2. <step id="STEP 2: Ground Topic" condition="<getopt-option-ground/> is equal `true`">
|
|
54
|
+
|
|
55
|
+
Use the `ase-meta-search` skill in a sub-agent to gather facts
|
|
56
|
+
about the <topic/>: call the tool...
|
|
57
|
+
|
|
58
|
+
`Agent(
|
|
59
|
+
description: "Query Web Search Service",
|
|
60
|
+
subagent_type: "ase:ase-meta-search",
|
|
61
|
+
prompt: "Search the Internet/Web and gather facts about the following topic: <topic/>",
|
|
62
|
+
run_in_background: false
|
|
63
|
+
)`
|
|
64
|
+
|
|
65
|
+
...and store the returned facts in <facts/>.
|
|
66
|
+
|
|
67
|
+
<if condition="<facts/> contains no usable facts about <topic/>">
|
|
68
|
+
|
|
69
|
+
Set <facts></facts> (set facts to empty), so the explanation below
|
|
70
|
+
falls back to model knowledge, and output the following <template/>:
|
|
71
|
+
|
|
72
|
+
<template>
|
|
73
|
+
<ase-tpl-bullet-secondary/> **WARNING**: grounding found no usable facts -- falling back to model knowledge.
|
|
74
|
+
</template>
|
|
75
|
+
|
|
76
|
+
</if>
|
|
77
|
+
|
|
78
|
+
</step>
|
|
79
|
+
|
|
80
|
+
3. <step id="STEP 3: Explain Topic">
|
|
81
|
+
|
|
82
|
+
Explain the <topic/> in "Explain Like I'm 5" (ELI5) style: use
|
|
83
|
+
*simple*, *jargon-free* wording a five year old child could
|
|
84
|
+
understand -- short sentences, everyday words, and familiar images.
|
|
85
|
+
Do *not* use technical terms without immediately putting them into
|
|
86
|
+
child-friendly words.
|
|
87
|
+
|
|
88
|
+
<if condition="<facts/> is not empty">
|
|
89
|
+
Ground the explanation in the facts of <facts/> and do not
|
|
90
|
+
contradict them.
|
|
91
|
+
</if>
|
|
92
|
+
|
|
93
|
+
For this, first, explain *WHAT* the topic is and store it in
|
|
94
|
+
<what/>. Second, give an *ANALOGY* by comparing the topic to
|
|
95
|
+
something from the everyday life of a child and store this in
|
|
96
|
+
<analogy/>. Third, explain *WHY* the topic matters and store this in
|
|
97
|
+
<why/>.
|
|
98
|
+
|
|
99
|
+
Ensure that each of <what/>, <analogy/>, and <why/> is a *very
|
|
100
|
+
brief* and *concise* single text paragraph.
|
|
101
|
+
|
|
102
|
+
Output the result with the following <template/>:
|
|
103
|
+
|
|
104
|
+
<template>
|
|
105
|
+
<ase-tpl-bullet-secondary/> **TOPIC**: **<topic/>**
|
|
106
|
+
|
|
107
|
+
<ase-tpl-bullet-normal/> **WHAT**: <what/>.
|
|
108
|
+
|
|
109
|
+
<ase-tpl-bullet-normal/> **ANALOGY**: <analogy/>.
|
|
110
|
+
|
|
111
|
+
<ase-tpl-bullet-signal/> **WHY**: <why/>.
|
|
112
|
+
</template>
|
|
113
|
+
|
|
114
|
+
</step>
|
|
115
|
+
|
|
116
|
+
</flow>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-meta-eli5` - Explain a Topic Like I'm 5
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-meta-eli5`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
[`--ground`|`-g`]
|
|
11
|
+
*topic*
|
|
12
|
+
|
|
13
|
+
## DESCRIPTION
|
|
14
|
+
|
|
15
|
+
The `ase-meta-eli5` skill explains the supplied *topic* in "Explain
|
|
16
|
+
Like I'm 5" (ELI5) style, so that even a five year old child could
|
|
17
|
+
understand it. The explanation uses simple, jargon-free wording --
|
|
18
|
+
short sentences, everyday words, and familiar images -- and is
|
|
19
|
+
structured into three labeled blocks: *WHAT* (a plain-words summary),
|
|
20
|
+
*ANALOGY* (a concrete everyday-life comparison), and *WHY* (why the
|
|
21
|
+
topic matters), each kept brief with 1-3 bullet points.
|
|
22
|
+
|
|
23
|
+
By default the explanation is derived from model knowledge only. With
|
|
24
|
+
the `--ground`/`-g` option, the skill first searches the Internet/Web
|
|
25
|
+
for facts about the topic via the `ase-meta-search` skill (dispatched
|
|
26
|
+
in a sub-agent, querying all available search backends) and grounds
|
|
27
|
+
the explanation in the found facts. If the grounding yields no usable
|
|
28
|
+
facts, a warning is emitted and the explanation falls back to model
|
|
29
|
+
knowledge.
|
|
30
|
+
|
|
31
|
+
## OPTIONS
|
|
32
|
+
|
|
33
|
+
`--ground`|`-g`:
|
|
34
|
+
Ground the explanation in Internet/Web facts gathered via the
|
|
35
|
+
`ase-meta-search` skill before explaining. Without this option,
|
|
36
|
+
the explanation is derived from model knowledge only.
|
|
37
|
+
|
|
38
|
+
## ARGUMENTS
|
|
39
|
+
|
|
40
|
+
*topic*:
|
|
41
|
+
The topic to be explained. It may be a technical concept, a
|
|
42
|
+
phenomenon, or any other subject; the skill explains it in a
|
|
43
|
+
child-friendly way.
|
|
44
|
+
|
|
45
|
+
## EXAMPLES
|
|
46
|
+
|
|
47
|
+
Explain a technical concept from model knowledge:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
❯ /ase-meta-eli5 What is a Fourier transform?
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Explain a recent topic grounded in Internet/Web facts:
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
❯ /ase-meta-eli5 --ground What is Agentic Software Engineering?
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## SEE ALSO
|
|
60
|
+
|
|
61
|
+
[`ase-code-explain`](../ase-code-explain/help.md), [`ase-meta-search`](../ase-meta-search/help.md), [`ase-docs-distill`](../ase-docs-distill/help.md).
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-meta-intent
|
|
3
|
+
argument-hint: "[--help|-h] <intent>"
|
|
4
|
+
description: >
|
|
5
|
+
Match a free-text intent against the accumulated help of all ASE
|
|
6
|
+
skills, generate the single best-fitting `/ase:ase-xxx-xxx` command
|
|
7
|
+
with concrete options and arguments, and let the user execute it,
|
|
8
|
+
refine the intent, or cancel. Use when the user knows what they want
|
|
9
|
+
but not which skill or flags realize it, or mentions "intent" or
|
|
10
|
+
requests "help".
|
|
11
|
+
user-invocable: true
|
|
12
|
+
disable-model-invocation: false
|
|
13
|
+
effort: high
|
|
14
|
+
allowed-tools:
|
|
15
|
+
- "Skill"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
19
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
20
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
21
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
22
|
+
|
|
23
|
+
<skill name="ase-meta-intent">
|
|
24
|
+
Match an Intent to an ASE Command
|
|
25
|
+
</skill>
|
|
26
|
+
|
|
27
|
+
<expand name="getopt"
|
|
28
|
+
arg1="ase-meta-intent"
|
|
29
|
+
arg2="">
|
|
30
|
+
$ARGUMENTS
|
|
31
|
+
</expand>
|
|
32
|
+
|
|
33
|
+
<objective>
|
|
34
|
+
*Match* the following free-text intent against the accumulated help of
|
|
35
|
+
all ASE skills and *generate* the single best-fitting `/ase:ase-xxx-xxx`
|
|
36
|
+
command that realizes it:
|
|
37
|
+
<intent><getopt-arguments/></intent>
|
|
38
|
+
</objective>
|
|
39
|
+
|
|
40
|
+
The following <corpus/> is the *accumulated help* of all ASE skills --
|
|
41
|
+
the concatenation of every skill's `help.md` file -- and is the *sole*
|
|
42
|
+
catalog you match <intent/> against:
|
|
43
|
+
|
|
44
|
+
<corpus>
|
|
45
|
+
@${CLAUDE_SKILL_DIR}/data.md
|
|
46
|
+
</corpus>
|
|
47
|
+
|
|
48
|
+
<flow>
|
|
49
|
+
|
|
50
|
+
1. <step id="STEP 1: Check Intent">
|
|
51
|
+
|
|
52
|
+
<if condition="<intent/> is empty">
|
|
53
|
+
Only output the following <template/> and then immediately *STOP*
|
|
54
|
+
processing the entire current skill:
|
|
55
|
+
|
|
56
|
+
<template>
|
|
57
|
+
⧉ **ASE**: ✪ skill: **ase-meta-intent**, ▶ ERROR: expected a `<intent>` argument
|
|
58
|
+
</template>
|
|
59
|
+
</if>
|
|
60
|
+
|
|
61
|
+
</step>
|
|
62
|
+
|
|
63
|
+
2. <step id="STEP 2: Match Intent and Dialog">
|
|
64
|
+
|
|
65
|
+
*REPEAT* the following sub-steps in a *LOOP* until the user either
|
|
66
|
+
*executes* the generated command or *cancels* the dialog in sub-step 4:
|
|
67
|
+
|
|
68
|
+
1. *Match Intent*:
|
|
69
|
+
|
|
70
|
+
Match the current <intent/> against the <corpus/> and select the
|
|
71
|
+
*single* best-fitting skill. From that skill's `## SYNOPSIS`,
|
|
72
|
+
`## OPTIONS`, and `## ARGUMENTS` sections in <corpus/>,
|
|
73
|
+
*generate* a concrete command that realizes <intent/>:
|
|
74
|
+
|
|
75
|
+
- Set <name/> to the selected skill's name (e.g. `ase-code-lint`).
|
|
76
|
+
- Set <arguments/> to the concrete option flags and positional
|
|
77
|
+
arguments -- derived from the skill's `## OPTIONS` and
|
|
78
|
+
`## ARGUMENTS` -- that best realize <intent/> (may be empty).
|
|
79
|
+
- Set <command>/ase:<name/> <arguments/></command> (the full
|
|
80
|
+
command line, with surplus inner spaces collapsed).
|
|
81
|
+
- Set <rationale/> to a *very brief*, single-sentence
|
|
82
|
+
justification of why the selected skill and its options match
|
|
83
|
+
<intent/>.
|
|
84
|
+
|
|
85
|
+
2. *Guard No Match*:
|
|
86
|
+
|
|
87
|
+
<if condition="no skill in <corpus/> adequately matches <intent/>">
|
|
88
|
+
Output the following <template/> and then *continue* the *loop*
|
|
89
|
+
at sub-step 4 to prompt the user for a refined or clearer intent
|
|
90
|
+
via the dialog's free-text channel (do *not* stop and do *not*
|
|
91
|
+
render a command):
|
|
92
|
+
|
|
93
|
+
<template>
|
|
94
|
+
<ase-tpl-bullet-secondary/> **WARNING**: no confident match for the intent -- please refine or clarify it.
|
|
95
|
+
</template>
|
|
96
|
+
</if>
|
|
97
|
+
|
|
98
|
+
3. *Render Command*:
|
|
99
|
+
|
|
100
|
+
Output the generated command with the following <template/>:
|
|
101
|
+
|
|
102
|
+
<template>
|
|
103
|
+
<ase-tpl-head title="SKILL COMMAND PROPOSAL"/>
|
|
104
|
+
|
|
105
|
+
● **INTENT**:
|
|
106
|
+
○ <intent/>
|
|
107
|
+
|
|
108
|
+
● **COMMAND**:
|
|
109
|
+
⌘ `<command/>`
|
|
110
|
+
|
|
111
|
+
● **RATIONALE**:
|
|
112
|
+
○ <rationale/>
|
|
113
|
+
|
|
114
|
+
<ase-tpl-foot title="SKILL COMMAND PROPOSAL"/>
|
|
115
|
+
</template>
|
|
116
|
+
|
|
117
|
+
4. *Dispatch Command*:
|
|
118
|
+
|
|
119
|
+
In the following, you *MUST* *NOT* use your built-in
|
|
120
|
+
<user-dialog-tool/> tool! Instead, you *MUST* just show a custom
|
|
121
|
+
dialog according to the expanded `custom-dialog` definition. You
|
|
122
|
+
*MUST* closely follow this definition.
|
|
123
|
+
|
|
124
|
+
Let the user decide what to do with the generated command by
|
|
125
|
+
raising a question with the following custom dialog (invoked with
|
|
126
|
+
`--other`, so that any free-text instruction is accepted as an
|
|
127
|
+
intent refinement):
|
|
128
|
+
|
|
129
|
+
<expand name="custom-dialog" arg1="--other">
|
|
130
|
+
Dispatch: What would you like to do with the generated command?
|
|
131
|
+
EXECUTE: Execute the generated command now.
|
|
132
|
+
CANCEL: Cancel this dialog.
|
|
133
|
+
</expand>
|
|
134
|
+
|
|
135
|
+
Check the tool <result/> and dispatch accordingly:
|
|
136
|
+
|
|
137
|
+
- If <result/> is `CANCEL`:
|
|
138
|
+
*Break* out of the *loop* and stop processing without any
|
|
139
|
+
further output.
|
|
140
|
+
|
|
141
|
+
- If <result/> is `EXECUTE`:
|
|
142
|
+
*Break* out of the *loop*, output the following <template/>,
|
|
143
|
+
and then call the tool `Skill(skill: "ase:<name/>", args:
|
|
144
|
+
"<arguments/>")` to *execute* the generated command:
|
|
145
|
+
|
|
146
|
+
<template>
|
|
147
|
+
⧉ **ASE**: ◉ intent: **<intent/>**, ⌘ command: **<command/>**, ▶ status: **command executing**
|
|
148
|
+
</template>
|
|
149
|
+
|
|
150
|
+
- If <result/> matches `OTHER: <text/>`:
|
|
151
|
+
Set <intent><intent/> <text/></intent> (fold the free-text
|
|
152
|
+
instruction into the intent). Then you *MUST* *continue* the
|
|
153
|
+
*loop* at sub-step **2.1** to re-match the refined intent.
|
|
154
|
+
|
|
155
|
+
</step>
|
|
156
|
+
|
|
157
|
+
</flow>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-meta-intent` - Match an Intent to an ASE Command
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-meta-intent`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
*intent*
|
|
11
|
+
|
|
12
|
+
## DESCRIPTION
|
|
13
|
+
|
|
14
|
+
The `ase-meta-intent` skill matches a free-text *intent* against the
|
|
15
|
+
*accumulated help* of all ASE skills -- the concatenation of every
|
|
16
|
+
skill's `help.md` file into `skills/ase-meta-intent/data.md`, built by
|
|
17
|
+
`npm start build` in `plugin/` -- and generates the *single* best-fitting
|
|
18
|
+
`/ase:ase-xxx-xxx` command that realizes the intent, complete with
|
|
19
|
+
concrete option flags and positional arguments derived from the selected
|
|
20
|
+
skill's `SYNOPSIS`, `OPTIONS`, and `ARGUMENTS`.
|
|
21
|
+
|
|
22
|
+
The generated command is presented together with a brief rationale in an
|
|
23
|
+
interactive dialog. The dialog lets the user *execute* the command (which
|
|
24
|
+
dispatches the target skill via its generated arguments), *cancel* the
|
|
25
|
+
operation, or *refine* the intent by typing any free-text instruction --
|
|
26
|
+
the instruction is folded into the intent and the best-fitting command is
|
|
27
|
+
re-matched and re-rendered. If no skill confidently matches the intent, a
|
|
28
|
+
warning is emitted and the user is prompted to refine or clarify it.
|
|
29
|
+
|
|
30
|
+
The skill exposes *no* option flags beyond `--help`/`-h`; it is driven
|
|
31
|
+
entirely through the intent argument and the interactive dialog.
|
|
32
|
+
|
|
33
|
+
## ARGUMENTS
|
|
34
|
+
|
|
35
|
+
*intent*:
|
|
36
|
+
The free-text intent to be realized. It describes *what* the user
|
|
37
|
+
wants to achieve; the skill determines *which* ASE skill and *which*
|
|
38
|
+
options and arguments realize it.
|
|
39
|
+
|
|
40
|
+
## EXAMPLES
|
|
41
|
+
|
|
42
|
+
Route an intent to the matching command and pick from the dialog:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
❯ /ase-meta-intent lint the TypeScript sources for high-severity issues only
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Route a planning intent to the matching command:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
❯ /ase-meta-intent explain how the authentication module works
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## SEE ALSO
|
|
55
|
+
|
|
56
|
+
[`ase-meta-proximity`](../ase-meta-proximity/help.md), [`ase-meta-search`](../ase-meta-search/help.md), [`ase-code-craft`](../ase-code-craft/help.md).
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-meta-proximity
|
|
3
|
+
argument-hint: "[--help|-h] [--ground|-g] [--loop|-l] <topic>"
|
|
4
|
+
description: >
|
|
5
|
+
Determine the conceptual proximity of a topic -- its parent topic,
|
|
6
|
+
its most relevant sibling topics, and its most relevant child
|
|
7
|
+
topics -- optionally grounded in Internet/Web facts and optionally
|
|
8
|
+
navigable in an interactive loop. Use when the user wants to explore
|
|
9
|
+
the conceptual neighborhood of a topic, or mentions "proximity" or
|
|
10
|
+
"related topics".
|
|
11
|
+
user-invocable: true
|
|
12
|
+
disable-model-invocation: false
|
|
13
|
+
effort: high
|
|
14
|
+
allowed-tools:
|
|
15
|
+
- "Agent"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
19
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
20
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
21
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
22
|
+
|
|
23
|
+
<skill name="ase-meta-proximity">
|
|
24
|
+
Determine the Conceptual Proximity of a Topic
|
|
25
|
+
</skill>
|
|
26
|
+
|
|
27
|
+
<expand name="getopt"
|
|
28
|
+
arg1="ase-meta-proximity"
|
|
29
|
+
arg2="--ground|-g --loop|-l">
|
|
30
|
+
$ARGUMENTS
|
|
31
|
+
</expand>
|
|
32
|
+
|
|
33
|
+
<objective>
|
|
34
|
+
*Determine* the *conceptual proximity* of the following topic -- its
|
|
35
|
+
*parent* topic, its most relevant *sibling* topics, and its most
|
|
36
|
+
relevant *child* topics:
|
|
37
|
+
<topic><getopt-arguments/></topic>
|
|
38
|
+
</objective>
|
|
39
|
+
|
|
40
|
+
<define name="gather-facts">
|
|
41
|
+
<if condition="<getopt-option-ground/> is equal `true`">
|
|
42
|
+
Set <prompt>Search the Internet/Web and gather facts about
|
|
43
|
+
<arg1/></prompt>.
|
|
44
|
+
|
|
45
|
+
Then use the `ase-meta-search` skill in a sub-agent to gather facts with
|
|
46
|
+
the following tool call and store the returned facts in the placeholder
|
|
47
|
+
named `<arg2/>`:
|
|
48
|
+
|
|
49
|
+
`Agent(
|
|
50
|
+
description: "Query Web Search Service",
|
|
51
|
+
subagent_type: "ase:ase-meta-search",
|
|
52
|
+
prompt: "<prompt/>",
|
|
53
|
+
run_in_background: false
|
|
54
|
+
)`
|
|
55
|
+
|
|
56
|
+
<if condition="the placeholder named `<arg2/>` contains no usable facts">
|
|
57
|
+
Set the placeholder named `<arg2/>` to empty, so the determination below
|
|
58
|
+
falls back to model knowledge, and output the following <template/>:
|
|
59
|
+
|
|
60
|
+
<template>
|
|
61
|
+
<ase-tpl-bullet-secondary/> **WARNING**: grounding found no usable facts -- falling back to model knowledge.
|
|
62
|
+
</template>
|
|
63
|
+
</if>
|
|
64
|
+
</if>
|
|
65
|
+
<else>
|
|
66
|
+
Use the model's world knowledge and determine facts about <arg1/> and
|
|
67
|
+
store those facts in the placeholder named `<arg2/>`.
|
|
68
|
+
</else>
|
|
69
|
+
</define>
|
|
70
|
+
|
|
71
|
+
<flow>
|
|
72
|
+
|
|
73
|
+
1. <step id="STEP 1: Check Topic">
|
|
74
|
+
|
|
75
|
+
<if condition="<topic/> is empty">
|
|
76
|
+
Only output the following <template/> and then immediately *STOP*
|
|
77
|
+
processing the entire current skill:
|
|
78
|
+
|
|
79
|
+
<template>
|
|
80
|
+
⧉ **ASE**: ✪ skill: **ase-meta-proximity**, ▶ ERROR: expected a `<topic>` argument
|
|
81
|
+
</template>
|
|
82
|
+
</if>
|
|
83
|
+
|
|
84
|
+
</step>
|
|
85
|
+
|
|
86
|
+
2. <step id="STEP 2: Explore Proximity">
|
|
87
|
+
|
|
88
|
+
*REPEAT* the following sub-steps in a *LOOP* until either
|
|
89
|
+
<getopt-option-loop/> is *not* equal `true` (then the loop runs
|
|
90
|
+
exactly *once* and stops after rendering), or the user declines/cancels
|
|
91
|
+
the dialog in sub-step 5:
|
|
92
|
+
|
|
93
|
+
1. *Determine Topic*:
|
|
94
|
+
|
|
95
|
+
Determine the canonical name of the central *topic* which is stored
|
|
96
|
+
in <topic/>.
|
|
97
|
+
|
|
98
|
+
<expand name="gather-facts"
|
|
99
|
+
arg1="the following topic: <topic/>"
|
|
100
|
+
arg2="facts-topic"></expand>
|
|
101
|
+
|
|
102
|
+
Ground the determination of the canonical name of the topic
|
|
103
|
+
<topic/> in the facts of <facts-topic/> and do not contradict
|
|
104
|
+
them. Update <topic/> accordingly.
|
|
105
|
+
|
|
106
|
+
2. *Determine Proximity*:
|
|
107
|
+
|
|
108
|
+
Determine the *conceptual proximity* of the current <topic/>
|
|
109
|
+
along three *dimensions*:
|
|
110
|
+
|
|
111
|
+
- **PARENT**:
|
|
112
|
+
|
|
113
|
+
The single most relevant *parent* topic (the broader topic
|
|
114
|
+
that <topic/> is a specialization of), which will be stored
|
|
115
|
+
in <parent/>.
|
|
116
|
+
|
|
117
|
+
<expand name="gather-facts"
|
|
118
|
+
arg1="the PARENT topic (the broader topic that the given topic is a specialization of) of the following topic: <topic/>"
|
|
119
|
+
arg2="facts-parent"></expand>
|
|
120
|
+
|
|
121
|
+
Ground the determination of the canonical name of the parent
|
|
122
|
+
topic <parent/> in the facts of <facts-parent/> and do not
|
|
123
|
+
contradict them.
|
|
124
|
+
|
|
125
|
+
- **SIBLINGS**:
|
|
126
|
+
|
|
127
|
+
The *four* most relevant *sibling* topics (topics on the
|
|
128
|
+
same level that share the same parent), which will be stored
|
|
129
|
+
in <sibling-1/> to <sibling-4/>.
|
|
130
|
+
|
|
131
|
+
<expand name="gather-facts"
|
|
132
|
+
arg1="the SIBLING topics (topics on the same level that share the same parent) of the following topic: <topic/>"
|
|
133
|
+
arg2="facts-siblings"></expand>
|
|
134
|
+
|
|
135
|
+
Ground the determination of the canonical names of the most
|
|
136
|
+
relevant sibling topics <sibling-1/> to <sibling-4/> in the
|
|
137
|
+
facts of <facts-siblings/> and do not contradict them.
|
|
138
|
+
|
|
139
|
+
- **CHILDREN**:
|
|
140
|
+
|
|
141
|
+
The *four* most relevant *children* topics (narrower topics
|
|
142
|
+
that are specializations of <topic/>), stored in <child-1/>
|
|
143
|
+
to <child-4/>.
|
|
144
|
+
|
|
145
|
+
<expand name="gather-facts"
|
|
146
|
+
arg1="the CHILDREN topics (narrower topics that are specializations) of the following topic: <topic/>"
|
|
147
|
+
arg2="facts-children"></expand>
|
|
148
|
+
|
|
149
|
+
Ground the determination of the canonical names of the most
|
|
150
|
+
relevant children topics <child-1/> to <child-4/> in the
|
|
151
|
+
facts of <facts-children/> and do not contradict them.
|
|
152
|
+
|
|
153
|
+
3. *Render Proximity*:
|
|
154
|
+
|
|
155
|
+
Output the result with the following <template/>, listing each
|
|
156
|
+
proximity topic under its bullet-prefixed section header.
|
|
157
|
+
|
|
158
|
+
<template>
|
|
159
|
+
<ase-tpl-head title="PROXIMITY TOPICS"/>
|
|
160
|
+
|
|
161
|
+
● **PARENT**:
|
|
162
|
+
↑ <parent/>
|
|
163
|
+
|
|
164
|
+
● **TOPIC**:
|
|
165
|
+
○ **<topic/>**
|
|
166
|
+
|
|
167
|
+
● **SIBLINGS**:
|
|
168
|
+
⇄ <sibling-1/>
|
|
169
|
+
⇄ <sibling-2/>
|
|
170
|
+
⇄ <sibling-3/>
|
|
171
|
+
⇄ <sibling-4/>
|
|
172
|
+
|
|
173
|
+
● **CHILDREN**:
|
|
174
|
+
↓ <child-1/>
|
|
175
|
+
↓ <child-2/>
|
|
176
|
+
↓ <child-3/>
|
|
177
|
+
↓ <child-4/>
|
|
178
|
+
|
|
179
|
+
<ase-tpl-foot title="PROXIMITY TOPICS"/>
|
|
180
|
+
</template>
|
|
181
|
+
|
|
182
|
+
4. <if condition="<getopt-option-loop/> is not equal `true`">
|
|
183
|
+
The loop runs only once in non-interactive mode: *break* out of
|
|
184
|
+
the *loop* and stop processing without any further output.
|
|
185
|
+
</if>
|
|
186
|
+
|
|
187
|
+
5. *Navigate Proximity*:
|
|
188
|
+
|
|
189
|
+
In the following, you *MUST* *NOT* use your built-in
|
|
190
|
+
<user-dialog-tool/> tool! Instead, you *MUST* just show a custom
|
|
191
|
+
dialog according to the expanded `custom-dialog` definition. You
|
|
192
|
+
*MUST* closely follow this definition.
|
|
193
|
+
|
|
194
|
+
Let the user pick one of the nine proximity topics to navigate
|
|
195
|
+
to by raising a question with the following custom dialog:
|
|
196
|
+
|
|
197
|
+
<expand name="custom-dialog" arg1="--no-other">
|
|
198
|
+
Navigate: Which proximity topic would you like to navigate to?
|
|
199
|
+
PARENT: ↑ <parent/>
|
|
200
|
+
SIBLING-1: ⇄ <sibling-1/>
|
|
201
|
+
SIBLING-2: ⇄ <sibling-2/>
|
|
202
|
+
SIBLING-3: ⇄ <sibling-3/>
|
|
203
|
+
SIBLING-4: ⇄ <sibling-4/>
|
|
204
|
+
CHILD-1: ↓ <child-1/>
|
|
205
|
+
CHILD-2: ↓ <child-2/>
|
|
206
|
+
CHILD-3: ↓ <child-3/>
|
|
207
|
+
CHILD-4: ↓ <child-4/>
|
|
208
|
+
</expand>
|
|
209
|
+
|
|
210
|
+
Check the tool <result/> and dispatch accordingly:
|
|
211
|
+
|
|
212
|
+
- If <result/> is `CANCEL`:
|
|
213
|
+
*Break* out of the *loop* and stop processing without any
|
|
214
|
+
further output.
|
|
215
|
+
|
|
216
|
+
- Otherwise: Set <topic/> to the proximity topic corresponding
|
|
217
|
+
to the selected <result/> (the <parent/>, <sibling-K/>, or
|
|
218
|
+
<child-K/> value behind the chosen label).
|
|
219
|
+
|
|
220
|
+
Then you *MUST* *continue* the *loop* at step **2.1**.
|
|
221
|
+
|
|
222
|
+
</step>
|
|
223
|
+
|
|
224
|
+
</flow>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-meta-proximity` - Determine the Conceptual Proximity of a Topic
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-meta-proximity`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
[`--ground`|`-g`]
|
|
11
|
+
[`--loop`|`-l`]
|
|
12
|
+
*topic*
|
|
13
|
+
|
|
14
|
+
## DESCRIPTION
|
|
15
|
+
|
|
16
|
+
The `ase-meta-proximity` skill determines the *conceptual proximity* of
|
|
17
|
+
the supplied *topic* along three dimensions and reports the neighboring
|
|
18
|
+
topics grouped into three labeled sections: *PARENT* (the single broader
|
|
19
|
+
topic that *topic* specializes), *SIBLINGS* (the four most relevant
|
|
20
|
+
topics on the same level, sharing the same parent), and *CHILDREN* (the
|
|
21
|
+
four most relevant narrower topics that specialize *topic*).
|
|
22
|
+
|
|
23
|
+
By default the proximity is derived from model knowledge only. With the
|
|
24
|
+
`--ground`/`-g` option, the skill first searches the Internet/Web for
|
|
25
|
+
facts about the topic via the `ase-meta-search` skill (dispatched in a
|
|
26
|
+
sub-agent, querying all available search backends) and grounds the
|
|
27
|
+
determination in the found facts.
|
|
28
|
+
|
|
29
|
+
Without the `--loop`/`-l` option, the skill determines and prints the
|
|
30
|
+
proximity of the given topic once and then stops. With the `--loop`/`-l`
|
|
31
|
+
option, the skill instead presents the nine neighboring topics in an
|
|
32
|
+
interactive dialog; selecting one of them makes it the new *current
|
|
33
|
+
topic* and restarts the determination from the beginning, so the user
|
|
34
|
+
can *navigate* the topic taxonomy up (parent), sideways (siblings), and
|
|
35
|
+
down (children). Cancelling the dialog exits the loop. When `--loop` is
|
|
36
|
+
combined with `--ground`, each newly selected topic is re-grounded via
|
|
37
|
+
the `ase-meta-search` sub-agent before its proximity is re-determined.
|
|
38
|
+
|
|
39
|
+
## OPTIONS
|
|
40
|
+
|
|
41
|
+
`--ground`|`-g`:
|
|
42
|
+
Ground the determination in Internet/Web facts gathered via the
|
|
43
|
+
`ase-meta-search` skill before determining the proximity. Without
|
|
44
|
+
this option, the determination is derived from model knowledge only.
|
|
45
|
+
When combined with `--loop`, every newly navigated-to topic is
|
|
46
|
+
re-grounded.
|
|
47
|
+
|
|
48
|
+
`--loop`|`-l`:
|
|
49
|
+
Present the neighboring topics in an interactive dialog and, upon
|
|
50
|
+
selection, adopt the picked topic as the new current topic and
|
|
51
|
+
restart the determination. Without this option, the proximity of the
|
|
52
|
+
given topic is printed once and the skill stops.
|
|
53
|
+
|
|
54
|
+
## ARGUMENTS
|
|
55
|
+
|
|
56
|
+
*topic*:
|
|
57
|
+
The topic whose conceptual proximity is to be determined. It may be
|
|
58
|
+
a technical concept, a phenomenon, or any other subject; the skill
|
|
59
|
+
determines its parent, sibling, and child topics.
|
|
60
|
+
|
|
61
|
+
## EXAMPLES
|
|
62
|
+
|
|
63
|
+
Determine the proximity of a topic from model knowledge:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
❯ /ase-meta-proximity Fourier transform
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Interactively navigate the conceptual neighborhood, grounded in
|
|
70
|
+
Internet/Web facts:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
❯ /ase-meta-proximity --ground --loop Agentic Software Engineering
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## SEE ALSO
|
|
77
|
+
|
|
78
|
+
[`ase-meta-eli5`](../ase-meta-eli5/help.md), [`ase-meta-search`](../ase-meta-search/help.md), [`ase-code-explain`](../ase-code-explain/help.md).
|