@event4u/agent-config 8.5.0 → 8.7.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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +54 -0
- package/dist/agent-src/commands/cost/report.md +20 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +30 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +15 -1
- package/dist/agent-src/contexts/execution/subagent-steering.md +54 -1
- package/dist/agent-src/contexts/model-recommendations.md +19 -0
- package/dist/agent-src/contexts/subagent-configuration.md +8 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +4 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +4 -4
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/install/emit_host_rules_cli.js +185 -0
- package/dist/install/emit_host_rules_cli.js.map +1 -0
- package/dist/install/install.mjs +6 -0
- package/dist/install/plan.js +4 -1
- package/dist/install/plan.js.map +1 -1
- package/dist/install/rule_scope.js +109 -0
- package/dist/install/rule_scope.js.map +1 -0
- package/dist/install/rule_scope_cli.js +77 -0
- package/dist/install/rule_scope_cli.js.map +1 -0
- package/dist/install/wizard-plan.js +14 -1
- package/dist/install/wizard-plan.js.map +1 -1
- package/dist/mcp/registry-manifest.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +963 -0
- package/dist/scripts/_lib/agent_settings.js.map +1 -0
- package/dist/scripts/_lib/agent_src.js +607 -0
- package/dist/scripts/_lib/agent_src.js.map +1 -0
- package/dist/scripts/_lib/claude_settings_hooks.js +209 -0
- package/dist/scripts/_lib/claude_settings_hooks.js.map +1 -0
- package/dist/scripts/_lib/model_tier.js +64 -0
- package/dist/scripts/_lib/model_tier.js.map +1 -0
- package/dist/scripts/_lib/script_output.js +140 -0
- package/dist/scripts/_lib/script_output.js.map +1 -0
- package/dist/scripts/_lib/user_global_paths.js +297 -0
- package/dist/scripts/_lib/user_global_paths.js.map +1 -0
- package/dist/scripts/condense.js +2181 -0
- package/dist/scripts/condense.js.map +1 -0
- package/dist/server/routes/install.js +18 -2
- package/dist/server/routes/install.js.map +1 -1
- package/dist/server/schemas/settings.js +2 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +7 -0
- package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +125 -0
- package/docs/decisions/INDEX.md +1 -0
- package/docs/proof.md +2 -1
- package/package.json +1 -1
- package/src/config/agent-settings.template.yml +4 -2
- package/src/install/emit_host_rules_cli.ts +190 -0
- package/src/install/plan.ts +11 -1
- package/src/install/rule_scope.ts +120 -0
- package/src/install/rule_scope_cli.ts +79 -0
- package/src/install/wizard-plan.ts +22 -1
- package/src/scripts/_lib/auto_dispatch.ts +63 -0
- package/src/scripts/_lib/subagent_routing.ts +24 -0
- package/src/scripts/_lib/subagent_steering.ts +213 -3
- package/src/scripts/check_trigger_eval_presence.ts +171 -0
- package/src/scripts/install.sh +118 -4
- package/src/scripts/trigger_eval_grandfather.json +226 -0
- package/src/server/schemas/settings.ts +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent_src.js","sourceRoot":"","sources":["../../../src/scripts/_lib/agent_src.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Managed Claude Code hook registration in settings.json.
|
|
3
|
+
*
|
|
4
|
+
* road-to-claude-code-single-surface Phase 1: the marketplace plugin used to
|
|
5
|
+
* be the only carrier of the deterministic hook matrix (hooks/hooks.json).
|
|
6
|
+
* This module registers the same matrix directly in a Claude Code settings
|
|
7
|
+
* file (`~/.claude/settings.json` for the global install) so the plugin is
|
|
8
|
+
* no longer required for hooks.
|
|
9
|
+
*
|
|
10
|
+
* Contract (parity findings: agents/settings/contexts/claude-code-hook-parity.md):
|
|
11
|
+
*
|
|
12
|
+
* - The hook schema is identical between plugin hooks.json and settings.json;
|
|
13
|
+
* Claude Code fires all sources in parallel and dedupes identical command
|
|
14
|
+
* strings — so a still-installed plugin never double-fires during the
|
|
15
|
+
* migration window.
|
|
16
|
+
* - Managed entries are identified by the dispatch signature inside the
|
|
17
|
+
* command string (MANAGED_SIGNATURE). No extra marker field is written —
|
|
18
|
+
* content-derived identity keeps the entry byte-identical to the plugin's,
|
|
19
|
+
* which is what makes the dedup guarantee hold.
|
|
20
|
+
* - User-owned entries (anything without the signature) are never touched,
|
|
21
|
+
* reordered, or removed. Managed entries are replaced in place per event.
|
|
22
|
+
* - Writes are atomic (temp file + rename via atomicWriteFile) and guarded
|
|
23
|
+
* by a sidecar lockfile so two concurrent installers cannot tear the file.
|
|
24
|
+
* - A settings file that exists but does not parse as JSON is NEVER
|
|
25
|
+
* overwritten — the operation throws CorruptSettingsError and leaves the
|
|
26
|
+
* file byte-identical (the user's file outranks our convenience).
|
|
27
|
+
*
|
|
28
|
+
* The hook matrix itself derives from src/scripts/hook_manifest.yaml via
|
|
29
|
+
* build_claude_hook_matrix() — the same single source generate_plugin_hooks()
|
|
30
|
+
* (condense.ts) uses for the plugin's hooks/hooks.json.
|
|
31
|
+
*/
|
|
32
|
+
import * as fs from 'node:fs';
|
|
33
|
+
import * as path from 'node:path';
|
|
34
|
+
import * as YAML from 'yaml';
|
|
35
|
+
import { atomicWriteFile } from '../../install/atomic.js';
|
|
36
|
+
// Bundle note: a static import of the CJS `yaml` package requires the
|
|
37
|
+
// createRequire banner in `build:install-bundle` (package.json) — without it
|
|
38
|
+
// the esbuild ESM bundle throws `Dynamic require of "process" is not
|
|
39
|
+
// supported` at module init. A bare lazy `require('yaml')` is NOT an
|
|
40
|
+
// alternative: it is a ReferenceError under plain tsx/node ESM (CI).
|
|
41
|
+
function _yaml_parse(text) {
|
|
42
|
+
return YAML.parse(text);
|
|
43
|
+
}
|
|
44
|
+
/** Substring that identifies an entry as agent-config-managed. */
|
|
45
|
+
export const MANAGED_SIGNATURE = 'dispatch:hook --platform claude';
|
|
46
|
+
export class CorruptSettingsError extends Error {
|
|
47
|
+
constructor(file, cause) {
|
|
48
|
+
super(`${file} exists but is not valid JSON (${cause}). ` +
|
|
49
|
+
'Refusing to overwrite a user-owned settings file — fix or remove it, then re-run.');
|
|
50
|
+
this.name = 'CorruptSettingsError';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export class SettingsLockError extends Error {
|
|
54
|
+
constructor(lockPath) {
|
|
55
|
+
super(`settings lock ${lockPath} is held by another process. ` +
|
|
56
|
+
'Re-run when the concurrent install finishes (stale lock: delete the file).');
|
|
57
|
+
this.name = 'SettingsLockError';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Derive the Claude hook matrix from hook_manifest.yaml — the SAME source
|
|
62
|
+
* generate_plugin_hooks() uses, so settings-registered hooks and the plugin's
|
|
63
|
+
* hooks.json can never drift from each other.
|
|
64
|
+
*/
|
|
65
|
+
export function build_claude_hook_matrix(manifest_path) {
|
|
66
|
+
const raw = fs.readFileSync(manifest_path, 'utf8');
|
|
67
|
+
const manifest = (_yaml_parse(raw) ?? {});
|
|
68
|
+
const hook_spec = manifest['schema_version'] ?? 1;
|
|
69
|
+
const platforms = (manifest['platforms'] ?? {});
|
|
70
|
+
const claude_events = (platforms['claude'] ?? {}) || {};
|
|
71
|
+
const aliasesAll = (manifest['native_event_aliases'] ?? {});
|
|
72
|
+
const aliases = (aliasesAll['claude'] ?? {}) || {};
|
|
73
|
+
const ac_to_native = {};
|
|
74
|
+
for (const [native, ac] of Object.entries(aliases)) {
|
|
75
|
+
ac_to_native[String(ac)] = native;
|
|
76
|
+
}
|
|
77
|
+
const matrix = {};
|
|
78
|
+
for (const [ac_event, concerns] of Object.entries(claude_events)) {
|
|
79
|
+
if (!concerns || (Array.isArray(concerns) && concerns.length === 0))
|
|
80
|
+
continue;
|
|
81
|
+
const native = ac_to_native[ac_event];
|
|
82
|
+
if (native === undefined)
|
|
83
|
+
continue;
|
|
84
|
+
matrix[native] =
|
|
85
|
+
'BIN="$CLAUDE_PROJECT_DIR/agent-config"; [ -x "$BIN" ] || BIN=agent-config; ' +
|
|
86
|
+
`"$BIN" dispatch:hook --platform claude --event ${ac_event} ` +
|
|
87
|
+
`--native-event ${native} --project-dir "$CLAUDE_PROJECT_DIR" ` +
|
|
88
|
+
`--min-version ${String(hook_spec)}`;
|
|
89
|
+
}
|
|
90
|
+
return matrix;
|
|
91
|
+
}
|
|
92
|
+
function _is_managed_group(group) {
|
|
93
|
+
if (typeof group !== 'object' || group === null || Array.isArray(group))
|
|
94
|
+
return false;
|
|
95
|
+
const hooks = group.hooks;
|
|
96
|
+
if (!Array.isArray(hooks))
|
|
97
|
+
return false;
|
|
98
|
+
return hooks.some((h) => typeof h === 'object' &&
|
|
99
|
+
h !== null &&
|
|
100
|
+
typeof h.command === 'string' &&
|
|
101
|
+
h.command.includes(MANAGED_SIGNATURE));
|
|
102
|
+
}
|
|
103
|
+
function _read_settings(settings_path) {
|
|
104
|
+
if (!fs.existsSync(settings_path))
|
|
105
|
+
return {};
|
|
106
|
+
const raw = fs.readFileSync(settings_path, 'utf8');
|
|
107
|
+
if (raw.trim() === '')
|
|
108
|
+
return {};
|
|
109
|
+
let parsed;
|
|
110
|
+
try {
|
|
111
|
+
parsed = JSON.parse(raw);
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
throw new CorruptSettingsError(settings_path, e.message);
|
|
115
|
+
}
|
|
116
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
117
|
+
throw new CorruptSettingsError(settings_path, 'top level is not an object');
|
|
118
|
+
}
|
|
119
|
+
return parsed;
|
|
120
|
+
}
|
|
121
|
+
function _with_lock(settings_path, fn) {
|
|
122
|
+
const lockPath = settings_path + '.agent-config.lock';
|
|
123
|
+
fs.mkdirSync(path.dirname(lockPath), { recursive: true });
|
|
124
|
+
let fd;
|
|
125
|
+
try {
|
|
126
|
+
fd = fs.openSync(lockPath, 'wx');
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
throw new SettingsLockError(lockPath);
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
return fn();
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
fs.closeSync(fd);
|
|
136
|
+
fs.rmSync(lockPath, { force: true });
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Idempotently register the managed hook matrix in a Claude settings file.
|
|
141
|
+
* User entries are preserved untouched; managed entries are replaced in
|
|
142
|
+
* place; a second run with the same matrix produces zero diff.
|
|
143
|
+
*/
|
|
144
|
+
export function ensure_managed_hooks(settings_path, matrix) {
|
|
145
|
+
return _with_lock(settings_path, () => {
|
|
146
|
+
const settings = _read_settings(settings_path);
|
|
147
|
+
const before = JSON.stringify(settings);
|
|
148
|
+
const hooks = (settings['hooks'] ?? {}) || {};
|
|
149
|
+
const touched = [];
|
|
150
|
+
for (const [native, command] of Object.entries(matrix)) {
|
|
151
|
+
const existing = Array.isArray(hooks[native]) ? hooks[native] : [];
|
|
152
|
+
const user_groups = existing.filter((g) => !_is_managed_group(g));
|
|
153
|
+
const managed_group = {
|
|
154
|
+
hooks: [{ type: 'command', command }],
|
|
155
|
+
};
|
|
156
|
+
const next = [...user_groups, managed_group];
|
|
157
|
+
if (JSON.stringify(next) !== JSON.stringify(existing))
|
|
158
|
+
touched.push(native);
|
|
159
|
+
hooks[native] = next;
|
|
160
|
+
}
|
|
161
|
+
settings['hooks'] = hooks;
|
|
162
|
+
const after = JSON.stringify(settings);
|
|
163
|
+
if (after === before) {
|
|
164
|
+
return { changed: false, events: [] };
|
|
165
|
+
}
|
|
166
|
+
atomicWriteFile(settings_path, JSON.stringify(settings, null, 2) + '\n');
|
|
167
|
+
return { changed: true, events: touched };
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Remove exactly the managed entries (dispatch-signature match) from a
|
|
172
|
+
* Claude settings file. User entries, other settings keys, and files
|
|
173
|
+
* without managed entries are left byte-identical. Missing file → no-op.
|
|
174
|
+
*/
|
|
175
|
+
export function remove_managed_hooks(settings_path) {
|
|
176
|
+
if (!fs.existsSync(settings_path))
|
|
177
|
+
return { changed: false, events: [] };
|
|
178
|
+
return _with_lock(settings_path, () => {
|
|
179
|
+
const settings = _read_settings(settings_path);
|
|
180
|
+
const hooks = settings['hooks'];
|
|
181
|
+
if (typeof hooks !== 'object' || hooks === null || Array.isArray(hooks)) {
|
|
182
|
+
return { changed: false, events: [] };
|
|
183
|
+
}
|
|
184
|
+
const hooksRec = hooks;
|
|
185
|
+
const touched = [];
|
|
186
|
+
for (const [native, groups] of Object.entries(hooksRec)) {
|
|
187
|
+
if (!Array.isArray(groups))
|
|
188
|
+
continue;
|
|
189
|
+
const kept = groups.filter((g) => !_is_managed_group(g));
|
|
190
|
+
if (kept.length !== groups.length) {
|
|
191
|
+
touched.push(native);
|
|
192
|
+
if (kept.length === 0) {
|
|
193
|
+
delete hooksRec[native];
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
hooksRec[native] = kept;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (touched.length === 0)
|
|
201
|
+
return { changed: false, events: [] };
|
|
202
|
+
if (Object.keys(hooksRec).length === 0) {
|
|
203
|
+
delete settings['hooks'];
|
|
204
|
+
}
|
|
205
|
+
atomicWriteFile(settings_path, JSON.stringify(settings, null, 2) + '\n');
|
|
206
|
+
return { changed: true, events: touched };
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=claude_settings_hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude_settings_hooks.js","sourceRoot":"","sources":["../../../src/scripts/_lib/claude_settings_hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared `model_tier` → native Claude `model:` mapping (ADR-034 / ADR-035).
|
|
3
|
+
*
|
|
4
|
+
* Ported from the retired Python `src/scripts/_lib/model_tier.py` (ADR-200 —
|
|
5
|
+
* Python→TS migration, Phase 2 / Wave 1). Public API mirrors the
|
|
6
|
+
* Python module exactly (snake_case kept deliberately).
|
|
7
|
+
*
|
|
8
|
+
* Single source of truth for the tier→model rewrite, used by **both**
|
|
9
|
+
* render paths so they can never drift:
|
|
10
|
+
*
|
|
11
|
+
* - the repo generator (`condense.py generate_claude_skills`), which
|
|
12
|
+
* builds the package's own `.claude/skills/` tree, and
|
|
13
|
+
* - the consumer install finalizer
|
|
14
|
+
* (`install.py finalize_claude_model_tiers`), which rewrites the
|
|
15
|
+
* installed `.claude/skills/` tree so Claude Code performs the
|
|
16
|
+
* per-turn model switch on a consumer with `model.auto_switch: auto`.
|
|
17
|
+
*
|
|
18
|
+
* Only `auto` triggers the rewrite — `suggest` / `off` keep skills as
|
|
19
|
+
* pure symlinks so the package never silently overrides a user's
|
|
20
|
+
* explicit `/model` choice. A skill with `model_tier: inherit` (or no
|
|
21
|
+
* `model_tier`) is never rewritten.
|
|
22
|
+
*/
|
|
23
|
+
import fs from "node:fs";
|
|
24
|
+
// Tier → Claude model. The ONLY per-vendor mapping the package maintains
|
|
25
|
+
// (ADR-035 § 3); other agents resolve the tier band to their own line-up.
|
|
26
|
+
export const TIER_TO_CLAUDE_MODEL = {
|
|
27
|
+
high: "opus",
|
|
28
|
+
medium: "sonnet",
|
|
29
|
+
lite: "haiku",
|
|
30
|
+
};
|
|
31
|
+
// Matches a `model_tier: <tier>` frontmatter line (quoted or bare).
|
|
32
|
+
export const MODEL_TIER_RE = /^model_tier:\s*"?([a-z]+)"?\s*$/m;
|
|
33
|
+
/** Return the `model_tier` frontmatter value, or null if absent/unparsable. */
|
|
34
|
+
export function read_model_tier(skill_md) {
|
|
35
|
+
if (!fs.existsSync(skill_md))
|
|
36
|
+
return null;
|
|
37
|
+
// Buffer.toString("utf8") substitutes U+FFFD for invalid sequences —
|
|
38
|
+
// same tolerance as Python's errors="replace".
|
|
39
|
+
const text = fs.readFileSync(skill_md).toString("utf-8");
|
|
40
|
+
if (!text.startsWith("---\n"))
|
|
41
|
+
return null;
|
|
42
|
+
const end = text.indexOf("\n---\n", 4);
|
|
43
|
+
if (end === -1)
|
|
44
|
+
return null;
|
|
45
|
+
const m = MODEL_TIER_RE.exec(text.slice(4, end));
|
|
46
|
+
return m ? m[1] : null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Rewrite the first `model_tier: <tier>` line to native `model: <mapped>`.
|
|
50
|
+
*
|
|
51
|
+
* The rest of the SKILL.md stays byte-identical. `tier` must be a key
|
|
52
|
+
* of `TIER_TO_CLAUDE_MODEL` (callers gate on that) — an unknown tier
|
|
53
|
+
* throws, mirroring Python's `KeyError`.
|
|
54
|
+
*/
|
|
55
|
+
export function render_native_model_md(text, tier) {
|
|
56
|
+
const model = TIER_TO_CLAUDE_MODEL[tier];
|
|
57
|
+
if (model === undefined) {
|
|
58
|
+
// Python raises KeyError('<tier>') here.
|
|
59
|
+
throw new Error(`'${tier}'`);
|
|
60
|
+
}
|
|
61
|
+
// Non-global regex → replaces the first match only (re.sub count=1).
|
|
62
|
+
return text.replace(MODEL_TIER_RE, `model: ${model}`);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=model_tier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model_tier.js","sourceRoot":"","sources":["../../../src/scripts/_lib/model_tier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,yEAAyE;AACzE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,oEAAoE;AACpE,MAAM,CAAC,MAAM,aAAa,GAAG,kCAAkC,CAAC;AAEhE,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,qEAAqE;IACrE,+CAA+C;IAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACvC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAY,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,IAAY;IAC/D,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,yCAAyC;QACzC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,qEAAqE;IACrE,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verbosity-aware print router for scripts.
|
|
3
|
+
*
|
|
4
|
+
* Ported from the retired Python `src/scripts/_lib/script_output.py` (ADR-200,
|
|
5
|
+
* Phase 2 / Wave 2b). Mirrors the Python module's public API exactly —
|
|
6
|
+
* same exported snake_case names, same resolution order, same level
|
|
7
|
+
* semantics, same output channels (stdout vs stderr), same module-level
|
|
8
|
+
* caching, same env-var inheritance. Single source of truth for how
|
|
9
|
+
* maintenance scripts emit progress, success, warnings, and errors.
|
|
10
|
+
*
|
|
11
|
+
* Resolution order (first wins):
|
|
12
|
+
* 1. AGENT_SCRIPT_VERBOSITY env var (silent | minimal | verbose)
|
|
13
|
+
* 2. SCRIPT_OUTPUT_VERBOSE=1 alias (== verbose)
|
|
14
|
+
* 3. .agent-settings.yml verbosity.script_output
|
|
15
|
+
* 4. Default: minimal
|
|
16
|
+
*
|
|
17
|
+
* Once resolved, the level is exported back into AGENT_SCRIPT_VERBOSITY
|
|
18
|
+
* so child processes inherit the same level (Phase 10.1c). Explicit
|
|
19
|
+
* --quiet flags on the child still win at the call site.
|
|
20
|
+
*
|
|
21
|
+
* Levels:
|
|
22
|
+
* silent = stderr only; success() drops; info() drops; warn() drops
|
|
23
|
+
* minimal = success() collapsed to one end-of-run summary; info() drops
|
|
24
|
+
* verbose = pre-Phase-10 behaviour, every call prints
|
|
25
|
+
*
|
|
26
|
+
* error() always writes to stderr regardless of level. Iron-Law surfaces
|
|
27
|
+
* (release confirms, install secrets prompts) bypass this module and use
|
|
28
|
+
* plain print() so they cannot be silenced.
|
|
29
|
+
*/
|
|
30
|
+
import { load_agent_settings } from './agent_settings.js';
|
|
31
|
+
export const VALID_LEVELS = ['silent', 'minimal', 'verbose'];
|
|
32
|
+
export const DEFAULT_LEVEL = 'minimal';
|
|
33
|
+
export const ENV_VAR = 'AGENT_SCRIPT_VERBOSITY';
|
|
34
|
+
export const ENV_ALIAS = 'SCRIPT_OUTPUT_VERBOSE';
|
|
35
|
+
export const SETTINGS_FILE = '.agent-settings.yml';
|
|
36
|
+
let _resolved_level = null;
|
|
37
|
+
const _pending_summary = [];
|
|
38
|
+
/**
|
|
39
|
+
* Read `verbosity.script_output` from `.agent-settings.yml`.
|
|
40
|
+
*
|
|
41
|
+
* Returns `null` when the file is missing, YAML is unparseable, or the
|
|
42
|
+
* key is absent. Errors fall through to the default level. Goes through
|
|
43
|
+
* the centralized loader so the tolerance contract — missing file,
|
|
44
|
+
* malformed YAML — degrades uniformly across scripts.
|
|
45
|
+
* `verbosity.script_output` is not on the user-global whitelist, so a
|
|
46
|
+
* value there is silently ignored; the project file is the only source
|
|
47
|
+
* for this knob.
|
|
48
|
+
*/
|
|
49
|
+
function _read_settings_level(settings_path) {
|
|
50
|
+
const data = load_agent_settings({ project_path: settings_path });
|
|
51
|
+
const section = data['verbosity'];
|
|
52
|
+
if (typeof section !== 'object' || section === null || Array.isArray(section)) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const value = section['script_output'];
|
|
56
|
+
if (typeof value === 'string' && VALID_LEVELS.includes(value)) {
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Resolve and cache the active verbosity level.
|
|
63
|
+
*
|
|
64
|
+
* First call wins; subsequent calls return the cached value so the
|
|
65
|
+
* process is internally consistent. Tests reset via `reset_level()`.
|
|
66
|
+
*/
|
|
67
|
+
export function resolve_level(settings_path = null) {
|
|
68
|
+
if (_resolved_level !== null) {
|
|
69
|
+
return _resolved_level;
|
|
70
|
+
}
|
|
71
|
+
const env_value = (process.env[ENV_VAR] ?? '').trim().toLowerCase();
|
|
72
|
+
if (VALID_LEVELS.includes(env_value)) {
|
|
73
|
+
_resolved_level = env_value;
|
|
74
|
+
}
|
|
75
|
+
else if ((process.env[ENV_ALIAS] ?? '').trim() === '1') {
|
|
76
|
+
_resolved_level = 'verbose';
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const p = settings_path ?? SETTINGS_FILE;
|
|
80
|
+
_resolved_level = _read_settings_level(p) ?? DEFAULT_LEVEL;
|
|
81
|
+
}
|
|
82
|
+
// Inheritance: export resolved level so child processes see it.
|
|
83
|
+
process.env[ENV_VAR] = _resolved_level;
|
|
84
|
+
return _resolved_level;
|
|
85
|
+
}
|
|
86
|
+
/** Clear the cached level. Test helper. */
|
|
87
|
+
export function reset_level() {
|
|
88
|
+
_resolved_level = null;
|
|
89
|
+
_pending_summary.length = 0;
|
|
90
|
+
}
|
|
91
|
+
/** Per-step progress note. Drops at silent + minimal. */
|
|
92
|
+
export function info(message) {
|
|
93
|
+
if (resolve_level() === 'verbose') {
|
|
94
|
+
process.stdout.write(`${message}\n`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Per-step success. At minimal collected for end-of-run summary; at
|
|
99
|
+
* verbose printed immediately; at silent dropped.
|
|
100
|
+
*/
|
|
101
|
+
export function success(message) {
|
|
102
|
+
const level = resolve_level();
|
|
103
|
+
if (level === 'verbose') {
|
|
104
|
+
process.stdout.write(`${message}\n`);
|
|
105
|
+
}
|
|
106
|
+
else if (level === 'minimal') {
|
|
107
|
+
_pending_summary.push(message);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** Warning. Stderr at all levels except silent. */
|
|
111
|
+
export function warn(message) {
|
|
112
|
+
if (resolve_level() !== 'silent') {
|
|
113
|
+
process.stderr.write(`${message}\n`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Error. Always stderr regardless of level. */
|
|
117
|
+
export function error(message) {
|
|
118
|
+
process.stderr.write(`${message}\n`);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Emit the pending `success()` summary at end-of-run.
|
|
122
|
+
*
|
|
123
|
+
* No-op at verbose (already printed) and silent (suppressed). Use the
|
|
124
|
+
* explicit `headline` arg to override the auto-pick.
|
|
125
|
+
*/
|
|
126
|
+
export function flush_summary(headline = null) {
|
|
127
|
+
const level = resolve_level();
|
|
128
|
+
if (level !== 'minimal' || _pending_summary.length === 0) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (headline) {
|
|
132
|
+
process.stdout.write(`${headline}\n`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// Default: print the last collected line as the headline.
|
|
136
|
+
process.stdout.write(`${_pending_summary[_pending_summary.length - 1]}\n`);
|
|
137
|
+
}
|
|
138
|
+
_pending_summary.length = 0;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=script_output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script_output.js","sourceRoot":"","sources":["../../../src/scripts/_lib/script_output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,mBAAmB,EAAsB,MAAM,qBAAqB,CAAC;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAsB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,wBAAwB,CAAC;AAChD,MAAM,CAAC,MAAM,SAAS,GAAG,uBAAuB,CAAC;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAEnD,IAAI,eAAe,GAAkB,IAAI,CAAC;AAC1C,MAAM,gBAAgB,GAAa,EAAE,CAAC;AAEtC;;;;;;;;;;GAUG;AACH,SAAS,oBAAoB,CAAC,aAAqB;IAC/C,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;IAClE,MAAM,OAAO,GAAkB,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,KAAK,GAAmB,OAAyC,CAAC,eAAe,CAAC,CAAC;IACzF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,gBAA+B,IAAI;IAC7D,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpE,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,eAAe,GAAG,SAAS,CAAC;IAChC,CAAC;SAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;QACvD,eAAe,GAAG,SAAS,CAAC;IAChC,CAAC;SAAM,CAAC;QACJ,MAAM,CAAC,GAAG,aAAa,IAAI,aAAa,CAAC;QACzC,eAAe,GAAG,oBAAoB,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC;IAC/D,CAAC;IAED,gEAAgE;IAChE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC;IACvC,OAAO,eAAe,CAAC;AAC3B,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,WAAW;IACvB,eAAe,GAAG,IAAI,CAAC;IACvB,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,IAAI,CAAC,OAAe;IAChC,IAAI,aAAa,EAAE,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACzC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe;IACnC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;AACL,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,IAAI,CAAC,OAAe;IAChC,IAAI,aAAa,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACzC,CAAC;AACL,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,KAAK,CAAC,OAAe;IACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,WAA0B,IAAI;IACxD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO;IACX,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACJ,0DAA0D;QAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAW,IAAI,CAAC,CAAC;IACzF,CAAC;IACD,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,CAAC"}
|