0xray 4.0.40 → 4.0.42
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/.grok-plugin/plugin.json +1 -1
- package/.opencode/agents/api-design.yml +31 -0
- package/.opencode/agents/architect.yml +15 -0
- package/.opencode/agents/architecture-patterns.yml +14 -0
- package/.opencode/agents/auto-format.yml +14 -0
- package/.opencode/agents/backend-engineer.yml +12 -0
- package/.opencode/agents/boot-orchestrator.yml +14 -0
- package/.opencode/agents/bug-triage-specialist.yml +15 -0
- package/.opencode/agents/code-analyzer.yml +12 -0
- package/.opencode/agents/code-reviewer.yml +14 -0
- package/.opencode/agents/content-creator.yml +12 -0
- package/.opencode/agents/database-engineer.yml +12 -0
- package/.opencode/agents/devops-engineer.yml +12 -0
- package/.opencode/agents/framework-compliance-audit.yml +14 -0
- package/.opencode/agents/frontend-engineer.yml +12 -0
- package/.opencode/agents/frontend-ui-ux-engineer.yml +12 -0
- package/.opencode/agents/git-workflow.yml +15 -0
- package/.opencode/agents/growth-strategist.yml +12 -0
- package/.opencode/agents/hermes-agent.yml +12 -0
- package/.opencode/agents/inference-improve.yml +12 -0
- package/.opencode/agents/lint.yml +14 -0
- package/.opencode/agents/log-monitor.yml +12 -0
- package/.opencode/agents/mobile-developer.yml +12 -0
- package/.opencode/agents/model-health-check.yml +12 -0
- package/.opencode/agents/multimodal-looker.yml +12 -0
- package/.opencode/agents/performance-analysis.yml +12 -0
- package/.opencode/agents/performance-engineer.yml +12 -0
- package/.opencode/agents/performance-optimization.yml +12 -0
- package/.opencode/agents/processor-pipeline.yml +14 -0
- package/.opencode/agents/project-analysis.yml +12 -0
- package/.opencode/agents/refactorer.yml +12 -0
- package/.opencode/agents/researcher.yml +12 -0
- package/.opencode/agents/security-auditor.yml +12 -0
- package/.opencode/agents/security-scan.yml +12 -0
- package/.opencode/agents/seo-consultant.yml +12 -0
- package/.opencode/agents/session-management.yml +12 -0
- package/.opencode/agents/state-manager.yml +12 -0
- package/.opencode/agents/storyteller.yml +12 -0
- package/.opencode/agents/strategist.yml +12 -0
- package/.opencode/agents/tech-writer.yml +12 -0
- package/.opencode/agents/testing-best-practices.yml +12 -0
- package/.opencode/agents/testing-lead.yml +12 -0
- package/.opencode/agents/ui-ux-design.yml +12 -0
- package/.opencode/codex.codex +8 -0
- package/.opencode/commands/auto-format.md +99 -0
- package/.opencode/commands/auto-summary-capture.md +90 -0
- package/.opencode/commands/dependency-audit.md +184 -0
- package/.opencode/commands/enforcer-daily-scan.md +137 -0
- package/.opencode/commands/framework-compliance-audit.md +205 -0
- package/.opencode/commands/interactive-validator.md +75 -0
- package/.opencode/commands/job-summary-logger.md +68 -0
- package/.opencode/commands/lint.md +11 -0
- package/.opencode/commands/mode-switch.md +95 -0
- package/.opencode/commands/model-health-check.md +186 -0
- package/.opencode/commands/performance-analysis.md +144 -0
- package/.opencode/commands/pre-commit-introspection.md +185 -0
- package/.opencode/commands/pre-commit-introspection.sh +133 -0
- package/.opencode/commands/security-scan.md +157 -0
- package/.opencode/commands/sisyphus-validation.md +128 -0
- package/.opencode/commands/summary-logger.md +83 -0
- package/.opencode/enforcer-config.json +282 -0
- package/.opencode/skills/orchestrator/SKILL.md +12 -0
- package/.opencode/workflows/post-deployment-audit.yml +123 -0
- package/.xray/features.json +1 -1
- package/.xray/features.schema.json +1 -1
- package/AGENTS-consumer.md +2 -0
- package/AGENTS.md +2 -0
- package/README.md +52 -12
- package/SKILLS.md +2 -0
- package/dist/AGENTS.md +2 -0
- package/dist/CHANGELOG.md +29 -0
- package/dist/README.md +52 -12
- package/dist/SKILLS.md +2 -0
- package/dist/cli/commands/openclaw-install.js +1 -1
- package/dist/cli/index.js +12 -0
- package/dist/enforcement/index.d.ts +4 -0
- package/dist/enforcement/index.js +4 -0
- package/dist/enforcement/validators/code-quality-validators.js +6 -4
- package/dist/governance/llm-governance-provider.d.ts +7 -1
- package/dist/governance/llm-governance-provider.js +72 -14
- package/dist/governance/local-confer.d.ts +4 -1
- package/dist/governance/local-confer.js +22 -1
- package/dist/integrations/grok/grok-cli.js +10 -37
- package/dist/integrations/grok/hooks/grok-hook-utils.js +29 -2
- package/dist/integrations/grok/hooks/session-start.js +2 -20
- package/dist/integrations/hooks/confer-hook-runtime.mjs +23 -1
- package/dist/integrations/hooks/goggles-mcp.mjs +36 -4
- package/dist/integrations/hooks/goggles-pipeline.mjs +55 -15
- package/dist/integrations/hooks/goggles-planes.json +13 -4
- package/dist/integrations/hooks/plates.cjs +22 -0
- package/dist/integrations/hooks/session-note-index.cjs +298 -0
- package/dist/integrations/hooks/session-note-index.mjs +22 -0
- package/dist/integrations/hooks/sleeve.cjs +335 -0
- package/dist/integrations/hooks/sleeve.mjs +18 -0
- package/dist/integrations/hooks/station-hook-runtime.cjs +205 -9
- package/dist/integrations/hooks/wake-cascade.cjs +102 -0
- package/dist/integrations/hooks/wake-cascade.mjs +16 -0
- package/dist/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
- package/dist/mcps/architect-tools.server.d.ts +6 -0
- package/dist/mcps/architect-tools.server.js +19 -2
- package/dist/mcps/config/server-config-registry.js +8 -6
- package/dist/mcps/governance.server.d.ts +1 -0
- package/dist/mcps/governance.server.js +46 -0
- package/dist/mcps/knowledge-skills/code-review.server.js +7 -0
- package/dist/mcps/knowledge-skills/security-audit.server.js +5 -3
- package/dist/mcps/mcp-client.js +1 -1
- package/dist/mcps/orchestrator/handlers/complexity-handler.js +2 -2
- package/dist/mcps/researcher.server.js +12 -3
- package/dist/memory-routing/plates.d.ts +1 -1
- package/dist/memory-routing/plates.js +1 -0
- package/dist/nucleus/autonomy-kernel.d.ts +2 -0
- package/dist/nucleus/autonomy-kernel.js +17 -13
- package/dist/nucleus/confer-host.d.ts +35 -0
- package/dist/nucleus/confer-host.js +55 -0
- package/dist/nucleus/confer.d.ts +19 -3
- package/dist/nucleus/confer.js +111 -55
- package/dist/nucleus/lead-dev-plan-persistence.js +4 -2
- package/dist/nucleus/suit-temperament.d.ts +1 -1
- package/dist/nucleus/suit-temperament.js +2 -2
- package/dist/nucleus/synthesis-consult-receipt.d.ts +7 -1
- package/dist/nucleus/synthesis-consult-receipt.js +86 -35
- package/dist/reporting/framework-reporting-system.js +2 -5
- package/dist/reporting/log-parser.d.ts +2 -0
- package/dist/reporting/log-parser.js +7 -6
- package/dist/skills/orchestrator/SKILL.md +12 -0
- package/docs-site/docs/plates/activity-log.md +1 -1
- package/docs-site/docs/plates/boot.md +2 -0
- package/docs-site/docs/plates/centrifuge.md +30 -0
- package/docs-site/docs/plates/cursor-compact.md +1 -1
- package/docs-site/docs/plates/glossary.md +1 -2
- package/docs-site/docs/plates/goggles.md +4 -0
- package/docs-site/docs/plates/governance.md +2 -0
- package/docs-site/docs/plates/grok-compact.md +1 -1
- package/docs-site/docs/plates/grokbot.md +1 -1
- package/docs-site/docs/plates/host-pack.md +2 -0
- package/docs-site/docs/plates/house.md +1 -1
- package/docs-site/docs/plates/index.md +3 -1
- 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 +2 -0
- package/docs-site/docs/plates/lens-gate.md +1 -1
- package/docs-site/docs/plates/lens-page.md +1 -1
- package/docs-site/docs/plates/live-mesh.md +1 -1
- package/docs-site/docs/plates/memory-recall.md +4 -0
- package/docs-site/docs/plates/notes-page.md +2 -1
- package/docs-site/docs/plates/orchestration.md +2 -0
- 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 +2 -0
- package/docs-site/docs/plates/record-map.md +2 -1
- package/docs-site/docs/plates/reflection-page.md +1 -1
- package/docs-site/docs/plates/reporting.md +2 -0
- package/docs-site/docs/plates/review.md +1 -1
- package/docs-site/docs/plates/routing.md +2 -0
- 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 +4 -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 +3 -1
- package/docs-site/docs/plates/suit.md +2 -0
- package/docs-site/docs/plates/trail-state.md +1 -1
- package/docs-site/docs/plates/work-fresh.md +1 -1
- package/docs-site/docs/plates/write-home.md +1 -1
- package/llms.txt +2 -0
- package/package.json +2 -2
- package/scripts/mjs/verify-confer-core.mjs +153 -29
- package/scripts/mjs/verify-user-aside-core.mjs +3 -4
- package/scripts/node/bridge-mcp-wiring.cjs +273 -9
- package/scripts/node/confer-switch.cjs +66 -0
- package/scripts/node/install-bridges.cjs +188 -60
- package/scripts/node/setup.cjs +2 -46
- package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
- package/src/mcps/architect-tools.server.ts +26 -2
- package/src/mcps/config/__tests__/server-config-registry.test.ts +15 -6
- package/src/mcps/config/server-config-registry.ts +9 -6
- package/src/mcps/governance.server.ts +49 -0
- package/src/mcps/knowledge-skills/code-review.server.ts +8 -0
- package/src/mcps/knowledge-skills/security-audit.server.ts +11 -12
- package/src/mcps/mcp-client.ts +1 -1
- package/src/mcps/orchestrator/handlers/complexity-handler.ts +2 -1
- package/src/mcps/researcher.server.ts +19 -10
- package/src/skills/orchestrator/SKILL.md +12 -0
- package/vendor/@0xray/repertoire/scripts/run-live-synthesis-checkpoint.mjs +5 -51
- package/xray/features.json +1 -1
- package/xray/features.schema.json +1 -1
|
@@ -29,6 +29,7 @@ import * as fs from "fs";
|
|
|
29
29
|
import * as path from "path";
|
|
30
30
|
import { fileURLToPath } from "url";
|
|
31
31
|
import { randomUUID } from "crypto";
|
|
32
|
+
import { applyConferConsultResult } from "../nucleus/confer.js";
|
|
32
33
|
import { getGovernanceService } from "../governance/governance-service.js";
|
|
33
34
|
import { getCodexPolicyService } from "../governance/codex-policy.service.js";
|
|
34
35
|
import { initializeGovernanceIntegration, shutdownGovernanceIntegration } from "../integrations/governance/index.js";
|
|
@@ -136,6 +137,24 @@ class GovernanceServer extends XrayKnowledgeSkillBase {
|
|
|
136
137
|
required: [],
|
|
137
138
|
},
|
|
138
139
|
},
|
|
140
|
+
{
|
|
141
|
+
name: "record_confer_receipt",
|
|
142
|
+
description:
|
|
143
|
+
"Record a confer verdict written by the wearing TUI. " +
|
|
144
|
+
"The TUI already called the seat's MCP server. This tool stores the receipt. " +
|
|
145
|
+
"Only Verdict: PASS completes the consult todo.",
|
|
146
|
+
inputSchema: {
|
|
147
|
+
type: "object",
|
|
148
|
+
properties: {
|
|
149
|
+
todoId: { type: "string", description: "Consult todo id, such as s.1" },
|
|
150
|
+
subagent: { type: "string", description: "researcher, architect-tools, or code-review" },
|
|
151
|
+
sessionId: { type: "string", description: "Plan session id" },
|
|
152
|
+
outputText: { type: "string", description: "Host verdict text, including a Verdict line" },
|
|
153
|
+
projectRoot: { type: "string", description: "Checkout root. Defaults to XRAY_ROOT or the process cwd." },
|
|
154
|
+
},
|
|
155
|
+
required: ["todoId", "subagent", "sessionId", "outputText"],
|
|
156
|
+
},
|
|
157
|
+
},
|
|
139
158
|
{
|
|
140
159
|
name: "get_active_codex",
|
|
141
160
|
description:
|
|
@@ -159,6 +178,7 @@ class GovernanceServer extends XrayKnowledgeSkillBase {
|
|
|
159
178
|
"govern_proposals": async (args) => this.handleGovernProposals(this.validateGovernProposalsArgs(args)),
|
|
160
179
|
"govern_reflection": async (args) => this.handleGovernReflection(this.validateGovernReflectionArgs(args)),
|
|
161
180
|
"get_active_codex": async (args) => this.handleGetActiveCodex(args as { includeRaw?: boolean }),
|
|
181
|
+
"record_confer_receipt": async (args) => this.handleRecordConferReceipt(args),
|
|
162
182
|
};
|
|
163
183
|
this.setupToolHandlers();
|
|
164
184
|
}
|
|
@@ -210,6 +230,8 @@ class GovernanceServer extends XrayKnowledgeSkillBase {
|
|
|
210
230
|
return await this.handleGovernReflection(this.validateGovernReflectionArgs(args));
|
|
211
231
|
case "get_active_codex":
|
|
212
232
|
return await this.handleGetActiveCodex(args as { includeRaw?: boolean });
|
|
233
|
+
case "record_confer_receipt":
|
|
234
|
+
return await this.handleRecordConferReceipt(args);
|
|
213
235
|
default:
|
|
214
236
|
throw new Error(`Unknown tool: ${name}`);
|
|
215
237
|
}
|
|
@@ -334,6 +356,33 @@ class GovernanceServer extends XrayKnowledgeSkillBase {
|
|
|
334
356
|
});
|
|
335
357
|
}
|
|
336
358
|
|
|
359
|
+
private async handleRecordConferReceipt(args: unknown): Promise<CallToolResult> {
|
|
360
|
+
if (!args || typeof args !== "object") {
|
|
361
|
+
throw new Error("record_confer_receipt requires an object argument");
|
|
362
|
+
}
|
|
363
|
+
const obj = args as Record<string, unknown>;
|
|
364
|
+
const todoId = typeof obj.todoId === "string" ? obj.todoId.trim() : "";
|
|
365
|
+
const subagent = typeof obj.subagent === "string" ? obj.subagent.trim() : "";
|
|
366
|
+
const sessionId = typeof obj.sessionId === "string" ? obj.sessionId.trim() : "";
|
|
367
|
+
const outputText = typeof obj.outputText === "string" ? obj.outputText : "";
|
|
368
|
+
if (!todoId || !subagent || !sessionId || !outputText.trim()) {
|
|
369
|
+
throw new Error("record_confer_receipt requires todoId, subagent, sessionId, and outputText");
|
|
370
|
+
}
|
|
371
|
+
const projectRoot =
|
|
372
|
+
typeof obj.projectRoot === "string" && obj.projectRoot.trim()
|
|
373
|
+
? obj.projectRoot
|
|
374
|
+
: process.env.XRAY_ROOT || process.cwd();
|
|
375
|
+
const result = applyConferConsultResult(todoId, subagent, sessionId, outputText, projectRoot);
|
|
376
|
+
return {
|
|
377
|
+
content: [
|
|
378
|
+
{
|
|
379
|
+
type: "text",
|
|
380
|
+
text: JSON.stringify(result),
|
|
381
|
+
},
|
|
382
|
+
],
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
|
|
337
386
|
private async handleGetActiveCodex(args: { includeRaw?: boolean }): Promise<CallToolResult> {
|
|
338
387
|
const includeRaw = args?.includeRaw === true;
|
|
339
388
|
const snapshot = await getCodexPolicyService().getCurrentCodex(includeRaw);
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
tryLLMGovernance,
|
|
15
15
|
} from "../../governance/llm-governance-provider.js";
|
|
16
16
|
import { formatGovernanceVoteText, localConferVote } from "../../governance/local-confer.js";
|
|
17
|
+
import { buildHostConferEvidence } from "../../nucleus/confer-host.js";
|
|
17
18
|
|
|
18
19
|
interface CodeReviewResult {
|
|
19
20
|
file: string;
|
|
@@ -439,6 +440,13 @@ class XrayCodeReviewServer extends XrayKnowledgeSkillBase {
|
|
|
439
440
|
async analyzeProposal(args: AnalyzeProposalArgs) {
|
|
440
441
|
const { proposalTitle = "", proposalDescription = "", evidence = [], proposalType = "" } = args;
|
|
441
442
|
|
|
443
|
+
if (proposalType === "synthesis-confer") {
|
|
444
|
+
const packet = [proposalTitle, proposalDescription, ...(evidence || [])].filter(Boolean).join("\n\n");
|
|
445
|
+
return {
|
|
446
|
+
content: [{ type: "text", text: buildHostConferEvidence("code-review", packet) }],
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
|
|
442
450
|
const vote =
|
|
443
451
|
(await tryLLMGovernance(
|
|
444
452
|
"code-review",
|
|
@@ -8,10 +8,7 @@
|
|
|
8
8
|
import * as fs from "fs";
|
|
9
9
|
import * as path from "path";
|
|
10
10
|
import { XrayKnowledgeSkillBase } from "../shared/knowledge-skill-base.js";
|
|
11
|
-
import {
|
|
12
|
-
isGovernanceLlmConfigured,
|
|
13
|
-
tryLLMGovernance,
|
|
14
|
-
} from "../../governance/llm-governance-provider.js";
|
|
11
|
+
import { attemptLLMGovernance } from "../../governance/llm-governance-provider.js";
|
|
15
12
|
import { formatGovernanceVoteText, localConferVote } from "../../governance/local-confer.js";
|
|
16
13
|
|
|
17
14
|
interface SecurityVulnerability {
|
|
@@ -999,17 +996,19 @@ class XraySecurityAuditServer extends XrayKnowledgeSkillBase {
|
|
|
999
996
|
async analyzeProposal(args: AnalyzeProposalArgs) {
|
|
1000
997
|
const { proposalTitle = "", proposalDescription = "", evidence = [], proposalType = "" } = args;
|
|
1001
998
|
|
|
999
|
+
const attempt = await attemptLLMGovernance(
|
|
1000
|
+
"security-audit",
|
|
1001
|
+
proposalTitle,
|
|
1002
|
+
proposalDescription,
|
|
1003
|
+
evidence,
|
|
1004
|
+
proposalType,
|
|
1005
|
+
);
|
|
1002
1006
|
const vote =
|
|
1003
|
-
|
|
1004
|
-
"security-audit",
|
|
1005
|
-
proposalTitle,
|
|
1006
|
-
proposalDescription,
|
|
1007
|
-
evidence,
|
|
1008
|
-
proposalType,
|
|
1009
|
-
)) ??
|
|
1007
|
+
attempt.vote ??
|
|
1010
1008
|
localConferVote({
|
|
1011
1009
|
role: "security-audit",
|
|
1012
|
-
llmConfigured:
|
|
1010
|
+
llmConfigured: attempt.miss !== "not-configured",
|
|
1011
|
+
...(attempt.miss ? { miss: attempt.miss } : {}),
|
|
1013
1012
|
});
|
|
1014
1013
|
|
|
1015
1014
|
return {
|
package/src/mcps/mcp-client.ts
CHANGED
|
@@ -400,7 +400,7 @@ export class MCPClient extends EventEmitter {
|
|
|
400
400
|
this.emit('tool.before', beforeEvent);
|
|
401
401
|
|
|
402
402
|
const serverName = this.config.serverName;
|
|
403
|
-
const isGovernanceServer = ['code-review', 'security-audit', 'researcher', 'governance'].includes(serverName);
|
|
403
|
+
const isGovernanceServer = ['code-review', 'security-audit', 'researcher', 'architect', 'governance'].includes(serverName);
|
|
404
404
|
const isGovernanceTool = toolName === 'analyze_proposal';
|
|
405
405
|
const preferReal = this.isPureMcpMode || isGovernanceServer || isGovernanceTool;
|
|
406
406
|
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
persistLeadDevPlan,
|
|
13
13
|
} from '../../../nucleus/autonomy-kernel.js';
|
|
14
14
|
import {
|
|
15
|
+
conferFixtureAllowed,
|
|
15
16
|
formatConferQuorumReport,
|
|
16
17
|
isConferEnabled,
|
|
17
18
|
runConferQuorum,
|
|
@@ -286,7 +287,7 @@ export class ComplexityHandler {
|
|
|
286
287
|
collocatedText?: string;
|
|
287
288
|
} = {
|
|
288
289
|
dueReason: args.synthesisDueReason ?? null,
|
|
289
|
-
fixture: args.conferFixture === true,
|
|
290
|
+
fixture: conferFixtureAllowed() && args.conferFixture === true,
|
|
290
291
|
};
|
|
291
292
|
if (args.collocatedText) conferOpts.collocatedText = args.collocatedText;
|
|
292
293
|
const conferResult = await runConferQuorum(process.cwd(), args.sessionId, conferOpts);
|
|
@@ -13,8 +13,7 @@ import * as fs from "fs";
|
|
|
13
13
|
import * as path from "path";
|
|
14
14
|
import { frameworkLogger } from "../core/framework-logger.js";
|
|
15
15
|
import {
|
|
16
|
-
|
|
17
|
-
tryLLMGovernance,
|
|
16
|
+
attemptLLMGovernance,
|
|
18
17
|
} from "../governance/llm-governance-provider.js";
|
|
19
18
|
import { formatGovernanceVoteText, localConferVote } from "../governance/local-confer.js";
|
|
20
19
|
import { initializeMemoryRouting } from "../memory-routing/index.js";
|
|
@@ -23,6 +22,7 @@ import {
|
|
|
23
22
|
formatMemoryRoutingBlock,
|
|
24
23
|
resolveResearcherMemoryContext,
|
|
25
24
|
} from "./researcher-confidence.js";
|
|
25
|
+
import { buildHostConferEvidence } from "../nucleus/confer-host.js";
|
|
26
26
|
import { XrayKnowledgeSkillBase } from "./shared/knowledge-skill-base.js";
|
|
27
27
|
|
|
28
28
|
interface SearchResult {
|
|
@@ -465,6 +465,13 @@ class XrayLibrarianServer extends XrayKnowledgeSkillBase {
|
|
|
465
465
|
async analyzeProposal(args: AnalyzeProposalArgs): Promise<CallToolResult> {
|
|
466
466
|
const { proposalTitle = "", proposalDescription = "", evidence = [], proposalType = "" } = args || {};
|
|
467
467
|
|
|
468
|
+
if (proposalType === "synthesis-confer") {
|
|
469
|
+
const packet = [proposalTitle, proposalDescription, ...(evidence || [])].filter(Boolean).join("\n\n");
|
|
470
|
+
return {
|
|
471
|
+
content: [{ type: "text", text: buildHostConferEvidence("researcher", packet) }],
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
|
|
468
475
|
const memoryContext = await resolveResearcherMemoryContext({
|
|
469
476
|
proposalTitle,
|
|
470
477
|
proposalDescription,
|
|
@@ -476,19 +483,21 @@ class XrayLibrarianServer extends XrayKnowledgeSkillBase {
|
|
|
476
483
|
enrichedEvidence.push(...buildMemoryRoutingEvidence(memoryContext));
|
|
477
484
|
}
|
|
478
485
|
|
|
486
|
+
const attempt = await attemptLLMGovernance(
|
|
487
|
+
"researcher",
|
|
488
|
+
proposalTitle || "",
|
|
489
|
+
proposalDescription || "",
|
|
490
|
+
enrichedEvidence,
|
|
491
|
+
proposalType || "",
|
|
492
|
+
);
|
|
479
493
|
const vote =
|
|
480
|
-
|
|
481
|
-
"researcher",
|
|
482
|
-
proposalTitle || "",
|
|
483
|
-
proposalDescription || "",
|
|
484
|
-
enrichedEvidence,
|
|
485
|
-
proposalType || "",
|
|
486
|
-
)) ??
|
|
494
|
+
attempt.vote ??
|
|
487
495
|
localConferVote({
|
|
488
496
|
role: "researcher",
|
|
489
|
-
llmConfigured:
|
|
497
|
+
llmConfigured: attempt.miss !== "not-configured",
|
|
490
498
|
highConfidenceTrapPresent: memoryContext?.confidence.highConfidenceTrapPresent,
|
|
491
499
|
recommendedAgent: memoryContext?.recommendedAgent,
|
|
500
|
+
...(attempt.miss ? { miss: attempt.miss } : {}),
|
|
492
501
|
});
|
|
493
502
|
|
|
494
503
|
const memoryRoutingBlock = memoryContext
|
|
@@ -72,6 +72,18 @@ The hold lasts for the work that named the plane. A sentence that does not say l
|
|
|
72
72
|
|
|
73
73
|
Config: `features.json` → `multi_agent_orchestration.lead_dev_mode`
|
|
74
74
|
|
|
75
|
+
## Confer
|
|
76
|
+
|
|
77
|
+
The TUI that is wearing the suit already spawned the MCP servers. Confer uses those servers. It does not start a private server and it does not run `hermes -z`.
|
|
78
|
+
|
|
79
|
+
When `.xray/state/confer-ask-s.1.json`, `confer-ask-s.2.json`, and `confer-ask-s.3.json` are on disk:
|
|
80
|
+
|
|
81
|
+
1. Call the server and tool named in each ask. Researcher and code-review return evidence. Architect returns the assessment with `Verdict: UNREVIEWED`.
|
|
82
|
+
2. Write one verdict line from this TUI's model: `Verdict: PASS`, `Verdict: CONDITIONAL`, or `Verdict: FAIL`, plus top risks and a hardening note.
|
|
83
|
+
3. Call `record_confer_receipt` on `xray-governance` with `todoId`, `subagent`, `sessionId`, and that text.
|
|
84
|
+
|
|
85
|
+
Only `Verdict: PASS` completes the todo. FAIL, CONDITIONAL, and UNREVIEWED stay open. A session id that does not match the plan does not complete the todo. Grok, OpenCode, Hermes, and OpenClaw use these same three steps. Hermes is a voter only when Hermes is the TUI, and then only as that TUI's own model.
|
|
86
|
+
|
|
75
87
|
## Lead cadence (syncopation)
|
|
76
88
|
|
|
77
89
|
The seven rules are the engine. The cadence is the time signature. Disk SSOT: `grok-bot/OP-PROC.md` (team specifics live in `house/`).
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* Usage:
|
|
6
6
|
* node scripts/run-live-synthesis-checkpoint.mjs seed [--session-id=ID]
|
|
7
7
|
* node scripts/run-live-synthesis-checkpoint.mjs status
|
|
8
|
-
* node scripts/run-live-synthesis-checkpoint.mjs complete-todo
|
|
8
|
+
* node scripts/run-live-synthesis-checkpoint.mjs complete-todo
|
|
9
|
+
* (refuses: a CLI flag must not mint PASS or clear consult todos)
|
|
9
10
|
* node scripts/run-live-synthesis-checkpoint.mjs finish
|
|
10
11
|
*/
|
|
11
12
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
@@ -132,56 +133,9 @@ async function cmdStatus() {
|
|
|
132
133
|
}
|
|
133
134
|
|
|
134
135
|
async function cmdCompleteTodo() {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
err('Usage: complete-todo --id=s.1 --verdict=PASS|CONDITIONAL|FAIL');
|
|
139
|
-
process.exit(1);
|
|
140
|
-
}
|
|
141
|
-
if (!verdict || !['PASS', 'CONDITIONAL', 'FAIL'].includes(verdict)) {
|
|
142
|
-
err('❌ --verdict=PASS|CONDITIONAL|FAIL required (consult receipt gate)');
|
|
143
|
-
process.exit(1);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const sessionId = parseSessionId();
|
|
147
|
-
const { persistence } = await loadXray();
|
|
148
|
-
const { writeSynthesisConsultReceipt } = await import(
|
|
149
|
-
join(xrayRoot, 'dist/nucleus/synthesis-consult-receipt.js'),
|
|
150
|
-
);
|
|
151
|
-
|
|
152
|
-
const plan = persistence.loadPersistedLeadDevPlan(root);
|
|
153
|
-
const consultTodo = plan
|
|
154
|
-
? persistence.getSynthesisConsultTodos(plan).find((t) => t.id === todoId)
|
|
155
|
-
: null;
|
|
156
|
-
if (!consultTodo) {
|
|
157
|
-
err(`❌ Consult todo ${todoId} not found in lead-dev plan`);
|
|
158
|
-
process.exit(1);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
writeSynthesisConsultReceipt(
|
|
162
|
-
todoId,
|
|
163
|
-
{
|
|
164
|
-
sessionId: plan?.sessionId ?? sessionId,
|
|
165
|
-
subagent: consultTodo.subagent,
|
|
166
|
-
verdict,
|
|
167
|
-
topRisks: [],
|
|
168
|
-
hardeningNote: process.argv.find((a) => a.startsWith('--note='))?.split('=')[1] ?? '',
|
|
169
|
-
},
|
|
170
|
-
root,
|
|
171
|
-
);
|
|
172
|
-
|
|
173
|
-
const updated = persistence.updatePlanTodoStatus(todoId, 'completed', root);
|
|
174
|
-
if (!updated) {
|
|
175
|
-
err(`❌ Receipt gate blocked completion for ${todoId}`);
|
|
176
|
-
process.exit(1);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
const refreshed = persistence.loadPersistedLeadDevPlan(root);
|
|
180
|
-
const todos = refreshed ? persistence.getSynthesisConsultTodos(refreshed) : [];
|
|
181
|
-
const allDone = todos.length > 0 && todos.every((t) => t.status === 'completed');
|
|
182
|
-
log(`✅ Marked ${todoId} completed (receipt: ${verdict})`);
|
|
183
|
-
log(`📊 consult todos: ${todos.map((t) => `${t.id}:${t.status}`).join(', ')}`);
|
|
184
|
-
if (allDone) log('🎉 All consult todos complete — checkpoint should clear on next gate eval');
|
|
136
|
+
err('❌ complete-todo cannot mint a PASS receipt or clear consult todos.');
|
|
137
|
+
err('A consult todo completes only when Confer records a real model approve.');
|
|
138
|
+
process.exit(1);
|
|
185
139
|
}
|
|
186
140
|
|
|
187
141
|
async function cmdFinish() {
|
package/xray/features.json
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
},
|
|
46
46
|
"confer_on_synthesis": {
|
|
47
47
|
"type": "boolean",
|
|
48
|
-
"description": "
|
|
48
|
+
"description": "Opt in to the 3-agent confer quorum. A missing key stays off."
|
|
49
49
|
},
|
|
50
50
|
"confer": {
|
|
51
51
|
"type": "object",
|