0xray 3.5.5 → 4.0.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/.mcp.json +18 -14
- package/.opencode/skills/api-design/SKILL.md +1 -1
- package/.opencode/skills/architect-tools/SKILL.md +1 -1
- package/.opencode/skills/architecture-patterns/SKILL.md +1 -1
- package/.opencode/skills/auto-format/SKILL.md +1 -1
- package/.opencode/skills/boot-orchestrator/SKILL.md +2 -6
- package/.opencode/skills/bug-triage/SKILL.md +1 -1
- package/.opencode/skills/code-analyzer/SKILL.md +1 -1
- package/.opencode/skills/code-review/SKILL.md +1 -1
- package/.opencode/skills/enforcer/SKILL.md +1 -1
- package/.opencode/skills/framework-compliance-audit/SKILL.md +1 -1
- package/.opencode/skills/git-workflow/SKILL.md +1 -1
- package/.opencode/skills/hermes-agent/SKILL.md +36 -36
- package/.opencode/skills/inference-improve/SKILL.md +1 -1
- package/.opencode/skills/lint/SKILL.md +1 -1
- package/.opencode/skills/log-monitor/SKILL.md +1 -1
- package/.opencode/skills/model-health-check/SKILL.md +1 -1
- package/.opencode/skills/multimodal-looker/SKILL.md +1 -1
- package/.opencode/skills/orchestrator/SKILL.md +38 -14
- package/.opencode/skills/performance-analysis/SKILL.md +1 -1
- package/.opencode/skills/performance-optimization/SKILL.md +1 -1
- package/.opencode/skills/processor-pipeline/SKILL.md +1 -1
- package/.opencode/skills/project-analysis/SKILL.md +1 -1
- package/.opencode/skills/refactoring-strategies/SKILL.md +1 -1
- package/.opencode/skills/registry.json +65 -0
- package/.opencode/skills/researcher/SKILL.md +18 -5
- package/.opencode/skills/security-audit/SKILL.md +1 -1
- package/.opencode/skills/security-scan/SKILL.md +1 -1
- package/.opencode/skills/session-management/SKILL.md +1 -1
- package/.opencode/skills/state-manager/SKILL.md +1 -1
- package/.opencode/skills/storyteller/SKILL.md +1 -1
- package/.opencode/skills/strategist/SKILL.md +12 -0
- package/.opencode/skills/testing-best-practices/SKILL.md +37 -0
- package/.opencode/skills/testing-strategy/SKILL.md +14 -3
- package/.opencode/skills/ui-ux-design/SKILL.md +1 -1
- package/.opencode/skills/xray-orchestrator/index.ts +267 -0
- package/.xray/codex.json +12 -3
- package/.xray/features.json +28 -6
- package/.xray/features.schema.json +31 -0
- package/AGENTS-consumer.md +17 -7
- package/AGENTS.md +18 -10
- package/README.md +30 -27
- package/SKILLS.md +2 -2
- package/dist/AGENTS.md +18 -10
- package/dist/CHANGELOG.md +81 -11
- package/dist/README.md +30 -27
- package/dist/SKILLS.md +2 -2
- package/dist/cli/commands/hermes-install.js +3 -0
- package/dist/cli/commands/openclaw-install.js +14 -0
- package/dist/cli/index.js +10 -1
- package/dist/core/features-config.d.ts +15 -2
- package/dist/infrastructure/schemas/cloud-schemas.d.ts +1 -1
- package/dist/integrations/grok/grok-cli.d.ts +3 -0
- package/dist/integrations/grok/grok-cli.js +92 -4
- package/dist/integrations/grok/hooks/grok-hook-utils.js +53 -7
- package/dist/integrations/grok/hooks/post-tool-use.js +68 -46
- package/dist/integrations/grok/hooks/pre-tool-use.js +14 -31
- package/dist/integrations/grok/hooks/session-start.js +86 -4
- package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +31 -24
- package/dist/integrations/hermes-agent/bridge.mjs +26 -1
- package/dist/integrations/hooks/delegation-gate-runtime.mjs +32 -3
- package/dist/integrations/hooks/pipeline-hook-runtime.mjs +1 -1
- package/dist/integrations/hooks/station-hook-runtime.cjs +421 -0
- package/dist/integrations/hooks/station-hook-runtime.mjs +24 -0
- package/dist/integrations/hooks/station-memory-ingest.mjs +45 -0
- package/dist/integrations/hooks/station-memory-match.mjs +47 -0
- package/dist/integrations/openclaw/client.d.ts +5 -1
- package/dist/integrations/openclaw/client.js +17 -9
- package/dist/integrations/openclaw/config.js +0 -1
- package/dist/integrations/openclaw/hooks/pre-tool-gate-runtime.mjs +102 -0
- package/dist/integrations/openclaw/index.js +17 -0
- package/dist/integrations/openclaw/plugin/xray-pre-tool/index.js +75 -0
- package/dist/integrations/openclaw/plugin/xray-pre-tool/openclaw.plugin.json +10 -0
- package/dist/integrations/openclaw/plugin/xray-pre-tool/package.json +12 -0
- package/dist/integrations/openclaw/pre-tool-gate.d.ts +19 -0
- package/dist/integrations/openclaw/pre-tool-gate.js +39 -0
- package/dist/mcps/orchestrator/handlers/complexity-handler.js +2 -2
- package/dist/memory-routing/index.d.ts +1 -1
- package/dist/memory-routing/index.js +1 -1
- package/dist/memory-routing/provider-loader.d.ts +4 -0
- package/dist/memory-routing/provider-loader.js +44 -2
- package/dist/memory-routing/provider-registry.js +3 -2
- package/dist/nucleus/autonomy-kernel.d.ts +2 -2
- package/dist/nucleus/autonomy-kernel.js +17 -6
- package/dist/nucleus/confer.js +17 -3
- package/dist/nucleus/delegation-gate.d.ts +14 -8
- package/dist/nucleus/delegation-gate.js +151 -16
- package/dist/nucleus/suit-temperament.d.ts +40 -0
- package/dist/nucleus/suit-temperament.js +157 -0
- package/dist/nucleus/user-aside.js +1 -1
- package/dist/plugin/xray-codex-injection.js +14 -3
- package/dist/postprocessor/triggers/GitHookTrigger.js +11 -5
- package/opencode.json +80 -0
- package/package.json +15 -5
- package/scripts/hooks/install-hooks.cjs +18 -3
- package/scripts/hooks/run-hook.js +67 -3
- package/scripts/mjs/run-repertoire-mcp.mjs +39 -0
- package/scripts/mjs/verify-confer-core.mjs +1 -1
- package/scripts/mjs/verify-delegation-gate-core.mjs +29 -2
- package/scripts/mjs/verify-four-floor-compact.mjs +524 -0
- package/scripts/mjs/verify-pipeline-facets.mjs +215 -0
- package/scripts/mjs/verify-temperament-live.mjs +261 -0
- package/scripts/node/bridge-mcp-wiring.cjs +277 -29
- package/scripts/node/consumer-install-smoke.mjs +55 -2
- package/scripts/node/install-bridges.cjs +195 -33
- package/scripts/node/postinstall.cjs +50 -27
- package/scripts/node/reconcile-version.mjs +0 -4
- package/scripts/node/release-gate.mjs +1 -1
- package/scripts/node/release.mjs +2 -2
- package/scripts/node/universal-version-manager.js +1 -1
- package/scripts/node/validate-release-docs.mjs +20 -33
- package/scripts/node/version-manager.mjs +63 -18
- package/src/integrations/grok/plugin/0xray/hooks/hooks.json +31 -24
- package/src/integrations/openclaw/README.md +134 -0
- package/src/integrations/openclaw/plugin/xray-pre-tool/index.js +75 -0
- package/src/integrations/openclaw/plugin/xray-pre-tool/openclaw.plugin.json +10 -0
- package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +12 -0
- package/src/mcps/orchestrator/handlers/complexity-handler.ts +2 -1
- package/vendor/@0xray/repertoire/AGENTS.md +163 -0
- package/vendor/@0xray/repertoire/LICENSE +21 -0
- package/vendor/@0xray/repertoire/README.md +120 -0
- package/vendor/@0xray/repertoire/data/curated_signals.json +208 -0
- package/vendor/@0xray/repertoire/dist/RepertoireService.d.ts +78 -0
- package/vendor/@0xray/repertoire/dist/RepertoireService.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/RepertoireService.js +153 -0
- package/vendor/@0xray/repertoire/dist/RepertoireService.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.d.ts +39 -0
- package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.js +60 -0
- package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/index.d.ts +14 -0
- package/vendor/@0xray/repertoire/dist/index.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/index.js +14 -0
- package/vendor/@0xray/repertoire/dist/index.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.d.ts +26 -0
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.js +109 -0
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.d.ts +18 -0
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.js +94 -0
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.d.ts +7 -0
- package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.js +18 -0
- package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.d.ts +31 -0
- package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.js +83 -0
- package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/mcp/server.d.ts +6 -0
- package/vendor/@0xray/repertoire/dist/mcp/server.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/mcp/server.js +173 -0
- package/vendor/@0xray/repertoire/dist/mcp/server.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.d.ts +27 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.js +107 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.d.ts +11 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.js +32 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.d.ts +9 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.js +72 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.d.ts +5 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.js +18 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.d.ts +31 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.js +218 -0
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/paths.d.ts +24 -0
- package/vendor/@0xray/repertoire/dist/paths.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/paths.js +74 -0
- package/vendor/@0xray/repertoire/dist/paths.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.d.ts +141 -0
- package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.js +210 -0
- package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.d.ts +48 -0
- package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.js +221 -0
- package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.d.ts +11 -0
- package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.js +43 -0
- package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/registry/signal-prune.d.ts +15 -0
- package/vendor/@0xray/repertoire/dist/registry/signal-prune.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/registry/signal-prune.js +35 -0
- package/vendor/@0xray/repertoire/dist/registry/signal-prune.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.d.ts +3 -0
- package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.js +24 -0
- package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.d.ts +24 -0
- package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.js +148 -0
- package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.d.ts +4 -0
- package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.js +44 -0
- package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.d.ts +22 -0
- package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.js +66 -0
- package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.js.map +1 -0
- package/vendor/@0xray/repertoire/dist/types.d.ts +210 -0
- package/vendor/@0xray/repertoire/dist/types.d.ts.map +1 -0
- package/vendor/@0xray/repertoire/dist/types.js +2 -0
- package/vendor/@0xray/repertoire/dist/types.js.map +1 -0
- package/vendor/@0xray/repertoire/docs/MEMORY-ROUTING-PROVIDER.md +54 -0
- package/vendor/@0xray/repertoire/hermes-mcp.example.json +20 -0
- package/vendor/@0xray/repertoire/mcp-config.example.json +11 -0
- package/vendor/@0xray/repertoire/package.json +124 -0
- package/vendor/@0xray/repertoire/schemas/curated-signal.schema.json +68 -0
- package/vendor/@0xray/repertoire/schemas/inference-log.schema.json +82 -0
- package/vendor/@0xray/repertoire/scripts/confirm-suit-all.mjs +253 -0
- package/vendor/@0xray/repertoire/scripts/confirm-suit-harness.mjs +220 -0
- package/vendor/@0xray/repertoire/scripts/run-live-synthesis-checkpoint.mjs +215 -0
- package/vendor/@0xray/repertoire/scripts/suit-bridge-shared.mjs +139 -0
- package/vendor/@0xray/repertoire/scripts/verify-grok-suit.mjs +304 -0
- package/vendor/@0xray/repertoire/scripts/verify-hermes-suit.mjs +163 -0
- package/vendor/@0xray/repertoire/scripts/verify-openclaw-suit.mjs +125 -0
- package/vendor/@0xray/repertoire/scripts/verify-opencode-suit.mjs +127 -0
- package/vendor/@0xray/repertoire/scripts/verify-synthesis-dogfood.mjs +207 -0
- package/vendor/@0xray/repertoire/skills/repertoire-trap-handling/SKILL.md +206 -0
- package/xray/codex.json +12 -3
- package/xray/features.json +28 -6
- package/xray/features.schema.json +31 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Implementing a Custom MemoryRoutingProvider
|
|
2
|
+
|
|
3
|
+
0xRay loads memory routing providers dynamically. Repertoire is the reference implementation.
|
|
4
|
+
|
|
5
|
+
## Contract
|
|
6
|
+
|
|
7
|
+
Export from your package:
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
export function createMemoryRoutingProvider(
|
|
11
|
+
config?: Record<string, unknown>
|
|
12
|
+
): MemoryRoutingProvider
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Interface (mirror of `xray/src/memory-routing/types.ts`):
|
|
16
|
+
|
|
17
|
+
| Method | Purpose |
|
|
18
|
+
|--------|---------|
|
|
19
|
+
| `isAvailable()` | Whether provider data is reachable |
|
|
20
|
+
| `buildRoutingContext(operation)` | Match signals/tags for an operation |
|
|
21
|
+
| `enhanceAgentCapabilities(map)` | Add memory dimensions to agents |
|
|
22
|
+
| `enrichTasks(tasks)` | Attach metadata before planning |
|
|
23
|
+
| `buildInheritedContext(tasks)` | Context for AsideContext |
|
|
24
|
+
| `selectAgent(...)` | Signal-aware agent selection |
|
|
25
|
+
| `resolveThinDispatch(...)` | Adjust score + agent override |
|
|
26
|
+
| `ingestFeedback?(entry)` | Close feedback loop |
|
|
27
|
+
|
|
28
|
+
## 0xRay Configuration
|
|
29
|
+
|
|
30
|
+
In `xray/features.json` or `.xray/features.json`:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
"memory_routing": {
|
|
34
|
+
"enabled": true,
|
|
35
|
+
"provider": "custom",
|
|
36
|
+
"module_path": "../your-provider/dist/memory-routing-provider.js",
|
|
37
|
+
"config": {}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Set `provider: "null"` to disable without removing config.
|
|
42
|
+
|
|
43
|
+
## Repertoire as Provider
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
"memory_routing": {
|
|
47
|
+
"enabled": true,
|
|
48
|
+
"provider": "repertoire",
|
|
49
|
+
"module_path": "../repertoire/dist/provider/memory-routing-provider.js",
|
|
50
|
+
"config": {
|
|
51
|
+
"signalsPath": "../repertoire/data/curated_signals.json"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"repertoire": {
|
|
4
|
+
"command": "npx",
|
|
5
|
+
"args": ["-y", "@0xray/repertoire", "mcp"]
|
|
6
|
+
},
|
|
7
|
+
"xray-researcher": {
|
|
8
|
+
"command": "npx",
|
|
9
|
+
"args": ["-y", "0xray", "mcp", "researcher"]
|
|
10
|
+
},
|
|
11
|
+
"xray-architect-tools": {
|
|
12
|
+
"command": "npx",
|
|
13
|
+
"args": ["-y", "0xray", "mcp", "architect-tools"]
|
|
14
|
+
},
|
|
15
|
+
"xray-governance": {
|
|
16
|
+
"command": "npx",
|
|
17
|
+
"args": ["-y", "0xray", "mcp", "governance"]
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@0xray/repertoire",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Factory memory organ for 0xRay — seed primitives, memory routing, extra MCP",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"readme": "README.md",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/0xRayAI/repertoire.git"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/0xRayAI/repertoire#readme",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/0xRayAI/repertoire/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"0xray",
|
|
18
|
+
"repertoire",
|
|
19
|
+
"mcp",
|
|
20
|
+
"memory-routing",
|
|
21
|
+
"orchestration",
|
|
22
|
+
"groover",
|
|
23
|
+
"agent",
|
|
24
|
+
"governance"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18"
|
|
28
|
+
},
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"main": "dist/index.js",
|
|
33
|
+
"types": "dist/index.d.ts",
|
|
34
|
+
"exports": {
|
|
35
|
+
".": {
|
|
36
|
+
"types": "./dist/index.d.ts",
|
|
37
|
+
"import": "./dist/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./package.json": "./package.json",
|
|
40
|
+
"./provider/memory-routing-provider": {
|
|
41
|
+
"types": "./dist/provider/memory-routing-provider.d.ts",
|
|
42
|
+
"import": "./dist/provider/memory-routing-provider.js"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"bin": {
|
|
46
|
+
"repertoire-mcp": "./dist/mcp/server.js",
|
|
47
|
+
"repertoire-verify-suit": "./scripts/verify-grok-suit.mjs"
|
|
48
|
+
},
|
|
49
|
+
"files": [
|
|
50
|
+
"dist/",
|
|
51
|
+
"scripts/verify-grok-suit.mjs",
|
|
52
|
+
"scripts/verify-synthesis-dogfood.mjs",
|
|
53
|
+
"scripts/run-live-synthesis-checkpoint.mjs",
|
|
54
|
+
"scripts/suit-bridge-shared.mjs",
|
|
55
|
+
"scripts/confirm-suit-harness.mjs",
|
|
56
|
+
"scripts/confirm-suit-all.mjs",
|
|
57
|
+
"scripts/verify-hermes-suit.mjs",
|
|
58
|
+
"scripts/verify-opencode-suit.mjs",
|
|
59
|
+
"scripts/verify-openclaw-suit.mjs",
|
|
60
|
+
"data/curated_signals.json",
|
|
61
|
+
"schemas/",
|
|
62
|
+
"skills/repertoire-trap-handling/",
|
|
63
|
+
"docs/MEMORY-ROUTING-PROVIDER.md",
|
|
64
|
+
"hermes-mcp.example.json",
|
|
65
|
+
"mcp-config.example.json",
|
|
66
|
+
"AGENTS.md",
|
|
67
|
+
"README.md",
|
|
68
|
+
"LICENSE"
|
|
69
|
+
],
|
|
70
|
+
"scripts": {
|
|
71
|
+
"build": "tsc",
|
|
72
|
+
"prepublishOnly": "npm run build && npm test && node scripts/consumer-install-smoke.mjs",
|
|
73
|
+
"pack:check": "npm run build && node scripts/consumer-install-smoke.mjs && npm pack --dry-run",
|
|
74
|
+
"ingest": "node --import tsx scripts/ingest.ts",
|
|
75
|
+
"health:repertoire": "node --import tsx scripts/repertoire-health.ts",
|
|
76
|
+
"signals:hygiene": "node --import tsx scripts/signals-hygiene.ts",
|
|
77
|
+
"enrich": "node --import tsx scripts/enrich-repertoire.ts",
|
|
78
|
+
"ingest:moltbook-agents": "node --import tsx scripts/ingest-moltbook-agents.ts",
|
|
79
|
+
"meta-inference": "node --import tsx scripts/run-meta-inference.ts",
|
|
80
|
+
"pipeline": "node --import tsx scripts/run-pipeline.ts",
|
|
81
|
+
"feedback-cycle": "node --import tsx scripts/run-feedback-cycle.ts",
|
|
82
|
+
"query": "node --import tsx scripts/query-signals.ts",
|
|
83
|
+
"mcp": "node dist/mcp/server.js",
|
|
84
|
+
"test": "vitest run",
|
|
85
|
+
"test:e2e": "vitest run scripts/e2e-confidence-loop.test.ts",
|
|
86
|
+
"test:mcp": "npm run build && vitest run scripts/test-mcp-stdio.test.ts",
|
|
87
|
+
"test:trap-routing": "npm run build && vitest run --config vitest.trap-routing.config.ts",
|
|
88
|
+
"verify:suit": "npm run build && node scripts/verify-grok-suit.mjs",
|
|
89
|
+
"verify:synthesis-dogfood": "npm run build && node scripts/verify-synthesis-dogfood.mjs",
|
|
90
|
+
"synthesis:live": "node scripts/run-live-synthesis-checkpoint.mjs",
|
|
91
|
+
"verify:grok-delegation-gate": "node node_modules/0xray/scripts/mjs/verify-grok-delegation-gate.mjs",
|
|
92
|
+
"confirm:suit": "npm run verify:suit && npm run verify:synthesis-dogfood && node scripts/confirm-suit-harness.mjs && npm run test:trap-routing",
|
|
93
|
+
"verify:suit:all": "npm run build && node scripts/confirm-suit-all.mjs",
|
|
94
|
+
"confirm:suit:all": "npm run build && node scripts/confirm-suit-all.mjs --install --grok-harness && npm run test:trap-routing",
|
|
95
|
+
"confirm:suit:full": "npm run build && node scripts/confirm-suit-all.mjs --install --grok-harness --pipeline-audit && npm run test:trap-routing",
|
|
96
|
+
"verify:pipeline-facets": "npm run build --prefix node_modules/0xray 2>/dev/null || npm run build && node node_modules/0xray/scripts/mjs/verify-pipeline-facets.mjs",
|
|
97
|
+
"install:bridges": "npx 0xray grok install --force && npx 0xray hermes install --force && npx 0xray opencode install --force && npx 0xray openclaw install --force",
|
|
98
|
+
"verify:hermes": "node scripts/verify-hermes-suit.mjs",
|
|
99
|
+
"verify:opencode": "node scripts/verify-opencode-suit.mjs",
|
|
100
|
+
"verify:openclaw": "node scripts/verify-openclaw-suit.mjs",
|
|
101
|
+
"confirm:hermes": "npm run build && npx 0xray hermes install --force && npm run verify:hermes",
|
|
102
|
+
"confirm:opencode": "npm run build && npx 0xray opencode install --force && npm run verify:opencode",
|
|
103
|
+
"confirm:openclaw": "npm run build && npx 0xray openclaw install --force && npm run verify:openclaw",
|
|
104
|
+
"test:watch": "vitest"
|
|
105
|
+
},
|
|
106
|
+
"dependencies": {
|
|
107
|
+
"@modelcontextprotocol/sdk": "^1.12.0"
|
|
108
|
+
},
|
|
109
|
+
"peerDependencies": {
|
|
110
|
+
"0xray": ">=3.5.5"
|
|
111
|
+
},
|
|
112
|
+
"peerDependenciesMeta": {
|
|
113
|
+
"0xray": {
|
|
114
|
+
"optional": true
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"devDependencies": {
|
|
118
|
+
"0xray": "file:../xray",
|
|
119
|
+
"@types/node": "^22.15.0",
|
|
120
|
+
"tsx": "^4.19.0",
|
|
121
|
+
"typescript": "^5.6.0",
|
|
122
|
+
"vitest": "^4.1.8"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://repertoire.0xray.ai/schemas/curated-signal.schema.json",
|
|
4
|
+
"title": "CuratedSignal",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": [
|
|
7
|
+
"name",
|
|
8
|
+
"definition",
|
|
9
|
+
"tags",
|
|
10
|
+
"priority",
|
|
11
|
+
"evaluation_criteria",
|
|
12
|
+
"validation_experiment",
|
|
13
|
+
"master_index_integration",
|
|
14
|
+
"implementation_notes"
|
|
15
|
+
],
|
|
16
|
+
"properties": {
|
|
17
|
+
"name": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"pattern": "^[a-z0-9][a-z0-9_-]*$",
|
|
20
|
+
"description": "Kebab-case primitive identifier"
|
|
21
|
+
},
|
|
22
|
+
"definition": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"minLength": 10
|
|
25
|
+
},
|
|
26
|
+
"example_inference_snippet": {
|
|
27
|
+
"type": "string"
|
|
28
|
+
},
|
|
29
|
+
"tags": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": { "type": "string" },
|
|
32
|
+
"minItems": 1
|
|
33
|
+
},
|
|
34
|
+
"batches": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"items": { "type": "integer", "minimum": 1 }
|
|
37
|
+
},
|
|
38
|
+
"first_seen": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"format": "date"
|
|
41
|
+
},
|
|
42
|
+
"status": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"enum": ["proposed", "validated", "integrated", "deprecated"]
|
|
45
|
+
},
|
|
46
|
+
"priority": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"enum": ["high", "medium", "low"]
|
|
49
|
+
},
|
|
50
|
+
"evaluation_criteria": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"minLength": 10
|
|
53
|
+
},
|
|
54
|
+
"validation_experiment": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"minLength": 10
|
|
57
|
+
},
|
|
58
|
+
"master_index_integration": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"minLength": 10
|
|
61
|
+
},
|
|
62
|
+
"implementation_notes": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"minLength": 10
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"additionalProperties": false
|
|
68
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://repertoire.0xray.ai/schemas/inference-log.schema.json",
|
|
4
|
+
"title": "InferenceLogEntry",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["timestamp", "source", "inference"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"timestamp": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"format": "date-time"
|
|
11
|
+
},
|
|
12
|
+
"source": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"enum": ["groover", "xray", "dynamo", "orchestrator"]
|
|
15
|
+
},
|
|
16
|
+
"post_id": { "type": "string" },
|
|
17
|
+
"post_title": { "type": "string" },
|
|
18
|
+
"comment_id": { "type": "string" },
|
|
19
|
+
"session_id": { "type": "string" },
|
|
20
|
+
"inference": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"minLength": 1
|
|
23
|
+
},
|
|
24
|
+
"public_reply": { "type": "string" },
|
|
25
|
+
"inference_type": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"enum": [
|
|
28
|
+
"theoretical",
|
|
29
|
+
"temporal-drift",
|
|
30
|
+
"practical-workflow",
|
|
31
|
+
"ontological-trap",
|
|
32
|
+
"provenance-failure"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"matched_primitives": {
|
|
36
|
+
"type": "array",
|
|
37
|
+
"items": { "type": "string" }
|
|
38
|
+
},
|
|
39
|
+
"match_confidence": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"additionalProperties": {
|
|
42
|
+
"type": "number",
|
|
43
|
+
"minimum": 0,
|
|
44
|
+
"maximum": 1
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"governance_forced": {
|
|
48
|
+
"type": "boolean"
|
|
49
|
+
},
|
|
50
|
+
"dynamo_result": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"properties": {
|
|
53
|
+
"result": {
|
|
54
|
+
"oneOf": [
|
|
55
|
+
{ "type": "null" },
|
|
56
|
+
{
|
|
57
|
+
"type": "object",
|
|
58
|
+
"properties": {
|
|
59
|
+
"recommendation": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"enum": ["PASS", "NEEDS_REVISION", "REJECT"]
|
|
62
|
+
},
|
|
63
|
+
"resonanceScore": { "type": "number", "minimum": 0, "maximum": 1 }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"matchedPrimitives": {
|
|
69
|
+
"type": "array",
|
|
70
|
+
"items": { "type": "string" }
|
|
71
|
+
},
|
|
72
|
+
"error": { "type": "string" },
|
|
73
|
+
"status": { "type": "integer" }
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"repertoire_signals": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"items": { "type": "string" }
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"additionalProperties": true
|
|
82
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Unified 0xRay suit wear matrix — all 4 plugin environments.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* node scripts/confirm-suit-all.mjs # verify all bridges (no install)
|
|
7
|
+
* node scripts/confirm-suit-all.mjs --install # native 0xray install + verify
|
|
8
|
+
* node scripts/confirm-suit-all.mjs --grok-harness # include Grok Layer 2a/2c harness
|
|
9
|
+
* node scripts/confirm-suit-all.mjs --only=hermes,opencode
|
|
10
|
+
*
|
|
11
|
+
* npm scripts:
|
|
12
|
+
* verify:suit:all — matrix verify only
|
|
13
|
+
* confirm:suit:all — build + install all + verify + Grok harness + trap-routing test
|
|
14
|
+
*/
|
|
15
|
+
import { execSync, spawnSync } from 'node:child_process';
|
|
16
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
17
|
+
import { resolve, join } from 'node:path';
|
|
18
|
+
import { HERMES_PLUGIN_DIR, readInstalledXrayVersion } from './suit-bridge-shared.mjs';
|
|
19
|
+
|
|
20
|
+
const root = resolve(import.meta.dirname, '..');
|
|
21
|
+
const args = process.argv.slice(2);
|
|
22
|
+
|
|
23
|
+
const flags = {
|
|
24
|
+
install: args.includes('--install'),
|
|
25
|
+
grokHarness: args.includes('--grok-harness'),
|
|
26
|
+
verifyOnly: args.includes('--verify-only'),
|
|
27
|
+
pipelineAudit: args.includes('--pipeline-audit'),
|
|
28
|
+
};
|
|
29
|
+
const onlyArg = args.find((a) => a.startsWith('--only='));
|
|
30
|
+
const onlySet = onlyArg
|
|
31
|
+
? new Set(onlyArg.slice('--only='.length).split(',').map((s) => s.trim().toLowerCase()))
|
|
32
|
+
: null;
|
|
33
|
+
|
|
34
|
+
/** Hermes last — consumer root marker must win over any stale npx-cache path. */
|
|
35
|
+
const BRIDGES = [
|
|
36
|
+
{
|
|
37
|
+
id: 'grok',
|
|
38
|
+
label: 'Grok Build',
|
|
39
|
+
cli: null,
|
|
40
|
+
installCmd: 'npx 0xray grok install --force',
|
|
41
|
+
verifyScript: 'verify-grok-suit.mjs',
|
|
42
|
+
harnessScript: 'confirm-suit-harness.mjs',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: 'opencode',
|
|
46
|
+
label: 'OpenCode',
|
|
47
|
+
cli: 'opencode',
|
|
48
|
+
installCmd: 'npx 0xray opencode install --force',
|
|
49
|
+
verifyScript: 'verify-opencode-suit.mjs',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: 'openclaw',
|
|
53
|
+
label: 'OpenClaw',
|
|
54
|
+
cli: 'openclaw',
|
|
55
|
+
installCmd: 'npx 0xray openclaw install --force',
|
|
56
|
+
verifyScript: 'verify-openclaw-suit.mjs',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 'hermes',
|
|
60
|
+
label: 'Hermes',
|
|
61
|
+
cli: 'hermes',
|
|
62
|
+
installCmd: 'npx 0xray hermes install --force',
|
|
63
|
+
verifyScript: 'verify-hermes-suit.mjs',
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
function ensureHermesConsumerRoot() {
|
|
68
|
+
const markerPath = join(HERMES_PLUGIN_DIR, 'xray-consumer-root.txt');
|
|
69
|
+
if (!existsSync(markerPath)) return;
|
|
70
|
+
const marked = readFileSync(markerPath, 'utf8').trim();
|
|
71
|
+
if (marked === root) return;
|
|
72
|
+
if (!cliAvailable('hermes')) return;
|
|
73
|
+
console.log(`⚠ Hermes consumer root drift (${marked}) — re-running hermes install\n`);
|
|
74
|
+
runInstall('npx 0xray hermes install --force');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function bridgeEnabled(bridge) {
|
|
78
|
+
return !onlySet || onlySet.has(bridge.id);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function cliAvailable(cmd) {
|
|
82
|
+
if (!cmd) return true;
|
|
83
|
+
try {
|
|
84
|
+
execSync(`which ${cmd}`, { encoding: 'utf8', stdio: 'pipe' });
|
|
85
|
+
return true;
|
|
86
|
+
} catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function runScript(scriptName, { inheritOutput = true } = {}) {
|
|
92
|
+
const scriptPath = join(root, 'scripts', scriptName);
|
|
93
|
+
if (!existsSync(scriptPath)) {
|
|
94
|
+
return { ok: false, status: 'error', detail: `${scriptName} missing` };
|
|
95
|
+
}
|
|
96
|
+
const result = spawnSync('node', [scriptPath], {
|
|
97
|
+
cwd: root,
|
|
98
|
+
encoding: 'utf8',
|
|
99
|
+
stdio: inheritOutput ? 'inherit' : ['inherit', 'pipe', 'pipe'],
|
|
100
|
+
});
|
|
101
|
+
const combined = `${result.stdout ?? ''}${result.stderr ?? ''}`;
|
|
102
|
+
const failCount = (combined.match(/❌/g) ?? []).length;
|
|
103
|
+
return {
|
|
104
|
+
ok: result.status === 0,
|
|
105
|
+
status: result.status === 0 ? 'green' : 'red',
|
|
106
|
+
detail: result.status === 0 ? 'wearable' : `${failCount || 1} check(s) failed`,
|
|
107
|
+
exitCode: result.status ?? 1,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function runInstall(cmd) {
|
|
112
|
+
try {
|
|
113
|
+
execSync(cmd, { cwd: root, stdio: 'inherit' });
|
|
114
|
+
return { ok: true };
|
|
115
|
+
} catch (e) {
|
|
116
|
+
return { ok: false, detail: e.message?.slice(0, 120) ?? 'install failed' };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
console.log('═══ 0xRay Suit Wear Matrix (4 plugin environments) ═══\n');
|
|
121
|
+
console.log(`0xray@${readInstalledXrayVersion()} · consumer ${root}\n`);
|
|
122
|
+
|
|
123
|
+
if (flags.install) {
|
|
124
|
+
console.log('Phase 0 — Native bridge install (--install)\n');
|
|
125
|
+
for (const bridge of BRIDGES) {
|
|
126
|
+
if (!bridgeEnabled(bridge)) continue;
|
|
127
|
+
if (bridge.cli && !cliAvailable(bridge.cli)) {
|
|
128
|
+
console.log(`⏭ ${bridge.label} install skipped — ${bridge.cli} not on PATH`);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
console.log(`→ ${bridge.installCmd}`);
|
|
132
|
+
const install = runInstall(bridge.installCmd);
|
|
133
|
+
if (!install.ok) {
|
|
134
|
+
console.error(`❌ ${bridge.label} install failed — ${install.detail}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
ensureHermesConsumerRoot();
|
|
138
|
+
console.log('');
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const matrix = [];
|
|
142
|
+
|
|
143
|
+
console.log('Phase 1 — Per-bridge verification\n');
|
|
144
|
+
for (const bridge of BRIDGES) {
|
|
145
|
+
if (!bridgeEnabled(bridge)) continue;
|
|
146
|
+
|
|
147
|
+
if (bridge.cli && !cliAvailable(bridge.cli)) {
|
|
148
|
+
matrix.push({
|
|
149
|
+
id: bridge.id,
|
|
150
|
+
label: bridge.label,
|
|
151
|
+
status: 'skip',
|
|
152
|
+
detail: `${bridge.cli} not on PATH`,
|
|
153
|
+
});
|
|
154
|
+
console.log(`⏭ ${bridge.label} — skipped (${bridge.cli} not installed)\n`);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
console.log(`── ${bridge.label} (${bridge.verifyScript}) ──\n`);
|
|
159
|
+
const verify = runScript(bridge.verifyScript);
|
|
160
|
+
matrix.push({
|
|
161
|
+
id: bridge.id,
|
|
162
|
+
label: bridge.label,
|
|
163
|
+
status: verify.status,
|
|
164
|
+
detail: verify.detail,
|
|
165
|
+
});
|
|
166
|
+
console.log('');
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
let grokHarnessOk = null;
|
|
170
|
+
if (flags.grokHarness && bridgeEnabled(BRIDGES[0])) {
|
|
171
|
+
console.log('Phase 2 — Grok harness (Layer 2a + 2c stdio probes)\n');
|
|
172
|
+
const harnessResult = spawnSync(
|
|
173
|
+
'node',
|
|
174
|
+
[join(root, 'scripts', 'confirm-suit-harness.mjs'), '--skip-layer1'],
|
|
175
|
+
{ cwd: root, encoding: 'utf8', stdio: 'inherit' },
|
|
176
|
+
);
|
|
177
|
+
const harness = {
|
|
178
|
+
ok: harnessResult.status === 0,
|
|
179
|
+
detail: harnessResult.status === 0 ? 'automated probes pass' : 'harness probe(s) failed',
|
|
180
|
+
};
|
|
181
|
+
grokHarnessOk = harness.ok;
|
|
182
|
+
if (!harness.ok) {
|
|
183
|
+
matrix.push({
|
|
184
|
+
id: 'grok-harness',
|
|
185
|
+
label: 'Grok harness (2a/2c)',
|
|
186
|
+
status: 'red',
|
|
187
|
+
detail: harness.detail,
|
|
188
|
+
});
|
|
189
|
+
} else {
|
|
190
|
+
matrix.push({
|
|
191
|
+
id: 'grok-harness',
|
|
192
|
+
label: 'Grok harness (2a/2c)',
|
|
193
|
+
status: 'green',
|
|
194
|
+
detail: 'automated probes pass',
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
console.log('');
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// ── Wear matrix verdict ─────────────────────────────────────────────────────
|
|
201
|
+
console.log('Suit wear matrix\n');
|
|
202
|
+
const statusIcon = { green: '✅', red: '❌', skip: '⏭ ' };
|
|
203
|
+
for (const row of matrix) {
|
|
204
|
+
const icon = statusIcon[row.status] ?? '?';
|
|
205
|
+
console.log(` ${icon} ${row.label.padEnd(22)} ${row.detail}`);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const verified = matrix.filter((r) => r.status !== 'skip');
|
|
209
|
+
const allGreen = verified.length > 0 && verified.every((r) => r.status === 'green');
|
|
210
|
+
const anyRed = verified.some((r) => r.status === 'red');
|
|
211
|
+
const skipped = matrix.filter((r) => r.status === 'skip').length;
|
|
212
|
+
|
|
213
|
+
console.log(`
|
|
214
|
+
Summary
|
|
215
|
+
Green: ${verified.filter((r) => r.status === 'green').length}/${verified.length}
|
|
216
|
+
Skipped: ${skipped} (CLI not on PATH)
|
|
217
|
+
0xray: ${readInstalledXrayVersion()}
|
|
218
|
+
|
|
219
|
+
Verdict
|
|
220
|
+
FULL = all enabled bridges green${flags.grokHarness ? ' + Grok harness green' : ''}
|
|
221
|
+
PARTIAL = Grok green + ≥1 other bridge red/skipped
|
|
222
|
+
BROKEN = Grok red OR core MCP surface unreachable
|
|
223
|
+
|
|
224
|
+
Grok Layer 2b (harness CallMcpTool) is agent-verified after reboot — see confirm-suit-harness.mjs.
|
|
225
|
+
`);
|
|
226
|
+
|
|
227
|
+
if (anyRed) {
|
|
228
|
+
console.error('❌ Suit wear matrix FAILED — fix red bridges before operating.');
|
|
229
|
+
process.exit(1);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (flags.grokHarness && grokHarnessOk === false) {
|
|
233
|
+
console.error('❌ Grok harness FAILED — memory routing / stdio probes not ready.');
|
|
234
|
+
process.exit(1);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (flags.pipelineAudit) {
|
|
238
|
+
console.log('Phase 3 — Pipeline facet verify\n');
|
|
239
|
+
const pipelineScript = join(root, 'node_modules', '0xray', 'scripts', 'mjs', 'verify-pipeline-facets.mjs');
|
|
240
|
+
const pipelineResult = spawnSync('node', [pipelineScript], {
|
|
241
|
+
cwd: root,
|
|
242
|
+
encoding: 'utf8',
|
|
243
|
+
stdio: 'inherit',
|
|
244
|
+
});
|
|
245
|
+
if (pipelineResult.status !== 0) {
|
|
246
|
+
console.error('❌ Pipeline facet verify FAILED');
|
|
247
|
+
process.exit(1);
|
|
248
|
+
}
|
|
249
|
+
console.log('');
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
console.log('✅ Suit wear matrix PASS — all verified bridges wearable.');
|
|
253
|
+
process.exit(0);
|