@madebywild/agent-harness-framework 0.9.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +154 -10
- package/dist/cli/adapters/commander.d.ts.map +1 -1
- package/dist/cli/adapters/commander.js +16 -0
- package/dist/cli/adapters/commander.js.map +1 -1
- package/dist/cli/adapters/interactive.d.ts.map +1 -1
- package/dist/cli/adapters/interactive.js +20 -0
- package/dist/cli/adapters/interactive.js.map +1 -1
- package/dist/cli/command-registry.d.ts.map +1 -1
- package/dist/cli/command-registry.js +20 -1
- package/dist/cli/command-registry.js.map +1 -1
- package/dist/cli/contracts.d.ts +1 -1
- package/dist/cli/contracts.d.ts.map +1 -1
- package/dist/cli/handlers/entities.d.ts +4 -0
- package/dist/cli/handlers/entities.d.ts.map +1 -1
- package/dist/cli/handlers/entities.js +17 -0
- package/dist/cli/handlers/entities.js.map +1 -1
- package/dist/cli/handlers/registry.d.ts.map +1 -1
- package/dist/cli/handlers/registry.js.map +1 -1
- package/dist/engine/entities.d.ts +3 -0
- package/dist/engine/entities.d.ts.map +1 -1
- package/dist/engine/entities.js +86 -9
- package/dist/engine/entities.js.map +1 -1
- package/dist/engine/utils.d.ts.map +1 -1
- package/dist/engine/utils.js +3 -0
- package/dist/engine/utils.js.map +1 -1
- package/dist/engine.d.ts +3 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +10 -2
- package/dist/engine.js.map +1 -1
- package/dist/entity-registries.d.ts +5 -1
- package/dist/entity-registries.d.ts.map +1 -1
- package/dist/entity-registries.js +46 -15
- package/dist/entity-registries.js.map +1 -1
- package/dist/env.d.ts +39 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +175 -0
- package/dist/env.js.map +1 -0
- package/dist/hooks.d.ts +15 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +321 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +201 -29
- package/dist/loader.js.map +1 -1
- package/dist/paths.d.ts +5 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +9 -0
- package/dist/paths.js.map +1 -1
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +27 -0
- package/dist/planner.js.map +1 -1
- package/dist/provider-adapters/claude.d.ts.map +1 -1
- package/dist/provider-adapters/claude.js +18 -1
- package/dist/provider-adapters/claude.js.map +1 -1
- package/dist/provider-adapters/codex.d.ts.map +1 -1
- package/dist/provider-adapters/codex.js +19 -3
- package/dist/provider-adapters/codex.js.map +1 -1
- package/dist/provider-adapters/constants.d.ts +3 -0
- package/dist/provider-adapters/constants.d.ts.map +1 -1
- package/dist/provider-adapters/constants.js +3 -0
- package/dist/provider-adapters/constants.js.map +1 -1
- package/dist/provider-adapters/copilot.d.ts.map +1 -1
- package/dist/provider-adapters/copilot.js +18 -1
- package/dist/provider-adapters/copilot.js.map +1 -1
- package/dist/provider-adapters/hooks.d.ts +6 -0
- package/dist/provider-adapters/hooks.d.ts.map +1 -0
- package/dist/provider-adapters/hooks.js +266 -0
- package/dist/provider-adapters/hooks.js.map +1 -0
- package/dist/provider-adapters/types.d.ts +1 -0
- package/dist/provider-adapters/types.d.ts.map +1 -1
- package/dist/registry-validator.d.ts.map +1 -1
- package/dist/registry-validator.js +25 -0
- package/dist/registry-validator.js.map +1 -1
- package/dist/repository.d.ts +1 -1
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +21 -4
- package/dist/repository.js.map +1 -1
- package/dist/types.d.ts +40 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -1
- package/dist/types.js.map +1 -1
- package/package.json +4 -3
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { HarnessPaths } from "./paths.js";
|
|
2
|
+
import type { Diagnostic } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Parse a dotenv-format string into key-value pairs.
|
|
5
|
+
* - Lines starting with # are comments
|
|
6
|
+
* - Empty lines are skipped
|
|
7
|
+
* - Format: KEY=value (value can be unquoted, double-quoted, or single-quoted)
|
|
8
|
+
* - Double-quoted values support \n, \t, \\, \" escapes
|
|
9
|
+
* - Single-quoted values are literal (no escape processing)
|
|
10
|
+
* - Unquoted values are trimmed and stop at inline # comments
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseEnvFile(content: string): Map<string, string>;
|
|
13
|
+
/**
|
|
14
|
+
* Load env vars from multiple sources with precedence:
|
|
15
|
+
* 1. .harness/.env (highest priority)
|
|
16
|
+
* 2. .env.harness (at project root)
|
|
17
|
+
* 3. process.env (lowest priority, fallback for CI/CD — handled in substituteEnvVars)
|
|
18
|
+
*
|
|
19
|
+
* Higher-priority sources override lower-priority ones.
|
|
20
|
+
* Missing files are silently skipped.
|
|
21
|
+
*/
|
|
22
|
+
export declare function loadEnvVars(paths: HarnessPaths): Promise<Map<string, string>>;
|
|
23
|
+
/**
|
|
24
|
+
* Push ENV_VAR_UNRESOLVED warning diagnostics for each unresolved placeholder key.
|
|
25
|
+
*/
|
|
26
|
+
export declare function pushUnresolvedEnvDiagnostics(unresolvedKeys: string[], diagnostics: Diagnostic[], filePath: string, extra?: Partial<Diagnostic>): void;
|
|
27
|
+
/**
|
|
28
|
+
* Replace {{PLACEHOLDER}} patterns in text with env var values.
|
|
29
|
+
* Pattern: \{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}
|
|
30
|
+
* Returns the substituted text, set of used keys, and array of unresolved placeholder names.
|
|
31
|
+
*
|
|
32
|
+
* When a placeholder key is not found in `vars`, process.env is checked as a fallback.
|
|
33
|
+
*/
|
|
34
|
+
export declare function substituteEnvVars(text: string, vars: Map<string, string>): {
|
|
35
|
+
result: string;
|
|
36
|
+
usedKeys: Set<string>;
|
|
37
|
+
unresolvedKeys: string[];
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA4DjE;AAiDD;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAmBnF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,MAAM,EAAE,EACxB,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAC1B,IAAI,CAUN;AAID;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACxB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,CAerE"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { readTextIfExists } from "./utils.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parse a dotenv-format string into key-value pairs.
|
|
4
|
+
* - Lines starting with # are comments
|
|
5
|
+
* - Empty lines are skipped
|
|
6
|
+
* - Format: KEY=value (value can be unquoted, double-quoted, or single-quoted)
|
|
7
|
+
* - Double-quoted values support \n, \t, \\, \" escapes
|
|
8
|
+
* - Single-quoted values are literal (no escape processing)
|
|
9
|
+
* - Unquoted values are trimmed and stop at inline # comments
|
|
10
|
+
*/
|
|
11
|
+
export function parseEnvFile(content) {
|
|
12
|
+
const vars = new Map();
|
|
13
|
+
const lines = content.split(/\r?\n/);
|
|
14
|
+
for (const line of lines) {
|
|
15
|
+
const trimmed = line.trim();
|
|
16
|
+
// Skip empty lines and comments
|
|
17
|
+
if (!trimmed || trimmed.startsWith("#")) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const equalsIndex = trimmed.indexOf("=");
|
|
21
|
+
if (equalsIndex === -1) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
let key = trimmed.slice(0, equalsIndex).trim();
|
|
25
|
+
if (!key) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
// Strip optional `export` prefix for shell-compatible .env files
|
|
29
|
+
if (key.startsWith("export ")) {
|
|
30
|
+
key = key.slice(7).trim();
|
|
31
|
+
if (!key) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const rawValue = trimmed.slice(equalsIndex + 1);
|
|
36
|
+
if (rawValue.startsWith('"')) {
|
|
37
|
+
// Double-quoted value: find matching closing quote
|
|
38
|
+
const closingIndex = findClosingDoubleQuote(rawValue, 1);
|
|
39
|
+
if (closingIndex !== -1) {
|
|
40
|
+
const inner = rawValue.slice(1, closingIndex);
|
|
41
|
+
vars.set(key, processDoubleQuotedEscapes(inner));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// No closing quote — treat as unquoted
|
|
45
|
+
vars.set(key, rawValue.trim());
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else if (rawValue.startsWith("'")) {
|
|
49
|
+
// Single-quoted value: find matching closing quote (literal, no escapes)
|
|
50
|
+
const closingIndex = rawValue.indexOf("'", 1);
|
|
51
|
+
if (closingIndex !== -1) {
|
|
52
|
+
vars.set(key, rawValue.slice(1, closingIndex));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// No closing quote — treat as unquoted
|
|
56
|
+
vars.set(key, rawValue.trim());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Unquoted value: trim and stop at inline # comments
|
|
61
|
+
const commentIndex = rawValue.indexOf(" #");
|
|
62
|
+
const value = commentIndex !== -1 ? rawValue.slice(0, commentIndex) : rawValue;
|
|
63
|
+
vars.set(key, value.trim());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return vars;
|
|
67
|
+
}
|
|
68
|
+
function findClosingDoubleQuote(text, startIndex) {
|
|
69
|
+
let i = startIndex;
|
|
70
|
+
while (i < text.length) {
|
|
71
|
+
if (text[i] === "\\") {
|
|
72
|
+
i += 2; // skip escaped char
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (text[i] === '"') {
|
|
76
|
+
return i;
|
|
77
|
+
}
|
|
78
|
+
i++;
|
|
79
|
+
}
|
|
80
|
+
return -1;
|
|
81
|
+
}
|
|
82
|
+
function processDoubleQuotedEscapes(value) {
|
|
83
|
+
let result = "";
|
|
84
|
+
let i = 0;
|
|
85
|
+
while (i < value.length) {
|
|
86
|
+
if (value[i] === "\\" && i + 1 < value.length) {
|
|
87
|
+
const next = value[i + 1];
|
|
88
|
+
switch (next) {
|
|
89
|
+
case "n":
|
|
90
|
+
result += "\n";
|
|
91
|
+
break;
|
|
92
|
+
case "t":
|
|
93
|
+
result += "\t";
|
|
94
|
+
break;
|
|
95
|
+
case "\\":
|
|
96
|
+
result += "\\";
|
|
97
|
+
break;
|
|
98
|
+
case '"':
|
|
99
|
+
result += '"';
|
|
100
|
+
break;
|
|
101
|
+
default:
|
|
102
|
+
result += `\\${next}`;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
i += 2;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
result += value[i];
|
|
109
|
+
i++;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Load env vars from multiple sources with precedence:
|
|
116
|
+
* 1. .harness/.env (highest priority)
|
|
117
|
+
* 2. .env.harness (at project root)
|
|
118
|
+
* 3. process.env (lowest priority, fallback for CI/CD — handled in substituteEnvVars)
|
|
119
|
+
*
|
|
120
|
+
* Higher-priority sources override lower-priority ones.
|
|
121
|
+
* Missing files are silently skipped.
|
|
122
|
+
*/
|
|
123
|
+
export async function loadEnvVars(paths) {
|
|
124
|
+
const merged = new Map();
|
|
125
|
+
// Load sources in order from lowest to highest priority
|
|
126
|
+
const sources = [paths.rootEnvFile, paths.envFile];
|
|
127
|
+
for (const filePath of sources) {
|
|
128
|
+
const text = await readTextIfExists(filePath);
|
|
129
|
+
if (text === null) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
const parsed = parseEnvFile(text);
|
|
133
|
+
for (const [key, value] of parsed) {
|
|
134
|
+
merged.set(key, value);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return merged;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Push ENV_VAR_UNRESOLVED warning diagnostics for each unresolved placeholder key.
|
|
141
|
+
*/
|
|
142
|
+
export function pushUnresolvedEnvDiagnostics(unresolvedKeys, diagnostics, filePath, extra) {
|
|
143
|
+
for (const key of unresolvedKeys) {
|
|
144
|
+
diagnostics.push({
|
|
145
|
+
code: "ENV_VAR_UNRESOLVED",
|
|
146
|
+
severity: "warning",
|
|
147
|
+
message: `Unresolved env placeholder '{{${key}}}' in '${filePath}'`,
|
|
148
|
+
path: filePath,
|
|
149
|
+
...extra,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const PLACEHOLDER_RE = /\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g;
|
|
154
|
+
/**
|
|
155
|
+
* Replace {{PLACEHOLDER}} patterns in text with env var values.
|
|
156
|
+
* Pattern: \{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}
|
|
157
|
+
* Returns the substituted text, set of used keys, and array of unresolved placeholder names.
|
|
158
|
+
*
|
|
159
|
+
* When a placeholder key is not found in `vars`, process.env is checked as a fallback.
|
|
160
|
+
*/
|
|
161
|
+
export function substituteEnvVars(text, vars) {
|
|
162
|
+
const usedKeys = new Set();
|
|
163
|
+
const unresolvedSet = new Set();
|
|
164
|
+
const result = text.replace(PLACEHOLDER_RE, (match, key) => {
|
|
165
|
+
const value = vars.get(key) ?? process.env[key];
|
|
166
|
+
if (value !== undefined) {
|
|
167
|
+
usedKeys.add(key);
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
170
|
+
unresolvedSet.add(key);
|
|
171
|
+
return match;
|
|
172
|
+
});
|
|
173
|
+
return { result, usedKeys, unresolvedKeys: [...unresolvedSet] };
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,gCAAgC;QAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QAED,iEAAiE;QACjE,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAEhD,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,mDAAmD;YACnD,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACzD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,uCAAuC;gBACvC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,yEAAyE;YACzE,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,uCAAuC;gBACvC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,qDAAqD;YACrD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC/E,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY,EAAE,UAAkB;IAC9D,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrB,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB;YAC5B,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACpB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,CAAC,EAAE,CAAC;IACN,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAa;IAC/C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,GAAG;oBACN,MAAM,IAAI,IAAI,CAAC;oBACf,MAAM;gBACR,KAAK,GAAG;oBACN,MAAM,IAAI,IAAI,CAAC;oBACf,MAAM;gBACR,KAAK,IAAI;oBACP,MAAM,IAAI,IAAI,CAAC;oBACf,MAAM;gBACR,KAAK,GAAG;oBACN,MAAM,IAAI,GAAG,CAAC;oBACd,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,IAAI,EAAE,CAAC;oBACtB,MAAM;YACV,CAAC;YACD,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAmB;IACnD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,wDAAwD;IACxD,MAAM,OAAO,GAAa,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAE7D,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,cAAwB,EACxB,WAAyB,EACzB,QAAgB,EAChB,KAA2B;IAE3B,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,iCAAiC,GAAG,WAAW,QAAQ,GAAG;YACnE,IAAI,EAAE,QAAQ;YACd,GAAG,KAAK;SACT,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAG,mCAAmC,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,IAAyB;IAEzB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAExC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC;AAClE,CAAC"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CanonicalHook, CanonicalHookHandler, CanonicalHookMode, Diagnostic } from "./types.js";
|
|
2
|
+
export declare const CANONICAL_HOOK_EVENTS: readonly ["session_start", "session_end", "prompt_submit", "pre_tool_use", "permission_request", "post_tool_use", "post_tool_failure", "notification", "subagent_start", "subagent_stop", "stop", "stop_failure", "teammate_idle", "task_completed", "instructions_loaded", "config_change", "worktree_create", "worktree_remove", "pre_compact", "post_compact", "elicitation", "elicitation_result", "error", "turn_complete"];
|
|
3
|
+
export type CanonicalHookEvent = (typeof CANONICAL_HOOK_EVENTS)[number];
|
|
4
|
+
export interface ParsedCanonicalHookDocument {
|
|
5
|
+
mode: CanonicalHookMode;
|
|
6
|
+
events: Partial<Record<CanonicalHookEvent, CanonicalHookHandler[]>>;
|
|
7
|
+
}
|
|
8
|
+
export declare function parseCanonicalHookDocument(input: unknown, sourcePath: string, entityId: string): {
|
|
9
|
+
canonical?: ParsedCanonicalHookDocument;
|
|
10
|
+
diagnostics: Diagnostic[];
|
|
11
|
+
};
|
|
12
|
+
export declare function canonicalHookHasErrors(diagnostics: Diagnostic[]): boolean;
|
|
13
|
+
export declare function stableHookCommandArray(command: string | string[]): string[];
|
|
14
|
+
export declare function withHookId(hook: ParsedCanonicalHookDocument, id: string): CanonicalHook;
|
|
15
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEb,oBAAoB,EACpB,iBAAiB,EAEjB,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,qBAAqB,kaAyBxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAKxE,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;CACrE;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf;IAAE,SAAS,CAAC,EAAE,2BAA2B,CAAC;IAAC,WAAW,EAAE,UAAU,EAAE,CAAA;CAAE,CA4BxE;AAiUD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAEzE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAM3E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,2BAA2B,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,CAMvF"}
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
export const CANONICAL_HOOK_EVENTS = [
|
|
2
|
+
"session_start",
|
|
3
|
+
"session_end",
|
|
4
|
+
"prompt_submit",
|
|
5
|
+
"pre_tool_use",
|
|
6
|
+
"permission_request",
|
|
7
|
+
"post_tool_use",
|
|
8
|
+
"post_tool_failure",
|
|
9
|
+
"notification",
|
|
10
|
+
"subagent_start",
|
|
11
|
+
"subagent_stop",
|
|
12
|
+
"stop",
|
|
13
|
+
"stop_failure",
|
|
14
|
+
"teammate_idle",
|
|
15
|
+
"task_completed",
|
|
16
|
+
"instructions_loaded",
|
|
17
|
+
"config_change",
|
|
18
|
+
"worktree_create",
|
|
19
|
+
"worktree_remove",
|
|
20
|
+
"pre_compact",
|
|
21
|
+
"post_compact",
|
|
22
|
+
"elicitation",
|
|
23
|
+
"elicitation_result",
|
|
24
|
+
"error",
|
|
25
|
+
"turn_complete",
|
|
26
|
+
];
|
|
27
|
+
const HOOK_EVENT_SET = new Set(CANONICAL_HOOK_EVENTS);
|
|
28
|
+
const ENV_PLACEHOLDER_TOKEN_RE = /^\{\{[a-zA-Z_][a-zA-Z0-9_]*\}\}$/u;
|
|
29
|
+
export function parseCanonicalHookDocument(input, sourcePath, entityId) {
|
|
30
|
+
const diagnostics = [];
|
|
31
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) {
|
|
32
|
+
diagnostics.push({
|
|
33
|
+
code: "HOOK_JSON_INVALID",
|
|
34
|
+
severity: "error",
|
|
35
|
+
message: `Hook '${entityId}' must be a JSON object`,
|
|
36
|
+
path: sourcePath,
|
|
37
|
+
entityId,
|
|
38
|
+
});
|
|
39
|
+
return { diagnostics };
|
|
40
|
+
}
|
|
41
|
+
const objectValue = input;
|
|
42
|
+
const mode = parseMode(objectValue.mode, sourcePath, entityId, diagnostics);
|
|
43
|
+
const events = parseEvents(objectValue, sourcePath, entityId, diagnostics);
|
|
44
|
+
if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
|
|
45
|
+
return { diagnostics };
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
canonical: {
|
|
49
|
+
mode,
|
|
50
|
+
events,
|
|
51
|
+
},
|
|
52
|
+
diagnostics,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function parseMode(input, sourcePath, entityId, diagnostics) {
|
|
56
|
+
if (typeof input === "undefined") {
|
|
57
|
+
return "strict";
|
|
58
|
+
}
|
|
59
|
+
if (input === "strict" || input === "best_effort") {
|
|
60
|
+
return input;
|
|
61
|
+
}
|
|
62
|
+
diagnostics.push({
|
|
63
|
+
code: "HOOK_MODE_INVALID",
|
|
64
|
+
severity: "error",
|
|
65
|
+
message: `Hook '${entityId}' has invalid mode; expected 'strict' or 'best_effort'`,
|
|
66
|
+
path: sourcePath,
|
|
67
|
+
entityId,
|
|
68
|
+
});
|
|
69
|
+
return "strict";
|
|
70
|
+
}
|
|
71
|
+
function parseEvents(input, sourcePath, entityId, diagnostics) {
|
|
72
|
+
const output = {};
|
|
73
|
+
const candidate = input.events;
|
|
74
|
+
if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) {
|
|
75
|
+
diagnostics.push({
|
|
76
|
+
code: "HOOK_EVENTS_INVALID",
|
|
77
|
+
severity: "error",
|
|
78
|
+
message: `Hook '${entityId}' must define an object at 'events'`,
|
|
79
|
+
path: sourcePath,
|
|
80
|
+
entityId,
|
|
81
|
+
});
|
|
82
|
+
return output;
|
|
83
|
+
}
|
|
84
|
+
const eventsObject = candidate;
|
|
85
|
+
for (const [eventName, handlersValue] of Object.entries(eventsObject)) {
|
|
86
|
+
if (!HOOK_EVENT_SET.has(eventName)) {
|
|
87
|
+
diagnostics.push({
|
|
88
|
+
code: "HOOK_EVENT_UNKNOWN",
|
|
89
|
+
severity: "error",
|
|
90
|
+
message: `Hook '${entityId}' uses unsupported canonical event '${eventName}'`,
|
|
91
|
+
path: sourcePath,
|
|
92
|
+
entityId,
|
|
93
|
+
});
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (!Array.isArray(handlersValue)) {
|
|
97
|
+
diagnostics.push({
|
|
98
|
+
code: "HOOK_EVENT_INVALID",
|
|
99
|
+
severity: "error",
|
|
100
|
+
message: `Hook '${entityId}' event '${eventName}' must be an array`,
|
|
101
|
+
path: sourcePath,
|
|
102
|
+
entityId,
|
|
103
|
+
});
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const parsedHandlers = [];
|
|
107
|
+
handlersValue.forEach((handlerValue, index) => {
|
|
108
|
+
const parsed = parseHandler(handlerValue, eventName, sourcePath, entityId, index, diagnostics);
|
|
109
|
+
if (parsed) {
|
|
110
|
+
parsedHandlers.push(parsed);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
if (parsedHandlers.length > 0) {
|
|
114
|
+
output[eventName] = parsedHandlers;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return output;
|
|
118
|
+
}
|
|
119
|
+
function parseHandler(input, eventName, sourcePath, entityId, index, diagnostics) {
|
|
120
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) {
|
|
121
|
+
diagnostics.push({
|
|
122
|
+
code: "HOOK_HANDLER_INVALID",
|
|
123
|
+
severity: "error",
|
|
124
|
+
message: `Hook '${entityId}' event '${eventName}' handler #${index + 1} must be an object`,
|
|
125
|
+
path: sourcePath,
|
|
126
|
+
entityId,
|
|
127
|
+
});
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
const objectValue = input;
|
|
131
|
+
const type = objectValue.type;
|
|
132
|
+
if (type === "command") {
|
|
133
|
+
return parseCommandHandler(objectValue, eventName, sourcePath, entityId, index, diagnostics);
|
|
134
|
+
}
|
|
135
|
+
if (type === "notify") {
|
|
136
|
+
return parseNotifyHandler(objectValue, eventName, sourcePath, entityId, index, diagnostics);
|
|
137
|
+
}
|
|
138
|
+
diagnostics.push({
|
|
139
|
+
code: "HOOK_HANDLER_TYPE_INVALID",
|
|
140
|
+
severity: "error",
|
|
141
|
+
message: `Hook '${entityId}' event '${eventName}' handler #${index + 1} has invalid type`,
|
|
142
|
+
path: sourcePath,
|
|
143
|
+
entityId,
|
|
144
|
+
});
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
function parseCommandHandler(input, eventName, sourcePath, entityId, index, diagnostics) {
|
|
148
|
+
const matcher = asOptionalString(input.matcher);
|
|
149
|
+
const command = asOptionalString(input.command);
|
|
150
|
+
const windows = asOptionalString(input.windows);
|
|
151
|
+
const linux = asOptionalString(input.linux);
|
|
152
|
+
const osx = asOptionalString(input.osx);
|
|
153
|
+
const bash = asOptionalString(input.bash);
|
|
154
|
+
const powershell = asOptionalString(input.powershell);
|
|
155
|
+
const cwd = asOptionalString(input.cwd);
|
|
156
|
+
const timeoutSec = asOptionalPositiveNumber(input.timeoutSec);
|
|
157
|
+
const timeout = asOptionalPositiveNumber(input.timeout);
|
|
158
|
+
const timeoutSecIsPlaceholder = isEnvPlaceholderToken(input.timeoutSec);
|
|
159
|
+
const timeoutIsPlaceholder = isEnvPlaceholderToken(input.timeout);
|
|
160
|
+
const env = asOptionalStringMap(input.env);
|
|
161
|
+
if (!command && !windows && !linux && !osx && !bash && !powershell) {
|
|
162
|
+
diagnostics.push({
|
|
163
|
+
code: "HOOK_COMMAND_MISSING",
|
|
164
|
+
severity: "error",
|
|
165
|
+
message: `Hook '${entityId}' event '${eventName}' handler #${index + 1} requires one of ` +
|
|
166
|
+
"'command', 'windows', 'linux', 'osx', 'bash', or 'powershell'",
|
|
167
|
+
path: sourcePath,
|
|
168
|
+
entityId,
|
|
169
|
+
});
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
if (typeof input.timeoutSec !== "undefined" && typeof timeoutSec === "undefined" && !timeoutSecIsPlaceholder) {
|
|
173
|
+
diagnostics.push({
|
|
174
|
+
code: "HOOK_TIMEOUT_INVALID",
|
|
175
|
+
severity: "error",
|
|
176
|
+
message: `Hook '${entityId}' event '${eventName}' handler #${index + 1} has invalid timeoutSec`,
|
|
177
|
+
path: sourcePath,
|
|
178
|
+
entityId,
|
|
179
|
+
});
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
if (typeof input.timeout !== "undefined" && typeof timeout === "undefined" && !timeoutIsPlaceholder) {
|
|
183
|
+
diagnostics.push({
|
|
184
|
+
code: "HOOK_TIMEOUT_INVALID",
|
|
185
|
+
severity: "error",
|
|
186
|
+
message: `Hook '${entityId}' event '${eventName}' handler #${index + 1} has invalid timeout`,
|
|
187
|
+
path: sourcePath,
|
|
188
|
+
entityId,
|
|
189
|
+
});
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
if (typeof input.env !== "undefined" && typeof env === "undefined") {
|
|
193
|
+
diagnostics.push({
|
|
194
|
+
code: "HOOK_ENV_INVALID",
|
|
195
|
+
severity: "error",
|
|
196
|
+
message: `Hook '${entityId}' event '${eventName}' handler #${index + 1} env must be an object of string values`,
|
|
197
|
+
path: sourcePath,
|
|
198
|
+
entityId,
|
|
199
|
+
});
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
type: "command",
|
|
204
|
+
matcher,
|
|
205
|
+
command,
|
|
206
|
+
windows,
|
|
207
|
+
linux,
|
|
208
|
+
osx,
|
|
209
|
+
bash,
|
|
210
|
+
powershell,
|
|
211
|
+
cwd,
|
|
212
|
+
env,
|
|
213
|
+
timeoutSec,
|
|
214
|
+
timeout,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function parseNotifyHandler(input, eventName, sourcePath, entityId, index, diagnostics) {
|
|
218
|
+
const rawEvent = input.event;
|
|
219
|
+
const notifyEvent = typeof rawEvent === "undefined" ? "agent-turn-complete" : rawEvent;
|
|
220
|
+
if (notifyEvent !== "agent-turn-complete") {
|
|
221
|
+
diagnostics.push({
|
|
222
|
+
code: "HOOK_NOTIFY_EVENT_INVALID",
|
|
223
|
+
severity: "error",
|
|
224
|
+
message: `Hook '${entityId}' event '${eventName}' handler #${index + 1} only supports notify event 'agent-turn-complete'`,
|
|
225
|
+
path: sourcePath,
|
|
226
|
+
entityId,
|
|
227
|
+
});
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
230
|
+
const command = parseNotifyCommand(input.command);
|
|
231
|
+
if (!command) {
|
|
232
|
+
diagnostics.push({
|
|
233
|
+
code: "HOOK_NOTIFY_COMMAND_INVALID",
|
|
234
|
+
severity: "error",
|
|
235
|
+
message: `Hook '${entityId}' event '${eventName}' handler #${index + 1} notify command must be a string or non-empty string array`,
|
|
236
|
+
path: sourcePath,
|
|
237
|
+
entityId,
|
|
238
|
+
});
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
if (typeof input.matcher !== "undefined") {
|
|
242
|
+
diagnostics.push({
|
|
243
|
+
code: "HOOK_NOTIFY_MATCHER_UNSUPPORTED",
|
|
244
|
+
severity: "error",
|
|
245
|
+
message: `Hook '${entityId}' event '${eventName}' handler #${index + 1} notify handlers do not support matcher`,
|
|
246
|
+
path: sourcePath,
|
|
247
|
+
entityId,
|
|
248
|
+
});
|
|
249
|
+
return undefined;
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
type: "notify",
|
|
253
|
+
event: "agent-turn-complete",
|
|
254
|
+
command,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
function parseNotifyCommand(input) {
|
|
258
|
+
if (typeof input === "string" && input.trim().length > 0) {
|
|
259
|
+
return input;
|
|
260
|
+
}
|
|
261
|
+
if (!Array.isArray(input)) {
|
|
262
|
+
return undefined;
|
|
263
|
+
}
|
|
264
|
+
if (input.length === 0) {
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
const command = [];
|
|
268
|
+
for (const entry of input) {
|
|
269
|
+
if (typeof entry !== "string" || entry.trim().length === 0) {
|
|
270
|
+
return undefined;
|
|
271
|
+
}
|
|
272
|
+
command.push(entry);
|
|
273
|
+
}
|
|
274
|
+
return command;
|
|
275
|
+
}
|
|
276
|
+
function asOptionalString(input) {
|
|
277
|
+
if (typeof input !== "string") {
|
|
278
|
+
return undefined;
|
|
279
|
+
}
|
|
280
|
+
const value = input.trim();
|
|
281
|
+
return value.length > 0 ? value : undefined;
|
|
282
|
+
}
|
|
283
|
+
function asOptionalPositiveNumber(input) {
|
|
284
|
+
if (typeof input !== "number" || !Number.isFinite(input) || input <= 0) {
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
287
|
+
return input;
|
|
288
|
+
}
|
|
289
|
+
function asOptionalStringMap(input) {
|
|
290
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) {
|
|
291
|
+
return undefined;
|
|
292
|
+
}
|
|
293
|
+
const output = {};
|
|
294
|
+
for (const [key, value] of Object.entries(input)) {
|
|
295
|
+
if (typeof value !== "string") {
|
|
296
|
+
return undefined;
|
|
297
|
+
}
|
|
298
|
+
output[key] = value;
|
|
299
|
+
}
|
|
300
|
+
return output;
|
|
301
|
+
}
|
|
302
|
+
function isEnvPlaceholderToken(input) {
|
|
303
|
+
return typeof input === "string" && ENV_PLACEHOLDER_TOKEN_RE.test(input.trim());
|
|
304
|
+
}
|
|
305
|
+
export function canonicalHookHasErrors(diagnostics) {
|
|
306
|
+
return diagnostics.some((diagnostic) => diagnostic.severity === "error");
|
|
307
|
+
}
|
|
308
|
+
export function stableHookCommandArray(command) {
|
|
309
|
+
if (Array.isArray(command)) {
|
|
310
|
+
return command;
|
|
311
|
+
}
|
|
312
|
+
return ["sh", "-lc", command];
|
|
313
|
+
}
|
|
314
|
+
export function withHookId(hook, id) {
|
|
315
|
+
return {
|
|
316
|
+
id,
|
|
317
|
+
mode: hook.mode,
|
|
318
|
+
events: hook.events,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,8 @@ import { HarnessEngine } from "./engine.js";
|
|
|
4
4
|
import { validateRegistryRepo } from "./registry-validator.js";
|
|
5
5
|
import type { ApplyOptions, ApplyResult, DoctorResult, MigrationResult, PlanOptions, PlanResult } from "./types.js";
|
|
6
6
|
export type { CliEnvelope, CliExecutionContext, CliResolvedContext, CommandId, CommandInput, CommandOutput, } from "./cli/contracts.js";
|
|
7
|
-
export
|
|
7
|
+
export { loadEnvVars, parseEnvFile, substituteEnvVars } from "./env.js";
|
|
8
|
+
export type { AgentsManifest, ApplyResult, CanonicalHook, CanonicalMcpConfig, CanonicalPrompt, CanonicalSkill, CanonicalSubagent, Diagnostic, DoctorResult, EntityRef, EntityType, ManagedIndex, ManifestLock, MigrationAction, MigrationResult, Operation, PlanResult, ProviderAdapter, ProviderId, ProviderOverride, RegistryDefinition, RegistryId, RegistryListEntry, RegistryManifest, RegistryPullResult, RegistryValidationOptions, RegistryValidationResult, RenderedArtifact, ValidationResult, VersionDiagnostic, } from "./types.js";
|
|
8
9
|
export { HarnessEngine, loadConfig, runCliArgv, runCliCommand, validateConfig, validateLock, validateRegistryRepo };
|
|
9
10
|
export declare function plan(opts?: PlanOptions): Promise<PlanResult>;
|
|
10
11
|
export declare function apply(opts?: ApplyOptions): Promise<ApplyResult>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpH,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,eAAe,EACf,SAAS,EACT,UAAU,EACV,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAEpH,wBAAsB,IAAI,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAEtE;AAED,wBAAsB,KAAK,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAEzE;AAED,wBAAsB,MAAM,CAAC,IAAI,GAAE,WAAW,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAE/F;AAED,wBAAsB,OAAO,CAC3B,IAAI,GAAE,WAAW,GAAG;IAAE,EAAE,CAAC,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3E,OAAO,CAAC,eAAe,CAAC,CAM1B"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpH,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACxE,YAAY,EACV,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,eAAe,EACf,SAAS,EACT,UAAU,EACV,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAEpH,wBAAsB,IAAI,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAEtE;AAED,wBAAsB,KAAK,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAEzE;AAED,wBAAsB,MAAM,CAAC,IAAI,GAAE,WAAW,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAE/F;AAED,wBAAsB,OAAO,CAC3B,IAAI,GAAE,WAAW,GAAG;IAAE,EAAE,CAAC,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3E,OAAO,CAAC,eAAe,CAAC,CAM1B"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import { runCliArgv, runCliCommand } from "./cli/main.js";
|
|
|
2
2
|
import { loadConfig, validateConfig, validateLock } from "./engine/utils.js";
|
|
3
3
|
import { HarnessEngine } from "./engine.js";
|
|
4
4
|
import { validateRegistryRepo } from "./registry-validator.js";
|
|
5
|
+
export { loadEnvVars, parseEnvFile, substituteEnvVars } from "./env.js";
|
|
5
6
|
export { HarnessEngine, loadConfig, runCliArgv, runCliCommand, validateConfig, validateLock, validateRegistryRepo };
|
|
6
7
|
export async function plan(opts = {}) {
|
|
7
8
|
return new HarnessEngine(opts.cwd).plan();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAW/D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAiCxE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAEpH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAoB,EAAE;IAC/C,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB,EAAE;IACjD,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAyC,EAAE;IACtE,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAA0E,EAAE;IAE5E,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QACzC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CAAC;AACL,CAAC"}
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,oCAAoC,CAAC;AAK5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAgB/C,OAAO,KAAK,EACV,UAAU,EAMV,UAAU,EACX,MAAM,YAAY,CAAC;AAGpB,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAoF3G;AAmBD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,EAAE,CA0JhF"}
|