avorelo 0.1.0 → 0.2.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 +91 -51
- package/bin/avorelo.mjs +7 -0
- package/dist/avorelo.mjs +14337 -0
- package/package.json +106 -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,559 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
// ── Execution Packet ──────────────────────────────────────────────────────────
|
|
4
|
-
//
|
|
5
|
-
// Contract: avorelo.executionPacket.v1
|
|
6
|
-
//
|
|
7
|
-
// Transforms messy user intent into a scoped, safe, verifiable execution packet.
|
|
8
|
-
// Includes agent prompt compiler for adapting packets to target workers.
|
|
9
|
-
//
|
|
10
|
-
// No network calls. No LLM calls. No script execution. Local only.
|
|
11
|
-
|
|
12
|
-
const fs = require("fs");
|
|
13
|
-
const path = require("path");
|
|
14
|
-
const crypto = require("crypto");
|
|
15
|
-
const { ensureCcoDirs } = require("./fsx");
|
|
16
|
-
const { appendProductLearningEvent } = require("./product-learning-events");
|
|
17
|
-
|
|
18
|
-
const CONTRACT = "avorelo.executionPacket.v1";
|
|
19
|
-
const SCHEMA_VERSION = 1;
|
|
20
|
-
|
|
21
|
-
const LATEST_PACKET_REL = ".claude/cco/orchestration/execution-packet/latest-packet.json";
|
|
22
|
-
|
|
23
|
-
// ── Modes ─────────────────────────────────────────────────────────────────────
|
|
24
|
-
|
|
25
|
-
const MODES = Object.freeze([
|
|
26
|
-
"safe_patch",
|
|
27
|
-
"fast_prototype",
|
|
28
|
-
"visual_qa_prep",
|
|
29
|
-
"security_review",
|
|
30
|
-
"docs_update",
|
|
31
|
-
"refactor_plan",
|
|
32
|
-
"test_verification",
|
|
33
|
-
"handoff",
|
|
34
|
-
]);
|
|
35
|
-
|
|
36
|
-
// ── Risk levels ───────────────────────────────────────────────────────────────
|
|
37
|
-
|
|
38
|
-
const RISK_LEVELS = Object.freeze(["low", "medium", "high", "critical"]);
|
|
39
|
-
|
|
40
|
-
// ── Approval-required patterns ────────────────────────────────────────────────
|
|
41
|
-
|
|
42
|
-
const APPROVAL_REQUIRED_PATTERNS = Object.freeze([
|
|
43
|
-
// Auth / security
|
|
44
|
-
"auth", "authentication", "login", "oauth", "jwt", "session", "password", "credential",
|
|
45
|
-
// Billing / payments
|
|
46
|
-
"billing", "payment", "stripe", "subscription", "invoice", "charge",
|
|
47
|
-
// Deploy / release
|
|
48
|
-
"deploy", "deployment", "release", "publish", "production", "prod",
|
|
49
|
-
// Infrastructure / secrets
|
|
50
|
-
"secret", "env", "config", "infra", "infrastructure", "database", "migration",
|
|
51
|
-
// Destructive
|
|
52
|
-
"delete", "drop", "truncate", "remove all", "wipe",
|
|
53
|
-
]);
|
|
54
|
-
|
|
55
|
-
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
56
|
-
|
|
57
|
-
function safeReadJson(absPath) {
|
|
58
|
-
try {
|
|
59
|
-
if (!fs.existsSync(absPath)) return null;
|
|
60
|
-
return JSON.parse(fs.readFileSync(absPath, "utf8").replace(/^/, ""));
|
|
61
|
-
} catch {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function nowIso() {
|
|
67
|
-
return new Date().toISOString();
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function makePacketId() {
|
|
71
|
-
return `pkt-${crypto.createHash("sha1").update(`${Date.now()}-${Math.random()}`).digest("hex").slice(0, 12)}`;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function makeRunId() {
|
|
75
|
-
return `run-${crypto.createHash("sha1").update(`${Date.now()}-${Math.random()}`).digest("hex").slice(0, 12)}`;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// ── Mode inference ────────────────────────────────────────────────────────────
|
|
79
|
-
|
|
80
|
-
function inferMode(userIntent, taskType) {
|
|
81
|
-
const intent = (userIntent || "").toLowerCase();
|
|
82
|
-
const type = (taskType || "").toLowerCase();
|
|
83
|
-
|
|
84
|
-
if (/security|vuln|pentest|audit|cve|owasp/.test(intent)) return "security_review";
|
|
85
|
-
if (/test|spec|coverage|e2e/.test(intent) && /add|fix|improve/.test(intent)) return "test_verification";
|
|
86
|
-
if (/doc|readme|comment|changelog|guide/.test(intent)) return "docs_update";
|
|
87
|
-
if (/refactor|restructure|reorganize|rename/.test(intent)) return "refactor_plan";
|
|
88
|
-
if (/screenshot|visual|ui|design|css|style/.test(intent)) return "visual_qa_prep";
|
|
89
|
-
if (/handoff|summary|brief|next session/.test(intent)) return "handoff";
|
|
90
|
-
if (/spike|proto|experiment|try|quick/.test(intent)) return "fast_prototype";
|
|
91
|
-
if (/fix|bug|patch|hotfix|broken|error|crash/.test(intent)) return "safe_patch";
|
|
92
|
-
|
|
93
|
-
if (type === "security_sensitive") return "security_review";
|
|
94
|
-
if (type === "test_or_verification") return "test_verification";
|
|
95
|
-
if (type === "documentation") return "docs_update";
|
|
96
|
-
if (type === "refactor") return "refactor_plan";
|
|
97
|
-
if (type === "deployment_release") return "safe_patch";
|
|
98
|
-
|
|
99
|
-
return "safe_patch";
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// ── Risk assessment ───────────────────────────────────────────────────────────
|
|
103
|
-
|
|
104
|
-
function assessRisk(userIntent, projectProfile, mode) {
|
|
105
|
-
const intent = (userIntent || "").toLowerCase();
|
|
106
|
-
const reasons = [];
|
|
107
|
-
let level = "low";
|
|
108
|
-
let approvalRequired = false;
|
|
109
|
-
let escalationRecommended = false;
|
|
110
|
-
|
|
111
|
-
// Check against approval-required patterns
|
|
112
|
-
for (const pattern of APPROVAL_REQUIRED_PATTERNS) {
|
|
113
|
-
if (intent.includes(pattern)) {
|
|
114
|
-
reasons.push(`Task mentions '${pattern}' which requires approval.`);
|
|
115
|
-
if (["auth", "billing", "payment", "deploy", "secret", "credential"].some((k) => pattern.includes(k))) {
|
|
116
|
-
approvalRequired = true;
|
|
117
|
-
escalationRecommended = true;
|
|
118
|
-
level = "high";
|
|
119
|
-
} else if (level === "low") {
|
|
120
|
-
level = "medium";
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// Mode-based risk
|
|
126
|
-
if (mode === "security_review") {
|
|
127
|
-
level = "high";
|
|
128
|
-
escalationRecommended = true;
|
|
129
|
-
if (!approvalRequired) reasons.push("Security review mode requires careful human verification.");
|
|
130
|
-
}
|
|
131
|
-
if (mode === "fast_prototype") {
|
|
132
|
-
if (level === "low") level = "medium";
|
|
133
|
-
reasons.push("Fast prototype mode may skip normal safety checks.");
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Deploy config detected
|
|
137
|
-
if (projectProfile?.deploy?.requiresApproval) {
|
|
138
|
-
reasons.push("Deploy config detected. Deploy actions require explicit approval.");
|
|
139
|
-
approvalRequired = approvalRequired || intent.includes("deploy");
|
|
140
|
-
if (intent.includes("deploy")) {
|
|
141
|
-
level = "high";
|
|
142
|
-
approvalRequired = true;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Sensitive dirs in intent
|
|
147
|
-
const sensitiveDirs = projectProfile?.riskBoundaries?.sensitiveDirs || [];
|
|
148
|
-
for (const dir of sensitiveDirs) {
|
|
149
|
-
if (intent.includes(dir.replace(/\//g, " ").replace(/-/g, " "))) {
|
|
150
|
-
reasons.push(`Task may touch sensitive directory: ${dir}`);
|
|
151
|
-
if (level === "low") level = "medium";
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
if (reasons.length === 0) reasons.push("No high-risk patterns detected.");
|
|
156
|
-
|
|
157
|
-
return {
|
|
158
|
-
level,
|
|
159
|
-
reasons: reasons.slice(0, 8),
|
|
160
|
-
approvalRequired,
|
|
161
|
-
escalationRecommended,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// ── Scope compilation ─────────────────────────────────────────────────────────
|
|
166
|
-
|
|
167
|
-
function compileAllowedScope(userIntent, projectProfile, orchestrationPlan) {
|
|
168
|
-
const files = [];
|
|
169
|
-
const dirs = [];
|
|
170
|
-
const areas = [];
|
|
171
|
-
const actions = [...(projectProfile?.riskBoundaries?.allowedDefaultActions || [
|
|
172
|
-
"file_read",
|
|
173
|
-
"file_write_with_diff",
|
|
174
|
-
"run_tests",
|
|
175
|
-
"run_lint",
|
|
176
|
-
"run_build",
|
|
177
|
-
"git_status",
|
|
178
|
-
"git_diff",
|
|
179
|
-
])];
|
|
180
|
-
|
|
181
|
-
// Add test/lint/build actions when available
|
|
182
|
-
if (projectProfile?.commands?.test) areas.push("test_files");
|
|
183
|
-
if (projectProfile?.commands?.lint) areas.push("lint_targets");
|
|
184
|
-
if (projectProfile?.commands?.build) areas.push("build_targets");
|
|
185
|
-
|
|
186
|
-
// Add orchestration stage context
|
|
187
|
-
if (orchestrationPlan?.stages?.length > 0) {
|
|
188
|
-
const stageTypes = orchestrationPlan.stages.map((s) => s.lifecycleStage || s.stageId).filter(Boolean);
|
|
189
|
-
for (const st of stageTypes) {
|
|
190
|
-
if (!areas.includes(st)) areas.push(st);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
return { files, dirs, areas: [...new Set(areas)], actions };
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
function compileBlockedScope(userIntent, projectProfile) {
|
|
198
|
-
const blockedFiles = [...(projectProfile?.riskBoundaries?.blockedFiles || [])];
|
|
199
|
-
const blockedDirs = [...(projectProfile?.riskBoundaries?.sensitiveDirs || [])];
|
|
200
|
-
const blockedActions = [...(projectProfile?.riskBoundaries?.blockedActions || [])];
|
|
201
|
-
|
|
202
|
-
// Always block secrets / env files regardless
|
|
203
|
-
const alwaysBlock = [".env", ".env.local", ".env.production", ".env.server", "*.pem", "*.key", "secrets.json", "credentials.json"];
|
|
204
|
-
for (const f of alwaysBlock) {
|
|
205
|
-
if (!blockedFiles.includes(f)) blockedFiles.push(f);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
// Always block deploy/publish actions
|
|
209
|
-
const alwaysBlockActions = ["deploy", "publish", "push_to_production", "charge_customer"];
|
|
210
|
-
for (const a of alwaysBlockActions) {
|
|
211
|
-
if (!blockedActions.includes(a)) blockedActions.push(a);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
return {
|
|
215
|
-
files: [...new Set(blockedFiles)],
|
|
216
|
-
dirs: [...new Set(blockedDirs)],
|
|
217
|
-
areas: ["auth_internals", "billing_internals", "secrets_store"],
|
|
218
|
-
actions: [...new Set(blockedActions)],
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// ── Proof requirements ────────────────────────────────────────────────────────
|
|
223
|
-
|
|
224
|
-
function compileProofRequirements(mode, projectProfile, risk) {
|
|
225
|
-
const proofSteps = [];
|
|
226
|
-
|
|
227
|
-
const hasTest = Boolean(projectProfile?.commands?.test);
|
|
228
|
-
const hasBuild = Boolean(projectProfile?.commands?.build);
|
|
229
|
-
const hasLint = Boolean(projectProfile?.commands?.lint);
|
|
230
|
-
|
|
231
|
-
if (["safe_patch", "fast_prototype", "refactor_plan", "test_verification"].includes(mode)) {
|
|
232
|
-
if (hasTest) proofSteps.push({ step: "run_tests", command: projectProfile.commands.test, required: true });
|
|
233
|
-
if (hasBuild) proofSteps.push({ step: "run_build", command: projectProfile.commands.build, required: true });
|
|
234
|
-
if (hasLint) proofSteps.push({ step: "run_lint", command: projectProfile.commands.lint, required: false });
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
if (mode === "security_review") {
|
|
238
|
-
proofSteps.push({ step: "security_scan_review", command: null, required: true, note: "Manual security review required." });
|
|
239
|
-
if (hasTest) proofSteps.push({ step: "run_tests", command: projectProfile?.commands?.test, required: true });
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
if (mode === "docs_update") {
|
|
243
|
-
proofSteps.push({ step: "review_rendered_docs", command: null, required: false, note: "Review rendered documentation." });
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
if (mode === "visual_qa_prep") {
|
|
247
|
-
proofSteps.push({ step: "screenshot_capture", command: null, required: false, note: "Screenshot comparison deferred to Visual QA pipeline." });
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
if (risk.approvalRequired) {
|
|
251
|
-
proofSteps.push({ step: "human_approval", command: null, required: true, note: "Human approval required before proceeding." });
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
if (proofSteps.length === 0) {
|
|
255
|
-
proofSteps.push({ step: "manual_review", command: null, required: false, note: "No automated proof steps detected. Review manually." });
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
return proofSteps;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
// ── Agent instructions ────────────────────────────────────────────────────────
|
|
262
|
-
|
|
263
|
-
function compileAgentInstructions(goal, mode, allowedScope, blockedScope, proofRequired, diffRequired, risk) {
|
|
264
|
-
return {
|
|
265
|
-
goal,
|
|
266
|
-
mode,
|
|
267
|
-
principles: [
|
|
268
|
-
"Work only within the allowed scope.",
|
|
269
|
-
"Never touch blocked files, dirs, or actions.",
|
|
270
|
-
"Show a diff before any write to code files.",
|
|
271
|
-
proofRequired.some((p) => p.step === "run_tests") ? "Run tests after all changes." : null,
|
|
272
|
-
proofRequired.some((p) => p.step === "run_build") ? "Run build after all changes." : null,
|
|
273
|
-
risk.approvalRequired ? "STOP and request human approval before proceeding to any destructive or deployment step." : null,
|
|
274
|
-
"Do not read or include raw secrets, credentials, or PII in any output.",
|
|
275
|
-
"Summarize what was changed and what proof was collected at the end.",
|
|
276
|
-
].filter(Boolean),
|
|
277
|
-
allowedScopeSummary: {
|
|
278
|
-
actions: allowedScope.actions,
|
|
279
|
-
areas: allowedScope.areas,
|
|
280
|
-
},
|
|
281
|
-
blockedScopeSummary: {
|
|
282
|
-
files: blockedScope.files.slice(0, 10),
|
|
283
|
-
dirs: blockedScope.dirs.slice(0, 6),
|
|
284
|
-
actions: blockedScope.actions.slice(0, 8),
|
|
285
|
-
},
|
|
286
|
-
diffBeforeWrite: diffRequired,
|
|
287
|
-
proofSteps: proofRequired.filter((p) => p.required).map((p) => p.step),
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
// ── Safe next action ──────────────────────────────────────────────────────────
|
|
292
|
-
|
|
293
|
-
function inferSafeNextAction(mode, risk, projectProfile) {
|
|
294
|
-
if (risk.approvalRequired) return "Request human approval before proceeding. Do not execute blocked actions.";
|
|
295
|
-
if (mode === "security_review") return "Begin security review. Flag findings before applying any changes.";
|
|
296
|
-
if (mode === "refactor_plan") return "Draft the refactor plan. Show scope and impact before making changes.";
|
|
297
|
-
if (mode === "docs_update") return "Update documentation. Verify rendered output after changes.";
|
|
298
|
-
if (mode === "test_verification") return "Run existing tests first, then add or fix tests as needed.";
|
|
299
|
-
if (mode === "safe_patch") return "Show diff of proposed changes before writing. Run tests after.";
|
|
300
|
-
return "Review the execution packet scope before proceeding.";
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// ── Main compiler ─────────────────────────────────────────────────────────────
|
|
304
|
-
|
|
305
|
-
function compileExecutionPacket(cwd, input, options = {}) {
|
|
306
|
-
const userIntent = input?.userIntent || input?.task || "";
|
|
307
|
-
const inputMode = input?.mode || null;
|
|
308
|
-
const taskId = input?.taskId || null;
|
|
309
|
-
|
|
310
|
-
// Load project profile
|
|
311
|
-
const projectProfile = safeReadJson(
|
|
312
|
-
path.join(cwd, ".claude", "cco", "orchestration", "project-profile", "latest-profile.json")
|
|
313
|
-
) || { status: "unknown", riskBoundaries: {}, commands: {}, deploy: {}, proofDefaults: {} };
|
|
314
|
-
|
|
315
|
-
// Load orchestration plan
|
|
316
|
-
const orchPlan = safeReadJson(
|
|
317
|
-
path.join(cwd, ".claude", "cco", "orchestration", "work-aware-orchestration", "latest-plan.json")
|
|
318
|
-
);
|
|
319
|
-
|
|
320
|
-
// Load hygiene report
|
|
321
|
-
const hygieneReport = safeReadJson(
|
|
322
|
-
path.join(cwd, ".claude", "cco", "orchestration", "ai-workspace-hygiene", "latest-report.json")
|
|
323
|
-
);
|
|
324
|
-
|
|
325
|
-
// Infer mode and risk
|
|
326
|
-
const taskType = orchPlan?.task?.taskType || "";
|
|
327
|
-
const mode = inputMode && MODES.includes(inputMode) ? inputMode : inferMode(userIntent, taskType);
|
|
328
|
-
const risk = assessRisk(userIntent, projectProfile, mode);
|
|
329
|
-
|
|
330
|
-
// Compile scope — blocked ALWAYS overrides allowed
|
|
331
|
-
const allowedScope = compileAllowedScope(userIntent, projectProfile, orchPlan);
|
|
332
|
-
const blockedScope = compileBlockedScope(userIntent, projectProfile);
|
|
333
|
-
|
|
334
|
-
// Proof and diff requirements
|
|
335
|
-
const diffRequired = ["safe_patch", "fast_prototype", "refactor_plan", "security_review"].includes(mode);
|
|
336
|
-
const proofRequired = compileProofRequirements(mode, projectProfile, risk);
|
|
337
|
-
|
|
338
|
-
// Agent instructions
|
|
339
|
-
const goal = userIntent || "Complete the task safely within the defined scope.";
|
|
340
|
-
const agentInstructions = compileAgentInstructions(
|
|
341
|
-
goal, mode, allowedScope, blockedScope, proofRequired, diffRequired, risk
|
|
342
|
-
);
|
|
343
|
-
|
|
344
|
-
// Target worker from orchestration plan
|
|
345
|
-
const implementStage = (orchPlan?.stages || []).find((s) => s.lifecycleStage === "implement");
|
|
346
|
-
const targetWorker = implementStage?.workerSelection?.selected || "claude_code";
|
|
347
|
-
|
|
348
|
-
const packet = {
|
|
349
|
-
contract: CONTRACT,
|
|
350
|
-
schemaVersion: SCHEMA_VERSION,
|
|
351
|
-
packetId: makePacketId(),
|
|
352
|
-
runId: makeRunId(),
|
|
353
|
-
taskId: taskId || null,
|
|
354
|
-
goal,
|
|
355
|
-
mode,
|
|
356
|
-
targetWorker,
|
|
357
|
-
orchestrationPlanRef: orchPlan ? ".claude/cco/orchestration/work-aware-orchestration/latest-plan.json" : null,
|
|
358
|
-
contextPackRef: null,
|
|
359
|
-
projectProfileRef: ".claude/cco/orchestration/project-profile/latest-profile.json",
|
|
360
|
-
allowedScope,
|
|
361
|
-
blockedScope,
|
|
362
|
-
risk,
|
|
363
|
-
requiredBeforeWrite: diffRequired ? ["show_diff"] : [],
|
|
364
|
-
requiredAfterWrite: proofRequired.filter((p) => p.required).map((p) => p.step),
|
|
365
|
-
proofRequired,
|
|
366
|
-
diffRequired,
|
|
367
|
-
userApproval: risk.approvalRequired,
|
|
368
|
-
safeNextAction: inferSafeNextAction(mode, risk, projectProfile),
|
|
369
|
-
agentInstructions,
|
|
370
|
-
evidence: {
|
|
371
|
-
projectProfileStatus: projectProfile.status || "unknown",
|
|
372
|
-
hygieneScore: hygieneReport?.score || null,
|
|
373
|
-
orchestrationPlanStages: (orchPlan?.stages || []).length,
|
|
374
|
-
},
|
|
375
|
-
caveats: [
|
|
376
|
-
"Blocked scope always overrides allowed scope.",
|
|
377
|
-
"No raw secrets, credentials, or PII should appear in agent output.",
|
|
378
|
-
"Diff required before any code write when diffRequired is true.",
|
|
379
|
-
"Proof steps must be collected after write when requiredAfterWrite is non-empty.",
|
|
380
|
-
risk.approvalRequired ? "Human approval required before executing blocked/high-risk actions." : null,
|
|
381
|
-
].filter(Boolean),
|
|
382
|
-
redacted: true,
|
|
383
|
-
};
|
|
384
|
-
|
|
385
|
-
return packet;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
// ── Agent prompt compiler ─────────────────────────────────────────────────────
|
|
389
|
-
|
|
390
|
-
function compileAgentPrompt(packet, options = {}) {
|
|
391
|
-
const target = options.target || "claude_code";
|
|
392
|
-
|
|
393
|
-
const lines = [
|
|
394
|
-
`# Avorelo Execution Packet`,
|
|
395
|
-
`Packet: ${packet.packetId}`,
|
|
396
|
-
`Mode: ${packet.mode}`,
|
|
397
|
-
`Risk: ${packet.risk?.level || "unknown"}`,
|
|
398
|
-
packet.userApproval ? `⚠ APPROVAL REQUIRED before executing.` : null,
|
|
399
|
-
"",
|
|
400
|
-
`## Goal`,
|
|
401
|
-
packet.goal,
|
|
402
|
-
"",
|
|
403
|
-
`## Principles`,
|
|
404
|
-
...(packet.agentInstructions?.principles || []).map((p) => `- ${p}`),
|
|
405
|
-
"",
|
|
406
|
-
`## Allowed Scope`,
|
|
407
|
-
`Actions: ${(packet.allowedScope?.actions || []).join(", ") || "file_read, file_write_with_diff"}`,
|
|
408
|
-
packet.allowedScope?.areas?.length > 0 ? `Areas: ${packet.allowedScope.areas.join(", ")}` : null,
|
|
409
|
-
"",
|
|
410
|
-
`## Blocked Scope`,
|
|
411
|
-
`Files: ${(packet.blockedScope?.files || []).slice(0, 8).join(", ")}`,
|
|
412
|
-
`Dirs: ${(packet.blockedScope?.dirs || []).slice(0, 6).join(", ")}`,
|
|
413
|
-
`Actions: ${(packet.blockedScope?.actions || []).join(", ")}`,
|
|
414
|
-
"",
|
|
415
|
-
`## Before Any Write`,
|
|
416
|
-
packet.diffRequired ? `- Show a unified diff of all proposed changes before writing.` : `- Review changes with user before applying.`,
|
|
417
|
-
"",
|
|
418
|
-
`## After Write — Proof Required`,
|
|
419
|
-
...(packet.requiredAfterWrite || []).map((s) => `- ${s}`),
|
|
420
|
-
(packet.requiredAfterWrite || []).length === 0 ? "- Manual review (no automated proof configured)." : null,
|
|
421
|
-
"",
|
|
422
|
-
`## Safe Next Action`,
|
|
423
|
-
packet.safeNextAction,
|
|
424
|
-
"",
|
|
425
|
-
`## Output Requirements`,
|
|
426
|
-
`- Summarize all changes made.`,
|
|
427
|
-
`- List proof collected (tests passed, build succeeded, etc.).`,
|
|
428
|
-
`- List any items skipped and why.`,
|
|
429
|
-
`- Do not include raw secrets, credentials, or PII in output.`,
|
|
430
|
-
packet.userApproval ? `- STOP before any deploy/publish/billing/auth change. Request approval.` : null,
|
|
431
|
-
].filter((l) => l !== null);
|
|
432
|
-
|
|
433
|
-
return {
|
|
434
|
-
target,
|
|
435
|
-
promptText: lines.join("\n"),
|
|
436
|
-
packetId: packet.packetId,
|
|
437
|
-
mode: packet.mode,
|
|
438
|
-
riskLevel: packet.risk?.level,
|
|
439
|
-
approvalRequired: packet.userApproval,
|
|
440
|
-
redacted: true,
|
|
441
|
-
};
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
// ── Write and surface ─────────────────────────────────────────────────────────
|
|
445
|
-
|
|
446
|
-
function writeExecutionPacket(cwd, packet) {
|
|
447
|
-
ensureCcoDirs(cwd);
|
|
448
|
-
const dir = path.join(cwd, ".claude", "cco", "orchestration", "execution-packet");
|
|
449
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
450
|
-
const absPath = path.join(cwd, LATEST_PACKET_REL);
|
|
451
|
-
fs.writeFileSync(absPath, JSON.stringify(packet, null, 2), "utf8");
|
|
452
|
-
|
|
453
|
-
try {
|
|
454
|
-
appendProductLearningEvent(cwd, {
|
|
455
|
-
eventName: "execution_packet_compiled",
|
|
456
|
-
category: "execution_packet",
|
|
457
|
-
surface: "local",
|
|
458
|
-
status: "observed",
|
|
459
|
-
payload: {
|
|
460
|
-
packetId: packet.packetId,
|
|
461
|
-
mode: packet.mode,
|
|
462
|
-
riskLevel: packet.risk?.level || "unknown",
|
|
463
|
-
approvalRequired: packet.userApproval || false,
|
|
464
|
-
diffRequired: packet.diffRequired || false,
|
|
465
|
-
proofStepCount: (packet.proofRequired || []).filter((p) => p.required).length,
|
|
466
|
-
allowedActionCount: (packet.allowedScope?.actions || []).length,
|
|
467
|
-
blockedFileCount: (packet.blockedScope?.files || []).length,
|
|
468
|
-
blockedActionCount: (packet.blockedScope?.actions || []).length,
|
|
469
|
-
targetWorker: packet.targetWorker || "unknown",
|
|
470
|
-
},
|
|
471
|
-
});
|
|
472
|
-
} catch {
|
|
473
|
-
// non-blocking
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
return { packetPath: LATEST_PACKET_REL };
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
function buildExecutionPacketSurface(cwd, options = {}) {
|
|
480
|
-
const absPath = path.join(cwd, LATEST_PACKET_REL);
|
|
481
|
-
const packet = safeReadJson(absPath);
|
|
482
|
-
if (!packet) {
|
|
483
|
-
return {
|
|
484
|
-
status: "not_run",
|
|
485
|
-
latestPacketPath: null,
|
|
486
|
-
mode: null,
|
|
487
|
-
riskLevel: null,
|
|
488
|
-
approvalRequired: false,
|
|
489
|
-
proofRequired: false,
|
|
490
|
-
nextAction: "Run `avorelo execution-packet <task>` to compile an execution packet.",
|
|
491
|
-
};
|
|
492
|
-
}
|
|
493
|
-
return {
|
|
494
|
-
status: "ready",
|
|
495
|
-
latestPacketPath: LATEST_PACKET_REL,
|
|
496
|
-
mode: packet.mode,
|
|
497
|
-
riskLevel: packet.risk?.level || "unknown",
|
|
498
|
-
approvalRequired: packet.userApproval || false,
|
|
499
|
-
proofRequired: (packet.requiredAfterWrite || []).length > 0,
|
|
500
|
-
nextAction: packet.safeNextAction || null,
|
|
501
|
-
};
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
function formatExecutionPacketText(packet, options = {}) {
|
|
505
|
-
const debug = options.debug || false;
|
|
506
|
-
|
|
507
|
-
const lines = [
|
|
508
|
-
"Avorelo prepared a scoped work packet.",
|
|
509
|
-
"",
|
|
510
|
-
"Ready:",
|
|
511
|
-
` Goal: ${packet.goal}`,
|
|
512
|
-
` Mode: ${packet.mode}`,
|
|
513
|
-
` Risk: ${packet.risk?.level || "unknown"}`,
|
|
514
|
-
"",
|
|
515
|
-
"Protected:",
|
|
516
|
-
` Blocked files: ${(packet.blockedScope?.files || []).length} patterns · Blocked actions: ${(packet.blockedScope?.actions || []).length}`,
|
|
517
|
-
` Secrets/auth/billing/deploy blocked by default.`,
|
|
518
|
-
packet.userApproval ? ` ⚠ Approval required before executing.` : null,
|
|
519
|
-
"",
|
|
520
|
-
"Proof required:",
|
|
521
|
-
...(packet.requiredAfterWrite || []).length > 0
|
|
522
|
-
? (packet.requiredAfterWrite || []).map((s) => ` - ${s}`)
|
|
523
|
-
: [" - Manual review (no automated proof configured)."],
|
|
524
|
-
"",
|
|
525
|
-
`Next: ${packet.safeNextAction}`,
|
|
526
|
-
`Packet: ${LATEST_PACKET_REL}`,
|
|
527
|
-
].filter((l) => l !== null);
|
|
528
|
-
|
|
529
|
-
if (debug) {
|
|
530
|
-
lines.push(
|
|
531
|
-
"",
|
|
532
|
-
"--- Debug ---",
|
|
533
|
-
`Packet ID: ${packet.packetId}`,
|
|
534
|
-
`Target worker: ${packet.targetWorker}`,
|
|
535
|
-
`Diff before write: ${packet.diffRequired}`,
|
|
536
|
-
`Allowed areas: ${(packet.allowedScope?.areas || []).join(", ") || "none"}`,
|
|
537
|
-
`Allowed actions: ${(packet.allowedScope?.actions || []).join(", ")}`,
|
|
538
|
-
`Blocked dirs: ${(packet.blockedScope?.dirs || []).join(", ")}`,
|
|
539
|
-
`Risk reasons: ${(packet.risk?.reasons || []).join("; ")}`,
|
|
540
|
-
`Orchestration ref: ${packet.orchestrationPlanRef || "none"}`,
|
|
541
|
-
`Project profile ref: ${packet.projectProfileRef || "none"}`,
|
|
542
|
-
...(packet.caveats || []).map((c) => `Caveat: ${c}`),
|
|
543
|
-
);
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
return lines.join("\n") + "\n";
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
module.exports = {
|
|
550
|
-
CONTRACT,
|
|
551
|
-
SCHEMA_VERSION,
|
|
552
|
-
LATEST_PACKET_REL,
|
|
553
|
-
MODES,
|
|
554
|
-
compileExecutionPacket,
|
|
555
|
-
compileAgentPrompt,
|
|
556
|
-
writeExecutionPacket,
|
|
557
|
-
buildExecutionPacketSurface,
|
|
558
|
-
formatExecutionPacketText,
|
|
559
|
-
};
|