avorelo 0.1.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/LICENSE +21 -0
- package/README.md +56 -0
- package/bin/avorelo +9 -0
- package/package.json +135 -0
- package/scripts/README.md +40 -0
- package/scripts/cco-dashboard.js +252 -0
- package/scripts/cco-status.js +430 -0
- package/scripts/lib/activation/account-state.js +37 -0
- package/scripts/lib/activation/activation-runner.js +546 -0
- package/scripts/lib/activation/activation-self-healing.js +480 -0
- package/scripts/lib/activation/activation-state.js +83 -0
- package/scripts/lib/activation/activation-summary.js +191 -0
- package/scripts/lib/activation/adapters/claude-code.js +77 -0
- package/scripts/lib/activation/adapters/codex-cli.js +52 -0
- package/scripts/lib/activation/adapters/cursor.js +37 -0
- package/scripts/lib/activation/adapters/github-agent.js +39 -0
- package/scripts/lib/activation/adapters/terminal.js +42 -0
- package/scripts/lib/activation/adapters/vscode.js +39 -0
- package/scripts/lib/activation/adapters/windsurf.js +37 -0
- package/scripts/lib/activation/ai-surface-detector.js +151 -0
- package/scripts/lib/activation/connect-account.js +145 -0
- package/scripts/lib/activation/detect-environment.js +75 -0
- package/scripts/lib/activation/detect-hosts.js +62 -0
- package/scripts/lib/activation/format-activation-output.js +109 -0
- package/scripts/lib/activation/next-action.js +43 -0
- package/scripts/lib/activation/repair-engine.js +219 -0
- package/scripts/lib/activation-distribution-readiness.js +507 -0
- package/scripts/lib/adapter-conformance.js +176 -0
- package/scripts/lib/adapter-readiness.js +417 -0
- package/scripts/lib/adapter-safety-boundaries.js +335 -0
- package/scripts/lib/adapter-technical-readiness-gate.js +205 -0
- package/scripts/lib/agent-access-governance.js +455 -0
- package/scripts/lib/agent-enforcement.js +765 -0
- package/scripts/lib/agent-policy-profile.js +210 -0
- package/scripts/lib/agent-security/action-evaluator.js +507 -0
- package/scripts/lib/agent-security/adapter-registry.js +98 -0
- package/scripts/lib/agent-security/auto-policy.js +139 -0
- package/scripts/lib/agent-security/bounded-scan.js +93 -0
- package/scripts/lib/agent-security/enforcement-adapter.js +174 -0
- package/scripts/lib/agent-security/enforcement-engine.js +1129 -0
- package/scripts/lib/agent-security/file-write-adapter.js +183 -0
- package/scripts/lib/agent-security/file-write-rules.js +178 -0
- package/scripts/lib/agent-security/index.js +3342 -0
- package/scripts/lib/agent-security/instruction-risk.js +181 -0
- package/scripts/lib/agent-security/mcp-action-adapter.js +185 -0
- package/scripts/lib/agent-security/mcp-action-rules.js +184 -0
- package/scripts/lib/agent-security/package-action-adapter.js +175 -0
- package/scripts/lib/agent-security/package-action-rules.js +233 -0
- package/scripts/lib/agent-security/performance.js +148 -0
- package/scripts/lib/agent-security/permission-minimizer.js +403 -0
- package/scripts/lib/agent-security/scan-cache.js +74 -0
- package/scripts/lib/agent-security/source-trust.js +146 -0
- package/scripts/lib/ai-install-prompt.js +288 -0
- package/scripts/lib/ai-workspace-hygiene.js +1499 -0
- package/scripts/lib/alpha-activation.js +520 -0
- package/scripts/lib/alpha-feedback.js +263 -0
- package/scripts/lib/alpha-readiness-gate.js +332 -0
- package/scripts/lib/anti-gaming.js +169 -0
- package/scripts/lib/artifact-health.js +431 -0
- package/scripts/lib/attribution.js +180 -0
- package/scripts/lib/audit.js +289 -0
- package/scripts/lib/avorelo-skill-registry.js +810 -0
- package/scripts/lib/batch-jobs.js +71 -0
- package/scripts/lib/brain-pack.js +578 -0
- package/scripts/lib/brand-boundary.js +424 -0
- package/scripts/lib/brand.js +74 -0
- package/scripts/lib/browser-capability.js +1048 -0
- package/scripts/lib/browser-proof-preflight.js +321 -0
- package/scripts/lib/cache-readiness.js +187 -0
- package/scripts/lib/canonical-reentry.js +162 -0
- package/scripts/lib/capability-packs.js +314 -0
- package/scripts/lib/capability-recommender.js +512 -0
- package/scripts/lib/capability-registry.js +1059 -0
- package/scripts/lib/carry-forward-surfacing.js +194 -0
- package/scripts/lib/ccusage-adapter.js +188 -0
- package/scripts/lib/company-loop.js +1149 -0
- package/scripts/lib/config.js +637 -0
- package/scripts/lib/context-acquisition-plan.js +287 -0
- package/scripts/lib/context-budget-guard.js +170 -0
- package/scripts/lib/context-budget-scanner.js +257 -0
- package/scripts/lib/context-optimizer.js +715 -0
- package/scripts/lib/context-reduction-plan.js +178 -0
- package/scripts/lib/context-safety.js +88 -0
- package/scripts/lib/context-savings-engine.js +158 -0
- package/scripts/lib/cost-evidence.js +254 -0
- package/scripts/lib/cross-host-install-plan.js +308 -0
- package/scripts/lib/cross-host-install-readiness.js +237 -0
- package/scripts/lib/cross-host-value-flow.js +268 -0
- package/scripts/lib/dashboard.js +900 -0
- package/scripts/lib/design-partner-feedback.js +346 -0
- package/scripts/lib/entitlements.js +100 -0
- package/scripts/lib/execution-packet.js +559 -0
- package/scripts/lib/experimentation-events.js +547 -0
- package/scripts/lib/external-capability-compliance.js +107 -0
- package/scripts/lib/external-user-simulation.js +166 -0
- package/scripts/lib/failure-recovery-readiness.js +81 -0
- package/scripts/lib/failure-recovery.js +419 -0
- package/scripts/lib/feedback-intelligence.js +537 -0
- package/scripts/lib/feedback-signals.js +205 -0
- package/scripts/lib/file-integrity.js +68 -0
- package/scripts/lib/fsx.js +127 -0
- package/scripts/lib/full-readiness-gate.js +451 -0
- package/scripts/lib/guidance-builder.js +174 -0
- package/scripts/lib/hook-apply.js +1019 -0
- package/scripts/lib/hook-baseline.js +310 -0
- package/scripts/lib/hook-config-preview.js +275 -0
- package/scripts/lib/hook-contracts.js +290 -0
- package/scripts/lib/hook-safety-boundary-readiness.js +80 -0
- package/scripts/lib/host-capability-matrix.js +351 -0
- package/scripts/lib/host-support-context.js +254 -0
- package/scripts/lib/http-hook-action.js +538 -0
- package/scripts/lib/install-ai-readiness.js +84 -0
- package/scripts/lib/install-intake-risk.js +1037 -0
- package/scripts/lib/install-journey-intelligence.js +329 -0
- package/scripts/lib/intervention-guidance.js +57 -0
- package/scripts/lib/known-limitations.js +115 -0
- package/scripts/lib/l8-path-truth.js +146 -0
- package/scripts/lib/launch-hardening-gate.js +436 -0
- package/scripts/lib/launch-readiness.js +628 -0
- package/scripts/lib/learning-memory.js +686 -0
- package/scripts/lib/lifecycle-hooks.js +802 -0
- package/scripts/lib/local-package-smoke.js +423 -0
- package/scripts/lib/local-pricing.js +299 -0
- package/scripts/lib/mcp-enforcement.js +311 -0
- package/scripts/lib/mcp-least-privilege-policy.js +303 -0
- package/scripts/lib/mcp-tool-inventory.js +388 -0
- package/scripts/lib/mcp-tool-risk.js +0 -0
- package/scripts/lib/memory.js +335 -0
- package/scripts/lib/metrics.js +699 -0
- package/scripts/lib/micro-proof.js +133 -0
- package/scripts/lib/next-run-context.js +436 -0
- package/scripts/lib/operating-value.js +1648 -0
- package/scripts/lib/optimization-v3.js +122 -0
- package/scripts/lib/orchestration/adapters/_shared.js +49 -0
- package/scripts/lib/orchestration/adapters/aider.js +18 -0
- package/scripts/lib/orchestration/adapters/claude-code.js +35 -0
- package/scripts/lib/orchestration/adapters/codex.js +35 -0
- package/scripts/lib/orchestration/adapters/gemini-cli.js +18 -0
- package/scripts/lib/orchestration/adapters/git.js +25 -0
- package/scripts/lib/orchestration/adapters/index.js +31 -0
- package/scripts/lib/orchestration/adapters/lm-studio.js +18 -0
- package/scripts/lib/orchestration/adapters/ollama.js +18 -0
- package/scripts/lib/orchestration/adapters/opencode.js +18 -0
- package/scripts/lib/orchestration/adapters/openrouter.js +18 -0
- package/scripts/lib/orchestration/adapters/test-runner.js +25 -0
- package/scripts/lib/orchestration/cli.js +438 -0
- package/scripts/lib/orchestration/execution-manager.js +279 -0
- package/scripts/lib/orchestration/handoff.js +314 -0
- package/scripts/lib/orchestration/index.js +456 -0
- package/scripts/lib/orchestration/inventory.js +47 -0
- package/scripts/lib/orchestration/model-discovery.js +498 -0
- package/scripts/lib/orchestration/model-profiler.js +170 -0
- package/scripts/lib/orchestration/model-profiles.js +252 -0
- package/scripts/lib/orchestration/model-refresh-policy.js +72 -0
- package/scripts/lib/orchestration/proof-writer.js +349 -0
- package/scripts/lib/orchestration/provider-discovery/aider.js +49 -0
- package/scripts/lib/orchestration/provider-discovery/claude-code.js +56 -0
- package/scripts/lib/orchestration/provider-discovery/codex.js +49 -0
- package/scripts/lib/orchestration/provider-discovery/common.js +186 -0
- package/scripts/lib/orchestration/provider-discovery/gemini.js +106 -0
- package/scripts/lib/orchestration/provider-discovery/lm-studio.js +118 -0
- package/scripts/lib/orchestration/provider-discovery/models-dev.js +12 -0
- package/scripts/lib/orchestration/provider-discovery/ollama.js +100 -0
- package/scripts/lib/orchestration/provider-discovery/opencode.js +47 -0
- package/scripts/lib/orchestration/provider-discovery/openrouter.js +44 -0
- package/scripts/lib/orchestration/risk-classifier.js +130 -0
- package/scripts/lib/orchestration/routing-policy.js +486 -0
- package/scripts/lib/orchestration/settings.js +112 -0
- package/scripts/lib/orchestration/state.js +165 -0
- package/scripts/lib/orchestration/verification-manager.js +138 -0
- package/scripts/lib/output-profiles.js +146 -0
- package/scripts/lib/package-content-audit.js +368 -0
- package/scripts/lib/package-runtime.js +278 -0
- package/scripts/lib/plan-surface.js +53 -0
- package/scripts/lib/plans.js +2318 -0
- package/scripts/lib/policy-provider.js +27 -0
- package/scripts/lib/prelaunch-activation-readiness.js +409 -0
- package/scripts/lib/prelaunch-evidence-store.js +816 -0
- package/scripts/lib/prelaunch-intelligence.js +869 -0
- package/scripts/lib/pricing-experiment.js +118 -0
- package/scripts/lib/pro-moment-events.js +77 -0
- package/scripts/lib/pro-moment-state.js +227 -0
- package/scripts/lib/pro-moments.js +1216 -0
- package/scripts/lib/product-learning-events.js +629 -0
- package/scripts/lib/project-profile.js +555 -0
- package/scripts/lib/prompt-compiler.js +280 -0
- package/scripts/lib/prompt-lint.js +32 -0
- package/scripts/lib/prompt-suggestions.js +52 -0
- package/scripts/lib/proof-canonical.js +398 -0
- package/scripts/lib/proof-drilldown.js +383 -0
- package/scripts/lib/proof-events.js +342 -0
- package/scripts/lib/proof-history.js +243 -0
- package/scripts/lib/proof-metrics.js +296 -0
- package/scripts/lib/proof-outcome-evidence.js +134 -0
- package/scripts/lib/proof-receipt.js +335 -0
- package/scripts/lib/proof-record.js +461 -0
- package/scripts/lib/public-activation-distribution-gate.js +258 -0
- package/scripts/lib/public-cli.js +3891 -0
- package/scripts/lib/public-distribution-truth.js +211 -0
- package/scripts/lib/public-install-claim-checker.js +294 -0
- package/scripts/lib/publish-provenance-readiness.js +283 -0
- package/scripts/lib/readiness-delta.js +218 -0
- package/scripts/lib/readiness-evidence-closure.js +196 -0
- package/scripts/lib/reentry-memory-capture.js +241 -0
- package/scripts/lib/reentry-memory-retrieval.js +302 -0
- package/scripts/lib/reentry-memory-status.js +146 -0
- package/scripts/lib/reentry-memory-store.js +178 -0
- package/scripts/lib/reentry-state.js +66 -0
- package/scripts/lib/release-candidate-bundle.js +166 -0
- package/scripts/lib/remediation.js +81 -0
- package/scripts/lib/repo-map.js +391 -0
- package/scripts/lib/run-improvements-lifecycle.js +330 -0
- package/scripts/lib/run-improvements.js +789 -0
- package/scripts/lib/runtime-decision-policy.js +387 -0
- package/scripts/lib/safe-path-engine.js +705 -0
- package/scripts/lib/safe-run-controller.js +887 -0
- package/scripts/lib/score.js +262 -0
- package/scripts/lib/seamless-enforcement.js +329 -0
- package/scripts/lib/seamless-outcome.js +689 -0
- package/scripts/lib/seamless-reality-gate.js +5043 -0
- package/scripts/lib/security-risk-classifier.js +511 -0
- package/scripts/lib/security-scan.js +384 -0
- package/scripts/lib/session-context-optimizer.js +1211 -0
- package/scripts/lib/session-timing.js +315 -0
- package/scripts/lib/skill-hygiene.js +805 -0
- package/scripts/lib/skill-packs.js +161 -0
- package/scripts/lib/skills-operating-layer.js +580 -0
- package/scripts/lib/smart-work-routing.js +768 -0
- package/scripts/lib/source-catalog.js +700 -0
- package/scripts/lib/status-value-summary.js +32 -0
- package/scripts/lib/support-bundle.js +578 -0
- package/scripts/lib/task-continuation.js +440 -0
- package/scripts/lib/test-helpers.js +15 -0
- package/scripts/lib/tier.js +38 -0
- package/scripts/lib/token-context-quality-gate.js +370 -0
- package/scripts/lib/token-cost-capture.js +187 -0
- package/scripts/lib/token-cost-intelligence.js +358 -0
- package/scripts/lib/token-efficiency-evidence.js +213 -0
- package/scripts/lib/token-evidence.js +699 -0
- package/scripts/lib/tokenish.js +17 -0
- package/scripts/lib/tool-output-sandbox.js +304 -0
- package/scripts/lib/trust-audit.js +136 -0
- package/scripts/lib/unified-events.js +396 -0
- package/scripts/lib/upgrade-interruption-recovery.js +407 -0
- package/scripts/lib/usage-ledger.js +201 -0
- package/scripts/lib/value-ledger.js +130 -0
- package/scripts/lib/value-proof-calibration.js +531 -0
- package/scripts/lib/visual-qa.js +231 -0
- package/scripts/lib/voice-alpha.js +29 -0
- package/scripts/lib/work-aware-orchestration.js +976 -0
- package/scripts/lib/work-control-receipts.js +577 -0
- package/scripts/lib/work-ledger.js +1123 -0
- package/scripts/lib/work-panel-preview.js +352 -0
- package/scripts/lib/workflow-discipline.js +280 -0
- package/scripts/lib/workflow-signals.js +419 -0
- package/scripts/lib/workspace-map.js +281 -0
- package/scripts/lib/workspace-registry.js +1367 -0
- package/scripts/lib/workspace-resolver.js +480 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// ── Cross-Host Value Flow ─────────────────────────────────────────────────────
|
|
4
|
+
// Contract: avorelo.crossHostValueFlow.v1
|
|
5
|
+
// Answers: "Are proof outcomes, work ledger entries, token savings, and telemetry
|
|
6
|
+
// captured and reachable across detected hosts?"
|
|
7
|
+
// Reads existing artifacts. Does NOT generate new evidence.
|
|
8
|
+
|
|
9
|
+
const fs = require("fs");
|
|
10
|
+
const path = require("path");
|
|
11
|
+
const { nowIso } = require("./fsx");
|
|
12
|
+
const { appendProductLearningEvent } = require("./product-learning-events");
|
|
13
|
+
|
|
14
|
+
const CONTRACT = "avorelo.crossHostValueFlow.v1";
|
|
15
|
+
const SCHEMA_VERSION = 1;
|
|
16
|
+
const ARTIFACT_DIR_REL = ".claude/cco/orchestration/adapter-readiness";
|
|
17
|
+
const ARTIFACT_REL = ARTIFACT_DIR_REL + "/latest-cross-host-value-flow.json";
|
|
18
|
+
|
|
19
|
+
function safeReadJson(absPath) {
|
|
20
|
+
try {
|
|
21
|
+
if (!fs.existsSync(absPath)) return null;
|
|
22
|
+
return JSON.parse(fs.readFileSync(absPath, "utf8").replace(/^/, ""));
|
|
23
|
+
} catch { return null; }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function countJsonlLines(absPath) {
|
|
27
|
+
try {
|
|
28
|
+
if (!fs.existsSync(absPath)) return 0;
|
|
29
|
+
const content = fs.readFileSync(absPath, "utf8");
|
|
30
|
+
return content.split("\n").filter(function(l) { return l.trim().length > 0; }).length;
|
|
31
|
+
} catch { return 0; }
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function pass(id, label, evidence, detail) {
|
|
35
|
+
return { id, label, status: "pass", evidence: evidence || null, detail: detail || null, safeNextAction: null };
|
|
36
|
+
}
|
|
37
|
+
function warn(id, label, safeNextAction, evidence, detail) {
|
|
38
|
+
return { id, label, status: "warn", evidence: evidence || null, detail: detail || null, safeNextAction: safeNextAction || "Review and resolve." };
|
|
39
|
+
}
|
|
40
|
+
function blocked(id, label, safeNextAction, evidence, detail) {
|
|
41
|
+
return { id, label, status: "blocked", evidence: evidence || null, detail: detail || null, safeNextAction: safeNextAction || "Fix blocker before proceeding." };
|
|
42
|
+
}
|
|
43
|
+
function info(id, label, evidence, detail) {
|
|
44
|
+
return { id, label, status: "info", evidence: evidence || null, detail: detail || null, safeNextAction: null };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// ── Value Flow Checks ─────────────────────────────────────────────────────────
|
|
48
|
+
|
|
49
|
+
function checkProofOutcomeEvidence(cwd) {
|
|
50
|
+
const proofPath = path.join(cwd, ".claude/cco/orchestration/proof-outcome/latest-proof-outcome.json");
|
|
51
|
+
const artifact = safeReadJson(proofPath);
|
|
52
|
+
if (!artifact) {
|
|
53
|
+
return warn("proof_outcome_evidence", "No proof outcome evidence found",
|
|
54
|
+
"Run a bounded task with outcome tracking enabled. Run: node bin/avorelo proof-receipt --json",
|
|
55
|
+
null, "latest-proof-outcome.json not found.");
|
|
56
|
+
}
|
|
57
|
+
if (artifact.status === "no_proof" || artifact.status === "empty") {
|
|
58
|
+
return warn("proof_outcome_evidence", "Proof outcome artifact is empty",
|
|
59
|
+
"Complete a real task with proof tracking to populate evidence.",
|
|
60
|
+
{ status: artifact.status });
|
|
61
|
+
}
|
|
62
|
+
return pass("proof_outcome_evidence", "Proof outcome evidence present",
|
|
63
|
+
{ status: artifact.status, path: ".claude/cco/orchestration/proof-outcome/latest-proof-outcome.json" });
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function checkWorkLedgerEntries(cwd) {
|
|
67
|
+
const ledgerPath = path.join(cwd, ".claude/cco/orchestration/work-ledger/latest-ledger.json");
|
|
68
|
+
const artifact = safeReadJson(ledgerPath);
|
|
69
|
+
if (!artifact) {
|
|
70
|
+
return warn("work_ledger_entries", "Work ledger not yet populated",
|
|
71
|
+
"Complete a bounded task to generate work ledger entries.",
|
|
72
|
+
null, "latest-ledger.json not found.");
|
|
73
|
+
}
|
|
74
|
+
const entries = artifact.entries || [];
|
|
75
|
+
if (entries.length === 0) {
|
|
76
|
+
return warn("work_ledger_entries", "Work ledger has no entries",
|
|
77
|
+
"Complete a bounded task to generate work ledger entries.",
|
|
78
|
+
{ entryCount: 0 });
|
|
79
|
+
}
|
|
80
|
+
return pass("work_ledger_entries", "Work ledger has entries",
|
|
81
|
+
{ entryCount: entries.length });
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function checkTokenCostEvidence(cwd) {
|
|
85
|
+
const tokenPath = path.join(cwd, ".claude/cco/orchestration/token-cost/latest-token-cost-evidence.json");
|
|
86
|
+
const artifact = safeReadJson(tokenPath);
|
|
87
|
+
if (!artifact) {
|
|
88
|
+
return warn("token_cost_evidence", "Token cost evidence not found",
|
|
89
|
+
"Run: node bin/avorelo token-cost capture --json to record token cost baseline.",
|
|
90
|
+
null, "latest-token-cost-evidence.json not found.");
|
|
91
|
+
}
|
|
92
|
+
if (artifact.status === "no_data" || !artifact.samples || artifact.samples.length === 0) {
|
|
93
|
+
return warn("token_cost_evidence", "Token cost evidence has no samples",
|
|
94
|
+
"Run real tasks with token tracking enabled.",
|
|
95
|
+
{ status: artifact.status });
|
|
96
|
+
}
|
|
97
|
+
return pass("token_cost_evidence", "Token cost evidence has samples",
|
|
98
|
+
{ sampleCount: (artifact.samples || []).length });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function checkProductLearningEvents(cwd) {
|
|
102
|
+
const eventsPath = path.join(cwd, ".claude/cco/events/product-learning.jsonl");
|
|
103
|
+
const count = countJsonlLines(eventsPath);
|
|
104
|
+
if (count === 0) {
|
|
105
|
+
return warn("product_learning_events", "No product learning events found",
|
|
106
|
+
"Run avorelo commands to generate product learning events.",
|
|
107
|
+
{ count: 0 });
|
|
108
|
+
}
|
|
109
|
+
return pass("product_learning_events", "Product learning events present",
|
|
110
|
+
{ count });
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function checkFeedbackFlow(cwd) {
|
|
114
|
+
const feedbackPath = path.join(cwd, ".claude/cco/orchestration/prelaunch-intelligence/latest-feedback-intelligence.json");
|
|
115
|
+
const artifact = safeReadJson(feedbackPath);
|
|
116
|
+
if (!artifact) {
|
|
117
|
+
return info("feedback_flow", "Feedback intelligence artifact not found",
|
|
118
|
+
null, "Not required for value flow verification.");
|
|
119
|
+
}
|
|
120
|
+
if (artifact.status === "insufficient_data") {
|
|
121
|
+
return warn("feedback_flow", "Feedback intelligence has insufficient data",
|
|
122
|
+
"Import real design-partner or alpha feedback sessions.",
|
|
123
|
+
{ status: artifact.status });
|
|
124
|
+
}
|
|
125
|
+
return pass("feedback_flow", "Feedback intelligence populated",
|
|
126
|
+
{ status: artifact.status });
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function checkSupportBundleValueFlow(cwd) {
|
|
130
|
+
const bundlePath = path.join(cwd, ".claude/cco/support/latest-support-bundle.json");
|
|
131
|
+
const artifact = safeReadJson(bundlePath);
|
|
132
|
+
if (!artifact) {
|
|
133
|
+
return warn("support_bundle_value_flow", "Support bundle not generated",
|
|
134
|
+
"Run: node bin/avorelo support-bundle --json to generate support bundle.",
|
|
135
|
+
null, "latest-support-bundle.json not found.");
|
|
136
|
+
}
|
|
137
|
+
if (artifact.redacted !== true) {
|
|
138
|
+
return blocked("support_bundle_value_flow", "Support bundle is not redacted",
|
|
139
|
+
"Run support bundle generation with redaction enabled.",
|
|
140
|
+
{ redacted: artifact.redacted });
|
|
141
|
+
}
|
|
142
|
+
return pass("support_bundle_value_flow", "Support bundle present and redacted",
|
|
143
|
+
{ redacted: true });
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ── Build Cross-Host Value Flow ────────────────────────────────────────────────
|
|
147
|
+
|
|
148
|
+
function buildCrossHostValueFlow(cwd, options) {
|
|
149
|
+
const checks = [
|
|
150
|
+
checkProofOutcomeEvidence(cwd),
|
|
151
|
+
checkWorkLedgerEntries(cwd),
|
|
152
|
+
checkTokenCostEvidence(cwd),
|
|
153
|
+
checkProductLearningEvents(cwd),
|
|
154
|
+
checkFeedbackFlow(cwd),
|
|
155
|
+
checkSupportBundleValueFlow(cwd),
|
|
156
|
+
];
|
|
157
|
+
|
|
158
|
+
const blockers = checks.filter(function(c) { return c.status === "blocked"; });
|
|
159
|
+
const warnings = checks.filter(function(c) { return c.status === "warn"; });
|
|
160
|
+
const passes = checks.filter(function(c) { return c.status === "pass"; });
|
|
161
|
+
|
|
162
|
+
var status;
|
|
163
|
+
if (blockers.length > 0) {
|
|
164
|
+
status = "blocked";
|
|
165
|
+
} else if (warnings.length > 0) {
|
|
166
|
+
status = "warn";
|
|
167
|
+
} else {
|
|
168
|
+
status = "pass";
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const valueSignals = {
|
|
172
|
+
proofOutcome: checks.find(function(c) { return c.id === "proof_outcome_evidence"; }).status,
|
|
173
|
+
workLedger: checks.find(function(c) { return c.id === "work_ledger_entries"; }).status,
|
|
174
|
+
tokenCost: checks.find(function(c) { return c.id === "token_cost_evidence"; }).status,
|
|
175
|
+
productEvents: checks.find(function(c) { return c.id === "product_learning_events"; }).status,
|
|
176
|
+
feedback: checks.find(function(c) { return c.id === "feedback_flow"; }).status,
|
|
177
|
+
supportBundle: checks.find(function(c) { return c.id === "support_bundle_value_flow"; }).status,
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
const safeNextAction = blockers.length > 0
|
|
181
|
+
? "Fix value flow blockers. Check support bundle redaction."
|
|
182
|
+
: warnings.length > 0
|
|
183
|
+
? "Run bounded tasks to generate proof outcomes, work ledger entries, and token cost evidence."
|
|
184
|
+
: "All value flow signals present. Proceed to adapter safety boundary check.";
|
|
185
|
+
|
|
186
|
+
return {
|
|
187
|
+
contract: CONTRACT,
|
|
188
|
+
schemaVersion: SCHEMA_VERSION,
|
|
189
|
+
generatedAt: nowIso(),
|
|
190
|
+
status,
|
|
191
|
+
checks,
|
|
192
|
+
valueSignals,
|
|
193
|
+
blockerCount: blockers.length,
|
|
194
|
+
warningCount: warnings.length,
|
|
195
|
+
passCount: passes.length,
|
|
196
|
+
safeNextAction,
|
|
197
|
+
noPublicLaunchClaim: true,
|
|
198
|
+
redacted: true,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// ── Write ─────────────────────────────────────────────────────────────────────
|
|
203
|
+
|
|
204
|
+
function writeCrossHostValueFlow(cwd, flow) {
|
|
205
|
+
const dir = path.join(cwd, ARTIFACT_DIR_REL);
|
|
206
|
+
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
|
207
|
+
fs.writeFileSync(path.join(cwd, ARTIFACT_REL), JSON.stringify(flow, null, 2));
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// ── Surface ───────────────────────────────────────────────────────────────────
|
|
211
|
+
|
|
212
|
+
function buildCrossHostValueFlowSurface(cwd, options) {
|
|
213
|
+
const flow = buildCrossHostValueFlow(cwd, options);
|
|
214
|
+
writeCrossHostValueFlow(cwd, flow);
|
|
215
|
+
try {
|
|
216
|
+
appendProductLearningEvent(cwd, {
|
|
217
|
+
event: "cross_host_value_flow_built",
|
|
218
|
+
contract: CONTRACT,
|
|
219
|
+
status: flow.status,
|
|
220
|
+
blockerCount: flow.blockerCount,
|
|
221
|
+
});
|
|
222
|
+
} catch { /* non-fatal */ }
|
|
223
|
+
return {
|
|
224
|
+
status: flow.status,
|
|
225
|
+
valueSignals: flow.valueSignals,
|
|
226
|
+
blockerCount: flow.blockerCount,
|
|
227
|
+
warningCount: flow.warningCount,
|
|
228
|
+
noPublicLaunchClaim: true,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// ── Format ────────────────────────────────────────────────────────────────────
|
|
233
|
+
|
|
234
|
+
function formatCrossHostValueFlowText(flow) {
|
|
235
|
+
var lines = [
|
|
236
|
+
"Cross-Host Value Flow [" + (flow.status || "?").toUpperCase() + "]",
|
|
237
|
+
];
|
|
238
|
+
if (flow.valueSignals) {
|
|
239
|
+
lines.push(" Proof outcome: " + flow.valueSignals.proofOutcome);
|
|
240
|
+
lines.push(" Work ledger: " + flow.valueSignals.workLedger);
|
|
241
|
+
lines.push(" Token cost: " + flow.valueSignals.tokenCost);
|
|
242
|
+
lines.push(" Product events: " + flow.valueSignals.productEvents);
|
|
243
|
+
lines.push(" Feedback: " + flow.valueSignals.feedback);
|
|
244
|
+
lines.push(" Support bundle: " + flow.valueSignals.supportBundle);
|
|
245
|
+
}
|
|
246
|
+
lines.push(
|
|
247
|
+
" Blockers: " + (flow.blockerCount || 0),
|
|
248
|
+
" Warnings: " + (flow.warningCount || 0),
|
|
249
|
+
" Next: " + (flow.safeNextAction || "Review value flow.")
|
|
250
|
+
);
|
|
251
|
+
return lines.join("\n");
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
module.exports = {
|
|
255
|
+
CONTRACT,
|
|
256
|
+
SCHEMA_VERSION,
|
|
257
|
+
ARTIFACT_REL,
|
|
258
|
+
buildCrossHostValueFlow,
|
|
259
|
+
writeCrossHostValueFlow,
|
|
260
|
+
buildCrossHostValueFlowSurface,
|
|
261
|
+
formatCrossHostValueFlowText,
|
|
262
|
+
checkProofOutcomeEvidence,
|
|
263
|
+
checkWorkLedgerEntries,
|
|
264
|
+
checkTokenCostEvidence,
|
|
265
|
+
checkProductLearningEvents,
|
|
266
|
+
checkFeedbackFlow,
|
|
267
|
+
checkSupportBundleValueFlow,
|
|
268
|
+
};
|