avorelo 0.1.0 → 0.3.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 +23 -16
- package/README.md +90 -51
- package/bin/avorelo.mjs +7 -0
- package/dist/avorelo.mjs +19741 -0
- package/package.json +135 -120
- package/bin/avorelo +0 -9
- package/scripts/README.md +0 -40
- package/scripts/cco-dashboard.js +0 -252
- package/scripts/cco-status.js +0 -430
- package/scripts/lib/activation/account-state.js +0 -37
- package/scripts/lib/activation/activation-runner.js +0 -546
- package/scripts/lib/activation/activation-self-healing.js +0 -480
- package/scripts/lib/activation/activation-state.js +0 -83
- package/scripts/lib/activation/activation-summary.js +0 -191
- package/scripts/lib/activation/adapters/claude-code.js +0 -77
- package/scripts/lib/activation/adapters/codex-cli.js +0 -52
- package/scripts/lib/activation/adapters/cursor.js +0 -37
- package/scripts/lib/activation/adapters/github-agent.js +0 -39
- package/scripts/lib/activation/adapters/terminal.js +0 -42
- package/scripts/lib/activation/adapters/vscode.js +0 -39
- package/scripts/lib/activation/adapters/windsurf.js +0 -37
- package/scripts/lib/activation/ai-surface-detector.js +0 -151
- package/scripts/lib/activation/connect-account.js +0 -145
- package/scripts/lib/activation/detect-environment.js +0 -75
- package/scripts/lib/activation/detect-hosts.js +0 -62
- package/scripts/lib/activation/format-activation-output.js +0 -109
- package/scripts/lib/activation/next-action.js +0 -43
- package/scripts/lib/activation/repair-engine.js +0 -219
- package/scripts/lib/activation-distribution-readiness.js +0 -507
- package/scripts/lib/adapter-conformance.js +0 -176
- package/scripts/lib/adapter-readiness.js +0 -417
- package/scripts/lib/adapter-safety-boundaries.js +0 -335
- package/scripts/lib/adapter-technical-readiness-gate.js +0 -205
- package/scripts/lib/agent-access-governance.js +0 -455
- package/scripts/lib/agent-enforcement.js +0 -765
- package/scripts/lib/agent-policy-profile.js +0 -210
- package/scripts/lib/agent-security/action-evaluator.js +0 -507
- package/scripts/lib/agent-security/adapter-registry.js +0 -98
- package/scripts/lib/agent-security/auto-policy.js +0 -139
- package/scripts/lib/agent-security/bounded-scan.js +0 -93
- package/scripts/lib/agent-security/enforcement-adapter.js +0 -174
- package/scripts/lib/agent-security/enforcement-engine.js +0 -1129
- package/scripts/lib/agent-security/file-write-adapter.js +0 -183
- package/scripts/lib/agent-security/file-write-rules.js +0 -178
- package/scripts/lib/agent-security/index.js +0 -3342
- package/scripts/lib/agent-security/instruction-risk.js +0 -181
- package/scripts/lib/agent-security/mcp-action-adapter.js +0 -185
- package/scripts/lib/agent-security/mcp-action-rules.js +0 -184
- package/scripts/lib/agent-security/package-action-adapter.js +0 -175
- package/scripts/lib/agent-security/package-action-rules.js +0 -233
- package/scripts/lib/agent-security/performance.js +0 -148
- package/scripts/lib/agent-security/permission-minimizer.js +0 -403
- package/scripts/lib/agent-security/scan-cache.js +0 -74
- package/scripts/lib/agent-security/source-trust.js +0 -146
- package/scripts/lib/ai-install-prompt.js +0 -288
- package/scripts/lib/ai-workspace-hygiene.js +0 -1499
- package/scripts/lib/alpha-activation.js +0 -520
- package/scripts/lib/alpha-feedback.js +0 -263
- package/scripts/lib/alpha-readiness-gate.js +0 -332
- package/scripts/lib/anti-gaming.js +0 -169
- package/scripts/lib/artifact-health.js +0 -431
- package/scripts/lib/attribution.js +0 -180
- package/scripts/lib/audit.js +0 -289
- package/scripts/lib/avorelo-skill-registry.js +0 -810
- package/scripts/lib/batch-jobs.js +0 -71
- package/scripts/lib/brain-pack.js +0 -578
- package/scripts/lib/brand-boundary.js +0 -424
- package/scripts/lib/brand.js +0 -74
- package/scripts/lib/browser-capability.js +0 -1048
- package/scripts/lib/browser-proof-preflight.js +0 -321
- package/scripts/lib/cache-readiness.js +0 -187
- package/scripts/lib/canonical-reentry.js +0 -162
- package/scripts/lib/capability-packs.js +0 -314
- package/scripts/lib/capability-recommender.js +0 -512
- package/scripts/lib/capability-registry.js +0 -1059
- package/scripts/lib/carry-forward-surfacing.js +0 -194
- package/scripts/lib/ccusage-adapter.js +0 -188
- package/scripts/lib/company-loop.js +0 -1149
- package/scripts/lib/config.js +0 -637
- package/scripts/lib/context-acquisition-plan.js +0 -287
- package/scripts/lib/context-budget-guard.js +0 -170
- package/scripts/lib/context-budget-scanner.js +0 -257
- package/scripts/lib/context-optimizer.js +0 -715
- package/scripts/lib/context-reduction-plan.js +0 -178
- package/scripts/lib/context-safety.js +0 -88
- package/scripts/lib/context-savings-engine.js +0 -158
- package/scripts/lib/cost-evidence.js +0 -254
- package/scripts/lib/cross-host-install-plan.js +0 -308
- package/scripts/lib/cross-host-install-readiness.js +0 -237
- package/scripts/lib/cross-host-value-flow.js +0 -268
- package/scripts/lib/dashboard.js +0 -900
- package/scripts/lib/design-partner-feedback.js +0 -346
- package/scripts/lib/entitlements.js +0 -100
- package/scripts/lib/execution-packet.js +0 -559
- package/scripts/lib/experimentation-events.js +0 -547
- package/scripts/lib/external-capability-compliance.js +0 -107
- package/scripts/lib/external-user-simulation.js +0 -166
- package/scripts/lib/failure-recovery-readiness.js +0 -81
- package/scripts/lib/failure-recovery.js +0 -419
- package/scripts/lib/feedback-intelligence.js +0 -537
- package/scripts/lib/feedback-signals.js +0 -205
- package/scripts/lib/file-integrity.js +0 -68
- package/scripts/lib/fsx.js +0 -127
- package/scripts/lib/full-readiness-gate.js +0 -451
- package/scripts/lib/guidance-builder.js +0 -174
- package/scripts/lib/hook-apply.js +0 -1019
- package/scripts/lib/hook-baseline.js +0 -310
- package/scripts/lib/hook-config-preview.js +0 -275
- package/scripts/lib/hook-contracts.js +0 -290
- package/scripts/lib/hook-safety-boundary-readiness.js +0 -80
- package/scripts/lib/host-capability-matrix.js +0 -351
- package/scripts/lib/host-support-context.js +0 -254
- package/scripts/lib/http-hook-action.js +0 -538
- package/scripts/lib/install-ai-readiness.js +0 -84
- package/scripts/lib/install-intake-risk.js +0 -1037
- package/scripts/lib/install-journey-intelligence.js +0 -329
- package/scripts/lib/intervention-guidance.js +0 -57
- package/scripts/lib/known-limitations.js +0 -115
- package/scripts/lib/l8-path-truth.js +0 -146
- package/scripts/lib/launch-hardening-gate.js +0 -436
- package/scripts/lib/launch-readiness.js +0 -628
- package/scripts/lib/learning-memory.js +0 -686
- package/scripts/lib/lifecycle-hooks.js +0 -802
- package/scripts/lib/local-package-smoke.js +0 -423
- package/scripts/lib/local-pricing.js +0 -299
- package/scripts/lib/mcp-enforcement.js +0 -311
- package/scripts/lib/mcp-least-privilege-policy.js +0 -303
- package/scripts/lib/mcp-tool-inventory.js +0 -388
- package/scripts/lib/mcp-tool-risk.js +0 -0
- package/scripts/lib/memory.js +0 -335
- package/scripts/lib/metrics.js +0 -699
- package/scripts/lib/micro-proof.js +0 -133
- package/scripts/lib/next-run-context.js +0 -436
- package/scripts/lib/operating-value.js +0 -1648
- package/scripts/lib/optimization-v3.js +0 -122
- package/scripts/lib/orchestration/adapters/_shared.js +0 -49
- package/scripts/lib/orchestration/adapters/aider.js +0 -18
- package/scripts/lib/orchestration/adapters/claude-code.js +0 -35
- package/scripts/lib/orchestration/adapters/codex.js +0 -35
- package/scripts/lib/orchestration/adapters/gemini-cli.js +0 -18
- package/scripts/lib/orchestration/adapters/git.js +0 -25
- package/scripts/lib/orchestration/adapters/index.js +0 -31
- package/scripts/lib/orchestration/adapters/lm-studio.js +0 -18
- package/scripts/lib/orchestration/adapters/ollama.js +0 -18
- package/scripts/lib/orchestration/adapters/opencode.js +0 -18
- package/scripts/lib/orchestration/adapters/openrouter.js +0 -18
- package/scripts/lib/orchestration/adapters/test-runner.js +0 -25
- package/scripts/lib/orchestration/cli.js +0 -438
- package/scripts/lib/orchestration/execution-manager.js +0 -279
- package/scripts/lib/orchestration/handoff.js +0 -314
- package/scripts/lib/orchestration/index.js +0 -456
- package/scripts/lib/orchestration/inventory.js +0 -47
- package/scripts/lib/orchestration/model-discovery.js +0 -498
- package/scripts/lib/orchestration/model-profiler.js +0 -170
- package/scripts/lib/orchestration/model-profiles.js +0 -252
- package/scripts/lib/orchestration/model-refresh-policy.js +0 -72
- package/scripts/lib/orchestration/proof-writer.js +0 -349
- package/scripts/lib/orchestration/provider-discovery/aider.js +0 -49
- package/scripts/lib/orchestration/provider-discovery/claude-code.js +0 -56
- package/scripts/lib/orchestration/provider-discovery/codex.js +0 -49
- package/scripts/lib/orchestration/provider-discovery/common.js +0 -186
- package/scripts/lib/orchestration/provider-discovery/gemini.js +0 -106
- package/scripts/lib/orchestration/provider-discovery/lm-studio.js +0 -118
- package/scripts/lib/orchestration/provider-discovery/models-dev.js +0 -12
- package/scripts/lib/orchestration/provider-discovery/ollama.js +0 -100
- package/scripts/lib/orchestration/provider-discovery/opencode.js +0 -47
- package/scripts/lib/orchestration/provider-discovery/openrouter.js +0 -44
- package/scripts/lib/orchestration/risk-classifier.js +0 -130
- package/scripts/lib/orchestration/routing-policy.js +0 -486
- package/scripts/lib/orchestration/settings.js +0 -112
- package/scripts/lib/orchestration/state.js +0 -165
- package/scripts/lib/orchestration/verification-manager.js +0 -138
- package/scripts/lib/output-profiles.js +0 -146
- package/scripts/lib/package-content-audit.js +0 -368
- package/scripts/lib/package-runtime.js +0 -278
- package/scripts/lib/plan-surface.js +0 -53
- package/scripts/lib/plans.js +0 -2318
- package/scripts/lib/policy-provider.js +0 -27
- package/scripts/lib/prelaunch-activation-readiness.js +0 -409
- package/scripts/lib/prelaunch-evidence-store.js +0 -816
- package/scripts/lib/prelaunch-intelligence.js +0 -869
- package/scripts/lib/pricing-experiment.js +0 -118
- package/scripts/lib/pro-moment-events.js +0 -77
- package/scripts/lib/pro-moment-state.js +0 -227
- package/scripts/lib/pro-moments.js +0 -1216
- package/scripts/lib/product-learning-events.js +0 -629
- package/scripts/lib/project-profile.js +0 -555
- package/scripts/lib/prompt-compiler.js +0 -280
- package/scripts/lib/prompt-lint.js +0 -32
- package/scripts/lib/prompt-suggestions.js +0 -52
- package/scripts/lib/proof-canonical.js +0 -398
- package/scripts/lib/proof-drilldown.js +0 -383
- package/scripts/lib/proof-events.js +0 -342
- package/scripts/lib/proof-history.js +0 -243
- package/scripts/lib/proof-metrics.js +0 -296
- package/scripts/lib/proof-outcome-evidence.js +0 -134
- package/scripts/lib/proof-receipt.js +0 -335
- package/scripts/lib/proof-record.js +0 -461
- package/scripts/lib/public-activation-distribution-gate.js +0 -258
- package/scripts/lib/public-cli.js +0 -3891
- package/scripts/lib/public-distribution-truth.js +0 -211
- package/scripts/lib/public-install-claim-checker.js +0 -294
- package/scripts/lib/publish-provenance-readiness.js +0 -283
- package/scripts/lib/readiness-delta.js +0 -218
- package/scripts/lib/readiness-evidence-closure.js +0 -196
- package/scripts/lib/reentry-memory-capture.js +0 -241
- package/scripts/lib/reentry-memory-retrieval.js +0 -302
- package/scripts/lib/reentry-memory-status.js +0 -146
- package/scripts/lib/reentry-memory-store.js +0 -178
- package/scripts/lib/reentry-state.js +0 -66
- package/scripts/lib/release-candidate-bundle.js +0 -166
- package/scripts/lib/remediation.js +0 -81
- package/scripts/lib/repo-map.js +0 -391
- package/scripts/lib/run-improvements-lifecycle.js +0 -330
- package/scripts/lib/run-improvements.js +0 -789
- package/scripts/lib/runtime-decision-policy.js +0 -387
- package/scripts/lib/safe-path-engine.js +0 -705
- package/scripts/lib/safe-run-controller.js +0 -887
- package/scripts/lib/score.js +0 -262
- package/scripts/lib/seamless-enforcement.js +0 -329
- package/scripts/lib/seamless-outcome.js +0 -689
- package/scripts/lib/seamless-reality-gate.js +0 -5043
- package/scripts/lib/security-risk-classifier.js +0 -511
- package/scripts/lib/security-scan.js +0 -384
- package/scripts/lib/session-context-optimizer.js +0 -1211
- package/scripts/lib/session-timing.js +0 -315
- package/scripts/lib/skill-hygiene.js +0 -805
- package/scripts/lib/skill-packs.js +0 -161
- package/scripts/lib/skills-operating-layer.js +0 -580
- package/scripts/lib/smart-work-routing.js +0 -768
- package/scripts/lib/source-catalog.js +0 -700
- package/scripts/lib/status-value-summary.js +0 -32
- package/scripts/lib/support-bundle.js +0 -578
- package/scripts/lib/task-continuation.js +0 -440
- package/scripts/lib/test-helpers.js +0 -15
- package/scripts/lib/tier.js +0 -38
- package/scripts/lib/token-context-quality-gate.js +0 -370
- package/scripts/lib/token-cost-capture.js +0 -187
- package/scripts/lib/token-cost-intelligence.js +0 -358
- package/scripts/lib/token-efficiency-evidence.js +0 -213
- package/scripts/lib/token-evidence.js +0 -699
- package/scripts/lib/tokenish.js +0 -17
- package/scripts/lib/tool-output-sandbox.js +0 -304
- package/scripts/lib/trust-audit.js +0 -136
- package/scripts/lib/unified-events.js +0 -396
- package/scripts/lib/upgrade-interruption-recovery.js +0 -407
- package/scripts/lib/usage-ledger.js +0 -201
- package/scripts/lib/value-ledger.js +0 -130
- package/scripts/lib/value-proof-calibration.js +0 -531
- package/scripts/lib/visual-qa.js +0 -231
- package/scripts/lib/voice-alpha.js +0 -29
- package/scripts/lib/work-aware-orchestration.js +0 -976
- package/scripts/lib/work-control-receipts.js +0 -577
- package/scripts/lib/work-ledger.js +0 -1123
- package/scripts/lib/work-panel-preview.js +0 -352
- package/scripts/lib/workflow-discipline.js +0 -280
- package/scripts/lib/workflow-signals.js +0 -419
- package/scripts/lib/workspace-map.js +0 -281
- package/scripts/lib/workspace-registry.js +0 -1367
- package/scripts/lib/workspace-resolver.js +0 -480
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
// Run Improvements Lifecycle — manages the consumption and application receipt
|
|
4
|
-
// for next-run defaults prepared by run-improvements.js.
|
|
5
|
-
// Receipt schema: avorelo.runImprovementsReceipt.v1
|
|
6
|
-
//
|
|
7
|
-
// Lifecycle states:
|
|
8
|
-
// prepared Improvements generated, ready
|
|
9
|
-
// consumed A supported surface explicitly read the prepared defaults
|
|
10
|
-
// applied Defaults made available to a next run; receipt exists
|
|
11
|
-
// expired TTL exceeded on source artifact
|
|
12
|
-
// stale Source fingerprint no longer matches current artifact
|
|
13
|
-
// insufficient_evidence Not enough evidence to generate reliable defaults
|
|
14
|
-
// skipped Explicitly skipped
|
|
15
|
-
// error Unexpected error
|
|
16
|
-
|
|
17
|
-
const fs = require("fs");
|
|
18
|
-
const path = require("path");
|
|
19
|
-
|
|
20
|
-
const RECEIPT_REL = ".claude/cco/state/run-improvements-receipt.json";
|
|
21
|
-
const SCHEMA_VERSION = "avorelo.runImprovementsReceipt.v1";
|
|
22
|
-
|
|
23
|
-
const LIFECYCLE_STATES = [
|
|
24
|
-
"prepared",
|
|
25
|
-
"consumed",
|
|
26
|
-
"applied",
|
|
27
|
-
"expired",
|
|
28
|
-
"stale",
|
|
29
|
-
"insufficient_evidence",
|
|
30
|
-
"skipped",
|
|
31
|
-
"error",
|
|
32
|
-
];
|
|
33
|
-
|
|
34
|
-
function nowIso() {
|
|
35
|
-
return new Date().toISOString();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function loadLifecycleReceipt(cwd) {
|
|
39
|
-
try {
|
|
40
|
-
const absPath = path.join(cwd, RECEIPT_REL);
|
|
41
|
-
const raw = JSON.parse(fs.readFileSync(absPath, "utf8"));
|
|
42
|
-
if (raw.schemaVersion !== SCHEMA_VERSION) return null;
|
|
43
|
-
return raw;
|
|
44
|
-
} catch {
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function writeLifecycleReceipt(cwd, receipt) {
|
|
50
|
-
const absPath = path.join(cwd, RECEIPT_REL);
|
|
51
|
-
fs.mkdirSync(path.dirname(absPath), { recursive: true });
|
|
52
|
-
fs.writeFileSync(absPath, JSON.stringify(receipt, null, 2), "utf8");
|
|
53
|
-
return receipt;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function buildLifecycleReceipt(artifact, options = {}) {
|
|
57
|
-
const now = nowIso();
|
|
58
|
-
return {
|
|
59
|
-
schemaVersion: SCHEMA_VERSION,
|
|
60
|
-
generatedAt: now,
|
|
61
|
-
sourceRunFingerprint: artifact.sourceRunFingerprint,
|
|
62
|
-
runImprovementsArtifactId: artifact.sourceRunFingerprint,
|
|
63
|
-
lifecycleState: options.lifecycleState || "prepared",
|
|
64
|
-
surface: options.surface || null,
|
|
65
|
-
consumedAt: options.consumedAt || null,
|
|
66
|
-
appliedAt: options.appliedAt || null,
|
|
67
|
-
reasonCodes: options.reasonCodes || artifact.reasonCodes || [],
|
|
68
|
-
redactionStatus: "redacted",
|
|
69
|
-
limitations: options.limitations || artifact.limitations || [],
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Check if existing receipt is stale (source fingerprint no longer matches current artifact).
|
|
74
|
-
function checkLifecycleStale(cwd) {
|
|
75
|
-
const receipt = loadLifecycleReceipt(cwd);
|
|
76
|
-
if (!receipt) return { stale: false, reason: "no_receipt" };
|
|
77
|
-
|
|
78
|
-
try {
|
|
79
|
-
const { loadRunImprovements } = require("./run-improvements");
|
|
80
|
-
const artifact = loadRunImprovements(cwd);
|
|
81
|
-
if (!artifact) return { stale: false, reason: "no_artifact" };
|
|
82
|
-
if (receipt.sourceRunFingerprint !== artifact.sourceRunFingerprint) {
|
|
83
|
-
return { stale: true, reason: "fingerprint_mismatch" };
|
|
84
|
-
}
|
|
85
|
-
return { stale: false, reason: "ok" };
|
|
86
|
-
} catch {
|
|
87
|
-
return { stale: false, reason: "check_error" };
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Mark as consumed — a supported surface explicitly read the prepared defaults.
|
|
92
|
-
// Idempotent: same fingerprint already consumed or applied → return existing receipt.
|
|
93
|
-
function consumeRunImprovements(cwd, surface) {
|
|
94
|
-
try {
|
|
95
|
-
const { loadRunImprovements } = require("./run-improvements");
|
|
96
|
-
const artifact = loadRunImprovements(cwd);
|
|
97
|
-
if (!artifact || artifact.status === "not_available" || artifact.status === "expired") {
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const existing = loadLifecycleReceipt(cwd);
|
|
102
|
-
if (
|
|
103
|
-
existing &&
|
|
104
|
-
existing.sourceRunFingerprint === artifact.sourceRunFingerprint &&
|
|
105
|
-
(existing.lifecycleState === "consumed" || existing.lifecycleState === "applied")
|
|
106
|
-
) {
|
|
107
|
-
return existing;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
const now = nowIso();
|
|
111
|
-
const receipt = buildLifecycleReceipt(artifact, {
|
|
112
|
-
lifecycleState: "consumed",
|
|
113
|
-
surface: surface || "cli",
|
|
114
|
-
consumedAt: now,
|
|
115
|
-
appliedAt: null,
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
writeLifecycleReceipt(cwd, receipt);
|
|
119
|
-
_emitLifecycleAuditEvent(cwd, artifact, receipt, "run_improvements.consumed");
|
|
120
|
-
return receipt;
|
|
121
|
-
} catch {
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Mark as applied — defaults were made available to a next AI coding run
|
|
127
|
-
// through a supported surface and an application receipt exists.
|
|
128
|
-
// This is the only honest way to set applied=true on the main artifact.
|
|
129
|
-
function applyRunImprovements(cwd, surface) {
|
|
130
|
-
try {
|
|
131
|
-
const { loadRunImprovements, RUN_IMPROVEMENTS_REL, SCHEMA_VERSION: RI_SCHEMA } = require("./run-improvements");
|
|
132
|
-
const artifact = loadRunImprovements(cwd);
|
|
133
|
-
if (!artifact || artifact.status === "not_available" || artifact.status === "expired") {
|
|
134
|
-
return { success: false, reason: "no_valid_artifact" };
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const existing = loadLifecycleReceipt(cwd);
|
|
138
|
-
if (
|
|
139
|
-
existing &&
|
|
140
|
-
existing.sourceRunFingerprint === artifact.sourceRunFingerprint &&
|
|
141
|
-
existing.lifecycleState === "applied"
|
|
142
|
-
) {
|
|
143
|
-
return { success: true, receipt: existing, reason: "already_applied" };
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const now = nowIso();
|
|
147
|
-
const receipt = buildLifecycleReceipt(artifact, {
|
|
148
|
-
lifecycleState: "applied",
|
|
149
|
-
surface: surface || "cli",
|
|
150
|
-
consumedAt: existing?.consumedAt || now,
|
|
151
|
-
appliedAt: now,
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
writeLifecycleReceipt(cwd, receipt);
|
|
155
|
-
_emitLifecycleAuditEvent(cwd, artifact, receipt, "run_improvements.applied");
|
|
156
|
-
|
|
157
|
-
// Update the main artifact to reflect applied state (only when fingerprint matches)
|
|
158
|
-
try {
|
|
159
|
-
const absPath = path.join(cwd, RUN_IMPROVEMENTS_REL);
|
|
160
|
-
if (fs.existsSync(absPath)) {
|
|
161
|
-
const stored = JSON.parse(fs.readFileSync(absPath, "utf8"));
|
|
162
|
-
if (
|
|
163
|
-
stored.schemaVersion === RI_SCHEMA &&
|
|
164
|
-
stored.sourceRunFingerprint === artifact.sourceRunFingerprint
|
|
165
|
-
) {
|
|
166
|
-
stored.status = "applied";
|
|
167
|
-
stored.applied = true;
|
|
168
|
-
stored.appliedAt = now;
|
|
169
|
-
fs.writeFileSync(absPath, JSON.stringify(stored, null, 2), "utf8");
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
} catch {}
|
|
173
|
-
|
|
174
|
-
return { success: true, receipt, reason: "applied" };
|
|
175
|
-
} catch (err) {
|
|
176
|
-
return { success: false, reason: "error", error: String(err.message) };
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
function _emitLifecycleAuditEvent(cwd, artifact, receipt, eventName) {
|
|
181
|
-
try {
|
|
182
|
-
const eventsPath = path.join(cwd, ".claude/cco/events/outcome-events.jsonl");
|
|
183
|
-
fs.mkdirSync(path.dirname(eventsPath), { recursive: true });
|
|
184
|
-
const safeEventName = eventName.replace(/\./g, "_");
|
|
185
|
-
const event = JSON.stringify({
|
|
186
|
-
event_id: `run_lc_${safeEventName}_${artifact.sourceRunFingerprint}`,
|
|
187
|
-
session_id: "avorelo-run-improvements",
|
|
188
|
-
timestamp: nowIso(),
|
|
189
|
-
category: "run_improvements",
|
|
190
|
-
event_name: safeEventName,
|
|
191
|
-
reason_code: "RUN_IMPROVEMENTS_LIFECYCLE",
|
|
192
|
-
confidence_score: 1.0,
|
|
193
|
-
platform: "avorelo",
|
|
194
|
-
metadata: {
|
|
195
|
-
schemaVersion: SCHEMA_VERSION,
|
|
196
|
-
lifecycleState: receipt.lifecycleState,
|
|
197
|
-
surface: receipt.surface,
|
|
198
|
-
sourceRunFingerprint: artifact.sourceRunFingerprint,
|
|
199
|
-
improvementCount: (artifact.topImprovements || []).length,
|
|
200
|
-
topCategories: [
|
|
201
|
-
...new Set((artifact.topImprovements || []).map((i) => i.category)),
|
|
202
|
-
].slice(0, 3),
|
|
203
|
-
redacted: true,
|
|
204
|
-
},
|
|
205
|
-
});
|
|
206
|
-
fs.appendFileSync(eventsPath, event + "\n", "utf8");
|
|
207
|
-
} catch {}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Inject next-run context: generates the bounded next-run-context artifact,
|
|
211
|
-
// marks consumed (defaults read) and applied (artifact written + receipt exists).
|
|
212
|
-
// This is the real application path — `applied` requires this function to succeed.
|
|
213
|
-
// Surface: "next_run_context" — never "cli" or generic display.
|
|
214
|
-
function injectNextRunContext(cwd, options = {}) {
|
|
215
|
-
try {
|
|
216
|
-
const { loadRunImprovements, RUN_IMPROVEMENTS_REL, SCHEMA_VERSION: RI_SCHEMA } = require("./run-improvements");
|
|
217
|
-
const artifact = loadRunImprovements(cwd);
|
|
218
|
-
if (!artifact || artifact.status === "not_available" || artifact.status === "expired") {
|
|
219
|
-
return { success: false, reason: "no_valid_artifact", nextRunContextArtifact: null, receipt: null };
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// Idempotency: same fingerprint already applied through next_run_context → return existing
|
|
223
|
-
const existing = loadLifecycleReceipt(cwd);
|
|
224
|
-
if (
|
|
225
|
-
existing &&
|
|
226
|
-
existing.sourceRunFingerprint === artifact.sourceRunFingerprint &&
|
|
227
|
-
existing.lifecycleState === "applied" &&
|
|
228
|
-
existing.surface === "next_run_context"
|
|
229
|
-
) {
|
|
230
|
-
const { loadNextRunContext } = require("./next-run-context");
|
|
231
|
-
return {
|
|
232
|
-
success: true,
|
|
233
|
-
receipt: existing,
|
|
234
|
-
nextRunContextArtifact: loadNextRunContext(cwd),
|
|
235
|
-
reason: "already_applied",
|
|
236
|
-
};
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// Step 1: generate the next-run context artifact (this "consumes" the defaults)
|
|
240
|
-
const { generateNextRunContextArtifact, emitNextRunContextEvent } = require("./next-run-context");
|
|
241
|
-
const { artifact: nrcArtifact, written } = generateNextRunContextArtifact(cwd, { force: options.force || false });
|
|
242
|
-
|
|
243
|
-
if (!nrcArtifact || nrcArtifact.status === "not_available" || nrcArtifact.status === "error") {
|
|
244
|
-
return {
|
|
245
|
-
success: false,
|
|
246
|
-
reason: "next_run_context_generation_failed",
|
|
247
|
-
nextRunContextArtifact: nrcArtifact,
|
|
248
|
-
receipt: null,
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
const now = nowIso();
|
|
253
|
-
|
|
254
|
-
// Step 2: consumed receipt — defaults were read and embedded into context artifact
|
|
255
|
-
const consumedReceipt = buildLifecycleReceipt(artifact, {
|
|
256
|
-
lifecycleState: "consumed",
|
|
257
|
-
surface: "next_run_context",
|
|
258
|
-
consumedAt: now,
|
|
259
|
-
appliedAt: null,
|
|
260
|
-
});
|
|
261
|
-
writeLifecycleReceipt(cwd, consumedReceipt);
|
|
262
|
-
_emitLifecycleAuditEvent(cwd, artifact, consumedReceipt, "run_improvements.consumed");
|
|
263
|
-
|
|
264
|
-
// Step 3: applied receipt — next-run-context artifact written and points to defaults
|
|
265
|
-
const appliedReceipt = buildLifecycleReceipt(artifact, {
|
|
266
|
-
lifecycleState: "applied",
|
|
267
|
-
surface: "next_run_context",
|
|
268
|
-
consumedAt: now,
|
|
269
|
-
appliedAt: now,
|
|
270
|
-
limitations: [
|
|
271
|
-
"Applied via next-run-context artifact injection.",
|
|
272
|
-
"Injected status requires session-start hook to read the artifact.",
|
|
273
|
-
...(nrcArtifact.limitations || []).slice(0, 2),
|
|
274
|
-
],
|
|
275
|
-
});
|
|
276
|
-
writeLifecycleReceipt(cwd, appliedReceipt);
|
|
277
|
-
_emitLifecycleAuditEvent(cwd, artifact, appliedReceipt, "run_improvements.applied");
|
|
278
|
-
|
|
279
|
-
// Step 4: update main run-improvements artifact to reflect applied state
|
|
280
|
-
try {
|
|
281
|
-
const absPath = path.join(cwd, RUN_IMPROVEMENTS_REL);
|
|
282
|
-
if (fs.existsSync(absPath)) {
|
|
283
|
-
const stored = JSON.parse(fs.readFileSync(absPath, "utf8"));
|
|
284
|
-
if (
|
|
285
|
-
stored.schemaVersion === RI_SCHEMA &&
|
|
286
|
-
stored.sourceRunFingerprint === artifact.sourceRunFingerprint
|
|
287
|
-
) {
|
|
288
|
-
stored.status = "applied";
|
|
289
|
-
stored.applied = true;
|
|
290
|
-
stored.appliedAt = now;
|
|
291
|
-
fs.writeFileSync(absPath, JSON.stringify(stored, null, 2), "utf8");
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
} catch {}
|
|
295
|
-
|
|
296
|
-
// Step 5: mark next-run-context artifact as applied (now has lifecycle backing)
|
|
297
|
-
try {
|
|
298
|
-
const { updateNextRunContextStatus } = require("./next-run-context");
|
|
299
|
-
updateNextRunContextStatus(cwd, "applied");
|
|
300
|
-
emitNextRunContextEvent(cwd, { ...nrcArtifact, status: "applied" }, "next_run_context.applied");
|
|
301
|
-
} catch {}
|
|
302
|
-
|
|
303
|
-
return {
|
|
304
|
-
success: true,
|
|
305
|
-
receipt: appliedReceipt,
|
|
306
|
-
nextRunContextArtifact: { ...nrcArtifact, status: "applied" },
|
|
307
|
-
reason: written ? "injected" : "idempotent_existing",
|
|
308
|
-
defaultsCount: (nrcArtifact.appliedDefaults || []).length,
|
|
309
|
-
decisionsCount: nrcArtifact.activeDecisionCount || 0,
|
|
310
|
-
risksCount: nrcArtifact.activeRiskCount || 0,
|
|
311
|
-
surface: "next_run_context",
|
|
312
|
-
artifactPath: ".claude/cco/state/next-run-context.json",
|
|
313
|
-
};
|
|
314
|
-
} catch (err) {
|
|
315
|
-
return { success: false, reason: "error", error: String(err.message), nextRunContextArtifact: null, receipt: null };
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
module.exports = {
|
|
320
|
-
SCHEMA_VERSION,
|
|
321
|
-
LIFECYCLE_STATES,
|
|
322
|
-
RECEIPT_REL,
|
|
323
|
-
loadLifecycleReceipt,
|
|
324
|
-
writeLifecycleReceipt,
|
|
325
|
-
buildLifecycleReceipt,
|
|
326
|
-
consumeRunImprovements,
|
|
327
|
-
applyRunImprovements,
|
|
328
|
-
injectNextRunContext,
|
|
329
|
-
checkLifecycleStale,
|
|
330
|
-
};
|