@h9-foundry/agentforge-cli 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,385 @@
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import yaml from "js-yaml";
4
+ import { renderAuditBundleMarkdown } from "@h9-foundry/agentforge-audit";
5
+ import { createWorkflowState, findWorkspaceRoot } from "@h9-foundry/agentforge-context-engine";
6
+ import { createPolicyEngine, loadPolicyDocument, resolvePolicy } from "@h9-foundry/agentforge-policy-engine";
7
+ import { runWorkflow } from "@h9-foundry/agentforge-runtime";
8
+ import { agentforgeConfigSchema, workflowDefinitionSchema } from "@h9-foundry/agentforge-schemas";
9
+ import { createBuiltinAdapters } from "./internal/builtin-adapters.js";
10
+ import { createBuiltinAgentRegistry } from "./internal/builtin-agents.js";
11
+ import { LocalPluginRegistry } from "./internal/local-plugin-registry.js";
12
+ export { checkReleaseReadiness, getReleaseGuide, renderReleaseGuide, TARGET_NPM_SCOPE, EXPECTED_PUBLIC_PACKAGES } from "./internal/release-preflight.js";
13
+ export { verifyReleaseArtifacts } from "./internal/release-verification.js";
14
+ const agentforgeConfigTemplate = `version: 1
15
+ project:
16
+ name: REPO_NAME
17
+ language: typescript
18
+ runtime:
19
+ mode: inspect
20
+ runs_path: .agentops/runs
21
+ providers:
22
+ default: disabled
23
+ reporting:
24
+ github:
25
+ tracker_issue: 1
26
+ plugins:
27
+ agents: []
28
+ `;
29
+ const policyTemplate = `version: 1
30
+ defaults:
31
+ execution_mode: inspect
32
+ model_access: false
33
+ network: deny
34
+ writes: approval_required
35
+ paths:
36
+ allowed_read:
37
+ - "**/*"
38
+ allowed_write:
39
+ - ".agentops/runs/**"
40
+ - "tests/**"
41
+ blocked:
42
+ - ".env*"
43
+ - "**/.env*"
44
+ - "secrets/**"
45
+ - "**/*.pem"
46
+ - "**/*.key"
47
+ - "**/id_rsa*"
48
+ - "infra/prod/**"
49
+ plugins:
50
+ allowed_tiers:
51
+ - core
52
+ - verified
53
+ allowed_sources:
54
+ - official
55
+ - local
56
+ require_reviewed: true
57
+ tools:
58
+ git.status:
59
+ effect: allow
60
+ git.diff-summary:
61
+ effect: allow
62
+ filesystem.read-file:
63
+ effect: allow
64
+ filesystem.list-files:
65
+ effect: allow
66
+ filesystem.write-file:
67
+ effect: approval_required
68
+ shell.run-template:
69
+ effect: deny
70
+ github.create-check:
71
+ effect: deny
72
+ `;
73
+ const workflowTemplate = `version: 1
74
+ name: pr-review
75
+ trigger: manual
76
+ nodes:
77
+ - id: context
78
+ kind: deterministic
79
+ agent: context-collector
80
+ outputs_to: agentResults.context
81
+ - id: security
82
+ kind: reasoning
83
+ agent: security-audit
84
+ outputs_to: agentResults.security
85
+ - id: review
86
+ kind: reasoning
87
+ agent: code-review
88
+ outputs_to: agentResults.review
89
+ - id: tests
90
+ kind: reasoning
91
+ agent: test-generation
92
+ outputs_to: agentResults.tests
93
+ - id: report
94
+ kind: report
95
+ outputs_to: reports.final
96
+ `;
97
+ function loadYaml(filePath) {
98
+ return yaml.load(readFileSync(filePath, "utf8"));
99
+ }
100
+ function isRecord(value) {
101
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
102
+ }
103
+ function normalizeWorkflow(input) {
104
+ const parsed = input;
105
+ return workflowDefinitionSchema.parse({
106
+ version: parsed.version,
107
+ name: parsed.name,
108
+ description: parsed.description,
109
+ trigger: parsed.trigger,
110
+ nodes: Array.isArray(parsed.nodes)
111
+ ? parsed.nodes.map((node) => {
112
+ const record = node;
113
+ return {
114
+ id: record.id,
115
+ kind: record.kind,
116
+ agent: record.agent,
117
+ outputsTo: record.outputs_to ?? record.outputsTo,
118
+ contextSections: record.context_sections ?? record.contextSections ?? [],
119
+ tools: record.tools ?? []
120
+ };
121
+ })
122
+ : []
123
+ });
124
+ }
125
+ function normalizeAgentForgeConfigInput(value) {
126
+ if (!isRecord(value)) {
127
+ return value;
128
+ }
129
+ const runtime = isRecord(value.runtime) ? value.runtime : {};
130
+ const reporting = isRecord(value.reporting) ? value.reporting : {};
131
+ const github = isRecord(reporting.github) ? reporting.github : {};
132
+ const providers = isRecord(value.providers) ? value.providers : {};
133
+ const plugins = isRecord(value.plugins) ? value.plugins : {};
134
+ const project = isRecord(value.project) ? value.project : {};
135
+ return {
136
+ version: value.version,
137
+ project: {
138
+ name: project.name ?? "repo",
139
+ language: project.language ?? "typescript"
140
+ },
141
+ runtime: {
142
+ mode: runtime.mode,
143
+ runsPath: runtime.runs_path ?? runtime.runsPath
144
+ },
145
+ providers: {
146
+ default: providers.default ?? "disabled"
147
+ },
148
+ reporting: {
149
+ github: Object.keys(github).length > 0
150
+ ? {
151
+ trackerIssue: github.tracker_issue ?? github.trackerIssue
152
+ }
153
+ : undefined
154
+ },
155
+ plugins: {
156
+ agents: Array.isArray(plugins.agents)
157
+ ? plugins.agents.map((entry) => {
158
+ const record = entry;
159
+ return {
160
+ name: record.name,
161
+ package: record.package,
162
+ enabled: record.enabled
163
+ };
164
+ })
165
+ : []
166
+ }
167
+ };
168
+ }
169
+ function loadAgentForgeConfig(root) {
170
+ const configPath = join(root, ".agentops", "agentops.yaml");
171
+ if (!existsSync(configPath)) {
172
+ return agentforgeConfigSchema.parse({
173
+ version: 1,
174
+ project: {
175
+ name: root.split("/").at(-1) ?? "repo",
176
+ language: "typescript"
177
+ },
178
+ runtime: {
179
+ mode: "inspect",
180
+ runsPath: ".agentops/runs"
181
+ },
182
+ providers: {
183
+ default: "disabled"
184
+ },
185
+ reporting: {},
186
+ plugins: {
187
+ agents: []
188
+ }
189
+ });
190
+ }
191
+ const parsed = loadYaml(configPath);
192
+ return agentforgeConfigSchema.parse(normalizeAgentForgeConfigInput(parsed));
193
+ }
194
+ function ensureDirectory(pathValue) {
195
+ mkdirSync(pathValue, { recursive: true });
196
+ }
197
+ function ensureInitFiles(root) {
198
+ const created = [];
199
+ const configDir = join(root, ".agentops");
200
+ const workflowsDir = join(configDir, "workflows");
201
+ ensureDirectory(workflowsDir);
202
+ const files = [
203
+ {
204
+ path: join(configDir, "agentops.yaml"),
205
+ contents: agentforgeConfigTemplate.replace("REPO_NAME", root.split("/").at(-1) ?? "repo")
206
+ },
207
+ {
208
+ path: join(configDir, "policy.yaml"),
209
+ contents: policyTemplate
210
+ },
211
+ {
212
+ path: join(workflowsDir, "pr-review.yaml"),
213
+ contents: workflowTemplate
214
+ }
215
+ ];
216
+ for (const file of files) {
217
+ if (!existsSync(file.path)) {
218
+ writeFileSync(file.path, file.contents, "utf8");
219
+ created.push(file.path);
220
+ }
221
+ }
222
+ return created;
223
+ }
224
+ function buildBuiltinAgentRegistry() {
225
+ return createBuiltinAgentRegistry();
226
+ }
227
+ function buildAdapterRegistry() {
228
+ return new Map(createBuiltinAdapters().map((adapter) => [adapter.manifest.name, adapter]));
229
+ }
230
+ function createBlockedPlugin(registration, reason, trust) {
231
+ return {
232
+ name: registration.name,
233
+ package: registration.package,
234
+ reason,
235
+ ...(trust ? { trust } : {})
236
+ };
237
+ }
238
+ async function buildAgentRegistry(root, config, workflowName) {
239
+ const agents = buildBuiltinAgentRegistry();
240
+ const registryClient = new LocalPluginRegistry(root);
241
+ const policy = resolvePolicy(loadPolicyDocument(join(root, ".agentops", "policy.yaml")), process.env.CI ? "ci" : "local");
242
+ const policyEngine = createPolicyEngine(policy, root);
243
+ const blockedPlugins = [];
244
+ for (const registration of config.plugins.agents) {
245
+ if (!registration.enabled) {
246
+ continue;
247
+ }
248
+ if (agents.has(registration.name)) {
249
+ blockedPlugins.push(createBlockedPlugin(registration, `Plugin name collides with an existing agent: ${registration.name}`));
250
+ continue;
251
+ }
252
+ try {
253
+ const pluginAgent = await registryClient.loadLocalAgentPlugin(registration.package);
254
+ if (pluginAgent.manifest.name !== registration.name) {
255
+ blockedPlugins.push(createBlockedPlugin(registration, `Registered plugin name ${registration.name} does not match exported manifest name ${pluginAgent.manifest.name}`, pluginAgent.manifest.trust));
256
+ continue;
257
+ }
258
+ const trustDecision = policyEngine.evaluatePluginTrust(pluginAgent.manifest.name, pluginAgent.manifest.trust);
259
+ if (!trustDecision.allowed) {
260
+ blockedPlugins.push(createBlockedPlugin(registration, trustDecision.reason ?? "Plugin denied by trust policy.", pluginAgent.manifest.trust));
261
+ continue;
262
+ }
263
+ agents.set(pluginAgent.manifest.name, pluginAgent);
264
+ }
265
+ catch (error) {
266
+ blockedPlugins.push(createBlockedPlugin(registration, error instanceof Error ? error.message : `Failed to load plugin for workflow ${workflowName}`, undefined));
267
+ }
268
+ }
269
+ return { agents, blockedPlugins, policy, policyEngine };
270
+ }
271
+ function validateWorkflowAgents(workflow, agents, blockedPlugins) {
272
+ const blockedByName = new Map(blockedPlugins.map((plugin) => [plugin.name, plugin]));
273
+ for (const node of workflow.nodes) {
274
+ if (!node.agent) {
275
+ continue;
276
+ }
277
+ if (agents.has(node.agent)) {
278
+ continue;
279
+ }
280
+ const blocked = blockedByName.get(node.agent);
281
+ if (blocked) {
282
+ throw new Error(`Workflow agent ${node.agent} is blocked: ${blocked.reason}`);
283
+ }
284
+ throw new Error(`Workflow agent is not registered: ${node.agent}`);
285
+ }
286
+ }
287
+ export function initProject(cwd = process.cwd()) {
288
+ const root = findWorkspaceRoot(cwd);
289
+ const created = ensureInitFiles(root);
290
+ return { root, created };
291
+ }
292
+ export function scanProject(cwd = process.cwd()) {
293
+ const root = findWorkspaceRoot(cwd);
294
+ ensureInitFiles(root);
295
+ const policyPath = join(root, ".agentops", "policy.yaml");
296
+ const policy = resolvePolicy(loadPolicyDocument(policyPath), process.env.CI ? "ci" : "local");
297
+ const state = createWorkflowState({
298
+ cwd: root,
299
+ workflow: "pr-review",
300
+ mode: "inspect",
301
+ policy
302
+ });
303
+ const risks = state.changes.changedFiles.filter((filePath) => /(^\.env|(^|\/)\.env|^secrets\/|^infra\/prod\/|\.pem$|\.key$|(^|\/)id_rsa)/.test(filePath));
304
+ return {
305
+ root,
306
+ packageManager: state.repo.packageManager,
307
+ languages: state.repo.languages,
308
+ changedFiles: state.changes.changedFiles,
309
+ recommendations: ["context-collector", "security-audit", "code-review", "test-generation"],
310
+ risks
311
+ };
312
+ }
313
+ export async function runLocalWorkflow(workflowName, cwd = process.cwd()) {
314
+ const root = findWorkspaceRoot(cwd);
315
+ ensureInitFiles(root);
316
+ const config = loadAgentForgeConfig(root);
317
+ const workflow = normalizeWorkflow(loadYaml(join(root, ".agentops", "workflows", `${workflowName}.yaml`)));
318
+ const { agents, blockedPlugins, policy, policyEngine } = await buildAgentRegistry(root, config, workflowName);
319
+ validateWorkflowAgents(workflow, agents, blockedPlugins);
320
+ const state = createWorkflowState({
321
+ cwd: root,
322
+ workflow: workflow.name,
323
+ mode: policy.defaults.executionMode,
324
+ policy,
325
+ trigger: workflow.trigger
326
+ });
327
+ state.blockedPlugins = blockedPlugins;
328
+ const runsRoot = join(root, config.runtime.runsPath);
329
+ const outputDir = join(runsRoot, state.runId);
330
+ ensureDirectory(outputDir);
331
+ const artifactJsonPath = join(outputDir, "bundle.json");
332
+ const artifactMarkdownPath = join(outputDir, "summary.md");
333
+ const { bundle } = await runWorkflow({
334
+ workflow,
335
+ initialState: state,
336
+ agents,
337
+ adapters: buildAdapterRegistry(),
338
+ policyEngine,
339
+ artifactJsonPath,
340
+ artifactMarkdownPath
341
+ });
342
+ const markdownReport = renderAuditBundleMarkdown(bundle);
343
+ writeFileSync(artifactJsonPath, JSON.stringify(bundle, null, 2), "utf8");
344
+ writeFileSync(artifactMarkdownPath, markdownReport, "utf8");
345
+ const blockedActions = bundle.entries.reduce((total, entry) => total + entry.blockedActions.length, 0);
346
+ return {
347
+ runId: bundle.runId,
348
+ outputDir,
349
+ markdownReport,
350
+ jsonPath: artifactJsonPath,
351
+ markdownPath: artifactMarkdownPath,
352
+ status: bundle.status,
353
+ findings: bundle.findings.length,
354
+ blockedActions,
355
+ blockedPlugins: bundle.blockedPlugins.length
356
+ };
357
+ }
358
+ export function explainLastRun(cwd = process.cwd()) {
359
+ const root = findWorkspaceRoot(cwd);
360
+ const config = loadAgentForgeConfig(root);
361
+ const runsRoot = join(root, config.runtime.runsPath);
362
+ const entries = existsSync(runsRoot) ? readdirSync(runsRoot).sort() : [];
363
+ const latest = entries.at(-1);
364
+ if (!latest) {
365
+ throw new Error("No recorded runs found.");
366
+ }
367
+ const bundle = JSON.parse(readFileSync(join(runsRoot, latest, "bundle.json"), "utf8"));
368
+ return {
369
+ runId: bundle.runId,
370
+ status: bundle.status,
371
+ findings: bundle.findings.length,
372
+ blockedActions: bundle.entries.reduce((total, entry) => total + entry.blockedActions.length, 0),
373
+ blockedPlugins: bundle.blockedPlugins.length,
374
+ jsonPath: join(runsRoot, latest, "bundle.json"),
375
+ markdownPath: join(runsRoot, latest, "summary.md")
376
+ };
377
+ }
378
+ export function getGitHubReportingConfig(cwd = process.cwd()) {
379
+ const root = findWorkspaceRoot(cwd);
380
+ const config = loadAgentForgeConfig(root);
381
+ return {
382
+ trackerIssue: config.reporting.github?.trackerIssue
383
+ };
384
+ }
385
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolAdapter } from "@h9-foundry/agentforge-sdk";
2
+ export declare function createBuiltinAdapters(): ToolAdapter[];
3
+ //# sourceMappingURL=builtin-adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-adapters.d.ts","sourceRoot":"","sources":["../../src/internal/builtin-adapters.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA2E9D,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CA6KrD"}
@@ -0,0 +1,239 @@
1
+ import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
2
+ import { execFile } from "node:child_process";
3
+ import { dirname, relative, resolve } from "node:path";
4
+ import { promisify } from "node:util";
5
+ import { z } from "zod";
6
+ const execFileAsync = promisify(execFile);
7
+ const readFileInputSchema = z.object({
8
+ path: z.string().min(1)
9
+ });
10
+ const readFileOutputSchema = z.object({
11
+ path: z.string().min(1),
12
+ contents: z.string()
13
+ });
14
+ const listFilesInputSchema = z.object({
15
+ path: z.string().min(1).default(".")
16
+ });
17
+ const listFilesOutputSchema = z.object({
18
+ path: z.string().min(1),
19
+ entries: z.array(z.string())
20
+ });
21
+ const writeFileInputSchema = z.object({
22
+ path: z.string().min(1),
23
+ contents: z.string()
24
+ });
25
+ const writeFileOutputSchema = z.object({
26
+ path: z.string().min(1),
27
+ bytesWritten: z.number().min(0)
28
+ });
29
+ const emptyInputSchema = z.object({});
30
+ const statusOutputSchema = z.object({
31
+ lines: z.array(z.string())
32
+ });
33
+ const diffSummaryOutputSchema = z.object({
34
+ summary: z.string()
35
+ });
36
+ const runTemplateInputSchema = z.object({
37
+ templateId: z.string().min(1)
38
+ });
39
+ const runTemplateOutputSchema = z.object({
40
+ templateId: z.string().min(1),
41
+ stdout: z.string(),
42
+ stderr: z.string()
43
+ });
44
+ const createCheckInputSchema = z.object({
45
+ repository: z.string().min(1),
46
+ title: z.string().min(1),
47
+ summary: z.string().min(1)
48
+ });
49
+ const createCheckOutputSchema = z.object({
50
+ accepted: z.boolean(),
51
+ message: z.string()
52
+ });
53
+ const allowedTemplates = {
54
+ "git-status": { command: "git", args: ["status", "--short"] },
55
+ "git-diff-stat": { command: "git", args: ["diff", "--stat", "HEAD"] }
56
+ };
57
+ function resolveRepositoryPath(root, requestedPath) {
58
+ const absolutePath = resolve(root, requestedPath);
59
+ const relativePath = relative(root, absolutePath);
60
+ if (relativePath.startsWith("..") || relativePath === "..") {
61
+ throw new Error(`Path escapes repository root: ${requestedPath}`);
62
+ }
63
+ return absolutePath;
64
+ }
65
+ export function createBuiltinAdapters() {
66
+ return [
67
+ {
68
+ manifest: {
69
+ name: "filesystem.read-file",
70
+ description: "Read a UTF-8 text file from the repository.",
71
+ inputSchema: readFileInputSchema,
72
+ outputSchema: readFileOutputSchema,
73
+ sideEffectClass: "observe",
74
+ permission: "read",
75
+ defaultTimeoutMs: 2_000,
76
+ trust: {
77
+ tier: "core",
78
+ source: "official",
79
+ reviewed: true
80
+ }
81
+ },
82
+ async execute(input, context) {
83
+ const parsed = readFileInputSchema.parse(input);
84
+ const decision = context.policy.canReadPath(parsed.path);
85
+ if (!decision.allowed) {
86
+ throw new Error(decision.reason ?? `Read denied for ${parsed.path}`);
87
+ }
88
+ const absolutePath = resolveRepositoryPath(context.workingDirectory, parsed.path);
89
+ const contents = await readFile(absolutePath, "utf8");
90
+ return readFileOutputSchema.parse({ path: parsed.path, contents });
91
+ }
92
+ },
93
+ {
94
+ manifest: {
95
+ name: "filesystem.list-files",
96
+ description: "List files in a repository directory.",
97
+ inputSchema: listFilesInputSchema,
98
+ outputSchema: listFilesOutputSchema,
99
+ sideEffectClass: "observe",
100
+ permission: "read",
101
+ defaultTimeoutMs: 2_000,
102
+ trust: {
103
+ tier: "core",
104
+ source: "official",
105
+ reviewed: true
106
+ }
107
+ },
108
+ async execute(input, context) {
109
+ const parsed = listFilesInputSchema.parse(input);
110
+ const decision = context.policy.canReadPath(parsed.path);
111
+ if (!decision.allowed) {
112
+ throw new Error(decision.reason ?? `Directory listing denied for ${parsed.path}`);
113
+ }
114
+ const absolutePath = resolveRepositoryPath(context.workingDirectory, parsed.path);
115
+ const entries = await readdir(absolutePath);
116
+ return listFilesOutputSchema.parse({ path: parsed.path, entries });
117
+ }
118
+ },
119
+ {
120
+ manifest: {
121
+ name: "filesystem.write-file",
122
+ description: "Write a UTF-8 text file inside the repository.",
123
+ inputSchema: writeFileInputSchema,
124
+ outputSchema: writeFileOutputSchema,
125
+ sideEffectClass: "apply-low-risk",
126
+ permission: "write",
127
+ defaultTimeoutMs: 2_000,
128
+ trust: {
129
+ tier: "core",
130
+ source: "official",
131
+ reviewed: true
132
+ }
133
+ },
134
+ async execute(input, context) {
135
+ const parsed = writeFileInputSchema.parse(input);
136
+ const decision = context.policy.canWritePath(parsed.path);
137
+ if (!decision.allowed || decision.requiresApproval) {
138
+ throw new Error(decision.reason ?? `Write denied for ${parsed.path}`);
139
+ }
140
+ const absolutePath = resolveRepositoryPath(context.workingDirectory, parsed.path);
141
+ await mkdir(dirname(absolutePath), { recursive: true });
142
+ await writeFile(absolutePath, parsed.contents, "utf8");
143
+ return writeFileOutputSchema.parse({ path: parsed.path, bytesWritten: Buffer.byteLength(parsed.contents) });
144
+ }
145
+ },
146
+ {
147
+ manifest: {
148
+ name: "git.status",
149
+ description: "Return git porcelain status lines.",
150
+ inputSchema: emptyInputSchema,
151
+ outputSchema: statusOutputSchema,
152
+ sideEffectClass: "observe",
153
+ permission: "read",
154
+ defaultTimeoutMs: 2_000,
155
+ trust: {
156
+ tier: "core",
157
+ source: "official",
158
+ reviewed: true
159
+ }
160
+ },
161
+ async execute(_input, context) {
162
+ const { stdout } = await execFileAsync("git", ["status", "--porcelain"], { cwd: context.workingDirectory });
163
+ return statusOutputSchema.parse({ lines: stdout.split("\n").filter(Boolean) });
164
+ }
165
+ },
166
+ {
167
+ manifest: {
168
+ name: "git.diff-summary",
169
+ description: "Return a concise git diff stat summary.",
170
+ inputSchema: emptyInputSchema,
171
+ outputSchema: diffSummaryOutputSchema,
172
+ sideEffectClass: "observe",
173
+ permission: "read",
174
+ defaultTimeoutMs: 2_000,
175
+ trust: {
176
+ tier: "core",
177
+ source: "official",
178
+ reviewed: true
179
+ }
180
+ },
181
+ async execute(_input, context) {
182
+ const { stdout } = await execFileAsync("git", ["diff", "--stat", "HEAD"], { cwd: context.workingDirectory });
183
+ return diffSummaryOutputSchema.parse({ summary: stdout.trim() });
184
+ }
185
+ },
186
+ {
187
+ manifest: {
188
+ name: "shell.run-template",
189
+ description: "Run a pre-approved shell command template.",
190
+ inputSchema: runTemplateInputSchema,
191
+ outputSchema: runTemplateOutputSchema,
192
+ sideEffectClass: "observe",
193
+ permission: "read",
194
+ defaultTimeoutMs: 2_000,
195
+ trust: {
196
+ tier: "core",
197
+ source: "official",
198
+ reviewed: true
199
+ }
200
+ },
201
+ async execute(input, context) {
202
+ const parsed = runTemplateInputSchema.parse(input);
203
+ const template = allowedTemplates[parsed.templateId];
204
+ if (!template) {
205
+ throw new Error(`Unknown shell template: ${parsed.templateId}`);
206
+ }
207
+ const { stdout, stderr } = await execFileAsync(template.command, template.args, { cwd: context.workingDirectory });
208
+ return runTemplateOutputSchema.parse({
209
+ templateId: parsed.templateId,
210
+ stdout,
211
+ stderr
212
+ });
213
+ }
214
+ },
215
+ {
216
+ manifest: {
217
+ name: "github.create-check",
218
+ description: "Placeholder for GitHub check creation.",
219
+ inputSchema: createCheckInputSchema,
220
+ outputSchema: createCheckOutputSchema,
221
+ sideEffectClass: "apply-high-risk",
222
+ permission: "network",
223
+ defaultTimeoutMs: 2_000,
224
+ trust: {
225
+ tier: "verified",
226
+ source: "official",
227
+ reviewed: true
228
+ }
229
+ },
230
+ async execute() {
231
+ return createCheckOutputSchema.parse({
232
+ accepted: false,
233
+ message: "GitHub integration is deferred in the initial local-only vertical slice."
234
+ });
235
+ }
236
+ }
237
+ ];
238
+ }
239
+ //# sourceMappingURL=builtin-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-adapters.js","sourceRoot":"","sources":["../../src/internal/builtin-adapters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RuntimeAgent } from "@h9-foundry/agentforge-sdk";
2
+ export declare function createBuiltinAgentRegistry(): Map<string, RuntimeAgent>;
3
+ //# sourceMappingURL=builtin-agents.d.ts.map