@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,461 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { DEFAULT_REGISTRY_ID, providerIdSchema } from "@madebywild/agent-harness-manifest";
4
+ import { fetchEntityFromRegistry } from "../entity-registries.js";
5
+ import { DEFAULT_PROMPT_SOURCE_PATH, defaultMcpOverridePath, defaultMcpSourcePath, defaultPromptOverridePath, defaultSkillOverridePath, defaultSkillSourcePath, defaultSubagentOverridePath, defaultSubagentSourcePath, resolveHarnessPaths, } from "../paths.js";
6
+ import { listFilesRecursively, removeIfExists, writeLock, writeManifest } from "../repository.js";
7
+ import { CLI_ENTITY_TO_MANIFEST_ENTITY, CLI_ENTITY_TYPES } from "../types.js";
8
+ import { ensureParentDir, exists, normalizeRelativePath, nowIso, sha256, stableStringify } from "../utils.js";
9
+ import { readLockOrDefault, readManifestOrThrow, removeLockEntityRecord, setLockEntityRecord, upsertLockEntityRecord, writeManagedSourceIndex, } from "./state.js";
10
+ import { computeSkillSourceSha, isSkillOverrideFile, manifestEntityTypeToCliEntityType, registryIdFromInput, resolveEntityRegistrySelection, resolveRemoveTargetId, sortEntities, validateEntityId, } from "./utils.js";
11
+ export async function ensureOverrideFiles(cwd, entityType, entityId, existing) {
12
+ const overrides = {};
13
+ const overrideShaByProvider = {};
14
+ for (const provider of providerIdSchema.options) {
15
+ const overridePath = existing?.[provider] ??
16
+ (entityType === "prompt"
17
+ ? defaultPromptOverridePath(provider)
18
+ : entityType === "skill"
19
+ ? defaultSkillOverridePath(entityId, provider)
20
+ : entityType === "mcp_config"
21
+ ? defaultMcpOverridePath(entityId, provider)
22
+ : defaultSubagentOverridePath(entityId, provider));
23
+ overrides[provider] = overridePath;
24
+ const absolute = path.join(cwd, overridePath);
25
+ if (!(await exists(absolute))) {
26
+ await ensureParentDir(absolute);
27
+ await fs.writeFile(absolute, "version: 1\n", "utf8");
28
+ }
29
+ const text = await fs.readFile(absolute, "utf8");
30
+ overrideShaByProvider[provider] = sha256(text);
31
+ }
32
+ return { overrides, overrideShaByProvider };
33
+ }
34
+ export async function readCurrentSourceSha(cwd, entity) {
35
+ const sourceAbs = path.join(cwd, entity.sourcePath);
36
+ if (entity.type === "prompt") {
37
+ const text = await fs.readFile(sourceAbs, "utf8");
38
+ return sha256(text);
39
+ }
40
+ if (entity.type === "subagent") {
41
+ const text = await fs.readFile(sourceAbs, "utf8");
42
+ return sha256(text);
43
+ }
44
+ if (entity.type === "mcp_config") {
45
+ const text = await fs.readFile(sourceAbs, "utf8");
46
+ const parsed = JSON.parse(text);
47
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
48
+ throw new Error(`MCP source '${entity.sourcePath}' must be a JSON object`);
49
+ }
50
+ return sha256(stableStringify(parsed));
51
+ }
52
+ const skillRoot = path.join(cwd, `.harness/src/skills/${entity.id}`);
53
+ const files = await loadSkillSourceHashes(skillRoot);
54
+ return computeSkillSourceSha(files);
55
+ }
56
+ export async function loadSkillSourceHashes(skillRootAbs) {
57
+ const files = await listFilesRecursively(skillRootAbs);
58
+ const output = [];
59
+ for (const filePath of files) {
60
+ const relativePath = normalizeRelativePath(path.relative(skillRootAbs, filePath).replace(/\\/g, "/"));
61
+ if (isSkillOverrideFile(relativePath)) {
62
+ continue;
63
+ }
64
+ const content = await fs.readFile(filePath, "utf8");
65
+ output.push({ path: relativePath, sha256: sha256(content) });
66
+ }
67
+ output.sort((left, right) => left.path.localeCompare(right.path));
68
+ return output;
69
+ }
70
+ export async function materializeFetchedEntity(cwd, entity, fetched) {
71
+ if (entity.type === "prompt" && fetched.type === "prompt") {
72
+ const sourceAbs = path.join(cwd, entity.sourcePath);
73
+ await ensureParentDir(sourceAbs);
74
+ await fs.writeFile(sourceAbs, fetched.sourceText, "utf8");
75
+ return;
76
+ }
77
+ if (entity.type === "mcp_config" && fetched.type === "mcp_config") {
78
+ const sourceAbs = path.join(cwd, entity.sourcePath);
79
+ await ensureParentDir(sourceAbs);
80
+ await fs.writeFile(sourceAbs, stableStringify(fetched.sourceJson), "utf8");
81
+ return;
82
+ }
83
+ if (entity.type === "subagent" && fetched.type === "subagent") {
84
+ const sourceAbs = path.join(cwd, entity.sourcePath);
85
+ await ensureParentDir(sourceAbs);
86
+ await fs.writeFile(sourceAbs, fetched.sourceText, "utf8");
87
+ return;
88
+ }
89
+ if (entity.type === "skill" && fetched.type === "skill") {
90
+ const skillRootAbs = path.join(cwd, `.harness/src/skills/${entity.id}`);
91
+ await fs.mkdir(skillRootAbs, { recursive: true });
92
+ const existingFiles = await listFilesRecursively(skillRootAbs);
93
+ const incomingSet = new Set(fetched.files.map((file) => file.path));
94
+ for (const existingFile of existingFiles) {
95
+ const relativePath = normalizeRelativePath(path.relative(skillRootAbs, existingFile).replace(/\\/g, "/"));
96
+ if (isSkillOverrideFile(relativePath)) {
97
+ continue;
98
+ }
99
+ if (!incomingSet.has(relativePath)) {
100
+ await fs.rm(existingFile, { force: true });
101
+ }
102
+ }
103
+ for (const file of fetched.files) {
104
+ const absolute = path.join(skillRootAbs, file.path);
105
+ await ensureParentDir(absolute);
106
+ await fs.writeFile(absolute, file.content, "utf8");
107
+ }
108
+ return;
109
+ }
110
+ throw new Error(`Fetched entity type mismatch for ${entity.type}:${entity.id}`);
111
+ }
112
+ export async function addPromptEntity(cwd, options) {
113
+ const paths = resolveHarnessPaths(cwd);
114
+ const manifest = await readManifestOrThrow(paths);
115
+ const existingPrompt = manifest.entities.find((entity) => entity.type === "prompt");
116
+ if (existingPrompt) {
117
+ throw new Error("Prompt entity already exists (v1 supports exactly one prompt)");
118
+ }
119
+ const sourcePath = DEFAULT_PROMPT_SOURCE_PATH;
120
+ const sourceAbs = path.join(cwd, sourcePath);
121
+ if (await exists(sourceAbs)) {
122
+ throw new Error(`Cannot add prompt because '${sourcePath}' already exists`);
123
+ }
124
+ const registry = resolveEntityRegistrySelection(manifest, options?.registry);
125
+ let sourceText = "# System Prompt\n\nDescribe the core behavior for the assistant.\n";
126
+ let importedSourceSha256;
127
+ let registryRevision;
128
+ if (registry.definition.type === "git") {
129
+ const fetched = await fetchEntityFromRegistry(registry.id, registry.definition, "prompt", "system");
130
+ if (fetched.type !== "prompt") {
131
+ throw new Error(`REGISTRY_FETCH_FAILED: expected prompt from registry '${registry.id}'`);
132
+ }
133
+ sourceText = fetched.sourceText;
134
+ importedSourceSha256 = fetched.importedSourceSha256;
135
+ registryRevision = fetched.registryRevision;
136
+ }
137
+ await ensureParentDir(sourceAbs);
138
+ await fs.writeFile(sourceAbs, sourceText, "utf8");
139
+ const { overrides, overrideShaByProvider } = await ensureOverrideFiles(cwd, "prompt", "system");
140
+ manifest.entities.push({
141
+ id: "system",
142
+ type: "prompt",
143
+ registry: registry.id,
144
+ sourcePath,
145
+ overrides,
146
+ enabled: true,
147
+ });
148
+ manifest.entities = sortEntities(manifest.entities);
149
+ await writeManifest(paths, manifest);
150
+ await writeManagedSourceIndex(paths, manifest);
151
+ await upsertLockEntityRecord(paths, manifest, {
152
+ id: "system",
153
+ type: "prompt",
154
+ registry: registry.id,
155
+ sourceSha256: sha256(sourceText),
156
+ overrideSha256ByProvider: overrideShaByProvider,
157
+ importedSourceSha256,
158
+ registryRevision,
159
+ });
160
+ }
161
+ export async function addSkillEntity(cwd, skillId, options) {
162
+ validateEntityId(skillId, "skill");
163
+ const paths = resolveHarnessPaths(cwd);
164
+ const manifest = await readManifestOrThrow(paths);
165
+ if (manifest.entities.some((entity) => entity.type === "skill" && entity.id === skillId)) {
166
+ throw new Error(`Skill '${skillId}' already exists`);
167
+ }
168
+ const sourcePath = defaultSkillSourcePath(skillId);
169
+ const skillRootRel = `.harness/src/skills/${skillId}`;
170
+ const skillRootAbs = path.join(cwd, skillRootRel);
171
+ if (await exists(skillRootAbs)) {
172
+ throw new Error(`Cannot add skill because '${skillRootRel}' already exists`);
173
+ }
174
+ const registry = resolveEntityRegistrySelection(manifest, options?.registry);
175
+ let sourceSha256;
176
+ let importedSourceSha256;
177
+ let registryRevision;
178
+ let skillFiles;
179
+ if (registry.definition.type === "git") {
180
+ const fetched = await fetchEntityFromRegistry(registry.id, registry.definition, "skill", skillId);
181
+ if (fetched.type !== "skill") {
182
+ throw new Error(`REGISTRY_FETCH_FAILED: expected skill '${skillId}' from registry '${registry.id}'`);
183
+ }
184
+ skillFiles = fetched.files.map((file) => ({
185
+ path: file.path,
186
+ content: file.content,
187
+ sha256: file.sha256,
188
+ }));
189
+ sourceSha256 = fetched.importedSourceSha256;
190
+ importedSourceSha256 = fetched.importedSourceSha256;
191
+ registryRevision = fetched.registryRevision;
192
+ }
193
+ else {
194
+ const content = `---\nname: ${skillId}\ndescription: Describe what this skill does.\n---\n\n# ${skillId}\n\nAdd usage guidance here.\n`;
195
+ skillFiles = [
196
+ {
197
+ path: "SKILL.md",
198
+ content,
199
+ sha256: sha256(content),
200
+ },
201
+ ];
202
+ sourceSha256 = computeSkillSourceSha(skillFiles.map((file) => ({ path: file.path, sha256: file.sha256 })));
203
+ }
204
+ for (const file of skillFiles) {
205
+ const absolute = path.join(skillRootAbs, file.path);
206
+ await ensureParentDir(absolute);
207
+ await fs.writeFile(absolute, file.content, "utf8");
208
+ }
209
+ const { overrides, overrideShaByProvider } = await ensureOverrideFiles(cwd, "skill", skillId);
210
+ manifest.entities.push({
211
+ id: skillId,
212
+ type: "skill",
213
+ registry: registry.id,
214
+ sourcePath,
215
+ overrides,
216
+ enabled: true,
217
+ });
218
+ manifest.entities = sortEntities(manifest.entities);
219
+ await writeManifest(paths, manifest);
220
+ await writeManagedSourceIndex(paths, manifest);
221
+ await upsertLockEntityRecord(paths, manifest, {
222
+ id: skillId,
223
+ type: "skill",
224
+ registry: registry.id,
225
+ sourceSha256,
226
+ overrideSha256ByProvider: overrideShaByProvider,
227
+ importedSourceSha256,
228
+ registryRevision,
229
+ });
230
+ }
231
+ export async function addMcpEntity(cwd, configId, options) {
232
+ validateEntityId(configId, "mcp_config");
233
+ const paths = resolveHarnessPaths(cwd);
234
+ const manifest = await readManifestOrThrow(paths);
235
+ if (manifest.entities.some((entity) => entity.type === "mcp_config" && entity.id === configId)) {
236
+ throw new Error(`MCP config '${configId}' already exists`);
237
+ }
238
+ const sourcePath = defaultMcpSourcePath(configId);
239
+ const sourceAbs = path.join(cwd, sourcePath);
240
+ if (await exists(sourceAbs)) {
241
+ throw new Error(`Cannot add MCP config because '${sourcePath}' already exists`);
242
+ }
243
+ const registry = resolveEntityRegistrySelection(manifest, options?.registry);
244
+ let sourceJson;
245
+ let importedSourceSha256;
246
+ let registryRevision;
247
+ if (registry.definition.type === "git") {
248
+ const fetched = await fetchEntityFromRegistry(registry.id, registry.definition, "mcp_config", configId);
249
+ if (fetched.type !== "mcp_config") {
250
+ throw new Error(`REGISTRY_FETCH_FAILED: expected mcp config '${configId}' from registry '${registry.id}'`);
251
+ }
252
+ sourceJson = fetched.sourceJson;
253
+ importedSourceSha256 = fetched.importedSourceSha256;
254
+ registryRevision = fetched.registryRevision;
255
+ }
256
+ else {
257
+ sourceJson = {
258
+ servers: {
259
+ [configId]: {
260
+ command: "echo",
261
+ args: ["configure-this-mcp-server"],
262
+ },
263
+ },
264
+ };
265
+ }
266
+ const sourceContent = stableStringify(sourceJson);
267
+ await ensureParentDir(sourceAbs);
268
+ await fs.writeFile(sourceAbs, sourceContent, "utf8");
269
+ const { overrides, overrideShaByProvider } = await ensureOverrideFiles(cwd, "mcp_config", configId);
270
+ manifest.entities.push({
271
+ id: configId,
272
+ type: "mcp_config",
273
+ registry: registry.id,
274
+ sourcePath,
275
+ overrides,
276
+ enabled: true,
277
+ });
278
+ manifest.entities = sortEntities(manifest.entities);
279
+ await writeManifest(paths, manifest);
280
+ await writeManagedSourceIndex(paths, manifest);
281
+ await upsertLockEntityRecord(paths, manifest, {
282
+ id: configId,
283
+ type: "mcp_config",
284
+ registry: registry.id,
285
+ sourceSha256: sha256(stableStringify(sourceJson)),
286
+ overrideSha256ByProvider: overrideShaByProvider,
287
+ importedSourceSha256,
288
+ registryRevision,
289
+ });
290
+ }
291
+ export async function addSubagentEntity(cwd, subagentId, options) {
292
+ validateEntityId(subagentId, "subagent");
293
+ const paths = resolveHarnessPaths(cwd);
294
+ const manifest = await readManifestOrThrow(paths);
295
+ if (manifest.entities.some((entity) => entity.type === "subagent" && entity.id === subagentId)) {
296
+ throw new Error(`Subagent '${subagentId}' already exists`);
297
+ }
298
+ const sourcePath = defaultSubagentSourcePath(subagentId);
299
+ const sourceAbs = path.join(cwd, sourcePath);
300
+ if (await exists(sourceAbs)) {
301
+ throw new Error(`Cannot add subagent because '${sourcePath}' already exists`);
302
+ }
303
+ const registry = resolveEntityRegistrySelection(manifest, options?.registry);
304
+ let sourceText;
305
+ let importedSourceSha256;
306
+ let registryRevision;
307
+ if (registry.definition.type === "git") {
308
+ const fetched = await fetchEntityFromRegistry(registry.id, registry.definition, "subagent", subagentId);
309
+ if (fetched.type !== "subagent") {
310
+ throw new Error(`REGISTRY_FETCH_FAILED: expected subagent '${subagentId}' from registry '${registry.id}'`);
311
+ }
312
+ sourceText = fetched.sourceText;
313
+ importedSourceSha256 = fetched.importedSourceSha256;
314
+ registryRevision = fetched.registryRevision;
315
+ }
316
+ else {
317
+ sourceText =
318
+ `---\nname: ${subagentId}\ndescription: Describe what this subagent does.\n---\n\n` +
319
+ `You are the ${subagentId} subagent.\n\nAdd instructions here.\n`;
320
+ }
321
+ await ensureParentDir(sourceAbs);
322
+ await fs.writeFile(sourceAbs, sourceText, "utf8");
323
+ const { overrides, overrideShaByProvider } = await ensureOverrideFiles(cwd, "subagent", subagentId);
324
+ manifest.entities.push({
325
+ id: subagentId,
326
+ type: "subagent",
327
+ registry: registry.id,
328
+ sourcePath,
329
+ overrides,
330
+ enabled: true,
331
+ });
332
+ manifest.entities = sortEntities(manifest.entities);
333
+ await writeManifest(paths, manifest);
334
+ await writeManagedSourceIndex(paths, manifest);
335
+ await upsertLockEntityRecord(paths, manifest, {
336
+ id: subagentId,
337
+ type: "subagent",
338
+ registry: registry.id,
339
+ sourceSha256: sha256(sourceText),
340
+ overrideSha256ByProvider: overrideShaByProvider,
341
+ importedSourceSha256,
342
+ registryRevision,
343
+ });
344
+ }
345
+ export async function pullRegistryEntities(cwd, options) {
346
+ const paths = resolveHarnessPaths(cwd);
347
+ const manifest = await readManifestOrThrow(paths);
348
+ if ((options?.entityType && !options.id) || (!options?.entityType && options?.id)) {
349
+ throw new Error("registry pull requires both <entity-type> and <id> when targeting a specific entity");
350
+ }
351
+ if (options?.entityType && !CLI_ENTITY_TYPES.includes(options.entityType)) {
352
+ throw new Error(`entity-type must be one of: ${CLI_ENTITY_TYPES.join(", ")}`);
353
+ }
354
+ const targetRegistryId = options?.registry ? registryIdFromInput(options.registry) : undefined;
355
+ if (targetRegistryId && !manifest.registries.entries[targetRegistryId]) {
356
+ throw new Error(`REGISTRY_NOT_FOUND: registry '${targetRegistryId}' is not configured`);
357
+ }
358
+ let targets = manifest.entities.filter((entity) => entity.registry !== DEFAULT_REGISTRY_ID);
359
+ if (targetRegistryId) {
360
+ targets = targets.filter((entity) => entity.registry === targetRegistryId);
361
+ }
362
+ if (options?.entityType && options.id) {
363
+ const targetType = CLI_ENTITY_TO_MANIFEST_ENTITY[options.entityType];
364
+ const targetId = resolveRemoveTargetId(options.entityType, options.id);
365
+ targets = targets.filter((entity) => entity.type === targetType && entity.id === targetId);
366
+ }
367
+ if (targets.length === 0) {
368
+ return { updatedEntities: [] };
369
+ }
370
+ const lock = await readLockOrDefault(paths, manifest);
371
+ const plannedUpdates = [];
372
+ for (const entity of sortEntities(targets)) {
373
+ const registryDef = manifest.registries.entries[entity.registry];
374
+ if (!registryDef || registryDef.type !== "git") {
375
+ continue;
376
+ }
377
+ const fetched = await fetchEntityFromRegistry(entity.registry, registryDef, entity.type, entity.id);
378
+ const currentSourceSha = await readCurrentSourceSha(cwd, entity);
379
+ const existingLockRecord = lock.entities.find((record) => record.type === entity.type && record.id === entity.id);
380
+ if (existingLockRecord?.importedSourceSha256 &&
381
+ currentSourceSha !== existingLockRecord.importedSourceSha256 &&
382
+ options?.force !== true) {
383
+ throw new Error(`REGISTRY_PULL_CONFLICT: ${entity.type} '${entity.id}' has local changes. Re-run with --force to overwrite.`);
384
+ }
385
+ plannedUpdates.push({ entity, fetched });
386
+ }
387
+ if (plannedUpdates.length === 0) {
388
+ return { updatedEntities: [] };
389
+ }
390
+ const updatedEntities = [];
391
+ let manifestMutated = false;
392
+ for (const planned of plannedUpdates) {
393
+ const { entity, fetched } = planned;
394
+ await materializeFetchedEntity(cwd, entity, fetched);
395
+ const ensuredOverrides = await ensureOverrideFiles(cwd, entity.type, entity.id, entity.overrides);
396
+ entity.overrides = ensuredOverrides.overrides;
397
+ manifestMutated = true;
398
+ setLockEntityRecord(lock, {
399
+ id: entity.id,
400
+ type: entity.type,
401
+ registry: entity.registry,
402
+ sourceSha256: fetched.importedSourceSha256,
403
+ overrideSha256ByProvider: ensuredOverrides.overrideShaByProvider,
404
+ importedSourceSha256: fetched.importedSourceSha256,
405
+ registryRevision: fetched.registryRevision,
406
+ });
407
+ updatedEntities.push({
408
+ type: manifestEntityTypeToCliEntityType(entity.type),
409
+ id: entity.id,
410
+ });
411
+ }
412
+ if (manifestMutated) {
413
+ manifest.entities = sortEntities(manifest.entities);
414
+ await writeManifest(paths, manifest);
415
+ }
416
+ if (updatedEntities.length === 0) {
417
+ return { updatedEntities };
418
+ }
419
+ await writeManagedSourceIndex(paths, manifest);
420
+ lock.generatedAt = nowIso();
421
+ lock.manifestFingerprint = sha256(JSON.stringify(manifest));
422
+ await writeLock(paths, lock);
423
+ return { updatedEntities };
424
+ }
425
+ export async function removeEntity(cwd, entityTypeArg, id, deleteSource) {
426
+ const paths = resolveHarnessPaths(cwd);
427
+ const manifest = await readManifestOrThrow(paths);
428
+ const entityType = CLI_ENTITY_TO_MANIFEST_ENTITY[entityTypeArg];
429
+ const targetId = resolveRemoveTargetId(entityTypeArg, id);
430
+ const entityIndex = manifest.entities.findIndex((entity) => entity.type === entityType && entity.id === targetId);
431
+ if (entityIndex === -1) {
432
+ throw new Error(`Could not find ${entityTypeArg} entity '${targetId}'`);
433
+ }
434
+ const [entity] = manifest.entities.splice(entityIndex, 1);
435
+ if (!entity) {
436
+ throw new Error(`Could not find ${entityTypeArg} entity '${targetId}'`);
437
+ }
438
+ if (deleteSource) {
439
+ await removeIfExists(path.join(cwd, normalizeRelativePath(entity.sourcePath)));
440
+ if (entity.overrides) {
441
+ for (const provider of providerIdSchema.options) {
442
+ const overridePath = entity.overrides[provider];
443
+ if (overridePath) {
444
+ await removeIfExists(path.join(cwd, normalizeRelativePath(overridePath)));
445
+ }
446
+ }
447
+ }
448
+ if (entity.type === "skill") {
449
+ await removeIfExists(path.join(cwd, `.harness/src/skills/${entity.id}`));
450
+ }
451
+ }
452
+ manifest.entities = sortEntities(manifest.entities);
453
+ await writeManifest(paths, manifest);
454
+ await writeManagedSourceIndex(paths, manifest);
455
+ await removeLockEntityRecord(paths, manifest, entity.type, entity.id);
456
+ return {
457
+ entityType: entityTypeArg,
458
+ id: entity.id,
459
+ };
460
+ }
461
+ //# sourceMappingURL=entities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/engine/entities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { HarnessPaths } from "../paths.js";
2
+ import type { AgentsManifest, EntityType, LockEntityRecord, ManagedIndex, ManifestLock, RegistryId, RegistryRevision } from "../types.js";
3
+ export declare function readManifestOrThrow(paths: HarnessPaths): Promise<AgentsManifest>;
4
+ export declare function readLockOrDefault(paths: HarnessPaths, manifest: AgentsManifest): Promise<ManifestLock>;
5
+ export declare function readManagedIndexOrDefault(paths: HarnessPaths): Promise<ManagedIndex>;
6
+ export type LockEntityRecordInput = {
7
+ id: string;
8
+ type: EntityType;
9
+ registry: RegistryId;
10
+ sourceSha256: string;
11
+ overrideSha256ByProvider: LockEntityRecord["overrideSha256ByProvider"];
12
+ importedSourceSha256?: string;
13
+ registryRevision?: RegistryRevision;
14
+ };
15
+ export declare function setLockEntityRecord(lock: ManifestLock, record: LockEntityRecordInput): void;
16
+ export declare function upsertLockEntityRecord(paths: HarnessPaths, manifest: AgentsManifest, record: LockEntityRecordInput): Promise<void>;
17
+ export declare function removeLockEntityRecord(paths: HarnessPaths, manifest: AgentsManifest, type: EntityType, id: string): Promise<void>;
18
+ export declare function writeManagedSourceIndex(paths: HarnessPaths, manifest: AgentsManifest): Promise<void>;
19
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/engine/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAGrB,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAUtF;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAa5G;AAED,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAG1F;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,UAAU,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,EAAE,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;IACvE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAkB3F;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1G"}
@@ -0,0 +1,70 @@
1
+ import { LATEST_VERSION_BY_KIND } from "@madebywild/agent-harness-manifest";
2
+ import { collectManagedSourcePaths, loadLock, loadManagedIndex, loadManifest, writeLock, writeManagedIndex, } from "../repository.js";
3
+ import { nowIso, sha256 } from "../utils.js";
4
+ export async function readManifestOrThrow(paths) {
5
+ const result = await loadManifest(paths);
6
+ if (result.manifest === null) {
7
+ const diagnostic = result.diagnostics[0];
8
+ if (diagnostic) {
9
+ throw new Error(`${diagnostic.code}: ${diagnostic.message}`);
10
+ }
11
+ throw new Error("Manifest not found. Run 'harness init' first.");
12
+ }
13
+ return result.manifest;
14
+ }
15
+ export async function readLockOrDefault(paths, manifest) {
16
+ const lockResult = await loadLock(paths);
17
+ if (lockResult.lock) {
18
+ return lockResult.lock;
19
+ }
20
+ return {
21
+ version: LATEST_VERSION_BY_KIND.lock,
22
+ generatedAt: nowIso(),
23
+ manifestFingerprint: sha256(JSON.stringify(manifest)),
24
+ entities: [],
25
+ outputs: [],
26
+ };
27
+ }
28
+ export async function readManagedIndexOrDefault(paths) {
29
+ const result = await loadManagedIndex(paths);
30
+ return result.managedIndex;
31
+ }
32
+ export function setLockEntityRecord(lock, record) {
33
+ lock.entities = lock.entities.filter((entry) => !(entry.id === record.id && entry.type === record.type));
34
+ lock.entities.push({
35
+ id: record.id,
36
+ type: record.type,
37
+ registry: record.registry,
38
+ sourceSha256: record.sourceSha256,
39
+ overrideSha256ByProvider: record.overrideSha256ByProvider,
40
+ importedSourceSha256: record.importedSourceSha256,
41
+ registryRevision: record.registryRevision,
42
+ });
43
+ lock.entities.sort((left, right) => {
44
+ const byType = left.type.localeCompare(right.type);
45
+ if (byType !== 0) {
46
+ return byType;
47
+ }
48
+ return left.id.localeCompare(right.id);
49
+ });
50
+ }
51
+ export async function upsertLockEntityRecord(paths, manifest, record) {
52
+ const lock = await readLockOrDefault(paths, manifest);
53
+ setLockEntityRecord(lock, record);
54
+ lock.generatedAt = nowIso();
55
+ lock.manifestFingerprint = sha256(JSON.stringify(manifest));
56
+ await writeLock(paths, lock);
57
+ }
58
+ export async function removeLockEntityRecord(paths, manifest, type, id) {
59
+ const lock = await readLockOrDefault(paths, manifest);
60
+ lock.entities = lock.entities.filter((entry) => !(entry.type === type && entry.id === id));
61
+ lock.generatedAt = nowIso();
62
+ lock.manifestFingerprint = sha256(JSON.stringify(manifest));
63
+ await writeLock(paths, lock);
64
+ }
65
+ export async function writeManagedSourceIndex(paths, manifest) {
66
+ const index = await readManagedIndexOrDefault(paths);
67
+ index.managedSourcePaths = collectManagedSourcePaths(manifest);
68
+ await writeManagedIndex(paths, index);
69
+ }
70
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/engine/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { AgentsManifest, CliEntityType, Diagnostic, EntityType, ManagedIndex, ManifestLock, ProviderOverride, RegistryDefinition, RegistryId, ValidationResult } from "../types.js";
2
+ export declare function sortEntities(entities: AgentsManifest["entities"]): AgentsManifest["entities"];
3
+ export declare function validateEntityId(id: string, type: EntityType): void;
4
+ export declare function validateRegistryId(id: string): void;
5
+ export declare function registryIdFromInput(value: string): RegistryId;
6
+ export declare function resolveEntityRegistrySelection(manifest: AgentsManifest, explicitRegistry?: string): {
7
+ id: RegistryId;
8
+ definition: RegistryDefinition;
9
+ };
10
+ export declare function manifestEntityTypeToCliEntityType(type: EntityType): CliEntityType;
11
+ export declare function isSkillOverrideFile(relativePath: string): boolean;
12
+ export declare function computeSkillSourceSha(files: Array<{
13
+ path: string;
14
+ sha256: string;
15
+ }>): string;
16
+ export declare function resolveRemoveTargetId(entityType: CliEntityType, id: string): string;
17
+ export declare function printDiagnostics(diagnostics: Diagnostic[]): void;
18
+ export declare function printApplySummary(writtenArtifacts: string[], prunedArtifacts: string[]): void;
19
+ export declare function preflightDiagnosticsFromDoctor(doctorDiagnostics: Diagnostic[], fileDiagnostics: Array<{
20
+ code: string;
21
+ }>): Diagnostic[];
22
+ export declare function isMissingWorkspaceCode(code: string): boolean;
23
+ export declare function loadConfig(pathValue?: string): Promise<AgentsManifest>;
24
+ export declare function validateConfig(config: AgentsManifest): ValidationResult;
25
+ export declare function validateLock(lock: ManifestLock): ValidationResult;
26
+ export declare function validateManagedIndex(index: ManagedIndex): ValidationResult;
27
+ export declare function loadOverride(pathValue: string): Promise<ProviderOverride>;
28
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/engine/utils.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAGrB,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,CAe7F;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAInE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAInD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAG7D;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,cAAc,EACxB,gBAAgB,CAAC,EAAE,MAAM,GACxB;IAAE,EAAE,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAA;CAAE,CASpD;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,CAWjF;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAK5F;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAUnF;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAQhE;AAED,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAQ7F;AAED,wBAAgB,8BAA8B,CAC5C,iBAAiB,EAAE,UAAU,EAAE,EAC/B,eAAe,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GACvC,UAAU,EAAE,CAQd;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAsB,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAI5E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAevE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,CAejE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,gBAAgB,CAe1E;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAI/E"}