@goondocks/myco 0.18.0 → 0.18.1
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/dist/{agent-run-2NFYMQXW.js → agent-run-I4O2K2CK.js} +4 -4
- package/dist/{agent-tasks-MEIYLXGN.js → agent-tasks-UOW5BQIB.js} +4 -4
- package/dist/{chunk-JMOUFG6Y.js → chunk-44PZCAYS.js} +47 -5
- package/dist/chunk-44PZCAYS.js.map +1 -0
- package/dist/{chunk-JDI4DPWD.js → chunk-C3EGL5JX.js} +632 -145
- package/dist/chunk-C3EGL5JX.js.map +1 -0
- package/dist/{chunk-OW433Q4C.js → chunk-CURS2TNP.js} +44 -3
- package/dist/chunk-CURS2TNP.js.map +1 -0
- package/dist/{chunk-FABWUX5G.js → chunk-DPSLJ242.js} +16 -2
- package/dist/chunk-DPSLJ242.js.map +1 -0
- package/dist/{chunk-DLFDBKEV.js → chunk-LSP5HYOO.js} +17 -14
- package/dist/chunk-LSP5HYOO.js.map +1 -0
- package/dist/{chunk-VOCGURV7.js → chunk-N75GMQGA.js} +3 -3
- package/dist/{chunk-U7GJTVSX.js → chunk-RIDSOQDR.js} +20 -6
- package/dist/chunk-RIDSOQDR.js.map +1 -0
- package/dist/{chunk-KWTOCJLB.js → chunk-TCSVDQF5.js} +1128 -193
- package/dist/chunk-TCSVDQF5.js.map +1 -0
- package/dist/{chunk-55QEICRO.js → chunk-TLK46KKD.js} +2 -2
- package/dist/{chunk-NZI7WBZI.js → chunk-TOER6RNC.js} +21 -1
- package/dist/chunk-TOER6RNC.js.map +1 -0
- package/dist/{chunk-7OYXB2NM.js → chunk-TZAXQKO6.js} +5 -1
- package/dist/chunk-TZAXQKO6.js.map +1 -0
- package/dist/{chunk-EO2RQW4S.js → chunk-W7WENJ6F.js} +2 -2
- package/dist/{chunk-BUIR3JWM.js → chunk-XWOQL4XN.js} +2 -2
- package/dist/{chunk-PFWIPRF6.js → chunk-YZPI2Y3E.js} +2 -2
- package/dist/{cli-IIMBALPV.js → cli-D3TJYJ2U.js} +35 -35
- package/dist/{client-VZCUISHZ.js → client-4LLEXLVK.js} +3 -3
- package/dist/{detect-GEM3NVK6.js → detect-SZ2KDUF4.js} +2 -2
- package/dist/{doctor-QYD34X7Q.js → doctor-KCTXPX5D.js} +6 -6
- package/dist/{executor-NSPRTH4M.js → executor-UYIZC3L5.js} +83 -275
- package/dist/executor-UYIZC3L5.js.map +1 -0
- package/dist/{init-WYYL44KZ.js → init-QFNBKKDC.js} +7 -7
- package/dist/{llm-KEDHK3TQ.js → llm-SMA5ZEAW.js} +2 -2
- package/dist/{main-6PY3ITQ5.js → main-5THODR77.js} +427 -196
- package/dist/main-5THODR77.js.map +1 -0
- package/dist/{open-HRFMJDQX.js → open-7737CSPN.js} +4 -4
- package/dist/{post-compact-HT24YMAN.js → post-compact-2TJ5FPZH.js} +6 -6
- package/dist/{post-tool-use-DENRI5WB.js → post-tool-use-FRTSICC3.js} +5 -5
- package/dist/{post-tool-use-failure-A6SNJX42.js → post-tool-use-failure-KYO2NCNB.js} +6 -6
- package/dist/{pre-compact-3Q4BALCL.js → pre-compact-J6GCJEJR.js} +6 -6
- package/dist/{remove-YB5A6HY2.js → remove-3WZZC7AX.js} +5 -5
- package/dist/{restart-RGDVHELZ.js → restart-HUHEFOXU.js} +5 -5
- package/dist/{search-WOHT3G55.js → search-ZGN3LDXG.js} +5 -5
- package/dist/{server-6SUNYDV7.js → server-PTXLVVEE.js} +3 -3
- package/dist/{session-W3SKRFRV.js → session-7VV3IQMO.js} +5 -5
- package/dist/{session-end-OUTY7AFF.js → session-end-SMU55UCM.js} +5 -5
- package/dist/{session-start-5MB3LFOA.js → session-start-NIMWEOIZ.js} +16 -11
- package/dist/{session-start-5MB3LFOA.js.map → session-start-NIMWEOIZ.js.map} +1 -1
- package/dist/{setup-llm-ZMYGIQX5.js → setup-llm-7S3VPAPN.js} +4 -4
- package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -1
- package/dist/src/agent/definitions/tasks/full-intelligence.yaml +10 -0
- package/dist/src/agent/definitions/tasks/skill-evolve.yaml +163 -49
- package/dist/src/agent/definitions/tasks/skill-generate.yaml +44 -27
- package/dist/src/agent/definitions/tasks/skill-survey.yaml +132 -138
- package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -1
- package/dist/src/cli.js +1 -1
- package/dist/src/daemon/main.js +1 -1
- package/dist/src/hooks/post-tool-use.js +1 -1
- package/dist/src/hooks/session-end.js +1 -1
- package/dist/src/hooks/session-start.js +1 -1
- package/dist/src/hooks/stop.js +1 -1
- package/dist/src/hooks/user-prompt-submit.js +1 -1
- package/dist/src/mcp/server.js +1 -1
- package/dist/src/symbionts/manifests/codex.yaml +45 -7
- package/dist/src/worker/src/index.ts +8 -2
- package/dist/src/worker/src/schema.ts +2 -0
- package/dist/{stats-DGI6B3HX.js → stats-GEOQ2DFF.js} +5 -5
- package/dist/{stop-YGHODSP7.js → stop-7AKYBJJ2.js} +5 -5
- package/dist/{stop-failure-7IJTPJ6W.js → stop-failure-NLE2EURG.js} +6 -6
- package/dist/{subagent-start-ZBQ5PJB5.js → subagent-start-LBNZF2TG.js} +6 -6
- package/dist/{subagent-stop-N2TDQU2D.js → subagent-stop-B2Z5GYAB.js} +6 -6
- package/dist/{task-completed-BDLMRSBB.js → task-completed-PO5TETJ7.js} +6 -6
- package/dist/{team-2ZFGTSIN.js → team-DPNP2RN7.js} +3 -3
- package/dist/ui/assets/{index-DtT9_nlT.js → index-CiI1fwas.js} +2 -2
- package/dist/ui/index.html +1 -1
- package/dist/{update-STLAN7LR.js → update-WBWB5URU.js} +5 -5
- package/dist/{user-prompt-submit-4IBFUYQ3.js → user-prompt-submit-IZJC3NV7.js} +11 -8
- package/dist/user-prompt-submit-IZJC3NV7.js.map +1 -0
- package/dist/{verify-EJYPO7QA.js → verify-FNSP62I3.js} +2 -2
- package/dist/{version-YPBIKH77.js → version-QEVU66NT.js} +2 -2
- package/package.json +7 -7
- package/dist/chunk-7OYXB2NM.js.map +0 -1
- package/dist/chunk-DLFDBKEV.js.map +0 -1
- package/dist/chunk-FABWUX5G.js.map +0 -1
- package/dist/chunk-JDI4DPWD.js.map +0 -1
- package/dist/chunk-JMOUFG6Y.js.map +0 -1
- package/dist/chunk-KWTOCJLB.js.map +0 -1
- package/dist/chunk-NZI7WBZI.js.map +0 -1
- package/dist/chunk-OW433Q4C.js.map +0 -1
- package/dist/chunk-U7GJTVSX.js.map +0 -1
- package/dist/executor-NSPRTH4M.js.map +0 -1
- package/dist/main-6PY3ITQ5.js.map +0 -1
- package/dist/user-prompt-submit-4IBFUYQ3.js.map +0 -1
- /package/dist/{agent-run-2NFYMQXW.js.map → agent-run-I4O2K2CK.js.map} +0 -0
- /package/dist/{agent-tasks-MEIYLXGN.js.map → agent-tasks-UOW5BQIB.js.map} +0 -0
- /package/dist/{chunk-VOCGURV7.js.map → chunk-N75GMQGA.js.map} +0 -0
- /package/dist/{chunk-55QEICRO.js.map → chunk-TLK46KKD.js.map} +0 -0
- /package/dist/{chunk-EO2RQW4S.js.map → chunk-W7WENJ6F.js.map} +0 -0
- /package/dist/{chunk-BUIR3JWM.js.map → chunk-XWOQL4XN.js.map} +0 -0
- /package/dist/{chunk-PFWIPRF6.js.map → chunk-YZPI2Y3E.js.map} +0 -0
- /package/dist/{cli-IIMBALPV.js.map → cli-D3TJYJ2U.js.map} +0 -0
- /package/dist/{client-VZCUISHZ.js.map → client-4LLEXLVK.js.map} +0 -0
- /package/dist/{detect-GEM3NVK6.js.map → detect-SZ2KDUF4.js.map} +0 -0
- /package/dist/{doctor-QYD34X7Q.js.map → doctor-KCTXPX5D.js.map} +0 -0
- /package/dist/{init-WYYL44KZ.js.map → init-QFNBKKDC.js.map} +0 -0
- /package/dist/{llm-KEDHK3TQ.js.map → llm-SMA5ZEAW.js.map} +0 -0
- /package/dist/{open-HRFMJDQX.js.map → open-7737CSPN.js.map} +0 -0
- /package/dist/{post-compact-HT24YMAN.js.map → post-compact-2TJ5FPZH.js.map} +0 -0
- /package/dist/{post-tool-use-DENRI5WB.js.map → post-tool-use-FRTSICC3.js.map} +0 -0
- /package/dist/{post-tool-use-failure-A6SNJX42.js.map → post-tool-use-failure-KYO2NCNB.js.map} +0 -0
- /package/dist/{pre-compact-3Q4BALCL.js.map → pre-compact-J6GCJEJR.js.map} +0 -0
- /package/dist/{remove-YB5A6HY2.js.map → remove-3WZZC7AX.js.map} +0 -0
- /package/dist/{restart-RGDVHELZ.js.map → restart-HUHEFOXU.js.map} +0 -0
- /package/dist/{search-WOHT3G55.js.map → search-ZGN3LDXG.js.map} +0 -0
- /package/dist/{server-6SUNYDV7.js.map → server-PTXLVVEE.js.map} +0 -0
- /package/dist/{session-W3SKRFRV.js.map → session-7VV3IQMO.js.map} +0 -0
- /package/dist/{session-end-OUTY7AFF.js.map → session-end-SMU55UCM.js.map} +0 -0
- /package/dist/{setup-llm-ZMYGIQX5.js.map → setup-llm-7S3VPAPN.js.map} +0 -0
- /package/dist/{stats-DGI6B3HX.js.map → stats-GEOQ2DFF.js.map} +0 -0
- /package/dist/{stop-YGHODSP7.js.map → stop-7AKYBJJ2.js.map} +0 -0
- /package/dist/{stop-failure-7IJTPJ6W.js.map → stop-failure-NLE2EURG.js.map} +0 -0
- /package/dist/{subagent-start-ZBQ5PJB5.js.map → subagent-start-LBNZF2TG.js.map} +0 -0
- /package/dist/{subagent-stop-N2TDQU2D.js.map → subagent-stop-B2Z5GYAB.js.map} +0 -0
- /package/dist/{task-completed-BDLMRSBB.js.map → task-completed-PO5TETJ7.js.map} +0 -0
- /package/dist/{team-2ZFGTSIN.js.map → team-DPNP2RN7.js.map} +0 -0
- /package/dist/{update-STLAN7LR.js.map → update-WBWB5URU.js.map} +0 -0
- /package/dist/{verify-EJYPO7QA.js.map → verify-FNSP62I3.js.map} +0 -0
- /package/dist/{version-YPBIKH77.js.map → version-QEVU66NT.js.map} +0 -0
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
name: skill-survey
|
|
2
2
|
displayName: Skill Candidate Survey
|
|
3
3
|
description: >-
|
|
4
|
-
Analyze vault knowledge for procedural
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
Analyze vault knowledge for procedural domain candidates. Identifies
|
|
5
|
+
broad categories of recurring developer work — not individual micro-
|
|
6
|
+
procedures — that warrant guided skill context.
|
|
7
7
|
agent: myco-agent
|
|
8
8
|
prompt: >-
|
|
9
|
-
Survey the vault knowledge graph for procedural
|
|
9
|
+
Survey the vault knowledge graph for procedural domain candidates.
|
|
10
|
+
The instruction contains pre-assembled vault context.
|
|
10
11
|
isDefault: false
|
|
11
12
|
model: claude-sonnet-4-6
|
|
12
|
-
maxTurns:
|
|
13
|
+
maxTurns: 35
|
|
13
14
|
timeoutSeconds: 600
|
|
14
15
|
schedule:
|
|
15
16
|
enabled: true
|
|
@@ -17,167 +18,160 @@ schedule:
|
|
|
17
18
|
runIn:
|
|
18
19
|
- idle
|
|
19
20
|
phases:
|
|
20
|
-
- name: explore
|
|
21
|
+
- name: explore
|
|
21
22
|
prompt: |
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
The instruction contains pre-assembled vault context: digest,
|
|
24
|
+
recent wisdom spores, decisions, gotchas, sessions, and the
|
|
25
|
+
current skill inventory. Read it carefully — this is your
|
|
26
|
+
primary input.
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
Your goal: identify PROCEDURAL DOMAINS — broad categories of
|
|
29
|
+
recurring work where a developer benefits from guided context.
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
These are highest signal — synthesized from multiple sessions.
|
|
31
|
+
## What is a procedural domain?
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
A domain groups related procedures that share prerequisite
|
|
34
|
+
knowledge. Think "extending the daemon infrastructure" (covering
|
|
35
|
+
PowerManager jobs, MCP tools, config writes, notification
|
|
36
|
+
wiring) — NOT "registering a PowerManager job" alone.
|
|
34
37
|
|
|
35
|
-
|
|
38
|
+
Good domain examples:
|
|
39
|
+
- "Vault schema and data layer extension" (migrations, tables,
|
|
40
|
+
queries, FTS indexes, constants)
|
|
41
|
+
- "Agent pipeline task authoring" (YAML anatomy, phases,
|
|
42
|
+
scheduling, parameter injection, fault tolerance)
|
|
43
|
+
- "Symbiont integration lifecycle" (manifests, hooks, config
|
|
44
|
+
directories, capture rules, installer registration)
|
|
36
45
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
- vault_spores
|
|
42
|
-
- vault_entities
|
|
43
|
-
- vault_edges
|
|
44
|
-
- vault_read_digest
|
|
45
|
-
maxTurns: 15
|
|
46
|
-
required: true
|
|
47
|
-
readOnly: true
|
|
46
|
+
Bad examples (too narrow — these are SECTIONS within a domain):
|
|
47
|
+
- "How to register a PowerManager job"
|
|
48
|
+
- "Adding an FTS5 index"
|
|
49
|
+
- "Writing a symbiont capture rule"
|
|
48
50
|
|
|
49
|
-
|
|
50
|
-
prompt: |
|
|
51
|
-
Identify procedural workflows from session history.
|
|
52
|
-
You are one of three parallel exploration phases — focus only on sessions.
|
|
53
|
-
Budget is tight — be efficient, not exhaustive.
|
|
51
|
+
## Scale guidance
|
|
54
52
|
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
20-30 broad skills for a complex project is the right order
|
|
54
|
+
of magnitude. If a topic would be a section heading within a
|
|
55
|
+
broader skill, it is not its own candidate.
|
|
57
56
|
|
|
58
|
-
|
|
59
|
-
vault_search_fts with queries like "migration step", "configure install",
|
|
60
|
-
"refactor debug". Combine related terms in ONE query rather than
|
|
61
|
-
searching each keyword separately.
|
|
57
|
+
## Process
|
|
62
58
|
|
|
63
|
-
|
|
64
|
-
Stop when you have a clear picture — you don't need to search
|
|
65
|
-
every possible keyword.
|
|
66
|
-
tools:
|
|
67
|
-
- vault_sessions
|
|
68
|
-
- vault_search_fts
|
|
69
|
-
maxTurns: 10
|
|
70
|
-
required: true
|
|
71
|
-
readOnly: true
|
|
59
|
+
1. Read the pre-assembled context for orientation.
|
|
72
60
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
You are one of three parallel exploration phases — focus only on plans.
|
|
77
|
-
Budget is tight — be efficient, not exhaustive.
|
|
61
|
+
2. Use vault tools for TARGETED follow-up on promising
|
|
62
|
+
clusters. The baseline gives you direction — follow threads
|
|
63
|
+
that suggest a procedural domain exists.
|
|
78
64
|
|
|
79
|
-
|
|
80
|
-
|
|
65
|
+
Good follow-up queries:
|
|
66
|
+
- vault_search_fts to find additional sessions touching
|
|
67
|
+
a domain you spotted in the digest
|
|
68
|
+
- vault_spores to read full content of high-signal spores
|
|
69
|
+
summarized in the baseline
|
|
70
|
+
- vault_entities for components with high mention counts
|
|
71
|
+
that might anchor a domain
|
|
81
72
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
- "migration setup configuration deployment"
|
|
85
|
-
Combine related concepts in each query. Do NOT search each
|
|
86
|
-
keyword separately.
|
|
73
|
+
Do NOT exhaustively paginate or search every keyword.
|
|
74
|
+
You have ~12 tool calls — use them purposefully.
|
|
87
75
|
|
|
88
|
-
|
|
89
|
-
|
|
76
|
+
3. Group findings into candidate domains. For each domain,
|
|
77
|
+
note: the core theme, which procedures it covers, and
|
|
78
|
+
which source items provide evidence.
|
|
90
79
|
|
|
91
|
-
|
|
92
|
-
Stop when you have coverage — more queries have diminishing returns.
|
|
80
|
+
Store your domain clusters in working notes for the next phase.
|
|
93
81
|
tools:
|
|
94
|
-
-
|
|
82
|
+
- vault_spores
|
|
83
|
+
- vault_entities
|
|
84
|
+
- vault_edges
|
|
85
|
+
- vault_sessions
|
|
95
86
|
- vault_search_fts
|
|
96
|
-
|
|
87
|
+
- vault_search_semantic
|
|
88
|
+
maxTurns: 15
|
|
97
89
|
required: true
|
|
98
90
|
readOnly: true
|
|
99
91
|
|
|
100
|
-
- name: evaluate
|
|
92
|
+
- name: synthesize-evaluate
|
|
93
|
+
model: claude-sonnet-4-6
|
|
101
94
|
prompt: |
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
95
|
+
The explore phase identified procedural domain clusters from
|
|
96
|
+
the vault. Now evaluate each and create candidates for domains
|
|
97
|
+
that pass all criteria.
|
|
105
98
|
|
|
106
|
-
BEFORE creating any candidates,
|
|
107
|
-
1. vault_skill_records (action: list) — all active skills
|
|
99
|
+
BEFORE creating any candidates, load the dedup context:
|
|
100
|
+
1. vault_skill_records (action: list) — all active skills
|
|
108
101
|
2. vault_skill_candidates (action: list) — all existing candidates
|
|
109
|
-
Keep both lists for reference
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
102
|
+
Keep both lists for reference.
|
|
103
|
+
|
|
104
|
+
## Evaluation criteria
|
|
105
|
+
|
|
106
|
+
Each candidate must pass ALL of these at the DOMAIN level:
|
|
107
|
+
|
|
108
|
+
1. PROCEDURE TEST: Does this domain describe "how to do a
|
|
109
|
+
family of related tasks in this project"? A domain about
|
|
110
|
+
"what X is" or "X exists" is knowledge, not a skill.
|
|
111
|
+
|
|
112
|
+
2. REPEATABILITY TEST: Will developers need these procedures
|
|
113
|
+
again as the project grows? Domains covering extension
|
|
114
|
+
points (adding new X, extending Y) are strong candidates.
|
|
115
|
+
One-time fixes and bug patches are NOT skills.
|
|
116
|
+
|
|
117
|
+
3. BREADTH TEST: Does this domain cover 2+ distinct procedures
|
|
118
|
+
that share prerequisite knowledge? A single procedure is
|
|
119
|
+
too narrow — it should be a section within a broader domain.
|
|
120
|
+
If you can't imagine 3+ major section headings, it's not
|
|
121
|
+
broad enough.
|
|
122
|
+
|
|
123
|
+
4. CROSS-SESSION EVIDENCE: Knowledge from 2+ sessions and 3+
|
|
124
|
+
source items (spores, sessions, plans).
|
|
125
|
+
|
|
126
|
+
5. DEDUPLICATION: Check BOTH lists from step 0.
|
|
127
|
+
- If an active skill already covers this domain, skip.
|
|
128
|
+
- If the domain SUBSUMES existing narrow skills (the domain
|
|
129
|
+
is broader and the narrow skills are sections within it),
|
|
130
|
+
create the candidate with `supersedes` listing the narrow
|
|
131
|
+
skill names as a JSON array. The dedup gate exempts
|
|
132
|
+
superseded skills from vocabulary overlap checks.
|
|
133
|
+
- If a non-dismissed candidate covers the same domain,
|
|
134
|
+
UPDATE it with new evidence instead of creating.
|
|
135
|
+
- Dismissed candidates: the gate allows creation with a
|
|
136
|
+
warning. If the dismissed topic is a narrow subset of
|
|
137
|
+
your broader domain, proceed.
|
|
138
|
+
|
|
139
|
+
6. CONFIDENCE SCORE (0.0-1.0):
|
|
140
|
+
- Domain breadth (more procedures covered = higher)
|
|
146
141
|
- Cross-session evidence (wider = higher)
|
|
147
|
-
-
|
|
148
|
-
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
142
|
+
- Wisdom spore presence (higher quality signal)
|
|
143
|
+
- Plan presence (step-by-step procedures = higher)
|
|
144
|
+
|
|
145
|
+
## Creating candidates
|
|
146
|
+
|
|
147
|
+
Use vault_skill_candidates (action: create) with:
|
|
148
|
+
- topic: the domain name (e.g., "Vault Schema and Data Layer Extension")
|
|
149
|
+
- rationale: markdown with these sections:
|
|
150
|
+
- **Domain scope**: what procedures this covers (bulleted list)
|
|
151
|
+
- **Procedure verdict**: PASS/FAIL
|
|
152
|
+
- **Repeatability verdict**: PASS/FAIL with justification
|
|
153
|
+
- **Breadth verdict**: PASS/FAIL with section count estimate
|
|
154
|
+
- **Cross-session evidence**: session IDs and source count
|
|
155
|
+
- **Existing coverage**: skills/candidates checked and why this
|
|
156
|
+
is new or broader (name what you checked, not "NONE")
|
|
157
|
+
- **Supersedes**: which existing narrow skills this replaces
|
|
158
|
+
(if any)
|
|
159
|
+
- confidence: 0.0-1.0
|
|
160
|
+
- source_ids: JSON array of {id, type} objects
|
|
161
|
+
- supersedes: JSON array of skill names this replaces (or omit)
|
|
162
|
+
|
|
163
|
+
If an existing candidate has new evidence, use action: update.
|
|
164
|
+
|
|
165
|
+
Dismiss candidates whose underlying knowledge has been
|
|
166
|
+
superseded (action: update, status: dismissed).
|
|
167
|
+
|
|
168
|
+
Report a summary via vault_report.
|
|
173
169
|
tools:
|
|
174
170
|
- vault_skill_candidates
|
|
175
171
|
- vault_skill_records
|
|
176
172
|
- vault_set_state
|
|
177
173
|
- vault_report
|
|
178
|
-
maxTurns:
|
|
174
|
+
maxTurns: 15
|
|
179
175
|
required: true
|
|
180
176
|
dependsOn:
|
|
181
|
-
- explore
|
|
182
|
-
- explore-sessions
|
|
183
|
-
- explore-plans
|
|
177
|
+
- explore
|
package/dist/src/cli.js
CHANGED
package/dist/src/daemon/main.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/daemon.ts
|
|
4
|
-
var { main } = await import("../../main-
|
|
4
|
+
var { main } = await import("../../main-5THODR77.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=main.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/post-tool-use.ts
|
|
4
|
-
var { main } = await import("../../post-tool-use-
|
|
4
|
+
var { main } = await import("../../post-tool-use-FRTSICC3.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=post-tool-use.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/session-end.ts
|
|
4
|
-
var { main } = await import("../../session-end-
|
|
4
|
+
var { main } = await import("../../session-end-SMU55UCM.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=session-end.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/session-start.ts
|
|
4
|
-
var { main } = await import("../../session-start-
|
|
4
|
+
var { main } = await import("../../session-start-NIMWEOIZ.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=session-start.js.map
|
package/dist/src/hooks/stop.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/stop.ts
|
|
4
|
-
var { main } = await import("../../stop-
|
|
4
|
+
var { main } = await import("../../stop-7AKYBJJ2.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=stop.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/user-prompt-submit.ts
|
|
4
|
-
var { main } = await import("../../user-prompt-submit-
|
|
4
|
+
var { main } = await import("../../user-prompt-submit-IZJC3NV7.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=user-prompt-submit.js.map
|
package/dist/src/mcp/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/mcp-server.ts
|
|
4
|
-
var { main } = await import("../../server-
|
|
4
|
+
var { main } = await import("../../server-PTXLVVEE.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=server.js.map
|
|
@@ -11,6 +11,8 @@ hookFields:
|
|
|
11
11
|
lastResponse: last_assistant_message
|
|
12
12
|
capture:
|
|
13
13
|
planDirs: []
|
|
14
|
+
planTags:
|
|
15
|
+
- proposed_plan
|
|
14
16
|
rules:
|
|
15
17
|
# Ephemeral sub-invocation filter (structural, two-layer defense).
|
|
16
18
|
#
|
|
@@ -51,13 +53,49 @@ capture:
|
|
|
51
53
|
action: drop
|
|
52
54
|
reason: ephemeral-sub-invocation
|
|
53
55
|
|
|
54
|
-
#
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
#
|
|
58
|
-
#
|
|
59
|
-
#
|
|
60
|
-
#
|
|
56
|
+
# Layer 3 — sub-agent thread spawn filter (structural).
|
|
57
|
+
#
|
|
58
|
+
# Codex spawns sub-agents (thread_spawn) for code review, testing,
|
|
59
|
+
# etc. These write real transcript files but are NOT user-initiated
|
|
60
|
+
# sessions. Their session_meta has:
|
|
61
|
+
# "source": {"subagent": {"thread_spawn": {...}}}
|
|
62
|
+
# while user sessions have "source": "vscode" or similar strings.
|
|
63
|
+
#
|
|
64
|
+
# This condition reads the transcript's first JSON line and checks
|
|
65
|
+
# the dot-path field — a structural signal that won't drift.
|
|
66
|
+
- event: session_start
|
|
67
|
+
scope: this_agent
|
|
68
|
+
when:
|
|
69
|
+
transcript_meta_field_exists: source.subagent
|
|
70
|
+
action: drop
|
|
71
|
+
reason: subagent-thread-spawn
|
|
72
|
+
|
|
73
|
+
# Layer 4 — safety net for sub-agent prompts that slip past
|
|
74
|
+
# SessionStart (e.g. transcript not yet flushed).
|
|
75
|
+
- event: user_prompt
|
|
76
|
+
scope: this_agent
|
|
77
|
+
when:
|
|
78
|
+
transcript_meta_field_exists: source.subagent
|
|
79
|
+
action: drop
|
|
80
|
+
reason: subagent-thread-spawn
|
|
81
|
+
|
|
82
|
+
# Codex Desktop wraps user prompts with a file-mention preamble when
|
|
83
|
+
# screenshots or files are attached:
|
|
84
|
+
# "# Files mentioned by the user:\n## <filename>: <path>\n## My request for Codex:\n<actual prompt>"
|
|
85
|
+
# Strip the preamble so the captured prompt contains only the user's text.
|
|
86
|
+
- event: user_prompt
|
|
87
|
+
scope: this_agent
|
|
88
|
+
when:
|
|
89
|
+
prompt_contains: "## My request for Codex:"
|
|
90
|
+
action: rewrite_prompt
|
|
91
|
+
extract_after: "## My request for Codex:\n"
|
|
92
|
+
reason: codex-desktop-file-preamble
|
|
93
|
+
|
|
94
|
+
# NOTE: the VS Code Codex extension uses a different preamble
|
|
95
|
+
# (`# Context from my IDE setup:` … `## My request for Codex:`).
|
|
96
|
+
# Keying on the shared `## My request for Codex:` marker above
|
|
97
|
+
# should handle both Desktop and VS Code variants. If the VS Code
|
|
98
|
+
# preamble diverges, add a separate rule keyed on its specific marker.
|
|
61
99
|
registration:
|
|
62
100
|
hooksTarget: .codex/hooks.json
|
|
63
101
|
mcpTarget: .codex/config.toml
|
|
@@ -32,6 +32,7 @@ const EMBEDDABLE_TABLES: Record<string, string> = {
|
|
|
32
32
|
sessions: 'summary',
|
|
33
33
|
plans: 'content',
|
|
34
34
|
artifacts: 'content',
|
|
35
|
+
skill_records: 'description',
|
|
35
36
|
};
|
|
36
37
|
|
|
37
38
|
/** All tables the sync endpoint accepts records for. */
|
|
@@ -269,7 +270,11 @@ async function handleSync(request: Request, env: Env): Promise<Response> {
|
|
|
269
270
|
if (table === 'spores' && record.data.status === 'superseded') {
|
|
270
271
|
embeddingTasks.push(() => deleteVector(env, table, id, machine_id));
|
|
271
272
|
} else {
|
|
272
|
-
|
|
273
|
+
// Include domain-specific metadata for richer search results
|
|
274
|
+
const extra: Record<string, string> = {};
|
|
275
|
+
if (table === 'skill_records' && record.data.name) extra.name = record.data.name as string;
|
|
276
|
+
if (table === 'spores' && record.data.observation_type) extra.observation_type = record.data.observation_type as string;
|
|
277
|
+
embeddingTasks.push(() => embedAndUpsert(env, table, id, machine_id, textContent, extra));
|
|
273
278
|
}
|
|
274
279
|
}
|
|
275
280
|
}
|
|
@@ -311,6 +316,7 @@ async function embedAndUpsert(
|
|
|
311
316
|
id: string,
|
|
312
317
|
machineId: string,
|
|
313
318
|
text: string,
|
|
319
|
+
extra?: Record<string, string>,
|
|
314
320
|
): Promise<void> {
|
|
315
321
|
const vector = await embedText(env.AI, text);
|
|
316
322
|
const vid = vectorId(table, id, machineId);
|
|
@@ -318,7 +324,7 @@ async function embedAndUpsert(
|
|
|
318
324
|
{
|
|
319
325
|
id: vid,
|
|
320
326
|
values: vector,
|
|
321
|
-
metadata: { table, id, machine_id: machineId },
|
|
327
|
+
metadata: { table, id, machine_id: machineId, ...extra },
|
|
322
328
|
},
|
|
323
329
|
]);
|
|
324
330
|
}
|
|
@@ -198,6 +198,7 @@ const SKILL_CANDIDATES_TABLE = `
|
|
|
198
198
|
status TEXT NOT NULL DEFAULT 'identified',
|
|
199
199
|
source_ids TEXT NOT NULL DEFAULT '[]',
|
|
200
200
|
skill_id TEXT,
|
|
201
|
+
supersedes TEXT,
|
|
201
202
|
approved_at INTEGER,
|
|
202
203
|
created_at INTEGER NOT NULL,
|
|
203
204
|
updated_at INTEGER NOT NULL,
|
|
@@ -301,6 +302,7 @@ export async function initD1Schema(db: D1Database): Promise<void> {
|
|
|
301
302
|
const migrations = [
|
|
302
303
|
'ALTER TABLE skill_usage ADD COLUMN synced_at INTEGER',
|
|
303
304
|
'ALTER TABLE skill_candidates ADD COLUMN approved_at INTEGER',
|
|
305
|
+
'ALTER TABLE skill_candidates ADD COLUMN supersedes TEXT',
|
|
304
306
|
];
|
|
305
307
|
for (const sql of migrations) {
|
|
306
308
|
try {
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
gatherStats
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-LSP5HYOO.js";
|
|
5
5
|
import {
|
|
6
6
|
initVaultDb
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-TLK46KKD.js";
|
|
8
8
|
import "./chunk-SAKJMNSR.js";
|
|
9
9
|
import "./chunk-WYOE4IAX.js";
|
|
10
10
|
import "./chunk-CML4MCYF.js";
|
|
11
11
|
import "./chunk-2V7HR7HB.js";
|
|
12
12
|
import "./chunk-MYX5NCRH.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-XWOQL4XN.js";
|
|
14
|
+
import "./chunk-W7WENJ6F.js";
|
|
15
15
|
import "./chunk-LPUQPDC2.js";
|
|
16
16
|
import "./chunk-CKJAWZQE.js";
|
|
17
17
|
import "./chunk-E7NUADTQ.js";
|
|
@@ -92,4 +92,4 @@ function formatUptime(seconds) {
|
|
|
92
92
|
export {
|
|
93
93
|
run
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=stats-
|
|
95
|
+
//# sourceMappingURL=stats-GEOQ2DFF.js.map
|
|
@@ -2,15 +2,15 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
|
|
|
2
2
|
import {
|
|
3
3
|
normalizeHookInput,
|
|
4
4
|
readStdin
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-YZPI2Y3E.js";
|
|
6
6
|
import {
|
|
7
7
|
resolveVaultDir
|
|
8
8
|
} from "./chunk-5ZT2Q6P5.js";
|
|
9
9
|
import {
|
|
10
10
|
DaemonClient
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-XWOQL4XN.js";
|
|
12
|
+
import "./chunk-W7WENJ6F.js";
|
|
13
|
+
import "./chunk-DPSLJ242.js";
|
|
14
14
|
import "./chunk-LPUQPDC2.js";
|
|
15
15
|
import "./chunk-CKJAWZQE.js";
|
|
16
16
|
import "./chunk-E7NUADTQ.js";
|
|
@@ -45,4 +45,4 @@ async function main() {
|
|
|
45
45
|
export {
|
|
46
46
|
main
|
|
47
47
|
};
|
|
48
|
-
//# sourceMappingURL=stop-
|
|
48
|
+
//# sourceMappingURL=stop-7AKYBJJ2.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
sendEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-N75GMQGA.js";
|
|
5
5
|
import "./chunk-V7XG6V6C.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-YZPI2Y3E.js";
|
|
7
7
|
import "./chunk-5ZT2Q6P5.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-XWOQL4XN.js";
|
|
9
|
+
import "./chunk-W7WENJ6F.js";
|
|
10
|
+
import "./chunk-DPSLJ242.js";
|
|
11
11
|
import "./chunk-LPUQPDC2.js";
|
|
12
12
|
import "./chunk-CKJAWZQE.js";
|
|
13
13
|
import "./chunk-E7NUADTQ.js";
|
|
@@ -27,4 +27,4 @@ async function main() {
|
|
|
27
27
|
export {
|
|
28
28
|
main
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=stop-failure-
|
|
30
|
+
//# sourceMappingURL=stop-failure-NLE2EURG.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
sendEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-N75GMQGA.js";
|
|
5
5
|
import "./chunk-V7XG6V6C.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-YZPI2Y3E.js";
|
|
7
7
|
import "./chunk-5ZT2Q6P5.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-XWOQL4XN.js";
|
|
9
|
+
import "./chunk-W7WENJ6F.js";
|
|
10
|
+
import "./chunk-DPSLJ242.js";
|
|
11
11
|
import "./chunk-LPUQPDC2.js";
|
|
12
12
|
import "./chunk-CKJAWZQE.js";
|
|
13
13
|
import "./chunk-E7NUADTQ.js";
|
|
@@ -27,4 +27,4 @@ async function main() {
|
|
|
27
27
|
export {
|
|
28
28
|
main
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=subagent-start-
|
|
30
|
+
//# sourceMappingURL=subagent-start-LBNZF2TG.js.map
|