0xray 3.5.4 → 4.0.0
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 +51 -7
- 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 +32 -6
- package/.xray/features.schema.json +87 -0
- package/AGENTS-consumer.md +16 -6
- package/AGENTS.md +21 -3
- package/README.md +13 -10
- package/SKILLS.md +1 -1
- package/dist/AGENTS.md +21 -3
- package/dist/CHANGELOG.md +98 -0
- package/dist/README.md +13 -10
- package/dist/SKILLS.md +1 -1
- package/dist/cli/commands/hermes-install.js +6 -1
- package/dist/cli/commands/openclaw-install.js +14 -0
- package/dist/cli/index.js +0 -0
- package/dist/core/features-config.d.ts +30 -2
- package/dist/governance/governance-service.d.ts +1 -0
- package/dist/governance/governance-service.js +81 -6
- package/dist/infrastructure/schemas/cloud-schemas.d.ts +1 -1
- package/dist/integrations/enforcement-gate.js +15 -5
- package/dist/integrations/grok/grok-cli.d.ts +3 -0
- package/dist/integrations/grok/grok-cli.js +92 -13
- package/dist/integrations/grok/hooks/grok-hook-utils.js +99 -9
- package/dist/integrations/grok/hooks/post-tool-use.js +68 -25
- package/dist/integrations/grok/hooks/pre-tool-use.js +17 -14
- package/dist/integrations/grok/hooks/session-start.js +114 -4
- package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +31 -24
- package/dist/integrations/hermes-agent/__init__.py +11 -1
- package/dist/integrations/hermes-agent/__pycache__/__init__.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/schemas.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/tools.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/bridge.mjs +92 -11
- package/dist/integrations/hooks/confer-hook-runtime.mjs +49 -0
- package/dist/integrations/hooks/delegation-gate-runtime.mjs +32 -3
- package/dist/integrations/hooks/pipeline-hook-runtime.mjs +211 -0
- package/dist/integrations/hooks/plan-hook-runtime.mjs +68 -0
- 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/hooks/user-aside-hook-runtime.mjs +49 -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 +10 -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/architect-tools.server.js +6 -1
- package/dist/mcps/orchestrator/handlers/complexity-handler.d.ts +7 -0
- package/dist/mcps/orchestrator/handlers/complexity-handler.js +107 -8
- package/dist/mcps/orchestrator/handlers/task-handler.d.ts +6 -0
- package/dist/mcps/orchestrator/handlers/task-handler.js +75 -0
- package/dist/mcps/orchestrator/server.js +54 -5
- 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 +74 -4
- package/dist/memory-routing/provider-registry.js +3 -2
- package/dist/nucleus/aside-worktree.d.ts +41 -0
- package/dist/nucleus/aside-worktree.js +164 -0
- package/dist/nucleus/autonomy-kernel.d.ts +2 -2
- package/dist/nucleus/autonomy-kernel.js +17 -6
- package/dist/nucleus/confer.d.ts +57 -0
- package/dist/nucleus/confer.js +322 -0
- package/dist/nucleus/delegation-gate.d.ts +18 -8
- package/dist/nucleus/delegation-gate.js +234 -20
- package/dist/nucleus/lead-dev-plan-persistence.d.ts +27 -3
- package/dist/nucleus/lead-dev-plan-persistence.js +201 -19
- package/dist/nucleus/spawn-plan-resolution.d.ts +20 -0
- package/dist/nucleus/spawn-plan-resolution.js +42 -0
- package/dist/nucleus/suit-temperament.d.ts +40 -0
- package/dist/nucleus/suit-temperament.js +157 -0
- package/dist/nucleus/synthesis-consult-receipt.js +18 -2
- package/dist/nucleus/synthesis-context.js +1 -1
- package/dist/nucleus/user-aside.d.ts +70 -0
- package/dist/nucleus/user-aside.js +393 -0
- package/dist/plugin/xray-codex-injection.js +14 -3
- package/dist/postprocessor/PostProcessor.d.ts +1 -0
- package/dist/postprocessor/PostProcessor.js +11 -0
- package/dist/postprocessor/triggers/GitHookTrigger.js +11 -5
- package/dist/processors/implementations/session-summary-processor.d.ts +1 -1
- package/dist/processors/implementations/session-summary-processor.js +9 -6
- package/opencode.json +88 -0
- package/package.json +25 -6
- package/scripts/hooks/install-hooks.cjs +21 -6
- package/scripts/hooks/run-hook.js +237 -88
- package/scripts/mjs/run-repertoire-mcp.mjs +39 -0
- package/scripts/mjs/verify-confer-core.mjs +103 -0
- package/scripts/mjs/verify-delegation-gate-core.mjs +76 -3
- package/scripts/mjs/verify-four-floor-compact.mjs +524 -0
- package/scripts/mjs/verify-hermes-session-start.mjs +137 -0
- package/scripts/mjs/verify-pipeline-facets.mjs +215 -0
- package/scripts/mjs/verify-pre-push-diff-core.mjs +87 -0
- package/scripts/mjs/verify-temperament-live.mjs +261 -0
- package/scripts/mjs/verify-user-aside-core.mjs +137 -0
- package/scripts/node/bridge-mcp-wiring.cjs +287 -29
- package/scripts/node/install-bridges.cjs +198 -44
- package/scripts/node/load-reflection-config.mjs +2 -2
- package/scripts/node/postinstall.cjs +50 -27
- package/scripts/node/release-gate.mjs +8 -4
- package/scripts/node/release.mjs +2 -2
- package/scripts/node/validate-release-docs.mjs +20 -33
- package/scripts/node/version-manager.mjs +25 -10
- 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 +10 -0
- package/src/mcps/architect-tools.server.ts +6 -1
- package/src/mcps/orchestrator/handlers/complexity-handler.ts +180 -21
- package/src/mcps/orchestrator/handlers/task-handler.ts +99 -0
- package/src/mcps/orchestrator/server.ts +56 -5
- 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 +32 -6
- package/xray/features.schema.json +87 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Confer quorum fixture — 3-agent synthesis consult completes via fixture mode.
|
|
4
|
+
*/
|
|
5
|
+
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
6
|
+
import { tmpdir } from 'node:os';
|
|
7
|
+
import { dirname, join } from 'node:path';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
|
|
10
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
const packageRoot = join(__dirname, '../..');
|
|
12
|
+
|
|
13
|
+
const { buildSynthesisCheckpointPlan } = await import(
|
|
14
|
+
join(packageRoot, 'dist/nucleus/autonomy-kernel.js')
|
|
15
|
+
);
|
|
16
|
+
const { savePersistedLeadDevPlan, areSynthesisConsultTodosComplete } = await import(
|
|
17
|
+
join(packageRoot, 'dist/nucleus/lead-dev-plan-persistence.js')
|
|
18
|
+
);
|
|
19
|
+
const { recordExecutionSlice, isSynthesisCheckpointDue } = await import(
|
|
20
|
+
join(packageRoot, 'dist/nucleus/synthesis.js')
|
|
21
|
+
);
|
|
22
|
+
const { runConferQuorum, loadConferCheckpoint, CONFER_AGENTS } = await import(
|
|
23
|
+
join(packageRoot, 'dist/nucleus/confer.js')
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
const sessionId = 'verify-confer-core';
|
|
27
|
+
let failed = 0;
|
|
28
|
+
function pass(n) {
|
|
29
|
+
console.log(`✅ ${n}`);
|
|
30
|
+
}
|
|
31
|
+
function fail(n, d = '') {
|
|
32
|
+
failed++;
|
|
33
|
+
console.error(`❌ ${n}${d ? ` — ${d}` : ''}`);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const tmp = mkdtempSync(join(tmpdir(), 'xray-confer-verify-'));
|
|
37
|
+
mkdirSync(join(tmp, '.xray', 'state'), { recursive: true });
|
|
38
|
+
writeFileSync(
|
|
39
|
+
join(tmp, '.xray', 'features.json'),
|
|
40
|
+
JSON.stringify({
|
|
41
|
+
multi_agent_orchestration: { lead_dev_mode: true, confer_on_synthesis: true },
|
|
42
|
+
synthesis: { enabled: true, every_n_gates: 1, every_n_turns: 0, every_n_todos_completed: 0 },
|
|
43
|
+
}),
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
recordExecutionSlice('gate', { projectRoot: tmp, sessionId });
|
|
48
|
+
if (!isSynthesisCheckpointDue(tmp, sessionId)) fail('step 1: synthesis due');
|
|
49
|
+
else pass('step 1: synthesis checkpoint due');
|
|
50
|
+
|
|
51
|
+
const plan = buildSynthesisCheckpointPlan('gate threshold (1/1)', tmp);
|
|
52
|
+
if (!plan) fail('step 2: synthesis plan');
|
|
53
|
+
else {
|
|
54
|
+
savePersistedLeadDevPlan(
|
|
55
|
+
{ ...plan, persistedAt: new Date().toISOString(), sessionId },
|
|
56
|
+
tmp,
|
|
57
|
+
);
|
|
58
|
+
pass('step 2: synthesis plan persisted');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (CONFER_AGENTS.length !== 3) fail('step 3: confer agent count', String(CONFER_AGENTS.length));
|
|
62
|
+
else pass('step 3: three confer agents defined');
|
|
63
|
+
|
|
64
|
+
const result = await runConferQuorum(tmp, sessionId, {
|
|
65
|
+
collocatedText: 'verify confer fixture context',
|
|
66
|
+
dueReason: 'gate threshold',
|
|
67
|
+
fixture: true,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
if (result.status === 'completed' && result.agents.length === 3) {
|
|
71
|
+
pass('step 4: confer quorum completed all agents');
|
|
72
|
+
} else {
|
|
73
|
+
fail('step 4: confer quorum', JSON.stringify(result));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const state = loadConferCheckpoint(tmp);
|
|
77
|
+
if (state?.status === 'completed' && state.completedAgents.length === 3) {
|
|
78
|
+
pass('step 5: confer checkpoint state completed');
|
|
79
|
+
} else {
|
|
80
|
+
fail('step 5: confer state', JSON.stringify(state));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (areSynthesisConsultTodosComplete(
|
|
84
|
+
(await import(join(packageRoot, 'dist/nucleus/lead-dev-plan-persistence.js'))).loadPersistedLeadDevPlan(tmp),
|
|
85
|
+
)) {
|
|
86
|
+
pass('step 6: synthesis consult todos complete after confer');
|
|
87
|
+
} else {
|
|
88
|
+
fail('step 6: consult todos incomplete');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (!isSynthesisCheckpointDue(tmp, sessionId)) pass('step 7: synthesis checkpoint cleared');
|
|
92
|
+
else fail('step 7: checkpoint still due');
|
|
93
|
+
} finally {
|
|
94
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
console.log(
|
|
98
|
+
'\n' +
|
|
99
|
+
(failed === 0
|
|
100
|
+
? '🎉 Confer verify passed (7/7).'
|
|
101
|
+
: `⚠️ ${failed} confer check(s) failed.`),
|
|
102
|
+
);
|
|
103
|
+
process.exit(failed === 0 ? 0 : 1);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Shared
|
|
3
|
+
* Shared 6/6 delegation gate fixture against nucleus SSOT (any host adapter).
|
|
4
4
|
* Usage: node scripts/mjs/verify-delegation-gate-core.mjs [--host=grok|hermes|opencode]
|
|
5
5
|
*/
|
|
6
|
-
import { mkdtempSync, rmSync } from 'node:fs';
|
|
6
|
+
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
7
7
|
import { tmpdir } from 'node:os';
|
|
8
8
|
import { dirname, join } from 'node:path';
|
|
9
9
|
import { fileURLToPath } from 'node:url';
|
|
@@ -22,6 +22,9 @@ const host = hostArg?.split('=')[1] || 'generic';
|
|
|
22
22
|
const { evaluatePreToolGate, loadDelegationGateFeatures } = await import(
|
|
23
23
|
join(packageRoot, 'dist/integrations/hooks/delegation-gate-runtime.mjs')
|
|
24
24
|
);
|
|
25
|
+
const { archiveStaleLeadDevPlan } = await import(
|
|
26
|
+
join(packageRoot, 'dist/nucleus/lead-dev-plan-persistence.js')
|
|
27
|
+
);
|
|
25
28
|
|
|
26
29
|
const WRITE_TOOL =
|
|
27
30
|
host === 'hermes' ? 'write_file' : host === 'opencode' ? 'write' : 'search_replace';
|
|
@@ -85,6 +88,76 @@ try {
|
|
|
85
88
|
} else {
|
|
86
89
|
fail('spawn todo persistence', JSON.stringify(denyWrongTodo));
|
|
87
90
|
}
|
|
91
|
+
|
|
92
|
+
const staleTmp = mkdtempSync(join(tmpdir(), 'xray-gate-stale-'));
|
|
93
|
+
const staleAt = new Date(Date.now() - 9 * 60 * 60 * 1000).toISOString();
|
|
94
|
+
mkdirSync(join(staleTmp, '.xray', 'state'), { recursive: true });
|
|
95
|
+
writeFileSync(
|
|
96
|
+
join(staleTmp, '.xray', 'features.json'),
|
|
97
|
+
JSON.stringify({
|
|
98
|
+
multi_agent_orchestration: { enabled: true, lead_dev_mode: true },
|
|
99
|
+
}),
|
|
100
|
+
);
|
|
101
|
+
writeFileSync(
|
|
102
|
+
join(staleTmp, '.xray', 'state', 'lead-dev-plan.json'),
|
|
103
|
+
JSON.stringify({
|
|
104
|
+
active: true,
|
|
105
|
+
persistedAt: staleAt,
|
|
106
|
+
phases: [
|
|
107
|
+
{
|
|
108
|
+
id: 'phase-1',
|
|
109
|
+
todos: [
|
|
110
|
+
{
|
|
111
|
+
id: '1.1',
|
|
112
|
+
task: 'stale unstarted todo',
|
|
113
|
+
subagent: 'researcher',
|
|
114
|
+
status: 'pending',
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
}),
|
|
120
|
+
);
|
|
121
|
+
const denyStale = evaluatePreToolGate(
|
|
122
|
+
SPAWN_TOOL,
|
|
123
|
+
{ prompt: 'plan todo 1.1 consult', subagent_type: 'researcher' },
|
|
124
|
+
{
|
|
125
|
+
projectRoot: staleTmp,
|
|
126
|
+
sessionId: FIXTURE_SESSION_ID,
|
|
127
|
+
features: loadDelegationGateFeatures(staleTmp),
|
|
128
|
+
host,
|
|
129
|
+
},
|
|
130
|
+
);
|
|
131
|
+
if (!denyStale.allow && denyStale.gate === 'spawn-plan-stale') {
|
|
132
|
+
pass('denies spawn when lead-dev plan is stale');
|
|
133
|
+
} else {
|
|
134
|
+
fail('spawn plan stale', JSON.stringify(denyStale));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const archived = archiveStaleLeadDevPlan(staleTmp);
|
|
138
|
+
const denyAfterArchive = evaluatePreToolGate(
|
|
139
|
+
SPAWN_TOOL,
|
|
140
|
+
{ prompt: 'plan todo 1.1 consult', subagent_type: 'researcher' },
|
|
141
|
+
{
|
|
142
|
+
projectRoot: staleTmp,
|
|
143
|
+
sessionId: FIXTURE_SESSION_ID,
|
|
144
|
+
features: loadDelegationGateFeatures(staleTmp),
|
|
145
|
+
host,
|
|
146
|
+
},
|
|
147
|
+
);
|
|
148
|
+
if (
|
|
149
|
+
archived.archived &&
|
|
150
|
+
!denyAfterArchive.allow &&
|
|
151
|
+
denyAfterArchive.gate === 'spawn-plan-stale'
|
|
152
|
+
) {
|
|
153
|
+
pass('denies spawn after stale plan archival (marker)');
|
|
154
|
+
} else {
|
|
155
|
+
fail(
|
|
156
|
+
'spawn plan stale after archive',
|
|
157
|
+
JSON.stringify({ archived, denyAfterArchive }),
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
rmSync(staleTmp, { recursive: true, force: true });
|
|
88
161
|
} finally {
|
|
89
162
|
rmSync(tmp, { recursive: true, force: true });
|
|
90
163
|
}
|
|
@@ -93,7 +166,7 @@ const label = host === 'generic' ? 'core' : host;
|
|
|
93
166
|
console.log(
|
|
94
167
|
'\n' +
|
|
95
168
|
(failed === 0
|
|
96
|
-
? `🎉 Delegation gate verify passed (
|
|
169
|
+
? `🎉 Delegation gate verify passed (6/6) [${label}].`
|
|
97
170
|
: `⚠️ ${failed} gate check(s) failed [${label}].`),
|
|
98
171
|
);
|
|
99
172
|
process.exit(failed === 0 ? 0 : 1);
|