0xray 4.0.42 → 4.1.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/.gitignore.default +4 -1
- package/.grok-plugin/plugin.json +1 -1
- package/.opencode/skills/orchestrator/SKILL.md +1 -7
- package/.plugin/plugin.json +1 -1
- package/.xray/features.json +8 -5
- package/.xray/features.schema.json +8 -0
- package/AGENTS-consumer.md +9 -7
- package/AGENTS.md +19 -10
- package/LICENSE +1 -1
- package/README.md +15 -9
- package/SKILLS.md +3 -1
- package/dist/.gitignore.default +4 -1
- package/dist/AGENTS.md +19 -10
- package/dist/CHANGELOG.md +109 -11
- package/dist/LICENSE +1 -1
- package/dist/README.md +15 -9
- package/dist/SKILLS.md +3 -1
- package/dist/cli/commands/opencode-install.js +3 -9
- package/dist/cli/commands/plugin-commands.d.ts +4 -0
- package/dist/cli/commands/plugin-commands.js +84 -41
- package/dist/cli/commands/skill-install.js +10 -5
- package/dist/cli/goggles-status.d.ts +2 -5
- package/dist/cli/goggles-status.js +5 -53
- package/dist/cli/index.js +2 -2
- package/dist/core/config-loader.js +4 -4
- package/dist/core/features-config.d.ts +1 -1
- package/dist/core/features-config.js +3 -3
- package/dist/enforcement/enforcer-tools.d.ts +1 -1
- package/dist/enforcement/enforcer-tools.js +1 -1
- package/dist/integrations/cursor/README.md +1 -1
- package/dist/integrations/cursor/hooks/hooks.json +6 -3
- package/dist/integrations/cursor/hooks/pre-tool-use.js +104 -37
- package/dist/integrations/cursor/hooks/xray-cloud-hook.sh +9 -1
- package/dist/integrations/grok/grok-cli.js +5 -7
- package/dist/integrations/grok/hooks/grok-hook-utils.js +4 -1
- package/dist/integrations/grok/hooks/pre-tool-use.js +6 -76
- package/dist/integrations/grok/hooks/session-start.js +4 -2
- package/dist/integrations/hermes-agent/bridge.mjs +17 -1
- package/dist/integrations/hooks/delegation-gate-runtime.mjs +3 -2
- package/dist/integrations/hooks/goggles-mcp.mjs +23 -181
- package/dist/integrations/hooks/goggles-pipeline.mjs +606 -571
- package/dist/integrations/hooks/goggles-planes.json +95 -46
- package/dist/integrations/hooks/plates.cjs +84 -0
- package/dist/integrations/hooks/pre-tool-speak.mjs +74 -0
- package/dist/integrations/hooks/skill-seek.mjs +115 -0
- package/dist/integrations/hooks/station-hook-runtime.cjs +4 -1
- package/dist/integrations/openclaw/hooks/pre-tool-gate-runtime.mjs +24 -7
- package/dist/integrations/openclaw/plugin/xray-pre-tool/index.js +26 -2
- package/dist/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
- package/dist/memory-routing/plates.d.ts +1 -1
- package/dist/memory-routing/plates.js +14 -0
- package/dist/monitoring/{nudge-watchdog.d.ts → nudge-monitor.d.ts} +14 -5
- package/dist/monitoring/{nudge-watchdog.js → nudge-monitor.js} +42 -17
- package/dist/nucleus/thin-dispatch.d.ts +1 -1
- package/dist/nucleus/thin-dispatch.js +1 -1
- package/dist/nucleus/work-freshness.mjs +10 -0
- package/dist/plugin/xray-codex-injection.js +20 -0
- package/dist/processors/implementations/nudge-processor.d.ts +1 -1
- package/dist/processors/implementations/nudge-processor.js +4 -4
- package/dist/skills/orchestrator/SKILL.md +1 -7
- package/docs-site/docs/plates/activity-log.md +1 -1
- package/docs-site/docs/plates/asides.md +35 -0
- package/docs-site/docs/plates/bifrost.md +48 -0
- package/docs-site/docs/plates/boot.md +2 -2
- package/docs-site/docs/plates/centrifuge.md +1 -1
- package/docs-site/docs/plates/confer.md +35 -0
- package/docs-site/docs/plates/consumer-mcp.md +35 -0
- package/docs-site/docs/plates/cursor-compact.md +1 -1
- package/docs-site/docs/plates/delegation-gate.md +35 -0
- package/docs-site/docs/plates/dynamo.md +35 -0
- package/docs-site/docs/plates/foundry.md +35 -0
- package/docs-site/docs/plates/glossary.md +7 -3
- package/docs-site/docs/plates/goggles.md +12 -1
- package/docs-site/docs/plates/governance.md +1 -1
- package/docs-site/docs/plates/grok-compact.md +1 -1
- package/docs-site/docs/plates/grokbot.md +3 -1
- package/docs-site/docs/plates/ground.md +35 -0
- package/docs-site/docs/plates/hermes.md +35 -0
- package/docs-site/docs/plates/host-pack.md +1 -1
- package/docs-site/docs/plates/house.md +1 -1
- package/docs-site/docs/plates/index.md +16 -7
- package/docs-site/docs/plates/inference-cycle.md +35 -0
- package/docs-site/docs/plates/inference-files.md +1 -1
- package/docs-site/docs/plates/kept-line.md +1 -1
- package/docs-site/docs/plates/kits.md +1 -1
- package/docs-site/docs/plates/lens-gate.md +8 -6
- package/docs-site/docs/plates/lens-page.md +1 -1
- package/docs-site/docs/plates/memory-recall.md +1 -1
- package/docs-site/docs/plates/notes-page.md +2 -2
- package/docs-site/docs/plates/openclaw.md +35 -0
- package/docs-site/docs/plates/opencode.md +35 -0
- package/docs-site/docs/plates/orchestration.md +1 -1
- package/docs-site/docs/plates/package-face.md +1 -1
- package/docs-site/docs/plates/payload-heat.md +1 -1
- package/docs-site/docs/plates/pickup-stamp.md +1 -1
- package/docs-site/docs/plates/pre-tool.md +1 -1
- package/docs-site/docs/plates/processor.md +1 -1
- package/docs-site/docs/plates/record-map.md +1 -1
- package/docs-site/docs/plates/reflection-page.md +1 -1
- package/docs-site/docs/plates/repertoire.md +35 -0
- package/docs-site/docs/plates/reporting.md +1 -1
- package/docs-site/docs/plates/review.md +1 -1
- package/docs-site/docs/plates/routing.md +1 -1
- package/docs-site/docs/plates/session-capture.md +1 -1
- package/docs-site/docs/plates/site-manual.md +1 -1
- package/docs-site/docs/plates/stamp-plate.md +1 -1
- package/docs-site/docs/plates/station-card.md +1 -1
- package/docs-site/docs/plates/station-heat.md +1 -1
- package/docs-site/docs/plates/suit-organs.md +1 -1
- package/docs-site/docs/plates/suit-settings.md +1 -1
- package/docs-site/docs/plates/suit-wear.md +1 -1
- package/docs-site/docs/plates/suit.md +3 -3
- package/docs-site/docs/plates/synthesis.md +35 -0
- package/docs-site/docs/plates/temperament.md +35 -0
- package/docs-site/docs/plates/trail-state.md +2 -2
- package/docs-site/docs/plates/work-fresh.md +1 -1
- package/docs-site/docs/plates/write-home.md +1 -1
- package/llms.txt +14 -6
- package/package.json +3 -3
- package/scripts/foundry/README.md +5 -3
- package/scripts/foundry/mint-suit.cjs +120 -2
- package/scripts/foundry/plant/skills/mill/SKILL.md +1 -1
- package/scripts/foundry/reconcile-version.mjs +10 -3
- package/scripts/foundry/release-gate.mjs +111 -15
- package/scripts/foundry/release.mjs +9 -1
- package/scripts/foundry/validate-release-docs.mjs +2 -2
- package/scripts/foundry/version-manager.mjs +12 -4
- package/scripts/mjs/verify-pipeline-facets.mjs +1 -1
- package/scripts/node/install-bridges.cjs +91 -46
- package/scripts/node/pack-tmp-suit-proof.mjs +37 -10
- package/src/integrations/openclaw/plugin/xray-pre-tool/index.js +26 -2
- package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
- package/src/skills/orchestrator/SKILL.md +1 -7
- package/vendor/@0xray/repertoire/README.md +1 -1
- package/xray/agents_template.md +2 -2
- package/xray/features.json +8 -5
- package/xray/features.schema.json +8 -0
- package/docs-site/docs/plates/live-mesh.md +0 -41
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"actuality": "map vs worn",
|
|
3
2
|
"planes": ["dichotomy", "syncopate", "synthesis", "digest", "triage", "loop"],
|
|
4
3
|
"scope": ["ecosystem", "part", "one flow", "one artifact"],
|
|
5
4
|
"ground": {
|
|
@@ -7,16 +6,17 @@
|
|
|
7
6
|
"files": [
|
|
8
7
|
"src",
|
|
9
8
|
"grok-bot/OP-PROC.md",
|
|
9
|
+
"grok-bot/LEXICON.md",
|
|
10
10
|
"src/opencode/agents",
|
|
11
11
|
"AGENTS.md",
|
|
12
12
|
"src/integrations",
|
|
13
|
-
"package.json"
|
|
14
|
-
"scripts/foundry"
|
|
13
|
+
"package.json"
|
|
15
14
|
],
|
|
16
|
-
"skills": "
|
|
15
|
+
"skills": "orchestrator, researcher, project-analysis, git-workflow, tech-writer"
|
|
17
16
|
},
|
|
18
17
|
"synthesis": {
|
|
19
|
-
"file": "src/nucleus/synthesis.ts"
|
|
18
|
+
"file": "src/nucleus/synthesis.ts",
|
|
19
|
+
"skills": "synthesis, confer, inference-cycle, temperament"
|
|
20
20
|
},
|
|
21
21
|
"routing": {
|
|
22
22
|
"files": ["src/nucleus/thin-dispatch.ts"],
|
|
@@ -24,17 +24,17 @@
|
|
|
24
24
|
"mark": "export function scoreAndRoute",
|
|
25
25
|
"wornMark": "function scoreAndRoute",
|
|
26
26
|
"pick": "resolveThinDispatch",
|
|
27
|
-
"skills": "
|
|
27
|
+
"skills": "routing, orchestration, processor-pipeline, delegation-gate",
|
|
28
28
|
"plates": ["orchestration", "processor"]
|
|
29
29
|
},
|
|
30
30
|
"house": {
|
|
31
|
-
"files": ["grok-bot/lib/seat-doctor.cjs"],
|
|
32
|
-
"skills": "
|
|
31
|
+
"files": ["grok-bot/lib/seat-doctor.cjs", "grok-bot/templates/house/fleet/WAKE-ROUTINE.md", "grok-bot/templates/house/HOUSE.md", "src/__tests__/unit/grok-bot-house-template.test.ts", "src/__tests__/unit/grok-bot-house-migrate.test.ts"],
|
|
32
|
+
"skills": "house, suit-wear, record-map, activity-log",
|
|
33
33
|
"plates": ["suit-wear"]
|
|
34
34
|
},
|
|
35
35
|
"boot": {
|
|
36
36
|
"files": ["src/core/boot-orchestrator.ts"],
|
|
37
|
-
"skills": "
|
|
37
|
+
"skills": "boot-orchestrator, suit-wear, hermes-agent, opencode",
|
|
38
38
|
"plates": ["suit-wear"]
|
|
39
39
|
},
|
|
40
40
|
"governance": {
|
|
@@ -42,183 +42,232 @@
|
|
|
42
42
|
"src/governance/governance-service.ts",
|
|
43
43
|
"src/governance/llm-governance-provider.ts"
|
|
44
44
|
],
|
|
45
|
-
"skills": "
|
|
45
|
+
"skills": "governance, enforcer, dynamo, confer"
|
|
46
46
|
},
|
|
47
47
|
"memory-recall": {
|
|
48
|
-
"files": ["src/integrations/hooks/plates.cjs"],
|
|
49
|
-
"skills": "
|
|
48
|
+
"files": ["src/integrations/hooks/plates.cjs", "src/__tests__/unit/plates.test.ts"],
|
|
49
|
+
"skills": "memory-recall, record-map, repertoire, station-card",
|
|
50
50
|
"plates": ["record-map"]
|
|
51
51
|
},
|
|
52
52
|
"orchestration": {
|
|
53
53
|
"files": ["src/mcps/orchestrator/server.ts"],
|
|
54
|
-
"skills": "
|
|
54
|
+
"skills": "orchestration, routing, processor-pipeline, strategist",
|
|
55
55
|
"plates": ["routing", "processor"]
|
|
56
56
|
},
|
|
57
57
|
"processor": {
|
|
58
58
|
"files": ["src/processors/processor-manager.ts"],
|
|
59
|
-
"skills": "
|
|
59
|
+
"skills": "processor-pipeline, orchestration, routing",
|
|
60
60
|
"plates": ["orchestration"]
|
|
61
61
|
},
|
|
62
62
|
"reporting": {
|
|
63
63
|
"files": ["src/reporting/framework-reporting-system.ts"],
|
|
64
|
-
"skills": "
|
|
64
|
+
"skills": "reporting, activity-log, suit-organs, write-home",
|
|
65
65
|
"plates": ["activity-log", "suit-organs"]
|
|
66
66
|
},
|
|
67
67
|
"stamp-plate": {
|
|
68
68
|
"files": [".agents/skills/stamp-plate/SKILL.md"],
|
|
69
69
|
"mark": "Stamp a plate or a lens",
|
|
70
|
-
"skills": "
|
|
70
|
+
"skills": "stamp-plate, lens-gate, record-map, site-manual",
|
|
71
71
|
"plates": ["review"]
|
|
72
72
|
},
|
|
73
73
|
"record-map": {
|
|
74
74
|
"files": ["docs-site/docs/plates/record-map.md", "src/integrations/hooks/wake-cascade.cjs", "src/integrations/hooks/session-note-index.cjs"],
|
|
75
|
-
"skills": "
|
|
75
|
+
"skills": "record-map, station-card, notes-page, reflection-page, site-manual",
|
|
76
76
|
"plates": ["station-card", "notes-page", "reflection-page", "site-manual", "package-face", "write-home", "activity-log", "session-capture", "lens-page"]
|
|
77
77
|
},
|
|
78
78
|
"write-home": {
|
|
79
79
|
"files": ["src/integrations/hooks/write-home.cjs"],
|
|
80
80
|
"mark": "function activityLog",
|
|
81
|
-
"skills": "
|
|
81
|
+
"skills": "write-home, activity-log, session-capture, inference-files, trail-state",
|
|
82
82
|
"plates": ["activity-log", "session-capture", "inference-files", "trail-state", "suit-wear"]
|
|
83
83
|
},
|
|
84
84
|
"activity-log": {
|
|
85
85
|
"files": ["src/core/activity-logger.ts"],
|
|
86
86
|
"mark": "activity.log",
|
|
87
|
-
"skills": "
|
|
87
|
+
"skills": "activity-log, write-home, reporting, suit-organs",
|
|
88
88
|
"plates": ["write-home", "reporting", "suit-organs"]
|
|
89
89
|
},
|
|
90
90
|
"session-capture": {
|
|
91
91
|
"files": ["src/inference/session-capture.ts"],
|
|
92
92
|
"mark": "saveSessionInference",
|
|
93
|
-
"skills": "
|
|
93
|
+
"skills": "session-capture, write-home, inference-files, suit-organs",
|
|
94
94
|
"plates": ["write-home", "inference-files", "suit-organs"]
|
|
95
95
|
},
|
|
96
96
|
"suit-wear": {
|
|
97
|
-
"files": ["src/core/features-config.ts"],
|
|
97
|
+
"files": ["src/core/features-config.ts", "scripts/node/install-bridges.cjs", "scripts/node/setup.cjs", "src/integrations/cursor/hooks/xray-cloud-hook.sh"],
|
|
98
98
|
"mark": "log_path",
|
|
99
|
-
"skills": "
|
|
99
|
+
"skills": "suit-wear, suit-settings, write-home, package-face",
|
|
100
100
|
"plates": ["suit-settings", "write-home", "package-face"]
|
|
101
101
|
},
|
|
102
102
|
"suit-organs": {
|
|
103
103
|
"files": ["src/reporting/framework-reporting-system.ts"],
|
|
104
104
|
"mark": "activity.log",
|
|
105
|
-
"skills": "
|
|
105
|
+
"skills": "suit-organs, activity-log, session-capture, inference-files, trail-state",
|
|
106
106
|
"plates": ["activity-log", "session-capture", "inference-files", "trail-state"]
|
|
107
107
|
},
|
|
108
108
|
"station-card": {
|
|
109
109
|
"files": ["src/integrations/hooks/station-hook-runtime.cjs", "src/integrations/hooks/wake-cascade.cjs"],
|
|
110
110
|
"mark": "formatStationMarkdown",
|
|
111
|
-
"skills": "
|
|
111
|
+
"skills": "station-card, notes-page, record-map, kept-line",
|
|
112
112
|
"plates": ["notes-page", "record-map", "kept-line"]
|
|
113
113
|
},
|
|
114
114
|
"notes-page": {
|
|
115
115
|
"files": ["src/integrations/hooks/station-hook-runtime.cjs", "src/integrations/hooks/session-note-index.cjs"],
|
|
116
116
|
"mark": "stampNotesPickup",
|
|
117
|
-
"skills": "
|
|
117
|
+
"skills": "notes-page, station-card, record-map, pickup-stamp",
|
|
118
118
|
"plates": ["station-card", "record-map"]
|
|
119
119
|
},
|
|
120
120
|
"reflection-page": {
|
|
121
121
|
"files": ["src/inference/inference-accumulator.ts"],
|
|
122
122
|
"mark": "loadReflectionInferences",
|
|
123
|
-
"skills": "
|
|
123
|
+
"skills": "reflection-page, record-map, inference-files, storyteller",
|
|
124
124
|
"plates": ["record-map"]
|
|
125
125
|
},
|
|
126
126
|
"site-manual": {
|
|
127
|
-
"files": ["docs-site/docs/introduction.md"],
|
|
127
|
+
"files": ["docs-site/docs/introduction.md", "docs-site/docs/index.md", "docs-site/docs/full-reference.md", "docs-site/docs/guides/features-since-3.1.md"],
|
|
128
128
|
"mark": "survives the context window",
|
|
129
|
-
"skills": "
|
|
129
|
+
"skills": "site-manual, record-map, package-face, tech-writer",
|
|
130
130
|
"plates": ["record-map"]
|
|
131
131
|
},
|
|
132
132
|
"package-face": {
|
|
133
|
-
"files": ["package.json"],
|
|
133
|
+
"files": ["package.json", "grok-bot/README.md", "grok-bot/llms.txt", "grok-bot/CHANGELOG.md", "src/cli/index.ts", "src/cli/commands/plugin-commands.ts", "src/__tests__/unit/plugin-commands.test.ts"],
|
|
134
134
|
"mark": "\"name\": \"0xray\"",
|
|
135
|
-
"skills": "
|
|
135
|
+
"skills": "package-face, record-map, suit-wear, tech-writer",
|
|
136
136
|
"plates": ["record-map", "suit-wear"]
|
|
137
137
|
},
|
|
138
138
|
"suit-settings": {
|
|
139
139
|
"files": ["xray/features.json"],
|
|
140
140
|
"mark": "log_path",
|
|
141
|
-
"skills": "
|
|
141
|
+
"skills": "suit-settings, suit-wear, record-map",
|
|
142
142
|
"plates": ["suit-wear", "record-map"]
|
|
143
143
|
},
|
|
144
144
|
"trail-state": {
|
|
145
145
|
"files": ["src/integrations/hooks/station-hook-runtime.cjs"],
|
|
146
146
|
"mark": "session-boot.json",
|
|
147
|
-
"skills": "
|
|
147
|
+
"skills": "trail-state, write-home, suit-organs, station-card",
|
|
148
148
|
"plates": ["write-home", "suit-organs"]
|
|
149
149
|
},
|
|
150
150
|
"inference-files": {
|
|
151
151
|
"files": ["src/inference/inference-accumulator.ts"],
|
|
152
152
|
"mark": "loadSessionInferences",
|
|
153
|
-
"skills": "
|
|
153
|
+
"skills": "inference-files, session-capture, write-home, suit-organs",
|
|
154
154
|
"plates": ["session-capture", "write-home", "suit-organs"]
|
|
155
155
|
},
|
|
156
156
|
"grok-compact": {
|
|
157
157
|
"files": ["src/integrations/grok/hooks/session-start.js"],
|
|
158
158
|
"mark": "pre_compact",
|
|
159
|
-
"skills": "
|
|
159
|
+
"skills": "grok-compact, payload-heat, cursor-compact, work-fresh",
|
|
160
160
|
"plates": ["payload-heat", "cursor-compact", "work-fresh"]
|
|
161
161
|
},
|
|
162
162
|
"payload-heat": {
|
|
163
163
|
"files": ["src/integrations/grok/hooks/grok-hook-utils.js"],
|
|
164
164
|
"mark": "function buildSessionBootPayload",
|
|
165
|
-
"skills": "
|
|
165
|
+
"skills": "payload-heat, station-heat, pickup-stamp, grok-compact",
|
|
166
166
|
"plates": ["station-heat", "pickup-stamp"]
|
|
167
167
|
},
|
|
168
168
|
"station-heat": {
|
|
169
169
|
"files": ["src/integrations/hooks/station-hook-runtime.cjs"],
|
|
170
170
|
"mark": "function applyStationHeat",
|
|
171
|
-
"skills": "
|
|
171
|
+
"skills": "station-heat, pickup-stamp, notes-page, station-card",
|
|
172
172
|
"plates": ["pickup-stamp", "notes-page"]
|
|
173
173
|
},
|
|
174
174
|
"pickup-stamp": {
|
|
175
175
|
"files": ["src/integrations/hooks/station-hook-runtime.cjs"],
|
|
176
176
|
"mark": "One pickup line",
|
|
177
|
-
"skills": "
|
|
177
|
+
"skills": "pickup-stamp, notes-page, station-heat",
|
|
178
178
|
"plates": ["notes-page"]
|
|
179
179
|
},
|
|
180
180
|
"cursor-compact": {
|
|
181
181
|
"files": ["src/integrations/cursor/hooks/pre-compact.js"],
|
|
182
182
|
"mark": "cannot block",
|
|
183
|
-
"skills": "
|
|
183
|
+
"skills": "cursor-compact, payload-heat, station-heat, grok-compact",
|
|
184
184
|
"plates": ["payload-heat", "station-heat"]
|
|
185
185
|
}
|
|
186
186
|
,
|
|
187
187
|
"work-fresh": {
|
|
188
188
|
"files": ["src/nucleus/work-freshness.mjs"],
|
|
189
189
|
"mark": "export function refreshFreshness",
|
|
190
|
-
"skills": "
|
|
190
|
+
"skills": "work-fresh, station-card, grok-compact, kept-line",
|
|
191
191
|
"plates": ["station-card", "grok-compact"]
|
|
192
192
|
},
|
|
193
193
|
"kept-line": {
|
|
194
194
|
"files": ["src/integrations/hooks/station-hook-runtime.cjs"],
|
|
195
195
|
"mark": "function withOneFreshLine",
|
|
196
|
-
"skills": "
|
|
196
|
+
"skills": "kept-line, station-card, work-fresh",
|
|
197
197
|
"plates": ["station-card", "work-fresh"]
|
|
198
198
|
},
|
|
199
199
|
"lens-gate": {
|
|
200
|
-
"files": ["src/integrations/hooks/goggles-pipeline.mjs"],
|
|
200
|
+
"files": ["src/integrations/hooks/goggles-pipeline.mjs", "src/__tests__/unit/goggles-pipeline.test.ts"],
|
|
201
201
|
"mark": "export function lensBeforeResearch",
|
|
202
|
-
"skills": "
|
|
202
|
+
"skills": "lens-gate, pre-tool, lens-page, stamp-plate",
|
|
203
203
|
"plates": ["pre-tool"]
|
|
204
204
|
},
|
|
205
205
|
"pre-tool": {
|
|
206
206
|
"files": ["src/integrations/grok/hooks/pre-tool-use.js"],
|
|
207
207
|
"mark": "function extractFromEvent",
|
|
208
|
-
"skills": "
|
|
208
|
+
"skills": "pre-tool, lens-gate, delegation-gate",
|
|
209
209
|
"plates": ["lens-gate"]
|
|
210
210
|
},
|
|
211
211
|
"lens-page": {
|
|
212
212
|
"files": ["src/integrations/hooks/goggles-pipeline.mjs"],
|
|
213
213
|
"mark": "export function formatCardPane",
|
|
214
|
-
"skills": "
|
|
214
|
+
"skills": "lens-page, record-map, lens-gate",
|
|
215
215
|
"plates": ["record-map", "lens-gate"]
|
|
216
216
|
},
|
|
217
217
|
"centrifuge": {
|
|
218
218
|
"files": ["src/integrations/hooks/station-hook-runtime.cjs"],
|
|
219
219
|
"mark": "function wakeOrder",
|
|
220
|
-
"skills": "
|
|
220
|
+
"skills": "centrifuge, station-card, inference-cycle",
|
|
221
221
|
"plates": ["station-card", "goggles"]
|
|
222
|
+
},
|
|
223
|
+
"repertoire": {
|
|
224
|
+
"file": "src/memory-routing",
|
|
225
|
+
"skills": "repertoire, memory-recall, record-map, governance"
|
|
226
|
+
},
|
|
227
|
+
"dynamo": {
|
|
228
|
+
"file": "docs-site/docs/guides/self-hosting-dynamo.md",
|
|
229
|
+
"skills": "dynamo, governance, enforcer, confer"
|
|
230
|
+
},
|
|
231
|
+
"foundry": {
|
|
232
|
+
"root": "scripts/foundry",
|
|
233
|
+
"file": "scripts/foundry/release.mjs",
|
|
234
|
+
"skills": "foundry, npm-publish, suit-wear, package-face, consumer-mcp"
|
|
235
|
+
},
|
|
236
|
+
"delegation-gate": {
|
|
237
|
+
"file": "src/nucleus/delegation-gate.ts",
|
|
238
|
+
"skills": "delegation-gate, temperament, orchestration, routing"
|
|
239
|
+
},
|
|
240
|
+
"temperament": {
|
|
241
|
+
"file": "src/nucleus/suit-temperament.ts",
|
|
242
|
+
"skills": "temperament, delegation-gate, confer, orchestrator"
|
|
243
|
+
},
|
|
244
|
+
"asides": {
|
|
245
|
+
"file": "src/nucleus/user-aside.ts",
|
|
246
|
+
"skills": "asides, orchestration, station-card, record-map"
|
|
247
|
+
},
|
|
248
|
+
"inference-cycle": {
|
|
249
|
+
"file": "src/inference/inference-cycle.ts",
|
|
250
|
+
"skills": "inference-cycle, inference-files, session-capture, repertoire"
|
|
251
|
+
},
|
|
252
|
+
"hermes": {
|
|
253
|
+
"file": "src/integrations/hermes-agent",
|
|
254
|
+
"skills": "hermes, hermes-agent, boot-orchestrator, consumer-mcp"
|
|
255
|
+
},
|
|
256
|
+
"openclaw": {
|
|
257
|
+
"file": "src/integrations/openclaw",
|
|
258
|
+
"skills": "openclaw, boot-orchestrator, consumer-mcp, hermes"
|
|
259
|
+
},
|
|
260
|
+
"opencode": {
|
|
261
|
+
"file": "src/cli/commands/opencode-install.ts",
|
|
262
|
+
"skills": "opencode, boot-orchestrator, consumer-mcp, orchestrator"
|
|
263
|
+
},
|
|
264
|
+
"consumer-mcp": {
|
|
265
|
+
"root": "src/mcps",
|
|
266
|
+
"file": ".mcp.json",
|
|
267
|
+
"skills": "consumer-mcp, boot-orchestrator, hermes, openclaw"
|
|
268
|
+
},
|
|
269
|
+
"confer": {
|
|
270
|
+
"file": "src/nucleus/confer.ts",
|
|
271
|
+
"skills": "confer, governance, code-review, researcher"
|
|
222
272
|
}
|
|
223
273
|
}
|
|
224
|
-
|
|
@@ -47,6 +47,20 @@ const PLATE_IDS = Object.freeze([
|
|
|
47
47
|
"pre-tool",
|
|
48
48
|
"lens-page",
|
|
49
49
|
"centrifuge",
|
|
50
|
+
"ground",
|
|
51
|
+
"synthesis",
|
|
52
|
+
"repertoire",
|
|
53
|
+
"dynamo",
|
|
54
|
+
"foundry",
|
|
55
|
+
"delegation-gate",
|
|
56
|
+
"temperament",
|
|
57
|
+
"asides",
|
|
58
|
+
"inference-cycle",
|
|
59
|
+
"hermes",
|
|
60
|
+
"openclaw",
|
|
61
|
+
"opencode",
|
|
62
|
+
"consumer-mcp",
|
|
63
|
+
"confer",
|
|
50
64
|
]);
|
|
51
65
|
|
|
52
66
|
/** Id token, then extra phrases. Equal top scores recall nothing. */
|
|
@@ -235,6 +249,76 @@ const CUES = {
|
|
|
235
249
|
[/the centrifuge/i, 5],
|
|
236
250
|
[/plates\/centrifuge/i, 6],
|
|
237
251
|
],
|
|
252
|
+
ground: [
|
|
253
|
+
[/ground plane/i, 6],
|
|
254
|
+
[/ground plate/i, 6],
|
|
255
|
+
[/plates\/ground/i, 6],
|
|
256
|
+
],
|
|
257
|
+
synthesis: [
|
|
258
|
+
[/synthesis plate/i, 6],
|
|
259
|
+
[/synthesis checkpoint/i, 5],
|
|
260
|
+
[/plates\/synthesis/i, 6],
|
|
261
|
+
],
|
|
262
|
+
"repertoire": [
|
|
263
|
+
[/repertoire plate/i, 6],
|
|
264
|
+
[/repertoire organ/i, 5],
|
|
265
|
+
[/plates\/repertoire/i, 6],
|
|
266
|
+
],
|
|
267
|
+
"dynamo": [
|
|
268
|
+
[/dynamo plate/i, 6],
|
|
269
|
+
[/dynamo judgment/i, 5],
|
|
270
|
+
[/plates\/dynamo/i, 6],
|
|
271
|
+
],
|
|
272
|
+
"foundry": [
|
|
273
|
+
[/foundry plate/i, 6],
|
|
274
|
+
[/foundry release/i, 5],
|
|
275
|
+
[/plates\/foundry/i, 6],
|
|
276
|
+
],
|
|
277
|
+
"delegation-gate": [
|
|
278
|
+
[/delegation gate/i, 6],
|
|
279
|
+
[/delegation-gate plate/i, 6],
|
|
280
|
+
[/plates\/delegation-gate/i, 6],
|
|
281
|
+
],
|
|
282
|
+
"temperament": [
|
|
283
|
+
[/temperament plate/i, 6],
|
|
284
|
+
[/suit temperament/i, 6],
|
|
285
|
+
[/plates\/temperament/i, 6],
|
|
286
|
+
],
|
|
287
|
+
"asides": [
|
|
288
|
+
[/asides plate/i, 6],
|
|
289
|
+
[/user aside/i, 6],
|
|
290
|
+
[/plates\/asides/i, 6],
|
|
291
|
+
],
|
|
292
|
+
"inference-cycle": [
|
|
293
|
+
[/inference cycle/i, 6],
|
|
294
|
+
[/inference-cycle plate/i, 6],
|
|
295
|
+
[/plates\/inference-cycle/i, 6],
|
|
296
|
+
],
|
|
297
|
+
"hermes": [
|
|
298
|
+
[/hermes plate/i, 6],
|
|
299
|
+
[/hermes bridge/i, 5],
|
|
300
|
+
[/plates\/hermes/i, 6],
|
|
301
|
+
],
|
|
302
|
+
"openclaw": [
|
|
303
|
+
[/openclaw plate/i, 6],
|
|
304
|
+
[/openclaw plugin/i, 5],
|
|
305
|
+
[/plates\/openclaw/i, 6],
|
|
306
|
+
],
|
|
307
|
+
"opencode": [
|
|
308
|
+
[/opencode plate/i, 6],
|
|
309
|
+
[/opencode install/i, 5],
|
|
310
|
+
[/plates\/opencode/i, 6],
|
|
311
|
+
],
|
|
312
|
+
"consumer-mcp": [
|
|
313
|
+
[/consumer mcp/i, 6],
|
|
314
|
+
[/mcp registry set/i, 5],
|
|
315
|
+
[/plates\/consumer-mcp/i, 6],
|
|
316
|
+
],
|
|
317
|
+
"confer": [
|
|
318
|
+
[/confer plate/i, 6],
|
|
319
|
+
[/confer stays off/i, 5],
|
|
320
|
+
[/plates\/confer/i, 6],
|
|
321
|
+
],
|
|
238
322
|
};
|
|
239
323
|
|
|
240
324
|
function platesDir() {
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One pre-tool speak for every host.
|
|
3
|
+
* The lens denies an unnamed plane. The route speaks only when Repertoire changes the agent.
|
|
4
|
+
*/
|
|
5
|
+
import { createRequire } from 'node:module';
|
|
6
|
+
import { existsSync } from 'node:fs';
|
|
7
|
+
import { dirname, join } from 'node:path';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
import { lensBeforeResearch } from './goggles-pipeline.mjs';
|
|
10
|
+
|
|
11
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
let scoreAndRouteFn;
|
|
13
|
+
|
|
14
|
+
function loadScoreAndRoute() {
|
|
15
|
+
if (scoreAndRouteFn !== undefined) return scoreAndRouteFn;
|
|
16
|
+
scoreAndRouteFn = null;
|
|
17
|
+
const require = createRequire(import.meta.url);
|
|
18
|
+
const candidates = [
|
|
19
|
+
join(here, '../../nucleus/thin-dispatch.js'),
|
|
20
|
+
join(here, '../../../dist/nucleus/thin-dispatch.js'),
|
|
21
|
+
join(here, '../../../nucleus/thin-dispatch.js'),
|
|
22
|
+
];
|
|
23
|
+
for (const candidate of candidates) {
|
|
24
|
+
if (!existsSync(candidate)) continue;
|
|
25
|
+
try {
|
|
26
|
+
const loaded = require(candidate);
|
|
27
|
+
if (typeof loaded.scoreAndRoute === 'function') {
|
|
28
|
+
scoreAndRouteFn = loaded.scoreAndRoute;
|
|
29
|
+
return scoreAndRouteFn;
|
|
30
|
+
}
|
|
31
|
+
} catch {
|
|
32
|
+
/* next built copy */
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Speak only when the organ changes the agent. A match that leaves the agent is quiet. */
|
|
39
|
+
export function repertoireDecisionFields(routed) {
|
|
40
|
+
if (!routed?.memoryRouting?.overridden || !routed.agent) return null;
|
|
41
|
+
const signals = Array.isArray(routed.memoryRouting.signals)
|
|
42
|
+
? routed.memoryRouting.signals.slice(0, 4).filter(Boolean)
|
|
43
|
+
: [];
|
|
44
|
+
const why = signals.length ? ` on ${signals.join(', ')}` : '';
|
|
45
|
+
return {
|
|
46
|
+
agent: routed.agent,
|
|
47
|
+
gate: 'repertoire',
|
|
48
|
+
hookSpecificOutput: {
|
|
49
|
+
hookEventName: 'PreToolUse',
|
|
50
|
+
additionalContext: `Repertoire changed the route to ${routed.agent}${why}. Follow that agent for this work.`,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function repertoireRoute(operation) {
|
|
56
|
+
const text = String(operation || '').slice(0, 500).trim();
|
|
57
|
+
if (!text) return null;
|
|
58
|
+
try {
|
|
59
|
+
const scoreAndRoute = loadScoreAndRoute();
|
|
60
|
+
if (!scoreAndRoute) return null;
|
|
61
|
+
return repertoireDecisionFields(scoreAndRoute(text, {}));
|
|
62
|
+
} catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** The card for this tool, or null when the tool just runs. */
|
|
68
|
+
export function lensDecision(root, toolName, spoken) {
|
|
69
|
+
try {
|
|
70
|
+
return lensBeforeResearch(root, toolName, spoken);
|
|
71
|
+
} catch {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills seek. The card list is the prebuilt choice. Plate recall is the live one.
|
|
3
|
+
* A model is not called. A decline is the last tier.
|
|
4
|
+
* Confer on the result is only for a feat or a refactor. This does not start the quorum.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const TASK_TYPE_ROUTES = {
|
|
8
|
+
plan: "strategist",
|
|
9
|
+
architecture: "architect-tools",
|
|
10
|
+
research: "researcher",
|
|
11
|
+
implement: "backend-engineer",
|
|
12
|
+
frontend: "frontend-engineer",
|
|
13
|
+
test: "bug-triage",
|
|
14
|
+
review: "code-review",
|
|
15
|
+
security: "security-audit",
|
|
16
|
+
governance: "enforcer",
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const CATALOG_POINTERS = new Set(["SKILLS.md", ".agents/skills"]);
|
|
20
|
+
|
|
21
|
+
export function skillIdsFromRow(skills) {
|
|
22
|
+
const raw = Array.isArray(skills) ? skills.join(",") : String(skills || "");
|
|
23
|
+
const out = [];
|
|
24
|
+
for (const part of raw.split(",")) {
|
|
25
|
+
const token = part.trim();
|
|
26
|
+
if (!token || CATALOG_POINTERS.has(token)) continue;
|
|
27
|
+
const bits = token.split("/").filter(Boolean);
|
|
28
|
+
let id = token;
|
|
29
|
+
if (bits[bits.length - 1] === "SKILL.md" && bits.length >= 2) id = bits[bits.length - 2];
|
|
30
|
+
else if (token.includes("/")) id = bits[bits.length - 1];
|
|
31
|
+
if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(id)) continue;
|
|
32
|
+
if (out.includes(id)) continue;
|
|
33
|
+
out.push(id);
|
|
34
|
+
if (out.length === 5) break;
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function routeForTask(taskType) {
|
|
40
|
+
const key = String(taskType || "").trim().toLowerCase();
|
|
41
|
+
if (!key || !Object.prototype.hasOwnProperty.call(TASK_TYPE_ROUTES, key)) return "";
|
|
42
|
+
return TASK_TYPE_ROUTES[key];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function mentioned(skill, need) {
|
|
46
|
+
const text = String(need || "").toLowerCase();
|
|
47
|
+
if (!text) return false;
|
|
48
|
+
const escaped = skill.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
49
|
+
return new RegExp(`(^|[^a-z0-9])${escaped}([^a-z0-9]|$)`).test(text);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function fits(skill, need, taskType) {
|
|
53
|
+
const route = routeForTask(taskType);
|
|
54
|
+
if (route && route === skill) return true;
|
|
55
|
+
return mentioned(skill, need);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const PLATE_SKILL = {
|
|
59
|
+
boot: "boot-orchestrator",
|
|
60
|
+
processor: "processor-pipeline",
|
|
61
|
+
review: "code-review",
|
|
62
|
+
suit: "suit-wear",
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const PLATE_ONLY = new Set([
|
|
66
|
+
"goggles",
|
|
67
|
+
"kits",
|
|
68
|
+
"host-pack",
|
|
69
|
+
"glossary",
|
|
70
|
+
"dichotomy",
|
|
71
|
+
"syncopate",
|
|
72
|
+
"digest",
|
|
73
|
+
"triage",
|
|
74
|
+
"loop",
|
|
75
|
+
]);
|
|
76
|
+
|
|
77
|
+
export function staleSkillRow(skills) {
|
|
78
|
+
const raw = String(skills || "").trim();
|
|
79
|
+
if (!raw || CATALOG_POINTERS.has(raw)) return true;
|
|
80
|
+
if (raw.includes("/")) return true;
|
|
81
|
+
return skillIdsFromRow(raw).length < 3;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function skillFromPlate(plate, known, cardSkills) {
|
|
85
|
+
if (!plate || typeof plate !== "object") return "";
|
|
86
|
+
const id = String(plate.id || "").trim();
|
|
87
|
+
if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(id)) return "";
|
|
88
|
+
if (typeof cardSkills === "function") {
|
|
89
|
+
const first = skillIdsFromRow(cardSkills(id))[0] || "";
|
|
90
|
+
if (first && (!known || known.has(first))) return first;
|
|
91
|
+
}
|
|
92
|
+
const mapped = Object.prototype.hasOwnProperty.call(PLATE_SKILL, id) ? PLATE_SKILL[id] : "";
|
|
93
|
+
if (mapped && (!known || known.has(mapped))) return mapped;
|
|
94
|
+
if (PLATE_ONLY.has(id)) return "";
|
|
95
|
+
if (known && !known.has(id)) return "";
|
|
96
|
+
return id;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function seekSkill({ skills, need, taskType, workKind, recall, known, cardSkills } = {}) {
|
|
100
|
+
const confer = workKind === "feat" || workKind === "refactor";
|
|
101
|
+
for (const skill of skillIdsFromRow(skills)) {
|
|
102
|
+
if (fits(skill, need, taskType)) return { skill, tier: "card", confer };
|
|
103
|
+
}
|
|
104
|
+
let plate = null;
|
|
105
|
+
if (typeof recall === "function") {
|
|
106
|
+
try {
|
|
107
|
+
plate = recall(String(need || ""));
|
|
108
|
+
} catch {
|
|
109
|
+
plate = null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const fromPlate = skillFromPlate(plate, known, cardSkills);
|
|
113
|
+
if (fromPlate) return { skill: fromPlate, tier: "plate", confer };
|
|
114
|
+
return { skill: null, tier: "decline", confer };
|
|
115
|
+
}
|
|
@@ -1033,7 +1033,10 @@ function applyStationHeat(root, host, extra = {}, existing = {}) {
|
|
|
1033
1033
|
const intent = resolved.intent;
|
|
1034
1034
|
const rematch = resolved.rematch;
|
|
1035
1035
|
let notesLine = null;
|
|
1036
|
-
|
|
1036
|
+
const notesWake = isCompactHook(extra)
|
|
1037
|
+
|| isPromptHook(extra)
|
|
1038
|
+
|| /session[_-]?start/i.test(String(extra.hookEvent || extra.source || ""));
|
|
1039
|
+
if (notesWake) {
|
|
1037
1040
|
if (intent && (readStationTicketField(root, "Intent") || pickup || clipIntent(extra.intent))) {
|
|
1038
1041
|
const stamped = stampNotesPickup(root, intent);
|
|
1039
1042
|
if (stamped) pickup = stamped;
|