@shield-agent/kya 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +108 -0
  3. package/dist/cli.d.ts +15 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +207 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/client.d.ts +111 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +143 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/commands/eval-tool.d.ts +27 -0
  12. package/dist/commands/eval-tool.d.ts.map +1 -0
  13. package/dist/commands/eval-tool.js +87 -0
  14. package/dist/commands/eval-tool.js.map +1 -0
  15. package/dist/commands/init.d.ts +19 -0
  16. package/dist/commands/init.d.ts.map +1 -0
  17. package/dist/commands/init.js +69 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/orr.d.ts +81 -0
  20. package/dist/commands/orr.d.ts.map +1 -0
  21. package/dist/commands/orr.js +468 -0
  22. package/dist/commands/orr.js.map +1 -0
  23. package/dist/commands/register-agent.d.ts +17 -0
  24. package/dist/commands/register-agent.d.ts.map +1 -0
  25. package/dist/commands/register-agent.js +39 -0
  26. package/dist/commands/register-agent.js.map +1 -0
  27. package/dist/commands/serve-mcp.d.ts +19 -0
  28. package/dist/commands/serve-mcp.d.ts.map +1 -0
  29. package/dist/commands/serve-mcp.js +40 -0
  30. package/dist/commands/serve-mcp.js.map +1 -0
  31. package/dist/config.d.ts +45 -0
  32. package/dist/config.d.ts.map +1 -0
  33. package/dist/config.js +105 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/errors.d.ts +18 -0
  36. package/dist/errors.d.ts.map +1 -0
  37. package/dist/errors.js +34 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/hash.d.ts +5 -0
  40. package/dist/hash.d.ts.map +1 -0
  41. package/dist/hash.js +25 -0
  42. package/dist/hash.js.map +1 -0
  43. package/dist/index.d.ts +21 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +21 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/mcp/http.d.ts +26 -0
  48. package/dist/mcp/http.d.ts.map +1 -0
  49. package/dist/mcp/http.js +118 -0
  50. package/dist/mcp/http.js.map +1 -0
  51. package/dist/mcp/protocol.d.ts +53 -0
  52. package/dist/mcp/protocol.d.ts.map +1 -0
  53. package/dist/mcp/protocol.js +282 -0
  54. package/dist/mcp/protocol.js.map +1 -0
  55. package/dist/mcp/stdio.d.ts +22 -0
  56. package/dist/mcp/stdio.d.ts.map +1 -0
  57. package/dist/mcp/stdio.js +67 -0
  58. package/dist/mcp/stdio.js.map +1 -0
  59. package/dist/offline-evaluate.d.ts +23 -0
  60. package/dist/offline-evaluate.d.ts.map +1 -0
  61. package/dist/offline-evaluate.js +68 -0
  62. package/dist/offline-evaluate.js.map +1 -0
  63. package/dist/parse-args.d.ts +14 -0
  64. package/dist/parse-args.d.ts.map +1 -0
  65. package/dist/parse-args.js +86 -0
  66. package/dist/parse-args.js.map +1 -0
  67. package/dist/sample-tools.d.ts +19 -0
  68. package/dist/sample-tools.d.ts.map +1 -0
  69. package/dist/sample-tools.js +37 -0
  70. package/dist/sample-tools.js.map +1 -0
  71. package/package.json +65 -0
  72. package/server.json +59 -0
