@vraxis/agent-v 0.4.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 (119) hide show
  1. package/AGENTS.md +61 -0
  2. package/ARCHITECTURE.md +148 -0
  3. package/CHANGELOG.md +25 -0
  4. package/LICENSE +21 -0
  5. package/README.md +237 -0
  6. package/compatibility.json +41 -0
  7. package/dist/adapters/ai-sdk/index.d.ts +46 -0
  8. package/dist/adapters/ai-sdk/index.d.ts.map +1 -0
  9. package/dist/adapters/ai-sdk/index.js +383 -0
  10. package/dist/adapters/ai-sdk/index.js.map +1 -0
  11. package/dist/adapters/local-cli/definitions.d.ts +22 -0
  12. package/dist/adapters/local-cli/definitions.d.ts.map +1 -0
  13. package/dist/adapters/local-cli/definitions.js +72 -0
  14. package/dist/adapters/local-cli/definitions.js.map +1 -0
  15. package/dist/adapters/local-cli/engine.d.ts +26 -0
  16. package/dist/adapters/local-cli/engine.d.ts.map +1 -0
  17. package/dist/adapters/local-cli/engine.js +200 -0
  18. package/dist/adapters/local-cli/engine.js.map +1 -0
  19. package/dist/adapters/local-cli/index.d.ts +6 -0
  20. package/dist/adapters/local-cli/index.d.ts.map +1 -0
  21. package/dist/adapters/local-cli/index.js +6 -0
  22. package/dist/adapters/local-cli/index.js.map +1 -0
  23. package/dist/adapters/local-cli/parsing.d.ts +7 -0
  24. package/dist/adapters/local-cli/parsing.d.ts.map +1 -0
  25. package/dist/adapters/local-cli/parsing.js +95 -0
  26. package/dist/adapters/local-cli/parsing.js.map +1 -0
  27. package/dist/adapters/local-cli/process.d.ts +12 -0
  28. package/dist/adapters/local-cli/process.d.ts.map +1 -0
  29. package/dist/adapters/local-cli/process.js +19 -0
  30. package/dist/adapters/local-cli/process.js.map +1 -0
  31. package/dist/adapters/local-cli/store.d.ts +11 -0
  32. package/dist/adapters/local-cli/store.d.ts.map +1 -0
  33. package/dist/adapters/local-cli/store.js +11 -0
  34. package/dist/adapters/local-cli/store.js.map +1 -0
  35. package/dist/adapters/ollama/index.d.ts +45 -0
  36. package/dist/adapters/ollama/index.d.ts.map +1 -0
  37. package/dist/adapters/ollama/index.js +155 -0
  38. package/dist/adapters/ollama/index.js.map +1 -0
  39. package/dist/cli/index.d.ts +3 -0
  40. package/dist/cli/index.d.ts.map +1 -0
  41. package/dist/cli/index.js +116 -0
  42. package/dist/cli/index.js.map +1 -0
  43. package/dist/core/agent-v.d.ts +29 -0
  44. package/dist/core/agent-v.d.ts.map +1 -0
  45. package/dist/core/agent-v.js +153 -0
  46. package/dist/core/agent-v.js.map +1 -0
  47. package/dist/core/config.d.ts +31 -0
  48. package/dist/core/config.d.ts.map +1 -0
  49. package/dist/core/config.js +21 -0
  50. package/dist/core/config.js.map +1 -0
  51. package/dist/core/contracts.d.ts +135 -0
  52. package/dist/core/contracts.d.ts.map +1 -0
  53. package/dist/core/contracts.js +2 -0
  54. package/dist/core/contracts.js.map +1 -0
  55. package/dist/core/errors.d.ts +12 -0
  56. package/dist/core/errors.d.ts.map +1 -0
  57. package/dist/core/errors.js +27 -0
  58. package/dist/core/errors.js.map +1 -0
  59. package/dist/core/events.d.ts +74 -0
  60. package/dist/core/events.d.ts.map +1 -0
  61. package/dist/core/events.js +14 -0
  62. package/dist/core/events.js.map +1 -0
  63. package/dist/core/extensions.d.ts +80 -0
  64. package/dist/core/extensions.d.ts.map +1 -0
  65. package/dist/core/extensions.js +77 -0
  66. package/dist/core/extensions.js.map +1 -0
  67. package/dist/core/index.d.ts +12 -0
  68. package/dist/core/index.d.ts.map +1 -0
  69. package/dist/core/index.js +12 -0
  70. package/dist/core/index.js.map +1 -0
  71. package/dist/core/memory.d.ts +15 -0
  72. package/dist/core/memory.d.ts.map +1 -0
  73. package/dist/core/memory.js +21 -0
  74. package/dist/core/memory.js.map +1 -0
  75. package/dist/core/output.d.ts +10 -0
  76. package/dist/core/output.d.ts.map +1 -0
  77. package/dist/core/output.js +15 -0
  78. package/dist/core/output.js.map +1 -0
  79. package/dist/core/registry.d.ts +13 -0
  80. package/dist/core/registry.d.ts.map +1 -0
  81. package/dist/core/registry.js +29 -0
  82. package/dist/core/registry.js.map +1 -0
  83. package/dist/core/types.d.ts +141 -0
  84. package/dist/core/types.d.ts.map +1 -0
  85. package/dist/core/types.js +21 -0
  86. package/dist/core/types.js.map +1 -0
  87. package/dist/core/version.d.ts +3 -0
  88. package/dist/core/version.d.ts.map +1 -0
  89. package/dist/core/version.js +3 -0
  90. package/dist/core/version.js.map +1 -0
  91. package/dist/node/doctor.d.ts +50 -0
  92. package/dist/node/doctor.d.ts.map +1 -0
  93. package/dist/node/doctor.js +121 -0
  94. package/dist/node/doctor.js.map +1 -0
  95. package/dist/node/index.d.ts +26 -0
  96. package/dist/node/index.d.ts.map +1 -0
  97. package/dist/node/index.js +84 -0
  98. package/dist/node/index.js.map +1 -0
  99. package/dist/node/skills.d.ts +12 -0
  100. package/dist/node/skills.d.ts.map +1 -0
  101. package/dist/node/skills.js +96 -0
  102. package/dist/node/skills.js.map +1 -0
  103. package/dist/testing/index.d.ts +25 -0
  104. package/dist/testing/index.d.ts.map +1 -0
  105. package/dist/testing/index.js +33 -0
  106. package/dist/testing/index.js.map +1 -0
  107. package/examples/approved-tool.ts +56 -0
  108. package/examples/basic-ai-sdk.ts +29 -0
  109. package/examples/custom-model-resolver.ts +14 -0
  110. package/examples/filesystem-skill.ts +12 -0
  111. package/examples/local-cli.ts +28 -0
  112. package/examples/ollama.ts +15 -0
  113. package/examples/sessions-and-events.ts +18 -0
  114. package/examples/smoke.ts +35 -0
  115. package/examples/tsconfig.json +16 -0
  116. package/llms.txt +13 -0
  117. package/package.json +97 -0
  118. package/skills/agent-v/SKILL.md +39 -0
  119. package/skills/agent-v/references/integration-patterns.md +57 -0
