@madebywild/agent-harness-framework 0.9.1

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 (185) hide show
  1. package/dist/cli/adapters/commander.d.ts +14 -0
  2. package/dist/cli/adapters/commander.d.ts.map +1 -0
  3. package/dist/cli/adapters/commander.js +348 -0
  4. package/dist/cli/adapters/commander.js.map +1 -0
  5. package/dist/cli/adapters/interactive.d.ts +11 -0
  6. package/dist/cli/adapters/interactive.d.ts.map +1 -0
  7. package/dist/cli/adapters/interactive.js +375 -0
  8. package/dist/cli/adapters/interactive.js.map +1 -0
  9. package/dist/cli/command-registry.d.ts +27 -0
  10. package/dist/cli/command-registry.d.ts.map +1 -0
  11. package/dist/cli/command-registry.js +470 -0
  12. package/dist/cli/command-registry.js.map +1 -0
  13. package/dist/cli/contracts.d.ts +122 -0
  14. package/dist/cli/contracts.d.ts.map +1 -0
  15. package/dist/cli/contracts.js +2 -0
  16. package/dist/cli/contracts.js.map +1 -0
  17. package/dist/cli/handlers/apply.d.ts +3 -0
  18. package/dist/cli/handlers/apply.d.ts.map +1 -0
  19. package/dist/cli/handlers/apply.js +17 -0
  20. package/dist/cli/handlers/apply.js.map +1 -0
  21. package/dist/cli/handlers/doctor.d.ts +3 -0
  22. package/dist/cli/handlers/doctor.d.ts.map +1 -0
  23. package/dist/cli/handlers/doctor.js +16 -0
  24. package/dist/cli/handlers/doctor.js.map +1 -0
  25. package/dist/cli/handlers/entities.d.ts +22 -0
  26. package/dist/cli/handlers/entities.d.ts.map +1 -0
  27. package/dist/cli/handlers/entities.js +92 -0
  28. package/dist/cli/handlers/entities.js.map +1 -0
  29. package/dist/cli/handlers/init.d.ts +5 -0
  30. package/dist/cli/handlers/init.d.ts.map +1 -0
  31. package/dist/cli/handlers/init.js +17 -0
  32. package/dist/cli/handlers/init.js.map +1 -0
  33. package/dist/cli/handlers/migrate.d.ts +6 -0
  34. package/dist/cli/handlers/migrate.d.ts.map +1 -0
  35. package/dist/cli/handlers/migrate.js +22 -0
  36. package/dist/cli/handlers/migrate.js.map +1 -0
  37. package/dist/cli/handlers/plan.d.ts +5 -0
  38. package/dist/cli/handlers/plan.d.ts.map +1 -0
  39. package/dist/cli/handlers/plan.js +18 -0
  40. package/dist/cli/handlers/plan.js.map +1 -0
  41. package/dist/cli/handlers/provider.d.ts +8 -0
  42. package/dist/cli/handlers/provider.d.ts.map +1 -0
  43. package/dist/cli/handlers/provider.js +37 -0
  44. package/dist/cli/handlers/provider.js.map +1 -0
  45. package/dist/cli/handlers/registry.d.ts +27 -0
  46. package/dist/cli/handlers/registry.d.ts.map +1 -0
  47. package/dist/cli/handlers/registry.js +133 -0
  48. package/dist/cli/handlers/registry.js.map +1 -0
  49. package/dist/cli/handlers/validate.d.ts +3 -0
  50. package/dist/cli/handlers/validate.d.ts.map +1 -0
  51. package/dist/cli/handlers/validate.js +16 -0
  52. package/dist/cli/handlers/validate.js.map +1 -0
  53. package/dist/cli/handlers/watch.d.ts +6 -0
  54. package/dist/cli/handlers/watch.d.ts.map +1 -0
  55. package/dist/cli/handlers/watch.js +46 -0
  56. package/dist/cli/handlers/watch.js.map +1 -0
  57. package/dist/cli/main.d.ts +6 -0
  58. package/dist/cli/main.d.ts.map +1 -0
  59. package/dist/cli/main.js +90 -0
  60. package/dist/cli/main.js.map +1 -0
  61. package/dist/cli/renderers/json.d.ts +10 -0
  62. package/dist/cli/renderers/json.d.ts.map +1 -0
  63. package/dist/cli/renderers/json.js +17 -0
  64. package/dist/cli/renderers/json.js.map +1 -0
  65. package/dist/cli/renderers/text.d.ts +3 -0
  66. package/dist/cli/renderers/text.d.ts.map +1 -0
  67. package/dist/cli/renderers/text.js +155 -0
  68. package/dist/cli/renderers/text.js.map +1 -0
  69. package/dist/cli/utils/runtime.d.ts +26 -0
  70. package/dist/cli/utils/runtime.d.ts.map +1 -0
  71. package/dist/cli/utils/runtime.js +158 -0
  72. package/dist/cli/utils/runtime.js.map +1 -0
  73. package/dist/cli.d.ts +3 -0
  74. package/dist/cli.d.ts.map +1 -0
  75. package/dist/cli.js +14 -0
  76. package/dist/cli.js.map +1 -0
  77. package/dist/engine/entities.d.ts +33 -0
  78. package/dist/engine/entities.d.ts.map +1 -0
  79. package/dist/engine/entities.js +461 -0
  80. package/dist/engine/entities.js.map +1 -0
  81. package/dist/engine/state.d.ts +19 -0
  82. package/dist/engine/state.d.ts.map +1 -0
  83. package/dist/engine/state.js +70 -0
  84. package/dist/engine/state.js.map +1 -0
  85. package/dist/engine/utils.d.ts +28 -0
  86. package/dist/engine/utils.d.ts.map +1 -0
  87. package/dist/engine/utils.js +157 -0
  88. package/dist/engine/utils.js.map +1 -0
  89. package/dist/engine.d.ts +59 -0
  90. package/dist/engine.d.ts.map +1 -0
  91. package/dist/engine.js +398 -0
  92. package/dist/engine.js.map +1 -0
  93. package/dist/entity-registries.d.ts +40 -0
  94. package/dist/entity-registries.d.ts.map +1 -0
  95. package/dist/entity-registries.js +257 -0
  96. package/dist/entity-registries.js.map +1 -0
  97. package/dist/index.d.ts +19 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +22 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/loader.d.ts +6 -0
  102. package/dist/loader.d.ts.map +1 -0
  103. package/dist/loader.js +552 -0
  104. package/dist/loader.js.map +1 -0
  105. package/dist/paths.d.ts +23 -0
  106. package/dist/paths.d.ts.map +1 -0
  107. package/dist/paths.js +40 -0
  108. package/dist/paths.js.map +1 -0
  109. package/dist/planner.d.ts +5 -0
  110. package/dist/planner.d.ts.map +1 -0
  111. package/dist/planner.js +316 -0
  112. package/dist/planner.js.map +1 -0
  113. package/dist/provider-adapters/claude.d.ts +4 -0
  114. package/dist/provider-adapters/claude.d.ts.map +1 -0
  115. package/dist/provider-adapters/claude.js +36 -0
  116. package/dist/provider-adapters/claude.js.map +1 -0
  117. package/dist/provider-adapters/codex.d.ts +4 -0
  118. package/dist/provider-adapters/codex.d.ts.map +1 -0
  119. package/dist/provider-adapters/codex.js +93 -0
  120. package/dist/provider-adapters/codex.js.map +1 -0
  121. package/dist/provider-adapters/constants.d.ts +21 -0
  122. package/dist/provider-adapters/constants.d.ts.map +1 -0
  123. package/dist/provider-adapters/constants.js +21 -0
  124. package/dist/provider-adapters/constants.js.map +1 -0
  125. package/dist/provider-adapters/copilot.d.ts +4 -0
  126. package/dist/provider-adapters/copilot.d.ts.map +1 -0
  127. package/dist/provider-adapters/copilot.js +37 -0
  128. package/dist/provider-adapters/copilot.js.map +1 -0
  129. package/dist/provider-adapters/create-adapter.d.ts +4 -0
  130. package/dist/provider-adapters/create-adapter.d.ts.map +1 -0
  131. package/dist/provider-adapters/create-adapter.js +67 -0
  132. package/dist/provider-adapters/create-adapter.js.map +1 -0
  133. package/dist/provider-adapters/mcp.d.ts +4 -0
  134. package/dist/provider-adapters/mcp.d.ts.map +1 -0
  135. package/dist/provider-adapters/mcp.js +40 -0
  136. package/dist/provider-adapters/mcp.js.map +1 -0
  137. package/dist/provider-adapters/registry.d.ts +4 -0
  138. package/dist/provider-adapters/registry.d.ts.map +1 -0
  139. package/dist/provider-adapters/registry.js +11 -0
  140. package/dist/provider-adapters/registry.js.map +1 -0
  141. package/dist/provider-adapters/renderers.d.ts +3 -0
  142. package/dist/provider-adapters/renderers.d.ts.map +1 -0
  143. package/dist/provider-adapters/renderers.js +10 -0
  144. package/dist/provider-adapters/renderers.js.map +1 -0
  145. package/dist/provider-adapters/subagents.d.ts +19 -0
  146. package/dist/provider-adapters/subagents.d.ts.map +1 -0
  147. package/dist/provider-adapters/subagents.js +58 -0
  148. package/dist/provider-adapters/subagents.js.map +1 -0
  149. package/dist/provider-adapters/types.d.ts +18 -0
  150. package/dist/provider-adapters/types.d.ts.map +1 -0
  151. package/dist/provider-adapters/types.js +2 -0
  152. package/dist/provider-adapters/types.js.map +1 -0
  153. package/dist/providers.d.ts +6 -0
  154. package/dist/providers.d.ts.map +1 -0
  155. package/dist/providers.js +15 -0
  156. package/dist/providers.js.map +1 -0
  157. package/dist/registry-validator.d.ts +3 -0
  158. package/dist/registry-validator.d.ts.map +1 -0
  159. package/dist/registry-validator.js +222 -0
  160. package/dist/registry-validator.js.map +1 -0
  161. package/dist/repository.d.ts +36 -0
  162. package/dist/repository.d.ts.map +1 -0
  163. package/dist/repository.js +314 -0
  164. package/dist/repository.js.map +1 -0
  165. package/dist/types.d.ts +190 -0
  166. package/dist/types.d.ts.map +1 -0
  167. package/dist/types.js +11 -0
  168. package/dist/types.js.map +1 -0
  169. package/dist/utils.d.ts +16 -0
  170. package/dist/utils.d.ts.map +1 -0
  171. package/dist/utils.js +115 -0
  172. package/dist/utils.js.map +1 -0
  173. package/dist/versioning/doctor.d.ts +6 -0
  174. package/dist/versioning/doctor.d.ts.map +1 -0
  175. package/dist/versioning/doctor.js +284 -0
  176. package/dist/versioning/doctor.js.map +1 -0
  177. package/dist/versioning/migrate.d.ts +9 -0
  178. package/dist/versioning/migrate.d.ts.map +1 -0
  179. package/dist/versioning/migrate.js +362 -0
  180. package/dist/versioning/migrate.js.map +1 -0
  181. package/dist/versioning/registry.d.ts +18 -0
  182. package/dist/versioning/registry.d.ts.map +1 -0
  183. package/dist/versioning/registry.js +63 -0
  184. package/dist/versioning/registry.js.map +1 -0
  185. package/package.json +52 -0
