0xray 4.0.36 → 4.0.38
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/.xray/features.json +1 -1
- package/dist/CHANGELOG.md +28 -0
- package/dist/analytics/emerging-pattern-detector.d.ts +12 -1
- package/dist/analytics/emerging-pattern-detector.js +37 -12
- package/dist/analytics/pattern-learning-engine.js +1 -9
- package/dist/analytics/predictive-analytics.js +51 -33
- package/dist/analytics/prompt-pattern-analyzer.d.ts +1 -0
- package/dist/analytics/prompt-pattern-analyzer.js +39 -20
- package/dist/analytics/routing-performance-analyzer.d.ts +2 -0
- package/dist/analytics/routing-performance-analyzer.js +89 -37
- package/dist/analytics/simple-pattern-analyzer.d.ts +4 -0
- package/dist/analytics/simple-pattern-analyzer.js +66 -28
- package/dist/architect/architect-tools.d.ts +3 -0
- package/dist/architect/architect-tools.js +22 -0
- package/dist/cli/commands/grok-install.js +1 -1
- package/dist/cli/commands/hermes-install.js +11 -5
- package/dist/cli/commands/openclaw-install.js +13 -7
- package/dist/cli/commands/opencode-install.js +7 -4
- package/dist/cli/commands/suit-monitor.d.ts +30 -0
- package/dist/cli/commands/suit-monitor.js +128 -0
- package/dist/cli/index.js +52 -15
- package/dist/cli/suit-pulse.d.ts +29 -0
- package/dist/cli/suit-pulse.js +270 -0
- package/dist/delegation/agent-delegator.d.ts +4 -2
- package/dist/delegation/agent-delegator.js +46 -27
- package/dist/delegation/agent-expertise.js +2 -1
- package/dist/delegation/analytics/outcome-tracker.d.ts +6 -0
- package/dist/delegation/analytics/outcome-tracker.js +17 -3
- package/dist/delegation/ast-code-parser.d.ts +5 -0
- package/dist/delegation/ast-code-parser.js +53 -48
- package/dist/delegation/codebase-context-analyzer.d.ts +3 -7
- package/dist/delegation/codebase-context-analyzer.js +188 -159
- package/dist/delegation/session-coordinator.js +3 -2
- package/dist/enforcement/loaders/codex-loader.js +18 -14
- package/dist/enforcement/validators/architecture-validators.js +115 -9
- package/dist/governance/codex-policy.service.d.ts +12 -2
- package/dist/governance/codex-policy.service.js +91 -16
- package/dist/integrations/grok/hooks/session-start.js +6 -6
- package/dist/integrations/hooks/goggles-pipeline.mjs +169 -28
- package/dist/integrations/hooks/goggles-planes.json +172 -8
- package/dist/integrations/hooks/plates.cjs +138 -0
- package/dist/integrations/hooks/station-hook-runtime.cjs +63 -5
- package/dist/integrations/hooks/write-home.cjs +59 -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 -18
- package/dist/mcps/orchestrator/server.d.ts +4 -3
- package/dist/mcps/orchestrator/server.js +29 -17
- package/dist/memory-routing/lookup-cache.d.ts +8 -0
- package/dist/memory-routing/lookup-cache.js +72 -0
- package/dist/memory-routing/plates.d.ts +1 -1
- package/dist/memory-routing/plates.js +26 -0
- package/dist/memory-routing/provider-loader.js +3 -0
- package/dist/metrics/agent-metrics.d.ts +14 -5
- package/dist/metrics/agent-metrics.js +362 -224
- package/dist/nucleus/synthesis-consult-receipt.js +38 -16
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.d.ts +5 -0
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +9 -0
- package/dist/orchestrator/multi-agent-orchestration-coordinator.js +1 -2
- package/dist/orchestrator/orchestrator.js +1 -2
- package/dist/processors/implementations/agents-md-validation-processor.d.ts +0 -1
- package/dist/processors/implementations/agents-md-validation-processor.js +0 -11
- package/dist/processors/implementations/console-log-guard-processor.js +39 -50
- package/dist/processors/implementations/performance-budget-processor.d.ts +0 -5
- package/dist/processors/implementations/performance-budget-processor.js +29 -38
- package/dist/processors/implementations/storytelling-trigger-processor.d.ts +5 -0
- package/dist/processors/implementations/storytelling-trigger-processor.js +69 -16
- package/dist/processors/implementations/test-auto-creation-processor.js +39 -36
- package/dist/reporting/framework-reporting-system.d.ts +3 -0
- package/dist/reporting/framework-reporting-system.js +61 -8
- package/dist/reporting/log-parser.js +188 -105
- package/dist/reporting/metrics.js +42 -18
- package/dist/security/prompt-security-validator.js +8 -7
- package/dist/security/security-auditor.d.ts +4 -0
- package/dist/security/security-auditor.js +132 -57
- package/dist/security/security-hardener.d.ts +2 -0
- package/dist/security/security-hardener.js +31 -6
- package/dist/security/security-headers.d.ts +2 -0
- package/dist/security/security-headers.js +23 -21
- package/dist/security/security-scanner.js +18 -4
- package/dist/session/session-cleanup-manager.d.ts +2 -0
- package/dist/session/session-cleanup-manager.js +29 -8
- package/dist/session/session-monitor.d.ts +14 -4
- package/dist/session/session-monitor.js +208 -106
- package/dist/session/session-state-manager.d.ts +11 -0
- package/dist/session/session-state-manager.js +90 -8
- package/docs-site/docs/plates/activity-log.md +38 -0
- package/docs-site/docs/plates/cursor-compact.md +35 -0
- package/docs-site/docs/plates/grok-compact.md +35 -0
- package/docs-site/docs/plates/index.md +25 -3
- package/docs-site/docs/plates/inference-files.md +35 -0
- package/docs-site/docs/plates/kept-line.md +35 -0
- package/docs-site/docs/plates/lens-gate.md +35 -0
- package/docs-site/docs/plates/lens-page.md +35 -0
- package/docs-site/docs/plates/notes-page.md +35 -0
- package/docs-site/docs/plates/package-face.md +35 -0
- package/docs-site/docs/plates/payload-heat.md +35 -0
- package/docs-site/docs/plates/pickup-stamp.md +35 -0
- package/docs-site/docs/plates/pre-tool.md +35 -0
- package/docs-site/docs/plates/record-map.md +41 -0
- package/docs-site/docs/plates/reflection-page.md +35 -0
- package/docs-site/docs/plates/review.md +57 -0
- package/docs-site/docs/plates/session-capture.md +38 -0
- package/docs-site/docs/plates/site-manual.md +35 -0
- package/docs-site/docs/plates/stamp-plate.md +35 -0
- package/docs-site/docs/plates/station-card.md +35 -0
- package/docs-site/docs/plates/station-heat.md +35 -0
- package/docs-site/docs/plates/suit-organs.md +38 -0
- package/docs-site/docs/plates/suit-settings.md +35 -0
- package/docs-site/docs/plates/suit-wear.md +37 -0
- package/docs-site/docs/plates/trail-state.md +35 -0
- package/docs-site/docs/plates/work-fresh.md +35 -0
- package/docs-site/docs/plates/write-home.md +38 -0
- package/package.json +3 -2
- package/scripts/node/install-bridges.cjs +302 -78
- package/scripts/node/postinstall.cjs +14 -3
- package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
- package/src/mcps/architect-tools.server.ts +25 -20
- package/src/mcps/orchestrator/server.ts +33 -19
- package/xray/features.json +1 -1
- package/vendor/@0xray/repertoire/dist/RepertoireService.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/RepertoireService.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/index.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/index.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/mcp/server.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/mcp/server.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/paths.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/paths.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/registry/confidence-decay.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/registry/confidence-decay.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/registry/signal-prune.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/registry/signal-prune.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.js.map +0 -1
- package/vendor/@0xray/repertoire/dist/types.d.ts.map +0 -1
- package/vendor/@0xray/repertoire/dist/types.js.map +0 -1
|
@@ -13,9 +13,14 @@ export class SessionStateManager {
|
|
|
13
13
|
dependencies = new Map();
|
|
14
14
|
sessionGroups = new Map();
|
|
15
15
|
failoverConfigs = new Map();
|
|
16
|
+
/** Stable store records. A field write patches one key instead of cloning the map. */
|
|
17
|
+
dependencyRecord = {};
|
|
18
|
+
groupRecord = {};
|
|
19
|
+
failoverRecord = {};
|
|
16
20
|
constructor(stateManager, sessionCoordinator) {
|
|
17
21
|
this.stateManager = stateManager;
|
|
18
22
|
this.sessionCoordinator = sessionCoordinator;
|
|
23
|
+
this.loadPersistedRecords();
|
|
19
24
|
}
|
|
20
25
|
/**
|
|
21
26
|
* Share state between sessions
|
|
@@ -86,10 +91,12 @@ export class SessionStateManager {
|
|
|
86
91
|
metadata: {},
|
|
87
92
|
};
|
|
88
93
|
this.dependencies.set(depId, dep);
|
|
94
|
+
this.trackDependency(depId);
|
|
89
95
|
}
|
|
90
96
|
dep.dependedBy.push(sessionId);
|
|
91
97
|
}
|
|
92
98
|
this.dependencies.set(sessionId, dependency);
|
|
99
|
+
this.trackDependency(sessionId);
|
|
93
100
|
this.persistDependencies();
|
|
94
101
|
frameworkLogger.log("session-state-manager", "dependency-registered", "info", { sessionId, dependsOn });
|
|
95
102
|
}
|
|
@@ -138,6 +145,7 @@ export class SessionStateManager {
|
|
|
138
145
|
createdAt: Date.now(),
|
|
139
146
|
};
|
|
140
147
|
this.sessionGroups.set(groupId, group);
|
|
148
|
+
this.trackGroup(groupId);
|
|
141
149
|
this.persistSessionGroups();
|
|
142
150
|
for (const sessionId of sessionIds) {
|
|
143
151
|
this.sessionCoordinator.shareContext(sessionId, `group:${groupId}:membership`, {
|
|
@@ -357,6 +365,7 @@ export class SessionStateManager {
|
|
|
357
365
|
coordinatorId: plan.targetCoordinator,
|
|
358
366
|
};
|
|
359
367
|
this.sessionGroups.set(groupId, updatedGroup);
|
|
368
|
+
this.trackGroup(groupId);
|
|
360
369
|
this.persistSessionGroups();
|
|
361
370
|
break;
|
|
362
371
|
}
|
|
@@ -400,6 +409,7 @@ export class SessionStateManager {
|
|
|
400
409
|
autoFailover,
|
|
401
410
|
};
|
|
402
411
|
this.failoverConfigs.set(sessionId, config);
|
|
412
|
+
this.trackFailover(sessionId);
|
|
403
413
|
this.persistFailoverConfigs();
|
|
404
414
|
frameworkLogger.log("session-state-manager", "failover-configured", "info", { sessionId, backupCount: backupCoordinators.length });
|
|
405
415
|
}
|
|
@@ -435,11 +445,21 @@ export class SessionStateManager {
|
|
|
435
445
|
* Get coordination statistics
|
|
436
446
|
*/
|
|
437
447
|
getCoordinationStats() {
|
|
448
|
+
let activeDependencies = 0;
|
|
449
|
+
for (const dependency of this.dependencies.values()) {
|
|
450
|
+
if (dependency.state === "active")
|
|
451
|
+
activeDependencies += 1;
|
|
452
|
+
}
|
|
453
|
+
let activeGroups = 0;
|
|
454
|
+
for (const group of this.sessionGroups.values()) {
|
|
455
|
+
if (group.state === "active")
|
|
456
|
+
activeGroups += 1;
|
|
457
|
+
}
|
|
438
458
|
return {
|
|
439
459
|
totalDependencies: this.dependencies.size,
|
|
440
|
-
activeDependencies
|
|
460
|
+
activeDependencies,
|
|
441
461
|
totalGroups: this.sessionGroups.size,
|
|
442
|
-
activeGroups
|
|
462
|
+
activeGroups,
|
|
443
463
|
failoverConfigs: this.failoverConfigs.size,
|
|
444
464
|
};
|
|
445
465
|
}
|
|
@@ -478,10 +498,12 @@ export class SessionStateManager {
|
|
|
478
498
|
}
|
|
479
499
|
if (backup.dependencies) {
|
|
480
500
|
this.dependencies.set(plan.sessionId, backup.dependencies);
|
|
501
|
+
this.trackDependency(plan.sessionId);
|
|
481
502
|
this.persistDependencies();
|
|
482
503
|
}
|
|
483
504
|
if (backup.group) {
|
|
484
505
|
this.sessionGroups.set(backup.group.groupId, backup.group);
|
|
506
|
+
this.trackGroup(backup.group.groupId);
|
|
485
507
|
this.persistSessionGroups();
|
|
486
508
|
}
|
|
487
509
|
break;
|
|
@@ -500,17 +522,77 @@ export class SessionStateManager {
|
|
|
500
522
|
await frameworkLogger.log("session-state-manager", "-rolling-back-step-step-", "info", { message: ` ← Rolling back step: ${step}` });
|
|
501
523
|
}
|
|
502
524
|
}
|
|
525
|
+
trackDependency(sessionId) {
|
|
526
|
+
const dependency = this.dependencies.get(sessionId);
|
|
527
|
+
if (dependency)
|
|
528
|
+
this.dependencyRecord[sessionId] = dependency;
|
|
529
|
+
else
|
|
530
|
+
delete this.dependencyRecord[sessionId];
|
|
531
|
+
}
|
|
532
|
+
trackGroup(groupId) {
|
|
533
|
+
const group = this.sessionGroups.get(groupId);
|
|
534
|
+
if (group)
|
|
535
|
+
this.groupRecord[groupId] = group;
|
|
536
|
+
else
|
|
537
|
+
delete this.groupRecord[groupId];
|
|
538
|
+
}
|
|
539
|
+
trackFailover(sessionId) {
|
|
540
|
+
const config = this.failoverConfigs.get(sessionId);
|
|
541
|
+
if (config)
|
|
542
|
+
this.failoverRecord[sessionId] = config;
|
|
543
|
+
else
|
|
544
|
+
delete this.failoverRecord[sessionId];
|
|
545
|
+
}
|
|
503
546
|
persistDependencies() {
|
|
504
|
-
|
|
505
|
-
this.stateManager.set("state_manager:dependencies",
|
|
547
|
+
this.dependencyRecord = this.adoptStoreRecord("state_manager:dependencies", this.dependencyRecord);
|
|
548
|
+
this.stateManager.set("state_manager:dependencies", this.dependencyRecord);
|
|
506
549
|
}
|
|
507
550
|
persistSessionGroups() {
|
|
508
|
-
|
|
509
|
-
this.stateManager.set("state_manager:groups",
|
|
551
|
+
this.groupRecord = this.adoptStoreRecord("state_manager:groups", this.groupRecord);
|
|
552
|
+
this.stateManager.set("state_manager:groups", this.groupRecord);
|
|
510
553
|
}
|
|
511
554
|
persistFailoverConfigs() {
|
|
512
|
-
|
|
513
|
-
this.stateManager.set("state_manager:failover",
|
|
555
|
+
this.failoverRecord = this.adoptStoreRecord("state_manager:failover", this.failoverRecord);
|
|
556
|
+
this.stateManager.set("state_manager:failover", this.failoverRecord);
|
|
557
|
+
}
|
|
558
|
+
loadPersistedRecords() {
|
|
559
|
+
const dependencies = this.readStoreRecord("state_manager:dependencies");
|
|
560
|
+
if (dependencies) {
|
|
561
|
+
this.dependencyRecord = dependencies;
|
|
562
|
+
for (const [sessionId, dependency] of Object.entries(dependencies)) {
|
|
563
|
+
this.dependencies.set(sessionId, dependency);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
const groups = this.readStoreRecord("state_manager:groups");
|
|
567
|
+
if (groups) {
|
|
568
|
+
this.groupRecord = groups;
|
|
569
|
+
for (const [groupId, group] of Object.entries(groups)) {
|
|
570
|
+
this.sessionGroups.set(groupId, group);
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
const failover = this.readStoreRecord("state_manager:failover");
|
|
574
|
+
if (failover) {
|
|
575
|
+
this.failoverRecord = failover;
|
|
576
|
+
for (const [sessionId, config] of Object.entries(failover)) {
|
|
577
|
+
this.failoverConfigs.set(sessionId, config);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
readStoreRecord(key) {
|
|
582
|
+
const existing = this.stateManager.get(key);
|
|
583
|
+
if (!existing || typeof existing !== "object" || Array.isArray(existing))
|
|
584
|
+
return undefined;
|
|
585
|
+
return existing;
|
|
586
|
+
}
|
|
587
|
+
/** Patch the stored object so a pre-seeded key survives the first write. */
|
|
588
|
+
adoptStoreRecord(key, record) {
|
|
589
|
+
const existing = this.readStoreRecord(key);
|
|
590
|
+
if (!existing || existing === record)
|
|
591
|
+
return record;
|
|
592
|
+
for (const [id, value] of Object.entries(record)) {
|
|
593
|
+
existing[id] = value;
|
|
594
|
+
}
|
|
595
|
+
return existing;
|
|
514
596
|
}
|
|
515
597
|
shutdown() {
|
|
516
598
|
frameworkLogger.log("session-state-manager", "shutdown-complete", "info");
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Activity log
|
|
3
|
+
sidebar_label: Activity log
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Activity log
|
|
7
|
+
|
|
8
|
+
A tool hook appends one JSON line, and reporting, pulse, and monitor read that same file back.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ INPUT LAYER │
|
|
13
|
+
│ ┌──────────────┐ ┌────────────┐ ┌─────────┐ ┌────────┐ │
|
|
14
|
+
│ │ pipeline hook│ │ grok hook │ │ hermes │ │ logger │ │
|
|
15
|
+
│ └──────┬───────┘ └─────┬──────┘ └────┬────┘ └───┬────┘ │
|
|
16
|
+
│ └───────────────┴─────────────┴─────┬────┘ │
|
|
17
|
+
└──────────────────────────────────────────────┼───────────┘
|
|
18
|
+
v
|
|
19
|
+
┌──────────────────────────────────────────────┼───────────┐
|
|
20
|
+
│ PROCESSING LAYER v │
|
|
21
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
22
|
+
│ │ append one JSON line │ │
|
|
23
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
24
|
+
└──────────────────────────────┼───────────────────────────┘
|
|
25
|
+
v
|
|
26
|
+
┌──────────────────────────────┼───────────────────────────┐
|
|
27
|
+
│ OUTPUT LAYER v │
|
|
28
|
+
│ ┌──────────────────────────────────────────────────┐ │
|
|
29
|
+
│ │ .xray/logs/activity.log │ │
|
|
30
|
+
│ └──────────────────────────────────────────────────┘ │
|
|
31
|
+
└──────────────────────────────────────────────────────────┘
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Today those writers append `logs/framework/activity.log`. The features default still says `.opencode/logs`. The file they share after the rewire is `.xray/logs/activity.log`.
|
|
35
|
+
|
|
36
|
+
When: on the tool hook, on framework logger flush, and on boot when file logging is on. Why: the report and the pulse read one tail, not a pile of copies.
|
|
37
|
+
|
|
38
|
+
stamped · 0xray 4.0.36
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Cursor compact
|
|
3
|
+
sidebar_label: Cursor compact
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cursor compact
|
|
7
|
+
|
|
8
|
+
Cursor preCompact writes the station card and cannot block the compact.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ INPUT LAYER │
|
|
13
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
14
|
+
│ │ the host fires preCompact │ │
|
|
15
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
16
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
17
|
+
v
|
|
18
|
+
┌────────────┼───────────────────────────────────────────────┐
|
|
19
|
+
│ PROCESSING LAYER │
|
|
20
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
21
|
+
│ │ write the station card │ │
|
|
22
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
23
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
24
|
+
v
|
|
25
|
+
┌──────────────────────────────┼─────────────────────────────┐
|
|
26
|
+
│ OUTPUT LAYER v │
|
|
27
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
28
|
+
│ │ the compact continues │ │
|
|
29
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
30
|
+
└────────────────────────────────────────────────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The file is `src/integrations/cursor/hooks/pre-compact.js`. The message tells the seat to read STATION.md. The plates that belong here are payload-heat and station-heat.
|
|
34
|
+
|
|
35
|
+
stamped · 0xray 4.0.36
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Grok compact
|
|
3
|
+
sidebar_label: Grok compact
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Grok compact
|
|
7
|
+
|
|
8
|
+
Grok PreCompact runs session-start.js with the pre_compact event.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ INPUT LAYER │
|
|
13
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
14
|
+
│ │ a compact is about to happen │ │
|
|
15
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
16
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
17
|
+
v
|
|
18
|
+
┌────────────┼───────────────────────────────────────────────┐
|
|
19
|
+
│ PROCESSING LAYER │
|
|
20
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
21
|
+
│ │ build the session payload │ │
|
|
22
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
23
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
24
|
+
v
|
|
25
|
+
┌──────────────────────────────┼─────────────────────────────┐
|
|
26
|
+
│ OUTPUT LAYER v │
|
|
27
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
28
|
+
│ │ the station card is written │ │
|
|
29
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
30
|
+
└────────────────────────────────────────────────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The hook is `session-start.js --hook-event=pre_compact`. It calls `buildSessionBootPayload`, writes the station card, and prints nothing. It does not match the conversation. Grok ignores hook stdout. The plates that belong here are payload-heat, cursor-compact, and work-fresh.
|
|
34
|
+
|
|
35
|
+
stamped · 0xray 4.0.36
|
|
@@ -21,10 +21,32 @@ Plates have a type. A domain model plate shows how named parts fit. A state flow
|
|
|
21
21
|
|
|
22
22
|
## State flow
|
|
23
23
|
|
|
24
|
-
[House](./house.md)
|
|
24
|
+
[House](./house.md) · [Review](./review.md)
|
|
25
25
|
|
|
26
26
|
## Pipeline
|
|
27
27
|
|
|
28
|
-
[Routing](./routing.md) · [Governance](./governance.md) · [Boot](./boot.md) · [Orchestration](./orchestration.md) · [Processor](./processor.md) · [Reporting](./reporting.md) · [Memory recall](./memory-recall.md)
|
|
28
|
+
[Routing](./routing.md) · [Governance](./governance.md) · [Boot](./boot.md) · [Orchestration](./orchestration.md) · [Processor](./processor.md) · [Reporting](./reporting.md) · [Memory recall](./memory-recall.md) · [Stamp plate](./stamp-plate.md)
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
Each of these is a lens plane. Each drawing is an input layer, a processing layer, and an output layer. Ground has no plate file.
|
|
31
|
+
|
|
32
|
+
## Write home
|
|
33
|
+
|
|
34
|
+
[Record map](./record-map.md) · [Write home](./write-home.md) · [Activity log](./activity-log.md) · [Session capture](./session-capture.md) · [Suit wear](./suit-wear.md) · [Suit organs](./suit-organs.md)
|
|
35
|
+
|
|
36
|
+
These six are the file ref. Each one is a search lens. The pipeline drawings above stay the lens planes for those machines.
|
|
37
|
+
|
|
38
|
+
## Hands
|
|
39
|
+
|
|
40
|
+
[Station card](./station-card.md) · [Notes page](./notes-page.md) · [Reflection page](./reflection-page.md) · [Site manual](./site-manual.md) · [Package face](./package-face.md) · [Suit settings](./suit-settings.md) · [Trail state](./trail-state.md) · [Inference files](./inference-files.md)
|
|
41
|
+
|
|
42
|
+
These eight are the pages the file ref names. Each one is a search lens. Each lens lists one skill and the plates that belong with it.
|
|
43
|
+
|
|
44
|
+
## Compact path
|
|
45
|
+
|
|
46
|
+
[Grok compact](./grok-compact.md) · [Payload heat](./payload-heat.md) · [Station heat](./station-heat.md) · [Pickup stamp](./pickup-stamp.md) · [Cursor compact](./cursor-compact.md)
|
|
47
|
+
|
|
48
|
+
## Fresh line and the gate
|
|
49
|
+
|
|
50
|
+
[Work fresh](./work-fresh.md) · [Kept line](./kept-line.md) · [Lens gate](./lens-gate.md) · [Pre tool](./pre-tool.md) · [Lens page](./lens-page.md)
|
|
51
|
+
|
|
52
|
+
These five are the compact path that was opened. Each one is a search lens. Each lens lists one skill and the plates that belong with it.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Inference files
|
|
3
|
+
sidebar_label: Inference files
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Inference files
|
|
7
|
+
|
|
8
|
+
Inference cycle state already lives under .xray/inference.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ INPUT LAYER │
|
|
13
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
14
|
+
│ │ a cycle closes │ │
|
|
15
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
16
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
17
|
+
v
|
|
18
|
+
┌────────────┼───────────────────────────────────────────────┐
|
|
19
|
+
│ PROCESSING LAYER │
|
|
20
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
21
|
+
│ │ write the cycle beside the sessions │ │
|
|
22
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
23
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
24
|
+
v
|
|
25
|
+
┌──────────────────────────────┼─────────────────────────────┐
|
|
26
|
+
│ OUTPUT LAYER v │
|
|
27
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
28
|
+
│ │ files under .xray/inference │ │
|
|
29
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
30
|
+
└────────────────────────────────────────────────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Cycle state, history, graded ids, and governance state are already there. Session files still fall back to `docs/inference` until the writers move.
|
|
34
|
+
|
|
35
|
+
stamped · 0xray 4.0.36
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Kept line
|
|
3
|
+
sidebar_label: Kept line
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Kept line
|
|
7
|
+
|
|
8
|
+
A station rewrite keeps one Fresh line and drops the copies.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ INPUT LAYER │
|
|
13
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
14
|
+
│ │ the card already on disk │ │
|
|
15
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
16
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
17
|
+
v
|
|
18
|
+
┌────────────┼───────────────────────────────────────────────┐
|
|
19
|
+
│ PROCESSING LAYER │
|
|
20
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
21
|
+
│ │ keep the latest Fresh line │ │
|
|
22
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
23
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
24
|
+
v
|
|
25
|
+
┌──────────────────────────────┼─────────────────────────────┐
|
|
26
|
+
│ OUTPUT LAYER v │
|
|
27
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
28
|
+
│ │ one Fresh line in the stock card │ │
|
|
29
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
30
|
+
└────────────────────────────────────────────────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
mergeStationMarkdown in src/integrations/hooks/station-hook-runtime.cjs treats a Fresh line as stock. Copies are not preserved. When the new card has no Fresh line, the latest one is kept. The plates that belong here are station-card and work-fresh.
|
|
34
|
+
|
|
35
|
+
stamped · 0xray 4.0.36
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Lens gate
|
|
3
|
+
sidebar_label: Lens gate
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Lens gate
|
|
7
|
+
|
|
8
|
+
A search names one plane or it stops.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ INPUT LAYER │
|
|
13
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
14
|
+
│ │ the tool name and the spoken text │ │
|
|
15
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
16
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
17
|
+
v
|
|
18
|
+
┌────────────┼───────────────────────────────────────────────┐
|
|
19
|
+
│ PROCESSING LAYER │
|
|
20
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
21
|
+
│ │ count card-plane names │ │
|
|
22
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
23
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
24
|
+
v
|
|
25
|
+
┌──────────────────────────────┼─────────────────────────────┐
|
|
26
|
+
│ OUTPUT LAYER v │
|
|
27
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
28
|
+
│ │ allow on one name, otherwise stop │ │
|
|
29
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
30
|
+
└────────────────────────────────────────────────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
lensBeforeResearch in src/integrations/hooks/goggles-pipeline.mjs returns null when the call is not research, and when the spoken text names exactly one card plane. Zero names, or more than one, deny with Name one plane. A shell that reads a project source file is research. The first open of a source file that no lens lists is allowed and remembered. The next search stops until that file is on a lens and the plate is on disk. The hook does not author the plate. The plate that belongs here is pre-tool.
|
|
34
|
+
|
|
35
|
+
stamped · 0xray 4.0.36
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Lens page
|
|
3
|
+
sidebar_label: Lens page
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Lens page
|
|
7
|
+
|
|
8
|
+
The lens page is the card for one plane.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ INPUT LAYER │
|
|
13
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
14
|
+
│ │ one plane name │ │
|
|
15
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
16
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
17
|
+
v
|
|
18
|
+
┌────────────┼───────────────────────────────────────────────┐
|
|
19
|
+
│ PROCESSING LAYER │
|
|
20
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
21
|
+
│ │ draw the card │ │
|
|
22
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
23
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
24
|
+
v
|
|
25
|
+
┌──────────────────────────────┼─────────────────────────────┐
|
|
26
|
+
│ OUTPUT LAYER v │
|
|
27
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
28
|
+
│ │ the skill and the plates on that card │ │
|
|
29
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
30
|
+
└────────────────────────────────────────────────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`formatCardPane` in `src/integrations/hooks/goggles-pipeline.mjs` draws the card. Read the card instead of searching the tree. The plates that belong here are record-map and lens-gate.
|
|
34
|
+
|
|
35
|
+
stamped · 0xray 4.0.36
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Notes page
|
|
3
|
+
sidebar_label: Notes page
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Notes page
|
|
7
|
+
|
|
8
|
+
Notes are the body the station card cannot hold.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ INPUT LAYER │
|
|
13
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
14
|
+
│ │ the pickup line │ │
|
|
15
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
16
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
17
|
+
v
|
|
18
|
+
┌────────────┼───────────────────────────────────────────────┐
|
|
19
|
+
│ PROCESSING LAYER │
|
|
20
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
21
|
+
│ │ write the working notes at full depth │ │
|
|
22
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
23
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
24
|
+
v
|
|
25
|
+
┌──────────────────────────────┼─────────────────────────────┐
|
|
26
|
+
│ OUTPUT LAYER v │
|
|
27
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
28
|
+
│ │ the next seat continues │ │
|
|
29
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
30
|
+
└────────────────────────────────────────────────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The page is `.xray/state/NOTES.md`. The pickup line equals the station intent. The default depth is the working notes: the point, the coverage, the library, the open pull requests, the rituals, and the next cut. A pickup line alone does not survive a compact. PreCompact calls `stampNotesPickup`, which updates only that line and leaves the body alone. The hook does not check the body. The seat writes it before the compact. Do not commit this file. Do not feed it to Repertoire.
|
|
34
|
+
|
|
35
|
+
stamped · 0xray 4.0.36
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Package face
|
|
3
|
+
sidebar_label: Package face
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Package face
|
|
7
|
+
|
|
8
|
+
A release writes the package face, and the agent reads it.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ INPUT LAYER │
|
|
13
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
14
|
+
│ │ a release runs │ │
|
|
15
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
16
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
17
|
+
v
|
|
18
|
+
┌────────────┼───────────────────────────────────────────────┐
|
|
19
|
+
│ PROCESSING LAYER │
|
|
20
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
21
|
+
│ │ the release script writes the face │ │
|
|
22
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
23
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
24
|
+
v
|
|
25
|
+
┌──────────────────────────────┼─────────────────────────────┐
|
|
26
|
+
│ OUTPUT LAYER v │
|
|
27
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
28
|
+
│ │ the published package │ │
|
|
29
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
30
|
+
└────────────────────────────────────────────────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The face is `README.md`, `package.json`, `AGENTS.md`, `llms.txt`, `CHANGELOG.md`, and `SKILLS.md`. Do not hand-bump the version.
|
|
34
|
+
|
|
35
|
+
stamped · 0xray 4.0.36
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Payload heat
|
|
3
|
+
sidebar_label: Payload heat
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Payload heat
|
|
7
|
+
|
|
8
|
+
buildSessionBootPayload calls applyStationHeat and writes the station card.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ INPUT LAYER │
|
|
13
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
14
|
+
│ │ the compact event │ │
|
|
15
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
16
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
17
|
+
v
|
|
18
|
+
┌────────────┼───────────────────────────────────────────────┐
|
|
19
|
+
│ PROCESSING LAYER │
|
|
20
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
21
|
+
│ │ apply station heat │ │
|
|
22
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
23
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
24
|
+
v
|
|
25
|
+
┌──────────────────────────────┼─────────────────────────────┐
|
|
26
|
+
│ OUTPUT LAYER v │
|
|
27
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
28
|
+
│ │ STATION.md is on disk │ │
|
|
29
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
30
|
+
└────────────────────────────────────────────────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The function is in `src/integrations/grok/hooks/grok-hook-utils.js`. The plates that belong here are station-heat and pickup-stamp.
|
|
34
|
+
|
|
35
|
+
stamped · 0xray 4.0.36
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Pickup stamp
|
|
3
|
+
sidebar_label: Pickup stamp
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Pickup stamp
|
|
7
|
+
|
|
8
|
+
stampNotesPickup writes one pickup line and leaves the rest of NOTES.md alone.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ INPUT LAYER │
|
|
13
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
14
|
+
│ │ the intent line │ │
|
|
15
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
16
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
17
|
+
v
|
|
18
|
+
┌────────────┼───────────────────────────────────────────────┐
|
|
19
|
+
│ PROCESSING LAYER │
|
|
20
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
21
|
+
│ │ replace the pickup line │ │
|
|
22
|
+
│ └──────────────────────────┬─────────────────────────┘ │
|
|
23
|
+
└──────────────────────────────┼─────────────────────────────┘
|
|
24
|
+
v
|
|
25
|
+
┌──────────────────────────────┼─────────────────────────────┐
|
|
26
|
+
│ OUTPUT LAYER v │
|
|
27
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
28
|
+
│ │ the body is untouched │ │
|
|
29
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
30
|
+
└────────────────────────────────────────────────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The comment on the function is one pickup line. There is no check that the working notes are present. The plate that belongs here is notes-page.
|
|
34
|
+
|
|
35
|
+
stamped · 0xray 4.0.36
|