@@ -0,0 +1,155 @@
1
+ import { createOllama } from "ai-sdk-ollama";
2
+ import { AgentVError, safeFailure, } from "../../core/index.js";
3
+ import { AiSdkStructuredModelEngine, AiSdkToolAgentEngine, } from "../ai-sdk/index.js";
4
+ const DEFAULT_BASE_URL = "http://127.0.0.1:11434";
5
+ const ADAPTER_STRATEGY = "ai-sdk-ollama-v4-native-chat";
6
+ function baseURLOf(options) {
7
+ const value = (options.baseURL ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
8
+ let url;
9
+ try {
10
+ url = new URL(value);
11
+ }
12
+ catch (error) {
13
+ throw new AgentVError("configuration-invalid", "Ollama baseURL must be a valid absolute URL.", { cause: error });
14
+ }
15
+ if (url.protocol !== "http:" && url.protocol !== "https:")
16
+ throw new AgentVError("configuration-invalid", "Ollama baseURL must use HTTP or HTTPS.");
17
+ if (url.username || url.password)
18
+ throw new AgentVError("configuration-invalid", "Ollama credentials must be supplied through apiKey or headers, not embedded in baseURL.");
19
+ if (url.search || url.hash)
20
+ throw new AgentVError("configuration-invalid", "Ollama baseURL must not contain a query string or fragment.");
21
+ return url.toString().replace(/\/$/, "");
22
+ }
23
+ function headersOf(options) {
24
+ const headers = new Headers(options.headers);
25
+ if (options.apiKey && !headers.has("authorization"))
26
+ headers.set("authorization", `Bearer ${options.apiKey}`);
27
+ return headers;
28
+ }
29
+ async function jsonRequest(fetcher, url, headers, signal) {
30
+ let response;
31
+ try {
32
+ response = await fetcher(url, { method: "GET", headers, signal });
33
+ }
34
+ catch (error) {
35
+ if (error instanceof Error && (error.name === "AbortError" || error.name === "TimeoutError")) {
36
+ throw new AgentVError("timeout", "Ollama did not answer the readiness check in time.", { retryable: true, cause: error });
37
+ }
38
+ throw new AgentVError("engine-unavailable", "Could not connect to the configured Ollama server.", { retryable: true, cause: error });
39
+ }
40
+ if (!response.ok) {
41
+ const code = response.status === 401 || response.status === 403 ? "authentication-required" : "engine-unavailable";
42
+ throw new AgentVError(code, `Ollama readiness request failed with HTTP ${response.status}.`, { retryable: response.status >= 500 });
43
+ }
44
+ return response.json();
45
+ }
46
+ /** Inspects daemon reachability, version, and installed models without running inference. */
47
+ export async function inspectOllama(options = {}, _context = {}) {
48
+ const baseURL = baseURLOf(options);
49
+ const started = Date.now();
50
+ const checkedAt = new Date().toISOString();
51
+ try {
52
+ const fetcher = options.fetch ?? globalThis.fetch;
53
+ if (!fetcher)
54
+ throw new AgentVError("engine-unavailable", "This runtime does not provide fetch for Ollama readiness checks.");
55
+ const signal = AbortSignal.timeout(options.readinessTimeoutMs ?? 3_000);
56
+ const headers = headersOf(options);
57
+ const [versionValue, tagsValue] = await Promise.all([
58
+ jsonRequest(fetcher, `${baseURL}/api/version`, headers, signal),
59
+ jsonRequest(fetcher, `${baseURL}/api/tags`, headers, signal),
60
+ ]);
61
+ const version = versionValue.version;
62
+ const models = tagsValue.models;
63
+ if (typeof version !== "string" || !Array.isArray(models)) {
64
+ throw new AgentVError("output-invalid", "Ollama returned an unexpected readiness response.");
65
+ }
66
+ const modelIds = [...new Set(models.flatMap((entry) => {
67
+ const id = typeof entry.model === "string" ? entry.model : typeof entry.name === "string" ? entry.name : undefined;
68
+ return id ? [id] : [];
69
+ }))].sort();
70
+ return {
71
+ providerId: "ollama",
72
+ availability: "ready",
73
+ baseURL,
74
+ version,
75
+ models: modelIds,
76
+ checkedAt,
77
+ durationMs: Date.now() - started,
78
+ detail: `Ollama ${version} is reachable with ${modelIds.length} installed model${modelIds.length === 1 ? "" : "s"}.`,
79
+ };
80
+ }
81
+ catch (error) {
82
+ const failure = safeFailure(error);
83
+ const availability = failure.code === "authentication-required" ? "setup-required" : "unreachable";
84
+ return {
85
+ providerId: "ollama",
86
+ availability,
87
+ baseURL,
88
+ models: [],
89
+ checkedAt,
90
+ durationMs: Date.now() - started,
91
+ detail: failure.code === "authentication-required" ? "Ollama rejected the configured credentials." : "Ollama is not reachable at the configured base URL.",
92
+ failure: { code: failure.code, message: failure.message, retryable: failure.retryable },
93
+ };
94
+ }
95
+ }
96
+ /** Creates a per-run resolver that fails closed on daemon or installed-model drift. */
97
+ export function createOllamaModelResolver(options = {}) {
98
+ return async (selection) => {
99
+ const modelId = selection.modelId ?? options.defaultModel;
100
+ if (!modelId)
101
+ throw new AgentVError("configuration-invalid", "An Ollama model id is required on the adapter or run request.");
102
+ const readiness = await inspectOllama(options, { scope: selection.scope, metadata: selection.metadata });
103
+ if (readiness.availability !== "ready" || !readiness.version) {
104
+ throw new AgentVError(readiness.failure?.code ?? "engine-unavailable", readiness.detail, { retryable: readiness.failure?.retryable });
105
+ }
106
+ if ((options.requireInstalledModel ?? true) && !readiness.models.includes(modelId)) {
107
+ throw new AgentVError("engine-unavailable", `Ollama model ${modelId} is not installed at ${readiness.baseURL}.`);
108
+ }
109
+ const settings = typeof options.modelSettings === "function" ? await options.modelSettings(selection) : options.modelSettings;
110
+ const provider = createOllama({ baseURL: readiness.baseURL, apiKey: options.apiKey, headers: options.headers, fetch: options.fetch });
111
+ return {
112
+ model: provider(modelId, settings),
113
+ provenance: {
114
+ provider: "ollama",
115
+ model: modelId,
116
+ runtime: "ollama",
117
+ runtimeVersion: readiness.version,
118
+ adapterStrategy: ADAPTER_STRATEGY,
119
+ },
120
+ };
121
+ };
122
+ }
123
+ /** Paired structured and tool-agent engines backed by one Ollama configuration. */
124
+ export class OllamaRuntime {
125
+ structured;
126
+ agent;
127
+ options;
128
+ constructor(options = {}) {
129
+ this.options = options;
130
+ const id = options.id ?? "ollama";
131
+ const resolveModel = createOllamaModelResolver(options);
132
+ this.structured = new AiSdkStructuredModelEngine({
133
+ id: `${id}:structured`,
134
+ name: `${options.name ?? "Ollama"} structured model`,
135
+ provider: "ollama",
136
+ modelId: options.defaultModel,
137
+ adapterStrategy: ADAPTER_STRATEGY,
138
+ runtime: "ollama",
139
+ resolveModel,
140
+ });
141
+ this.agent = new AiSdkToolAgentEngine({
142
+ id: `${id}:agent`,
143
+ name: `${options.name ?? "Ollama"} tool agent`,
144
+ provider: "ollama",
145
+ modelId: options.defaultModel,
146
+ adapterStrategy: ADAPTER_STRATEGY,
147
+ runtime: "ollama",
148
+ resolveModel,
149
+ });
150
+ }
151
+ inspect(context) {
152
+ return inspectOllama(this.options, context);
153
+ }
154
+ }
155
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/ollama/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env node
2
+ import { doctorAgentV } from "../node/doctor.js";
3
+ import { fileURLToPath } from "node:url";
4
+ const HELP = `agent-v <command> [options]
5
+
6
+ Commands:
7
+ doctor Inspect dependencies and runtime readiness
8
+ skill-path Print the packaged agent-v Agent Skill directory
9
+
10
+ Doctor options:
11
+
12
+ Options:
13
+ --runtime <id> Inspect one runtime; repeat for multiple runtimes
14
+ --probe Run a bounded authenticated probe (requires --runtime)
15
+ --ollama-url <url> Inspect a specific Ollama server
16
+ --ollama-model <id> Require one installed Ollama model
17
+ --json Emit the machine-readable report
18
+ --strict Exit non-zero for warnings as well as errors
19
+ --help Show this help
20
+
21
+ Live probes may use configured provider credentials. They never weaken sandbox policy.
22
+ `;
23
+ function parseArguments(args) {
24
+ const runtimeIds = [];
25
+ const options = {};
26
+ let command;
27
+ let json = false;
28
+ let strict = false;
29
+ let help = false;
30
+ for (let index = 0; index < args.length; index += 1) {
31
+ const value = args[index];
32
+ if (!value.startsWith("-") && !command) {
33
+ command = value;
34
+ continue;
35
+ }
36
+ if (value === "--runtime") {
37
+ const id = args[++index];
38
+ if (!id)
39
+ throw new Error("--runtime requires an id.");
40
+ runtimeIds.push(id);
41
+ continue;
42
+ }
43
+ if (value === "--ollama-url") {
44
+ const url = args[++index];
45
+ if (!url)
46
+ throw new Error("--ollama-url requires a URL.");
47
+ options.ollamaBaseURL = url;
48
+ continue;
49
+ }
50
+ if (value === "--ollama-model") {
51
+ const model = args[++index];
52
+ if (!model)
53
+ throw new Error("--ollama-model requires an id.");
54
+ options.ollamaModel = model;
55
+ continue;
56
+ }
57
+ if (value === "--probe") {
58
+ options.probe = true;
59
+ continue;
60
+ }
61
+ if (value === "--json") {
62
+ json = true;
63
+ continue;
64
+ }
65
+ if (value === "--strict") {
66
+ strict = true;
67
+ continue;
68
+ }
69
+ if (value === "--help" || value === "-h") {
70
+ help = true;
71
+ continue;
72
+ }
73
+ throw new Error(`Unknown argument: ${value}`);
74
+ }
75
+ if (runtimeIds.length)
76
+ options.runtimeIds = runtimeIds;
77
+ return { command, options, json, strict, help };
78
+ }
79
+ function printReport(report) {
80
+ console.log(`agent-v ${report.packageVersion} doctor`);
81
+ for (const dependency of report.dependencies)
82
+ console.log(` ${dependency.installed ? "✓" : "○"} ${dependency.name}${dependency.version ? ` ${dependency.version}` : ""} — ${dependency.purpose}`);
83
+ for (const runtime of report.runtimes)
84
+ console.log(` ${runtime.availability === "installed" ? "✓" : "○"} ${runtime.runtimeId}${runtime.version ? ` ${runtime.version}` : ""} — ${runtime.verification}`);
85
+ console.log(` ${report.ollama.availability === "ready" ? "✓" : "○"} ollama${report.ollama.version ? ` ${report.ollama.version}` : ""} — ${report.ollama.availability}`);
86
+ for (const issue of report.issues)
87
+ console.log(` [${issue.severity}] ${issue.component}: ${issue.message}${issue.remediation ? ` ${issue.remediation}` : ""}`);
88
+ }
89
+ async function main() {
90
+ try {
91
+ const parsed = parseArguments(process.argv.slice(2));
92
+ if (parsed.help || !parsed.command) {
93
+ console.log(HELP);
94
+ return;
95
+ }
96
+ if (parsed.command === "skill-path") {
97
+ console.log(fileURLToPath(new URL("../../skills/agent-v", import.meta.url)));
98
+ return;
99
+ }
100
+ if (parsed.command !== "doctor")
101
+ throw new Error(`Unknown command: ${parsed.command}`);
102
+ const report = await doctorAgentV(parsed.options);
103
+ if (parsed.json)
104
+ console.log(JSON.stringify(report, null, 2));
105
+ else
106
+ printReport(report);
107
+ if (!report.ok || (parsed.strict && report.issues.some((issue) => issue.severity === "warning")))
108
+ process.exitCode = 1;
109
+ }
110
+ catch (error) {
111
+ console.error(error instanceof Error ? error.message : "agent-v doctor failed.");
112
+ process.exitCode = 1;
113
+ }
114
+ }
115
+ await main();
116
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { EventSink } from "./events.js";
2
+ import type { AgentBlueprint } from "./extensions.js";
3
+ import { ExtensionRegistry } from "./extensions.js";
4
+ import type { ConfigStore } from "./config.js";
5
+ import type { AgentRunStream, RunEventStore, SessionStore, ToolAgentRequest, ToolAgentResult } from "./contracts.js";
6
+ import { EngineRegistry } from "./registry.js";
7
+ export interface AgentVOptions {
8
+ engines?: EngineRegistry;
9
+ extensions?: ExtensionRegistry;
10
+ config?: ConfigStore;
11
+ events?: EventSink;
12
+ sessions?: SessionStore;
13
+ runEvents?: RunEventStore;
14
+ }
15
+ export declare class AgentV {
16
+ readonly engines: EngineRegistry;
17
+ readonly extensions: ExtensionRegistry;
18
+ readonly config: ConfigStore;
19
+ readonly events: EventSink;
20
+ readonly sessions?: SessionStore;
21
+ readonly runEvents?: RunEventStore;
22
+ constructor(options?: AgentVOptions);
23
+ private prepare;
24
+ private eventSink;
25
+ private saveSession;
26
+ run<T = string>(blueprint: AgentBlueprint, request: Omit<ToolAgentRequest<T>, "tools" | "maxSteps">): Promise<ToolAgentResult<T>>;
27
+ stream<T = string>(blueprint: AgentBlueprint, request: Omit<ToolAgentRequest<T>, "tools" | "maxSteps">): Promise<AgentRunStream<T>>;
28
+ }
29
+ //# sourceMappingURL=agent-v.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-v.d.ts","sourceRoot":"","sources":["../../src/core/agent-v.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAgB,aAAa,EAAE,YAAY,EAAmB,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpJ,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAUD,qBAAa,MAAM;IACjB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;gBAEvB,OAAO,GAAE,aAAkB;YASzB,OAAO;IA0DrB,OAAO,CAAC,SAAS;YAKH,WAAW;IAqBnB,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAejI,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;CAqB1I"}
@@ -0,0 +1,153 @@
1
+ import { fanOutEventSink, noopEventSink } from "./events.js";
2
+ import { ExtensionRegistry } from "./extensions.js";
3
+ import { AgentVError } from "./errors.js";
4
+ import { MemoryConfigStore } from "./config.js";
5
+ import { EngineRegistry } from "./registry.js";
6
+ import { assertExecutionScope } from "./types.js";
7
+ export class AgentV {
8
+ engines;
9
+ extensions;
10
+ config;
11
+ events;
12
+ sessions;
13
+ runEvents;
14
+ constructor(options = {}) {
15
+ this.engines = options.engines ?? new EngineRegistry();
16
+ this.extensions = options.extensions ?? new ExtensionRegistry();
17
+ this.config = options.config ?? new MemoryConfigStore();
18
+ this.events = options.events ?? noopEventSink;
19
+ this.sessions = options.sessions;
20
+ this.runEvents = options.runEvents;
21
+ }
22
+ async prepare(blueprint, request) {
23
+ assertExecutionScope(request.scope);
24
+ const config = await this.config.load();
25
+ const profile = blueprint.profileId ? config.profiles.find((candidate) => candidate.id === blueprint.profileId) : undefined;
26
+ if (blueprint.profileId && !profile)
27
+ throw new AgentVError("configuration-invalid", `No engine profile named ${blueprint.profileId} is configured.`);
28
+ if (profile && profile.kind !== "tool-agent")
29
+ throw new AgentVError("configuration-invalid", `Engine profile ${profile.id} is not a tool-agent profile.`);
30
+ const engineId = profile?.engineId ?? blueprint.engineId;
31
+ if (!engineId)
32
+ throw new AgentVError("configuration-invalid", `Agent ${blueprint.id} does not resolve to an engine.`);
33
+ const engine = this.engines.require(engineId, "tool-agent");
34
+ for (const capability of blueprint.requiredCapabilities ?? []) {
35
+ if (!engine.descriptor.capabilities.includes(capability)) {
36
+ throw new AgentVError("unsupported-capability", `${engine.descriptor.name} does not support ${capability}.`);
37
+ }
38
+ }
39
+ const skills = (blueprint.skills ?? []).map((id) => this.extensions.skills.require(id));
40
+ const hasToolRestrictions = skills.length > 0;
41
+ const allowedBySkills = new Set(skills.flatMap((skill) => skill.tools));
42
+ const requestedTools = blueprint.tools;
43
+ const deniedTools = hasToolRestrictions ? requestedTools.filter((name) => !allowedBySkills.has(name)) : [];
44
+ if (deniedTools.length) {
45
+ throw new AgentVError("permission-denied", `Agent ${blueprint.id} requests tools not allowed by its selected skills: ${deniedTools.join(", ")}.`);
46
+ }
47
+ const tools = requestedTools.map((name) => this.extensions.tools.require(name));
48
+ const skillInstructions = skills.map((skill) => `Skill: ${skill.name}\n${skill.instructions}`).join("\n\n");
49
+ const session = request.sessionId && this.sessions ? await this.sessions.get(request.scope, request.sessionId) : undefined;
50
+ if (session && session.agentId !== blueprint.id) {
51
+ throw new AgentVError("session-conflict", `Session ${session.id} belongs to agent ${session.agentId}, not ${blueprint.id}.`);
52
+ }
53
+ const sessionMessages = session?.messages ?? [];
54
+ let enriched = {
55
+ ...request,
56
+ runId: request.runId ?? crypto.randomUUID(),
57
+ input: {
58
+ ...request.input,
59
+ instructions: [blueprint.instructions, skillInstructions, request.input.instructions].filter(Boolean).join("\n\n"),
60
+ messages: [...sessionMessages, ...(request.input.messages ?? [])],
61
+ artifacts: [...skills.flatMap((skill) => skill.artifacts ?? []), ...(request.input.artifacts ?? [])],
62
+ },
63
+ tools,
64
+ model: request.model ?? profile?.model,
65
+ credentialRef: request.credentialRef ?? profile?.credentialRef,
66
+ engineOptions: request.engineOptions ?? profile?.options,
67
+ maxSteps: blueprint.maxSteps ?? config.execution.maxSteps,
68
+ };
69
+ const middleware = this.extensions.middleware.list();
70
+ const entered = [];
71
+ try {
72
+ for (const item of middleware) {
73
+ enriched = await item.beforeRun?.(enriched) ?? enriched;
74
+ entered.push(item);
75
+ }
76
+ }
77
+ catch (error) {
78
+ for (const item of entered.reverse())
79
+ await item.onError?.(error);
80
+ throw error;
81
+ }
82
+ return { blueprint, engine, request: enriched, middleware, session };
83
+ }
84
+ eventSink() {
85
+ if (!this.runEvents)
86
+ return this.events;
87
+ return fanOutEventSink(this.events, { emit: (event) => this.runEvents.append(event) });
88
+ }
89
+ async saveSession(prepared, result) {
90
+ const sessionId = prepared.request.sessionId;
91
+ if (!sessionId || !this.sessions)
92
+ return;
93
+ const now = new Date().toISOString();
94
+ const previous = prepared.session?.messages ?? [];
95
+ await this.sessions.save({
96
+ id: sessionId,
97
+ agentId: prepared.blueprint.id,
98
+ createdAt: prepared.session?.createdAt ?? now,
99
+ updatedAt: now,
100
+ messages: [
101
+ ...previous,
102
+ ...(prepared.request.input.messages ?? []).slice(previous.length),
103
+ { role: "user", parts: [{ type: "text", text: prepared.request.input.prompt }] },
104
+ { role: "assistant", parts: [{ type: "text", text: result.text }] },
105
+ ],
106
+ metadata: prepared.request.metadata,
107
+ scope: prepared.request.scope,
108
+ });
109
+ }
110
+ async run(blueprint, request) {
111
+ let middleware = [];
112
+ try {
113
+ const prepared = await this.prepare(blueprint, request);
114
+ middleware = prepared.middleware;
115
+ let result = await prepared.engine.run(prepared.request, this.eventSink());
116
+ for (const item of [...middleware].reverse())
117
+ result = await item.afterRun?.(result) ?? result;
118
+ await this.saveSession(prepared, result);
119
+ return result;
120
+ }
121
+ catch (error) {
122
+ for (const item of [...middleware].reverse())
123
+ await item.onError?.(error);
124
+ throw error;
125
+ }
126
+ }
127
+ async stream(blueprint, request) {
128
+ let middleware = [];
129
+ try {
130
+ const prepared = await this.prepare(blueprint, request);
131
+ middleware = prepared.middleware;
132
+ const stream = await prepared.engine.stream(prepared.request, this.eventSink());
133
+ const result = stream.result.then(async (initial) => {
134
+ let transformed = initial;
135
+ for (const item of [...middleware].reverse())
136
+ transformed = await item.afterRun?.(transformed) ?? transformed;
137
+ await this.saveSession(prepared, transformed);
138
+ return transformed;
139
+ }).catch(async (error) => {
140
+ for (const item of [...middleware].reverse())
141
+ await item.onError?.(error);
142
+ throw error;
143
+ });
144
+ return { events: stream.events, result };
145
+ }
146
+ catch (error) {
147
+ for (const item of [...middleware].reverse())
148
+ await item.onError?.(error);
149
+ throw error;
150
+ }
151
+ }
152
+ }
153
+ //# sourceMappingURL=agent-v.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-v.js","sourceRoot":"","sources":["../../src/core/agent-v.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { EngineKind, JsonObject } from "./types.js";
2
+ export interface EngineProfile {
3
+ id: string;
4
+ name: string;
5
+ kind: EngineKind;
6
+ engineId: string;
7
+ model?: string;
8
+ runtimeId?: string;
9
+ credentialRef?: string;
10
+ options?: JsonObject;
11
+ }
12
+ export interface AgentVConfig {
13
+ version: 1;
14
+ profiles: readonly EngineProfile[];
15
+ defaults: Partial<Record<EngineKind, string>>;
16
+ execution: {
17
+ maxSteps: number;
18
+ };
19
+ }
20
+ export interface ConfigStore {
21
+ load(): Promise<AgentVConfig>;
22
+ save(config: AgentVConfig): Promise<void>;
23
+ }
24
+ export declare function defaultConfig(): AgentVConfig;
25
+ export declare class MemoryConfigStore implements ConfigStore {
26
+ private config;
27
+ constructor(initial?: AgentVConfig);
28
+ load(): Promise<AgentVConfig>;
29
+ save(config: AgentVConfig): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,wBAAgB,aAAa,IAAI,YAAY,CAO5C;AAED,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,MAAM,CAAe;gBAEjB,OAAO,GAAE,YAA8B;IAI7C,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAI7B,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhD"}
@@ -0,0 +1,21 @@
1
+ export function defaultConfig() {
2
+ return {
3
+ version: 1,
4
+ profiles: [],
5
+ defaults: {},
6
+ execution: { maxSteps: 20 },
7
+ };
8
+ }
9
+ export class MemoryConfigStore {
10
+ config;
11
+ constructor(initial = defaultConfig()) {
12
+ this.config = structuredClone(initial);
13
+ }
14
+ async load() {
15
+ return structuredClone(this.config);
16
+ }
17
+ async save(config) {
18
+ this.config = structuredClone(config);
19
+ }
20
+ }
21
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AA2BA,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAe;IAE7B,YAAY,UAAwB,aAAa,EAAE;QACjD,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAoB;QAC7B,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;CACF"}