@@ -0,0 +1,67 @@
1
+ import { normalizeRelativePath, withSingleTrailingNewline } from "../utils.js";
2
+ import { mergeMcpServers, resolveMcpTargetPath } from "./mcp.js";
3
+ function inferSkillFormat(filePath) {
4
+ return filePath.endsWith(".json") ? "json" : "markdown";
5
+ }
6
+ export function createProviderAdapter(definition, skillFilesByEntityId) {
7
+ const { id: provider, defaults, mcpRenderer } = definition;
8
+ return {
9
+ id: provider,
10
+ async renderPrompt(input, override) {
11
+ if (override?.enabled === false) {
12
+ return [];
13
+ }
14
+ const artifactPath = normalizeRelativePath(override?.targetPath ?? defaults.promptTarget);
15
+ const promptContent = withSingleTrailingNewline(input.body);
16
+ return [
17
+ {
18
+ path: artifactPath,
19
+ content: promptContent,
20
+ ownerEntityId: input.id,
21
+ provider,
22
+ format: "markdown",
23
+ },
24
+ ];
25
+ },
26
+ async renderSkill(input, override) {
27
+ if (override?.enabled === false) {
28
+ return [];
29
+ }
30
+ const files = skillFilesByEntityId.get(input.id) ?? [];
31
+ const defaultRoot = `${defaults.skillRoot}/${input.id}`;
32
+ const targetRoot = normalizeRelativePath(override?.targetPath ?? defaultRoot);
33
+ return files.map((file) => ({
34
+ path: normalizeRelativePath(`${targetRoot}/${file.path}`),
35
+ content: file.content,
36
+ ownerEntityId: input.id,
37
+ provider,
38
+ format: inferSkillFormat(file.path),
39
+ }));
40
+ },
41
+ async renderMcp(input, overrideByEntity) {
42
+ const enabledSources = input.filter((entry) => {
43
+ const override = overrideByEntity?.get(entry.id);
44
+ return override?.enabled !== false;
45
+ });
46
+ if (enabledSources.length === 0) {
47
+ return [];
48
+ }
49
+ const targetPath = resolveMcpTargetPath(provider, defaults.mcpTarget, enabledSources, overrideByEntity);
50
+ const mergedServers = mergeMcpServers(enabledSources);
51
+ const content = mcpRenderer.render(mergedServers);
52
+ return [
53
+ {
54
+ path: targetPath,
55
+ content,
56
+ ownerEntityId: enabledSources
57
+ .map((entry) => entry.id)
58
+ .sort()
59
+ .join(","),
60
+ provider,
61
+ format: mcpRenderer.format,
62
+ },
63
+ ];
64
+ },
65
+ };
66
+ }
67
+ //# sourceMappingURL=create-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-adapter.js","sourceRoot":"","sources":["../../src/provider-adapters/create-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CanonicalMcpConfig, ProviderId, ProviderOverride } from "../types.js";
2
+ export declare function resolveMcpTargetPath(provider: ProviderId, defaultTargetPath: string, configs: ReadonlyArray<CanonicalMcpConfig>, overrideByEntity?: ReadonlyMap<string, ProviderOverride | undefined>): string;
3
+ export declare function mergeMcpServers(configs: ReadonlyArray<CanonicalMcpConfig>): Record<string, unknown>;
4
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/provider-adapters/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpF,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,UAAU,EACpB,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC1C,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC,GACnE,MAAM,CAmBR;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAcnG"}
@@ -0,0 +1,40 @@
1
+ import { deepEqual, normalizeRelativePath } from "../utils.js";
2
+ export function resolveMcpTargetPath(provider, defaultTargetPath, configs, overrideByEntity) {
3
+ const targets = new Set();
4
+ for (const config of configs) {
5
+ const override = overrideByEntity?.get(config.id);
6
+ if (override?.targetPath) {
7
+ targets.add(normalizeRelativePath(override.targetPath));
8
+ }
9
+ }
10
+ if (targets.size > 1) {
11
+ throw new Error(`conflicting MCP targetPath overrides for provider '${provider}': ${[...targets].join(", ")}`);
12
+ }
13
+ if (targets.size === 1) {
14
+ return [...targets][0];
15
+ }
16
+ return normalizeRelativePath(defaultTargetPath);
17
+ }
18
+ export function mergeMcpServers(configs) {
19
+ const merged = {};
20
+ for (const config of configs) {
21
+ const servers = extractServers(config.json);
22
+ for (const [serverId, serverValue] of Object.entries(servers)) {
23
+ if (serverId in merged && !deepEqual(merged[serverId], serverValue)) {
24
+ throw new Error(`MCP server '${serverId}' has conflicting definitions across configs`);
25
+ }
26
+ merged[serverId] = serverValue;
27
+ }
28
+ }
29
+ return Object.fromEntries(Object.entries(merged).sort(([left], [right]) => left.localeCompare(right)));
30
+ }
31
+ function extractServers(json) {
32
+ const candidate = json.servers ??
33
+ json.mcpServers ??
34
+ json;
35
+ if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) {
36
+ throw new Error("MCP config must be an object or contain 'servers'/'mcpServers' object");
37
+ }
38
+ return candidate;
39
+ }
40
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/provider-adapters/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,UAAU,oBAAoB,CAClC,QAAoB,EACpB,iBAAyB,EACzB,OAA0C,EAC1C,gBAAoE;IAEpE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,QAAQ,EAAE,UAAU,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sDAAsD,QAAQ,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAW,CAAC;IACnC,CAAC;IAED,OAAO,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA0C;IACxE,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,eAAe,QAAQ,8CAA8C,CAAC,CAAC;YACzF,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,SAAS,cAAc,CAAC,IAA6B;IACnD,MAAM,SAAS,GACZ,IAAI,CAAC,OAA+C;QACpD,IAAI,CAAC,UAAkD;QACxD,IAAI,CAAC;IAEP,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ProviderAdapter, ProviderId } from "../types.js";
2
+ import type { SkillFileIndex } from "./types.js";
3
+ export declare function buildProviderAdapters(skillFilesByEntityId: SkillFileIndex): Record<ProviderId, ProviderAdapter>;
4
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/provider-adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,qBAAqB,CAAC,oBAAoB,EAAE,cAAc,GAAG,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAM/G"}
@@ -0,0 +1,11 @@
1
+ import { buildClaudeAdapter } from "./claude.js";
2
+ import { buildCodexAdapter } from "./codex.js";
3
+ import { buildCopilotAdapter } from "./copilot.js";
4
+ export function buildProviderAdapters(skillFilesByEntityId) {
5
+ return {
6
+ codex: buildCodexAdapter(skillFilesByEntityId),
7
+ claude: buildClaudeAdapter(skillFilesByEntityId),
8
+ copilot: buildCopilotAdapter(skillFilesByEntityId),
9
+ };
10
+ }
11
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/provider-adapters/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,MAAM,UAAU,qBAAqB,CAAC,oBAAoC;IACxE,OAAO;QACL,KAAK,EAAE,iBAAiB,CAAC,oBAAoB,CAAC;QAC9C,MAAM,EAAE,kBAAkB,CAAC,oBAAoB,CAAC;QAChD,OAAO,EAAE,mBAAmB,CAAC,oBAAoB,CAAC;KACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProviderMcpRenderer } from "./types.js";
2
+ export declare function createJsonMcpRenderer(serverProperty: "mcpServers" | "servers"): ProviderMcpRenderer;
3
+ //# sourceMappingURL=renderers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../src/provider-adapters/renderers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,YAAY,GAAG,SAAS,GAAG,mBAAmB,CAOnG"}
@@ -0,0 +1,10 @@
1
+ import { stableStringify } from "../utils.js";
2
+ export function createJsonMcpRenderer(serverProperty) {
3
+ return {
4
+ format: "json",
5
+ render(servers) {
6
+ return stableStringify({ [serverProperty]: servers });
7
+ },
8
+ };
9
+ }
10
+ //# sourceMappingURL=renderers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../src/provider-adapters/renderers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,UAAU,qBAAqB,CAAC,cAAwC;IAC5E,OAAO;QACL,MAAM,EAAE,MAAM;QACd,MAAM,CAAC,OAAO;YACZ,OAAO,eAAe,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { CanonicalSubagent, ProviderOverride } from "../types.js";
2
+ export interface CodexSubagentOptions {
3
+ model?: string;
4
+ tools?: string[];
5
+ }
6
+ export interface ClaudeSubagentOptions {
7
+ model?: string;
8
+ tools?: string | string[];
9
+ }
10
+ export interface CopilotSubagentOptions {
11
+ model?: string;
12
+ tools?: string[];
13
+ handoffs?: string[];
14
+ }
15
+ export declare function parseCodexSubagentOptions(override?: ProviderOverride): CodexSubagentOptions;
16
+ export declare function parseClaudeSubagentOptions(override?: ProviderOverride): ClaudeSubagentOptions;
17
+ export declare function parseCopilotSubagentOptions(override?: ProviderOverride): CopilotSubagentOptions;
18
+ export declare function renderSubagentMarkdown(input: CanonicalSubagent, extraFrontmatter: Record<string, string | string[] | undefined>): string;
19
+ //# sourceMappingURL=subagents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../../src/provider-adapters/subagents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOvE,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,oBAAoB,CAM3F;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,qBAAqB,CAM7F;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,sBAAsB,CAO/F;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,iBAAiB,EACxB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAC9D,MAAM,CAeR"}
@@ -0,0 +1,58 @@
1
+ import { withSingleTrailingNewline } from "../utils.js";
2
+ export function parseCodexSubagentOptions(override) {
3
+ const options = readOptionsObject(override);
4
+ return {
5
+ model: asString(options.model),
6
+ tools: asStringArray(options.tools),
7
+ };
8
+ }
9
+ export function parseClaudeSubagentOptions(override) {
10
+ const options = readOptionsObject(override);
11
+ return {
12
+ model: asString(options.model),
13
+ tools: asString(options.tools) ?? asStringArray(options.tools),
14
+ };
15
+ }
16
+ export function parseCopilotSubagentOptions(override) {
17
+ const options = readOptionsObject(override);
18
+ return {
19
+ model: asString(options.model),
20
+ tools: asStringArray(options.tools),
21
+ handoffs: asStringArray(options.handoffs),
22
+ };
23
+ }
24
+ export function renderSubagentMarkdown(input, extraFrontmatter) {
25
+ const entries = [
26
+ ["name", input.name],
27
+ ["description", input.description],
28
+ ];
29
+ for (const [key, value] of Object.entries(extraFrontmatter)) {
30
+ if (value !== undefined) {
31
+ entries.push([key, value]);
32
+ }
33
+ }
34
+ const frontmatterLines = entries.map(([key, value]) => `${key}: ${serializeYamlPrimitive(value)}`);
35
+ const body = input.body.trim();
36
+ return withSingleTrailingNewline(["---", ...frontmatterLines, "---", "", body].join("\n"));
37
+ }
38
+ function readOptionsObject(override) {
39
+ const candidate = override?.options;
40
+ if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) {
41
+ return {};
42
+ }
43
+ return candidate;
44
+ }
45
+ function asString(value) {
46
+ return typeof value === "string" && value.trim().length > 0 ? value : undefined;
47
+ }
48
+ function asStringArray(value) {
49
+ if (!Array.isArray(value)) {
50
+ return undefined;
51
+ }
52
+ const output = value.filter((entry) => typeof entry === "string" && entry.trim().length > 0);
53
+ return output.length > 0 ? output : undefined;
54
+ }
55
+ function serializeYamlPrimitive(value) {
56
+ return JSON.stringify(value);
57
+ }
58
+ //# sourceMappingURL=subagents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagents.js","sourceRoot":"","sources":["../../src/provider-adapters/subagents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { LoadedSkillFile, ProviderAdapter, ProviderId, RenderedArtifact } from "../types.js";
2
+ export type SkillFileIndex = ReadonlyMap<string, ReadonlyArray<LoadedSkillFile>>;
3
+ export interface ProviderDefaults {
4
+ readonly promptTarget: string;
5
+ readonly skillRoot: string;
6
+ readonly mcpTarget: string;
7
+ }
8
+ export interface ProviderMcpRenderer {
9
+ readonly format: RenderedArtifact["format"];
10
+ render(servers: Record<string, unknown>): string;
11
+ }
12
+ export interface ProviderDefinition {
13
+ readonly id: ProviderId;
14
+ readonly defaults: ProviderDefaults;
15
+ readonly mcpRenderer: ProviderMcpRenderer;
16
+ }
17
+ export type ProviderBuilder = (skillFilesByEntityId: SkillFileIndex) => ProviderAdapter;
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/provider-adapters/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElG,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC;AAEjF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CAClD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;CAC3C;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,oBAAoB,EAAE,cAAc,KAAK,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/provider-adapters/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { LoadedSkillFile, ProviderAdapter, ProviderId } from "./types.js";
2
+ export declare function buildBuiltinAdapters(skillFilesByEntityId: Map<string, LoadedSkillFile[]>): Record<ProviderId, ProviderAdapter>;
3
+ export declare function getDefaultPromptTarget(provider: ProviderId): string;
4
+ export declare function getDefaultSkillRoot(provider: ProviderId): string;
5
+ export declare function getDefaultMcpTarget(provider: ProviderId): string;
6
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE/E,wBAAgB,oBAAoB,CAClC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,GACnD,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAErC;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAEhE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAEhE"}
@@ -0,0 +1,15 @@
1
+ import { getProviderDefaults } from "./provider-adapters/constants.js";
2
+ import { buildProviderAdapters } from "./provider-adapters/registry.js";
3
+ export function buildBuiltinAdapters(skillFilesByEntityId) {
4
+ return buildProviderAdapters(skillFilesByEntityId);
5
+ }
6
+ export function getDefaultPromptTarget(provider) {
7
+ return getProviderDefaults(provider).promptTarget;
8
+ }
9
+ export function getDefaultSkillRoot(provider) {
10
+ return getProviderDefaults(provider).skillRoot;
11
+ }
12
+ export function getDefaultMcpTarget(provider) {
13
+ return getProviderDefaults(provider).mcpTarget;
14
+ }
15
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAGxE,MAAM,UAAU,oBAAoB,CAClC,oBAAoD;IAEpD,OAAO,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAoB;IACzD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAoB;IACtD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAoB;IACtD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { RegistryValidationOptions, RegistryValidationResult } from "./types.js";
2
+ export declare function validateRegistryRepo(options?: RegistryValidationOptions): Promise<RegistryValidationResult>;
3
+ //# sourceMappingURL=registry-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-validator.d.ts","sourceRoot":"","sources":["../src/registry-validator.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAc,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAMlG,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAsQrH"}
@@ -0,0 +1,222 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { parseRegistryManifest } from "@madebywild/agent-harness-manifest";
4
+ import matter from "gray-matter";
5
+ import { listFilesRecursively } from "./repository.js";
6
+ import { isNotFoundError, normalizeRelativePath, readTextIfExists, toPosixRelative } from "./utils.js";
7
+ const ENTITY_ID_PATTERN = /^[a-zA-Z0-9._-]+$/u;
8
+ const REGISTRY_MANIFEST_FILE = "harness-registry.json";
9
+ export async function validateRegistryRepo(options = {}) {
10
+ const repoPath = path.resolve(options.repoPath ?? process.cwd());
11
+ let rootPath = ".";
12
+ const diagnostics = [];
13
+ if (options.rootPath && options.rootPath !== ".") {
14
+ try {
15
+ rootPath = normalizeRelativePath(options.rootPath);
16
+ }
17
+ catch {
18
+ diagnostics.push(error("REGISTRY_ROOT_INVALID", `Invalid registry root path '${options.rootPath}'`));
19
+ return { valid: false, diagnostics };
20
+ }
21
+ }
22
+ const rootAbs = rootPath === "." ? repoPath : path.join(repoPath, rootPath);
23
+ const manifestPath = path.join(repoPath, REGISTRY_MANIFEST_FILE);
24
+ const manifestText = await readTextIfExists(manifestPath);
25
+ if (manifestText === null) {
26
+ diagnostics.push(error("REGISTRY_MANIFEST_MISSING", `Registry is missing required ${REGISTRY_MANIFEST_FILE}`, REGISTRY_MANIFEST_FILE));
27
+ }
28
+ else {
29
+ const parsedManifest = await readJsonObject(manifestPath, "REGISTRY_MANIFEST_INVALID", "Registry manifest is invalid", diagnostics, repoPath);
30
+ if (parsedManifest) {
31
+ try {
32
+ parseRegistryManifest(parsedManifest);
33
+ }
34
+ catch (err) {
35
+ diagnostics.push(error("REGISTRY_MANIFEST_INVALID", `Registry manifest is invalid: ${err instanceof Error ? err.message : "unknown error"}`, REGISTRY_MANIFEST_FILE));
36
+ }
37
+ }
38
+ }
39
+ const promptsDir = path.join(rootAbs, "prompts");
40
+ let promptEntries = null;
41
+ try {
42
+ promptEntries = await fs.readdir(promptsDir, { withFileTypes: true });
43
+ }
44
+ catch (err) {
45
+ if (!isNotFoundError(err)) {
46
+ throw err;
47
+ }
48
+ }
49
+ if (promptEntries) {
50
+ let hasSystemPrompt = false;
51
+ for (const entry of promptEntries) {
52
+ const entryPath = toPosixRelative(path.join(promptsDir, entry.name), repoPath);
53
+ if (entry.name === "system.md" && entry.isFile()) {
54
+ hasSystemPrompt = true;
55
+ continue;
56
+ }
57
+ diagnostics.push(error("REGISTRY_PROMPT_INVALID", "Only prompts/system.md is allowed in prompts/", entryPath));
58
+ }
59
+ const systemPromptPath = path.join(promptsDir, "system.md");
60
+ if (!hasSystemPrompt) {
61
+ diagnostics.push(error("REGISTRY_PROMPT_INVALID", "Missing required prompts/system.md", toPosixRelative(systemPromptPath, repoPath)));
62
+ }
63
+ else {
64
+ const text = await readTextIfExists(systemPromptPath);
65
+ if (text === null || text.trim().length === 0) {
66
+ diagnostics.push(error("REGISTRY_PROMPT_INVALID", "prompts/system.md must be non-empty", toPosixRelative(systemPromptPath, repoPath)));
67
+ }
68
+ }
69
+ }
70
+ const skillsDir = path.join(rootAbs, "skills");
71
+ let skillEntries = null;
72
+ try {
73
+ skillEntries = await fs.readdir(skillsDir, { withFileTypes: true });
74
+ }
75
+ catch (err) {
76
+ if (!isNotFoundError(err)) {
77
+ throw err;
78
+ }
79
+ }
80
+ if (skillEntries) {
81
+ for (const entry of skillEntries) {
82
+ const skillPath = path.join(skillsDir, entry.name);
83
+ const skillPathRel = toPosixRelative(skillPath, repoPath);
84
+ if (!entry.isDirectory()) {
85
+ diagnostics.push(error("REGISTRY_SKILL_INVALID", "skills/ may only contain skill directories", skillPathRel));
86
+ continue;
87
+ }
88
+ if (!isValidEntityId(entry.name)) {
89
+ diagnostics.push(error("REGISTRY_SKILL_INVALID", `Invalid skill id '${entry.name}'`, skillPathRel));
90
+ }
91
+ const files = await listFilesRecursively(skillPath);
92
+ if (files.length === 0) {
93
+ diagnostics.push(error("REGISTRY_SKILL_INVALID", `Skill '${entry.name}' has no files`, skillPathRel));
94
+ continue;
95
+ }
96
+ const hasSkillMd = files.some((file) => path.relative(skillPath, file).replace(/\\/g, "/") === "SKILL.md");
97
+ if (!hasSkillMd) {
98
+ diagnostics.push(error("REGISTRY_SKILL_INVALID", `Skill '${entry.name}' must contain SKILL.md at the skill root`, toPosixRelative(path.join(skillPath, "SKILL.md"), repoPath)));
99
+ }
100
+ }
101
+ }
102
+ const mcpDir = path.join(rootAbs, "mcp");
103
+ let mcpEntries = null;
104
+ try {
105
+ mcpEntries = await fs.readdir(mcpDir, { withFileTypes: true });
106
+ }
107
+ catch (err) {
108
+ if (!isNotFoundError(err)) {
109
+ throw err;
110
+ }
111
+ }
112
+ if (mcpEntries) {
113
+ for (const entry of mcpEntries) {
114
+ const mcpPath = path.join(mcpDir, entry.name);
115
+ const mcpPathRel = toPosixRelative(mcpPath, repoPath);
116
+ if (!entry.isFile() || !entry.name.endsWith(".json")) {
117
+ diagnostics.push(error("REGISTRY_MCP_INVALID", "mcp/ may only contain .json files", mcpPathRel));
118
+ continue;
119
+ }
120
+ const id = entry.name.slice(0, -".json".length);
121
+ if (!isValidEntityId(id)) {
122
+ diagnostics.push(error("REGISTRY_MCP_INVALID", `Invalid MCP config id '${id}'`, mcpPathRel));
123
+ }
124
+ await readJsonObject(mcpPath, "REGISTRY_MCP_INVALID", `MCP config '${id}' is invalid`, diagnostics, repoPath);
125
+ }
126
+ }
127
+ const subagentsDir = path.join(rootAbs, "subagents");
128
+ let subagentEntries = null;
129
+ try {
130
+ subagentEntries = await fs.readdir(subagentsDir, { withFileTypes: true });
131
+ }
132
+ catch (err) {
133
+ if (!isNotFoundError(err)) {
134
+ throw err;
135
+ }
136
+ }
137
+ if (subagentEntries) {
138
+ for (const entry of subagentEntries) {
139
+ const subagentPath = path.join(subagentsDir, entry.name);
140
+ const subagentPathRel = toPosixRelative(subagentPath, repoPath);
141
+ if (!entry.isFile() || !entry.name.endsWith(".md")) {
142
+ diagnostics.push(error("REGISTRY_SUBAGENT_INVALID", "subagents/ may only contain .md files", subagentPathRel));
143
+ continue;
144
+ }
145
+ const id = entry.name.slice(0, -".md".length);
146
+ if (!isValidEntityId(id)) {
147
+ diagnostics.push(error("REGISTRY_SUBAGENT_INVALID", `Invalid subagent id '${id}'`, subagentPathRel));
148
+ }
149
+ const text = await readTextIfExists(subagentPath);
150
+ if (text === null || text.trim().length === 0) {
151
+ diagnostics.push(error("REGISTRY_SUBAGENT_INVALID", `Subagent '${id}' must be non-empty`, subagentPathRel));
152
+ continue;
153
+ }
154
+ try {
155
+ const parsed = matter(text);
156
+ const body = parsed.content.trim();
157
+ const frontmatter = parsed.data;
158
+ if (!frontmatter || typeof frontmatter !== "object" || Array.isArray(frontmatter)) {
159
+ diagnostics.push(error("REGISTRY_SUBAGENT_INVALID", `Subagent '${id}' frontmatter must be a YAML object`, subagentPathRel));
160
+ continue;
161
+ }
162
+ const frontmatterMap = frontmatter;
163
+ const name = typeof frontmatterMap.name === "string" ? frontmatterMap.name.trim() : "";
164
+ const description = typeof frontmatterMap.description === "string" ? frontmatterMap.description.trim() : "";
165
+ if (!name) {
166
+ diagnostics.push(error("REGISTRY_SUBAGENT_INVALID", `Subagent '${id}' frontmatter requires non-empty 'name'`, subagentPathRel));
167
+ }
168
+ if (!description) {
169
+ diagnostics.push(error("REGISTRY_SUBAGENT_INVALID", `Subagent '${id}' frontmatter requires non-empty 'description'`, subagentPathRel));
170
+ }
171
+ if (!body) {
172
+ diagnostics.push(error("REGISTRY_SUBAGENT_INVALID", `Subagent '${id}' body must be non-empty`, subagentPathRel));
173
+ }
174
+ }
175
+ catch (err) {
176
+ diagnostics.push(error("REGISTRY_SUBAGENT_INVALID", `Subagent '${id}' frontmatter is invalid: ${err instanceof Error ? err.message : "unknown error"}`, subagentPathRel));
177
+ }
178
+ }
179
+ }
180
+ diagnostics.sort((left, right) => {
181
+ const pathCompare = (left.path ?? "").localeCompare(right.path ?? "");
182
+ if (pathCompare !== 0) {
183
+ return pathCompare;
184
+ }
185
+ return left.code.localeCompare(right.code);
186
+ });
187
+ return {
188
+ valid: !diagnostics.some((diagnostic) => diagnostic.severity === "error"),
189
+ diagnostics,
190
+ };
191
+ }
192
+ function error(code, message, pathValue) {
193
+ return {
194
+ code,
195
+ severity: "error",
196
+ message,
197
+ path: pathValue,
198
+ };
199
+ }
200
+ async function readJsonObject(absPath, code, messagePrefix, diagnostics, repoPath) {
201
+ const text = await readTextIfExists(absPath);
202
+ if (text === null) {
203
+ diagnostics.push(error(code, `${messagePrefix}: file is missing`, toPosixRelative(absPath, repoPath)));
204
+ return undefined;
205
+ }
206
+ try {
207
+ const parsed = JSON.parse(text);
208
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
209
+ diagnostics.push(error(code, `${messagePrefix}: expected a JSON object`, toPosixRelative(absPath, repoPath)));
210
+ return undefined;
211
+ }
212
+ return parsed;
213
+ }
214
+ catch (err) {
215
+ diagnostics.push(error(code, `${messagePrefix}: ${err instanceof Error ? err.message : "invalid JSON"}`, toPosixRelative(absPath, repoPath)));
216
+ return undefined;
217
+ }
218
+ }
219
+ function isValidEntityId(value) {
220
+ return ENTITY_ID_PATTERN.test(value);
221
+ }
222
+ //# sourceMappingURL=registry-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-validator.js","sourceRoot":"","sources":["../src/registry-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { HarnessPaths } from "./paths.js";
2
+ import type { AgentsManifest, Diagnostic, ManagedIndex, ManifestLock, ProviderId, ProviderOverride, VersionStatus } from "./types.js";
3
+ type VersionIssue = VersionStatus;
4
+ export declare function loadManifest(paths: HarnessPaths): Promise<{
5
+ manifest: AgentsManifest | null;
6
+ diagnostics: Diagnostic[];
7
+ versionStatus?: VersionIssue;
8
+ }>;
9
+ export declare function writeManifest(paths: HarnessPaths, manifest: AgentsManifest): Promise<void>;
10
+ export declare function loadLock(paths: HarnessPaths): Promise<{
11
+ lock: ManifestLock | null;
12
+ diagnostics: Diagnostic[];
13
+ raw: string | null;
14
+ versionStatus?: VersionIssue;
15
+ }>;
16
+ export declare function writeLock(paths: HarnessPaths, lock: ManifestLock): Promise<string>;
17
+ export declare function emptyManagedIndex(): ManagedIndex;
18
+ export declare function loadManagedIndex(paths: HarnessPaths): Promise<{
19
+ managedIndex: ManagedIndex;
20
+ diagnostics: Diagnostic[];
21
+ versionStatus?: VersionIssue;
22
+ }>;
23
+ export declare function writeManagedIndex(paths: HarnessPaths, managedIndex: ManagedIndex): Promise<void>;
24
+ export declare function readProviderOverrideFile(rootDir: string, provider: ProviderId, overridePath?: string): Promise<{
25
+ override: ProviderOverride | undefined;
26
+ sha256: string | undefined;
27
+ diagnostics: Diagnostic[];
28
+ versionStatus?: VersionIssue;
29
+ }>;
30
+ export declare function listFilesRecursively(baseDir: string): Promise<string[]>;
31
+ export declare function collectSourceCandidates(paths: HarnessPaths): Promise<string[]>;
32
+ export declare function collectManagedSourcePaths(manifest: AgentsManifest): string[];
33
+ export declare function removeIfExists(filePath: string): Promise<void>;
34
+ export declare function copyWorkspaceFileToBackup(paths: HarnessPaths, relativePath: string, backupRoot: string): Promise<boolean>;
35
+ export {};
36
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,KAAK,YAAY,GAAG,aAAa,CAAC;AAElC,wBAAsB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/D,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,CAAC,CA2CD;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhG;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;IAC3D,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,CAAC,CAkCD;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxF;AAED,wBAAgB,iBAAiB,IAAI,YAAY,CAMhD;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;IACnE,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,CAAC,CAkCD;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtG;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,UAAU,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IACT,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACvC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,CAAC,CA0DD;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsB7E;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgDpF;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE,CAe5E;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpE;AAED,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAElB"}