@@ -0,0 +1,468 @@
1
+ /**
2
+ * kya orr run — Phase O1 read-only ORR board emitter.
3
+ * Reporting orchestrator only: not a second PEP; never mints principals or allows side effects.
4
+ */
5
+ import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
6
+ import { basename, join, resolve } from "node:path";
7
+ import { UsageError } from "../errors.js";
8
+ import { flagBool, flagString } from "../parse-args.js";
9
+ const CATEGORY_META = [
10
+ { id: "engineering_craft", label: "Engineering craft" },
11
+ { id: "security_platform", label: "Security and platform" },
12
+ { id: "enterprise_readiness", label: "Enterprise readiness" },
13
+ { id: "agent_control_plane", label: "Agent control plane" },
14
+ { id: "product_architecture", label: "Product / architecture" },
15
+ { id: "scale_operations", label: "Scale and operations" },
16
+ { id: "cost_budget_gates", label: "Cost and budget gates" },
17
+ { id: "packaging_supply_chain", label: "Packaging / supply chain" },
18
+ { id: "agent_factory_lifecycle", label: "Agent factory / lifecycle" },
19
+ ];
20
+ const ALL_CATEGORY_IDS = new Set(CATEGORY_META.map((c) => c.id));
21
+ export function orrRunOptionsFromArgs(parsed) {
22
+ const path = flagString(parsed.flags, "path");
23
+ if (!path) {
24
+ throw new UsageError("orr run requires --path <dir>");
25
+ }
26
+ const out = flagString(parsed.flags, "out") ?? "./orr-report";
27
+ const name = flagString(parsed.flags, "name");
28
+ const rubric = flagString(parsed.flags, "rubric") ?? "0";
29
+ const disableRaw = collectMulti(parsed, "disable-category");
30
+ const formatRaw = flagString(parsed.flags, "format") ?? "json,md";
31
+ const formats = formatRaw
32
+ .split(",")
33
+ .map((s) => s.trim().toLowerCase())
34
+ .filter((s) => s === "json" || s === "md");
35
+ if (formats.length === 0) {
36
+ throw new UsageError("--format must include json and/or md");
37
+ }
38
+ const commitSha = flagString(parsed.flags, "commit-sha");
39
+ let producers = collectMulti(parsed, "producer");
40
+ if (producers.length === 0)
41
+ producers = ["sa.first_party"];
42
+ const skipOptionalProducers = flagBool(parsed.flags, "skip-optional-producers");
43
+ const failOnRaw = flagString(parsed.flags, "fail-on");
44
+ let failOn;
45
+ if (failOnRaw === "no_go" || failOnRaw === "conditional")
46
+ failOn = failOnRaw;
47
+ else if (failOnRaw)
48
+ throw new UsageError("--fail-on must be no_go or conditional");
49
+ return {
50
+ path,
51
+ out,
52
+ name,
53
+ rubric,
54
+ disableCategories: disableRaw,
55
+ formats,
56
+ commitSha,
57
+ producers,
58
+ skipOptionalProducers,
59
+ failOn,
60
+ quiet: flagBool(parsed.flags, "quiet"),
61
+ jsonStdout: flagBool(parsed.flags, "json-stdout"),
62
+ };
63
+ }
64
+ function collectMulti(parsed, name) {
65
+ const out = [];
66
+ const v = parsed.flags[name];
67
+ if (typeof v === "string" && v.length > 0)
68
+ out.push(v);
69
+ // parse-args keeps last flag only; support comma-separated multi
70
+ for (const item of out.flatMap((s) => s.split(",").map((x) => x.trim()).filter(Boolean))) {
71
+ if (!out.includes(item))
72
+ out.push(item);
73
+ }
74
+ // re-unique
75
+ return [...new Set(out.flatMap((s) => s.split(",").map((x) => x.trim()).filter(Boolean)))];
76
+ }
77
+ export function runOrr(options) {
78
+ if (options.rubric !== "0") {
79
+ throw new UsageError(`unsupported rubric version "${options.rubric}" (O1 supports 0 only)`);
80
+ }
81
+ const absPath = resolve(options.path);
82
+ if (!existsSync(absPath) || !statSync(absPath).isDirectory()) {
83
+ throw new UsageError(`--path must be an existing directory: ${options.path}`);
84
+ }
85
+ for (const id of options.disableCategories) {
86
+ if (!ALL_CATEGORY_IDS.has(id)) {
87
+ throw new UsageError(`unknown category id for --disable-category: ${id}`);
88
+ }
89
+ }
90
+ const commitSha = options.commitSha ??
91
+ tryReadGitHead(absPath) ??
92
+ undefined;
93
+ const findings = runSaFirstPartyProbes(absPath);
94
+ const coverageGaps = [];
95
+ const producersRequested = [...options.producers];
96
+ if (!options.skipOptionalProducers) {
97
+ for (const p of producersRequested) {
98
+ if (p === "sa.first_party")
99
+ continue;
100
+ if (p === "openssf.scorecard") {
101
+ coverageGaps.push({
102
+ adapter_id: p,
103
+ reason: "binary_not_found_or_not_run_in_o1",
104
+ });
105
+ }
106
+ else {
107
+ coverageGaps.push({
108
+ adapter_id: p,
109
+ reason: "adapter_not_implemented_o1",
110
+ });
111
+ }
112
+ }
113
+ }
114
+ const disabled = new Set(options.disableCategories);
115
+ const categories = scoreCategories(findings, disabled);
116
+ const scorecards = buildScorecards(findings, absPath, disabled);
117
+ const overall = rollupOverall(categories);
118
+ const disposition = rollupDisposition(overall, categories);
119
+ const primary = findings.find((f) => f.severity === "critical" || f.severity === "high") ??
120
+ findings[0];
121
+ const report = {
122
+ rubric_version: "0",
123
+ generated_at: new Date().toISOString(),
124
+ target: {
125
+ name: options.name ?? basename(absPath),
126
+ path: absPath,
127
+ ...(commitSha ? { commit_sha: commitSha } : {}),
128
+ kind: existsSync(join(absPath, ".git")) ? "repo" : "path",
129
+ },
130
+ scope: {
131
+ description: `Read-only ORR O1 scan of ${absPath}`,
132
+ disabled_categories: [...options.disableCategories],
133
+ producers_requested: producersRequested,
134
+ },
135
+ overall,
136
+ disposition,
137
+ primary_failure_mode: primary
138
+ ? `${primary.title} (${primary.category})`
139
+ : "No critical control-plane findings from SA first-party probes",
140
+ most_urgent_fix: primary
141
+ ? primary.detail
142
+ : "Keep sole PEP on Shield; wire evaluate/wrap for irreversible tools",
143
+ categories,
144
+ scorecards,
145
+ findings,
146
+ coverage_gaps: coverageGaps,
147
+ };
148
+ const outDir = resolve(options.out);
149
+ mkdirSync(outDir, { recursive: true });
150
+ let reportJsonPath;
151
+ let reportMdPath;
152
+ if (options.formats.includes("json")) {
153
+ reportJsonPath = join(outDir, "report.json");
154
+ writeFileSync(reportJsonPath, `${JSON.stringify(report, null, 2)}\n`, "utf8");
155
+ }
156
+ if (options.formats.includes("md")) {
157
+ reportMdPath = join(outDir, "report.md");
158
+ writeFileSync(reportMdPath, formatOrrMarkdown(report), "utf8");
159
+ }
160
+ let exitCode = 0;
161
+ if (options.failOn === "no_go" && disposition === "no_go")
162
+ exitCode = 3;
163
+ if (options.failOn === "conditional" &&
164
+ (disposition === "conditional" || disposition === "no_go")) {
165
+ exitCode = 4;
166
+ }
167
+ return { report, reportJsonPath, reportMdPath, exitCode };
168
+ }
169
+ /** SA first-party probes: evidence only; scanners never ALLOW. */
170
+ export function runSaFirstPartyProbes(root) {
171
+ const findings = [];
172
+ const tree = listTreeSample(root, 400);
173
+ const textBlob = tree
174
+ .filter((p) => /\.(ts|js|java|md|json|yml|yaml)$/i.test(p))
175
+ .slice(0, 80)
176
+ .map((p) => {
177
+ try {
178
+ return readFileSync(p, "utf8");
179
+ }
180
+ catch {
181
+ return "";
182
+ }
183
+ })
184
+ .join("\n");
185
+ const hasEvaluate = /policy\/evaluate|evaluatePolicy|wrapTool|kya\.policy_evaluate|PolicyEngine/.test(textBlob);
186
+ const hasRequireApprove = /REQUIRE_APPROVE|require_approve|requireApprove/.test(textBlob);
187
+ const hasDualPlane = /host\s*[=:]\s*["']?(ide|runtime)|AgentHost|KYA_HOST/.test(textBlob);
188
+ const hasTrail = /EventLog|ToolEvent|AT-20|argsHash|POLICY_ALLOW|POLICY_DENY/.test(textBlob);
189
+ const hasCustomToolId = /toolId|tool_id|org\.sample\.|ToolDescriptor/.test(textBlob);
190
+ const dualPepSmell = /dual.?pep|second.?pep|scanner.?allow|edge.?approv/i.test(textBlob) &&
191
+ /allow.?without.?shield|bypass.?kya/i.test(textBlob);
192
+ const secretsSmell = /(?:api[_-]?key|secret|password)\s*[:=]\s*["'][A-Za-z0-9_\-]{16,}/i.test(textBlob);
193
+ const factoryGated = /org\.kya\.agent\.create|factory.*toolId|AGENT_REGISTERED/.test(textBlob);
194
+ const registerWithoutPolicy = /register-agent|AgentRegistry\.register|POST.*\/kya\/agents/.test(textBlob) &&
195
+ !factoryGated;
196
+ if (!hasEvaluate) {
197
+ findings.push({
198
+ id: "sa.probe.no_evaluate_path",
199
+ category: "agent_control_plane",
200
+ severity: "critical",
201
+ title: "No fail-closed evaluate/wrap path detected",
202
+ detail: "Tree lacks policy evaluate / wrapTool / PolicyEngine signals. Irreversible tools may run without Shield PEP.",
203
+ evidence: "sa.first_party text probe",
204
+ });
205
+ }
206
+ if (!hasRequireApprove) {
207
+ findings.push({
208
+ id: "sa.probe.no_require_approve",
209
+ category: "agent_control_plane",
210
+ severity: "high",
211
+ title: "REQUIRE_APPROVE not detected",
212
+ detail: "High-stakes irreversible tools should map to REQUIRE_APPROVE (or DENY), never silent ALLOW.",
213
+ evidence: "sa.first_party text probe",
214
+ });
215
+ }
216
+ if (!hasDualPlane) {
217
+ findings.push({
218
+ id: "sa.probe.no_dual_plane",
219
+ category: "product_architecture",
220
+ severity: "medium",
221
+ title: "Dual-plane host labels not detected",
222
+ detail: "Tag sessions host=ide (authoring) vs host=runtime (production).",
223
+ evidence: "sa.first_party text probe",
224
+ });
225
+ }
226
+ if (!hasTrail) {
227
+ findings.push({
228
+ id: "sa.probe.no_trail",
229
+ category: "agent_control_plane",
230
+ severity: "medium",
231
+ title: "Policy/tool trail signals weak or missing",
232
+ detail: "Prefer hash-linked trail for evaluate and approval create (AT-20).",
233
+ evidence: "sa.first_party text probe",
234
+ });
235
+ }
236
+ if (!hasCustomToolId) {
237
+ findings.push({
238
+ id: "sa.probe.no_custom_toolid",
239
+ category: "engineering_craft",
240
+ severity: "low",
241
+ title: "Custom toolId / descriptor patterns not found",
242
+ detail: "Custom tools should be first-class via stable toolId + metadata (packs optional).",
243
+ evidence: "sa.first_party text probe",
244
+ });
245
+ }
246
+ if (dualPepSmell) {
247
+ findings.push({
248
+ id: "sa.probe.dual_pep_smell",
249
+ category: "agent_control_plane",
250
+ severity: "critical",
251
+ title: "Dual-PEP smell in tree",
252
+ detail: "Evidence suggests scanner/edge might ALLOW high-stakes actions. Sole PEP must remain Shield KYA.",
253
+ evidence: "sa.first_party text probe",
254
+ });
255
+ }
256
+ if (secretsSmell) {
257
+ findings.push({
258
+ id: "sa.probe.secrets_in_tree",
259
+ category: "security_platform",
260
+ severity: "critical",
261
+ title: "Possible hardcoded secrets",
262
+ detail: "Rotate credentials; load secrets from env or a secret manager.",
263
+ evidence: "sa.first_party text probe",
264
+ });
265
+ }
266
+ if (registerWithoutPolicy) {
267
+ findings.push({
268
+ id: "sa.probe.factory_not_gated",
269
+ category: "agent_factory_lifecycle",
270
+ severity: "high",
271
+ title: "Agent create path may be scope-auth only",
272
+ detail: "Factory doctrine: principal mint should be policy-gated (APPROVED). ORR reports only — does not mint.",
273
+ evidence: "sa.first_party text probe",
274
+ });
275
+ }
276
+ return findings;
277
+ }
278
+ function scoreCategories(findings, disabled) {
279
+ return CATEGORY_META.filter((c) => !disabled.has(c.id)).map((c) => {
280
+ const catFindings = findings.filter((f) => f.category === c.id);
281
+ let rating = "green";
282
+ if (catFindings.some((f) => f.severity === "critical"))
283
+ rating = "red";
284
+ else if (catFindings.some((f) => f.severity === "high" || f.severity === "medium")) {
285
+ rating = "amber";
286
+ }
287
+ const top = catFindings[0];
288
+ return {
289
+ id: c.id,
290
+ label: c.label,
291
+ rating,
292
+ tldr: top ? top.title : "No findings from SA first-party probes",
293
+ };
294
+ });
295
+ }
296
+ function buildScorecards(findings, root, disabled) {
297
+ const hasEval = !findings.some((f) => f.id === "sa.probe.no_evaluate_path");
298
+ const hasRa = !findings.some((f) => f.id === "sa.probe.no_require_approve");
299
+ const dualPep = findings.some((f) => f.id === "sa.probe.dual_pep_smell");
300
+ const secrets = findings.some((f) => f.id === "sa.probe.secrets_in_tree");
301
+ const factory = findings.some((f) => f.id === "sa.probe.factory_not_gated");
302
+ const cards = [];
303
+ if (!disabled.has("agent_control_plane")) {
304
+ cards.push({
305
+ category: "agent_control_plane",
306
+ name: "fail_closed_tool_path",
307
+ result: hasEval ? "pass" : "fail",
308
+ hardness: "hard",
309
+ note: hasEval ? "evaluate/wrap signals present" : "missing evaluate path",
310
+ }, {
311
+ category: "agent_control_plane",
312
+ name: "irreversible_require_approve",
313
+ result: hasRa ? "pass" : "fail",
314
+ hardness: "hard",
315
+ }, {
316
+ category: "agent_control_plane",
317
+ name: "sole_pep",
318
+ result: dualPep ? "fail" : "pass",
319
+ hardness: "hard",
320
+ note: dualPep ? "dual-PEP smell" : "no dual-PEP evidence",
321
+ });
322
+ }
323
+ if (!disabled.has("agent_factory_lifecycle")) {
324
+ cards.push({
325
+ category: "agent_factory_lifecycle",
326
+ name: "factory_tool_gated",
327
+ result: factory ? "fail" : "partial",
328
+ hardness: "hard",
329
+ note: factory
330
+ ? "create path looks scope-auth only"
331
+ : "no clear factory gap or no create path",
332
+ });
333
+ }
334
+ if (!disabled.has("security_platform")) {
335
+ cards.push({
336
+ category: "security_platform",
337
+ name: "secrets_in_tree",
338
+ result: secrets ? "fail" : "pass",
339
+ hardness: "hard",
340
+ note: `scanned sample under ${basename(root)}`,
341
+ });
342
+ }
343
+ return cards;
344
+ }
345
+ function rollupOverall(categories) {
346
+ if (categories.some((c) => c.rating === "red"))
347
+ return "red";
348
+ if (categories.some((c) => c.rating === "amber"))
349
+ return "amber";
350
+ return "green";
351
+ }
352
+ function rollupDisposition(overall, categories) {
353
+ const reds = categories.filter((c) => c.rating === "red").length;
354
+ if (overall === "red" || reds >= 2)
355
+ return "no_go";
356
+ if (overall === "amber" || reds === 1)
357
+ return "conditional";
358
+ return "go";
359
+ }
360
+ export function formatOrrMarkdown(report) {
361
+ const cats = report.categories
362
+ .map((c) => `| ${c.id} | ${c.rating} | ${c.tldr} |`)
363
+ .join("\n");
364
+ const findings = report.findings
365
+ .map((f) => `- **[${f.severity}]** ${f.title} (\`${f.category}\`): ${f.detail}`)
366
+ .join("\n");
367
+ const gaps = report.coverage_gaps.length === 0
368
+ ? "- (none)"
369
+ : report.coverage_gaps
370
+ .map((g) => `- \`${g.adapter_id}\`: ${g.reason}`)
371
+ .join("\n");
372
+ const cards = report.scorecards
373
+ .map((s) => `- \`${s.category}\` / \`${s.name}\`: **${s.result}** (${s.hardness})${s.note ? ` — ${s.note}` : ""}`)
374
+ .join("\n");
375
+ return `# ORR: ${report.target.name}
376
+
377
+ - **Overall:** ${report.overall}
378
+ - **Disposition:** ${report.disposition}
379
+ - **Rubric:** v${report.rubric_version}
380
+ - **Generated:** ${report.generated_at}
381
+ - **Path:** ${report.target.path}
382
+ - **Commit:** ${report.target.commit_sha ?? "n/a"}
383
+
384
+ ## Primary failure mode
385
+ ${report.primary_failure_mode}
386
+
387
+ ## Most urgent fix
388
+ ${report.most_urgent_fix}
389
+
390
+ ## Categories
391
+ | Category | Rating | TL;DR |
392
+ |----------|--------|-------|
393
+ ${cats}
394
+
395
+ ## Scorecards
396
+ ${cards || "- (none)"}
397
+
398
+ ## Findings
399
+ ${findings || "- (none)"}
400
+
401
+ ## Coverage gaps
402
+ ${gaps}
403
+
404
+ ---
405
+ *ORR is a reporting orchestrator. Sole PEP remains Shield KYA (ALLOW / DENY / REQUIRE_APPROVE). Scanners are evidence only — never a second PEP.*
406
+ `;
407
+ }
408
+ function tryReadGitHead(root) {
409
+ try {
410
+ const head = readFileSync(join(root, ".git", "HEAD"), "utf8").trim();
411
+ if (head.startsWith("ref:")) {
412
+ const ref = head.slice(4).trim();
413
+ const sha = readFileSync(join(root, ".git", ref), "utf8").trim();
414
+ if (/^[0-9a-f]{7,64}$/i.test(sha))
415
+ return sha;
416
+ }
417
+ if (/^[0-9a-f]{7,64}$/i.test(head))
418
+ return head;
419
+ }
420
+ catch {
421
+ /* ignore */
422
+ }
423
+ return undefined;
424
+ }
425
+ function listTreeSample(root, maxFiles) {
426
+ const out = [];
427
+ const skip = new Set([
428
+ "node_modules",
429
+ "target",
430
+ ".git",
431
+ "dist",
432
+ "coverage",
433
+ ".idea",
434
+ "vendor",
435
+ ]);
436
+ function walk(dir) {
437
+ if (out.length >= maxFiles)
438
+ return;
439
+ let entries;
440
+ try {
441
+ entries = readdirSync(dir);
442
+ }
443
+ catch {
444
+ return;
445
+ }
446
+ for (const name of entries) {
447
+ if (out.length >= maxFiles)
448
+ return;
449
+ if (skip.has(name))
450
+ continue;
451
+ const p = join(dir, name);
452
+ let st;
453
+ try {
454
+ st = statSync(p);
455
+ }
456
+ catch {
457
+ continue;
458
+ }
459
+ if (st.isDirectory())
460
+ walk(p);
461
+ else if (st.isFile() && st.size < 512_000)
462
+ out.push(p);
463
+ }
464
+ }
465
+ walk(root);
466
+ return out;
467
+ }
468
+ //# sourceMappingURL=orr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orr.js","sourceRoot":"","sources":["../../src/commands/orr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type ResolvedConfig } from "../config.js";
2
+ import { KyaHttpClient, type AgentResponse } from "../client.js";
3
+ import type { ParsedArgs } from "../parse-args.js";
4
+ export interface RegisterAgentResult {
5
+ readonly agent: AgentResponse;
6
+ readonly agentId: string;
7
+ readonly configPath: string;
8
+ }
9
+ export declare function runRegisterAgent(config: ResolvedConfig, input: {
10
+ name: string;
11
+ versionHash: string;
12
+ }, client?: KyaHttpClient): Promise<RegisterAgentResult>;
13
+ export declare function registerAgentInputFromArgs(parsed: ParsedArgs): {
14
+ name: string;
15
+ versionHash: string;
16
+ };
17
+ //# sourceMappingURL=register-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-agent.d.ts","sourceRoot":"","sources":["../../src/commands/register-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAC5C,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,mBAAmB,CAAC,CA8B9B;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,UAAU,GAAG;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAUA"}
@@ -0,0 +1,39 @@
1
+ import { writeFileConfig } from "../config.js";
2
+ import { KyaHttpClient } from "../client.js";
3
+ import { UsageError } from "../errors.js";
4
+ import { flagString } from "../parse-args.js";
5
+ export async function runRegisterAgent(config, input, client) {
6
+ if (!input.name?.trim()) {
7
+ throw new UsageError("register-agent requires --name");
8
+ }
9
+ if (!input.versionHash?.trim()) {
10
+ throw new UsageError("register-agent requires --version-hash");
11
+ }
12
+ const http = client ??
13
+ new KyaHttpClient({
14
+ baseUrl: config.baseUrl,
15
+ apiKey: config.apiKey,
16
+ host: config.host,
17
+ });
18
+ const agent = await http.registerAgent({
19
+ name: input.name.trim(),
20
+ versionHash: input.versionHash.trim(),
21
+ });
22
+ const agentId = String(agent.id);
23
+ writeFileConfig(config.cwd, {
24
+ baseUrl: config.baseUrl,
25
+ host: config.host,
26
+ agentId,
27
+ agentName: agent.name,
28
+ });
29
+ return { agent, agentId, configPath: config.configPath };
30
+ }
31
+ export function registerAgentInputFromArgs(parsed) {
32
+ const name = flagString(parsed.flags, "name");
33
+ const versionHash = flagString(parsed.flags, "version-hash", "versionHash") ?? "dev-local";
34
+ if (!name) {
35
+ throw new UsageError('register-agent requires --name "solo-builder" [--version-hash <hash>]');
36
+ }
37
+ return { name, versionHash };
38
+ }
39
+ //# sourceMappingURL=register-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-agent.js","sourceRoot":"","sources":["../../src/commands/register-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAuB,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQ9C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAsB,EACtB,KAA4C,EAC5C,MAAsB;IAEtB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,UAAU,CAAC,wCAAwC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,GACR,MAAM;QACN,IAAI,aAAa,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC,CAAC;IAEL,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC;QACrC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;QACvB,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO;QACP,SAAS,EAAE,KAAK,CAAC,IAAI;KACtB,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAkB;IAI3D,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,WAAW,GACf,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,IAAI,WAAW,CAAC;IACzE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,UAAU,CAClB,uEAAuE,CACxE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ResolvedConfig } from "../config.js";
2
+ import { KyaHttpClient } from "../client.js";
3
+ import { type HttpMcpServer } from "../mcp/http.js";
4
+ import { type StdioMcpHandle } from "../mcp/stdio.js";
5
+ import type { ParsedArgs } from "../parse-args.js";
6
+ export type ServeMcpMode = "stdio" | "http";
7
+ export interface ServeMcpOptions {
8
+ readonly mode: ServeMcpMode;
9
+ readonly port?: number;
10
+ readonly listenHost?: string;
11
+ }
12
+ export interface ServeMcpResult {
13
+ readonly mode: ServeMcpMode;
14
+ readonly http?: HttpMcpServer;
15
+ readonly stdio?: StdioMcpHandle;
16
+ }
17
+ export declare function serveMcpOptionsFromArgs(parsed: ParsedArgs): ServeMcpOptions;
18
+ export declare function runServeMcp(config: ResolvedConfig, options: ServeMcpOptions, client?: KyaHttpClient): Promise<ServeMcpResult>;
19
+ //# sourceMappingURL=serve-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-mcp.d.ts","sourceRoot":"","sources":["../../src/commands/serve-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,CAQ3E;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,EACxB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CA4BzB"}
@@ -0,0 +1,40 @@
1
+ import { KyaHttpClient } from "../client.js";
2
+ import { startHttpMcp } from "../mcp/http.js";
3
+ import { startStdioMcp } from "../mcp/stdio.js";
4
+ import { flagBool, flagInt } from "../parse-args.js";
5
+ export function serveMcpOptionsFromArgs(parsed) {
6
+ const stdio = flagBool(parsed.flags, "stdio");
7
+ const port = flagInt(parsed.flags, "port", 0);
8
+ return {
9
+ mode: stdio ? "stdio" : "http",
10
+ port: port > 0 ? port : undefined,
11
+ listenHost: "127.0.0.1",
12
+ };
13
+ }
14
+ export async function runServeMcp(config, options, client) {
15
+ const httpClient = client ??
16
+ new KyaHttpClient({
17
+ baseUrl: config.baseUrl,
18
+ apiKey: config.apiKey,
19
+ host: config.host,
20
+ agentId: config.agentId,
21
+ });
22
+ if (options.mode === "stdio") {
23
+ const stdio = startStdioMcp({
24
+ client: httpClient,
25
+ kyaHost: config.host,
26
+ agentId: config.agentId,
27
+ });
28
+ return { mode: "stdio", stdio };
29
+ }
30
+ const port = options.port ?? config.mcpPort;
31
+ const http = await startHttpMcp({
32
+ host: options.listenHost ?? "127.0.0.1",
33
+ port,
34
+ client: httpClient,
35
+ kyaHost: config.host,
36
+ agentId: config.agentId,
37
+ });
38
+ return { mode: "http", http };
39
+ }
40
+ //# sourceMappingURL=serve-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-mcp.js","sourceRoot":"","sources":["../../src/commands/serve-mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAuB,MAAM,iBAAiB,CAAC;AAErE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAgBrD,MAAM,UAAU,uBAAuB,CAAC,MAAkB;IACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;QAC9B,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACjC,UAAU,EAAE,WAAW;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAsB,EACtB,OAAwB,EACxB,MAAsB;IAEtB,MAAM,UAAU,GACd,MAAM;QACN,IAAI,aAAa,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;IAEL,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,aAAa,CAAC;YAC1B,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,MAAM,CAAC,IAAI;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC;QAC9B,IAAI,EAAE,OAAO,CAAC,UAAU,IAAI,WAAW;QACvC,IAAI;QACJ,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,MAAM,CAAC,IAAI;QACpB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAChC,CAAC"}