@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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -10
  3. package/dist/cli/adapters/commander.d.ts.map +1 -1
  4. package/dist/cli/adapters/commander.js +16 -0
  5. package/dist/cli/adapters/commander.js.map +1 -1
  6. package/dist/cli/adapters/interactive.d.ts.map +1 -1
  7. package/dist/cli/adapters/interactive.js +20 -0
  8. package/dist/cli/adapters/interactive.js.map +1 -1
  9. package/dist/cli/command-registry.d.ts.map +1 -1
  10. package/dist/cli/command-registry.js +20 -1
  11. package/dist/cli/command-registry.js.map +1 -1
  12. package/dist/cli/contracts.d.ts +1 -1
  13. package/dist/cli/contracts.d.ts.map +1 -1
  14. package/dist/cli/handlers/entities.d.ts +4 -0
  15. package/dist/cli/handlers/entities.d.ts.map +1 -1
  16. package/dist/cli/handlers/entities.js +17 -0
  17. package/dist/cli/handlers/entities.js.map +1 -1
  18. package/dist/cli/handlers/registry.d.ts.map +1 -1
  19. package/dist/cli/handlers/registry.js.map +1 -1
  20. package/dist/engine/entities.d.ts +3 -0
  21. package/dist/engine/entities.d.ts.map +1 -1
  22. package/dist/engine/entities.js +86 -9
  23. package/dist/engine/entities.js.map +1 -1
  24. package/dist/engine/utils.d.ts.map +1 -1
  25. package/dist/engine/utils.js +3 -0
  26. package/dist/engine/utils.js.map +1 -1
  27. package/dist/engine.d.ts +3 -0
  28. package/dist/engine.d.ts.map +1 -1
  29. package/dist/engine.js +10 -2
  30. package/dist/engine.js.map +1 -1
  31. package/dist/entity-registries.d.ts +5 -1
  32. package/dist/entity-registries.d.ts.map +1 -1
  33. package/dist/entity-registries.js +46 -15
  34. package/dist/entity-registries.js.map +1 -1
  35. package/dist/env.d.ts +39 -0
  36. package/dist/env.d.ts.map +1 -0
  37. package/dist/env.js +175 -0
  38. package/dist/env.js.map +1 -0
  39. package/dist/hooks.d.ts +15 -0
  40. package/dist/hooks.d.ts.map +1 -0
  41. package/dist/hooks.js +321 -0
  42. package/dist/hooks.js.map +1 -0
  43. package/dist/index.d.ts +2 -1
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +1 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/loader.d.ts.map +1 -1
  48. package/dist/loader.js +201 -29
  49. package/dist/loader.js.map +1 -1
  50. package/dist/paths.d.ts +5 -0
  51. package/dist/paths.d.ts.map +1 -1
  52. package/dist/paths.js +9 -0
  53. package/dist/paths.js.map +1 -1
  54. package/dist/planner.d.ts.map +1 -1
  55. package/dist/planner.js +27 -0
  56. package/dist/planner.js.map +1 -1
  57. package/dist/provider-adapters/claude.d.ts.map +1 -1
  58. package/dist/provider-adapters/claude.js +18 -1
  59. package/dist/provider-adapters/claude.js.map +1 -1
  60. package/dist/provider-adapters/codex.d.ts.map +1 -1
  61. package/dist/provider-adapters/codex.js +19 -3
  62. package/dist/provider-adapters/codex.js.map +1 -1
  63. package/dist/provider-adapters/constants.d.ts +3 -0
  64. package/dist/provider-adapters/constants.d.ts.map +1 -1
  65. package/dist/provider-adapters/constants.js +3 -0
  66. package/dist/provider-adapters/constants.js.map +1 -1
  67. package/dist/provider-adapters/copilot.d.ts.map +1 -1
  68. package/dist/provider-adapters/copilot.js +18 -1
  69. package/dist/provider-adapters/copilot.js.map +1 -1
  70. package/dist/provider-adapters/hooks.d.ts +6 -0
  71. package/dist/provider-adapters/hooks.d.ts.map +1 -0
  72. package/dist/provider-adapters/hooks.js +266 -0
  73. package/dist/provider-adapters/hooks.js.map +1 -0
  74. package/dist/provider-adapters/types.d.ts +1 -0
  75. package/dist/provider-adapters/types.d.ts.map +1 -1
  76. package/dist/registry-validator.d.ts.map +1 -1
  77. package/dist/registry-validator.js +25 -0
  78. package/dist/registry-validator.js.map +1 -1
  79. package/dist/repository.d.ts +1 -1
  80. package/dist/repository.d.ts.map +1 -1
  81. package/dist/repository.js +21 -4
  82. package/dist/repository.js.map +1 -1
  83. package/dist/types.d.ts +40 -1
  84. package/dist/types.d.ts.map +1 -1
  85. package/dist/types.js +2 -1
  86. package/dist/types.js.map +1 -1
  87. 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
@@ -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 type { AgentsManifest, ApplyResult, 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";
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>;
@@ -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;AA0C/D,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"}
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"}
@@ -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;AAG5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAc/C,OAAO,KAAK,EAAE,UAAU,EAAwD,UAAU,EAAE,MAAM,YAAY,CAAC;AAG/G,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAsE3G;AAmBD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,EAAE,CA6IhF"}
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"}