veryfront 0.1.498 → 0.1.500

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 (152) hide show
  1. package/esm/cli/auth/provider-store.d.ts +1 -1
  2. package/esm/cli/auth/provider-store.js +1 -1
  3. package/esm/cli/commands/doctor/ai-checks.js +1 -1
  4. package/esm/cli/skills/core-skills.js +1 -1
  5. package/esm/deno.d.ts +4 -0
  6. package/esm/deno.js +9 -5
  7. package/esm/extensions/{ext-anthropic → ext-llm-anthropic}/src/anthropic-provider.d.ts +5 -5
  8. package/esm/extensions/ext-llm-anthropic/src/anthropic-provider.d.ts.map +1 -0
  9. package/esm/extensions/{ext-anthropic → ext-llm-anthropic}/src/anthropic-provider.js +2 -2
  10. package/esm/extensions/{ext-anthropic → ext-llm-anthropic}/src/index.d.ts +3 -3
  11. package/esm/extensions/ext-llm-anthropic/src/index.d.ts.map +1 -0
  12. package/esm/extensions/{ext-anthropic → ext-llm-anthropic}/src/index.js +8 -8
  13. package/esm/extensions/{ext-google → ext-llm-google}/src/google-provider.d.ts +6 -6
  14. package/esm/extensions/ext-llm-google/src/google-provider.d.ts.map +1 -0
  15. package/esm/extensions/{ext-google → ext-llm-google}/src/google-provider.js +2 -2
  16. package/esm/extensions/{ext-google → ext-llm-google}/src/index.d.ts +3 -3
  17. package/esm/extensions/ext-llm-google/src/index.d.ts.map +1 -0
  18. package/esm/extensions/ext-llm-google/src/index.js +26 -0
  19. package/esm/extensions/{ext-openai → ext-llm-openai}/src/index.d.ts +3 -3
  20. package/esm/extensions/ext-llm-openai/src/index.d.ts.map +1 -0
  21. package/esm/extensions/ext-llm-openai/src/index.js +28 -0
  22. package/esm/extensions/{ext-openai → ext-llm-openai}/src/openai-provider.d.ts +7 -7
  23. package/esm/extensions/ext-llm-openai/src/openai-provider.d.ts.map +1 -0
  24. package/esm/extensions/{ext-openai → ext-llm-openai}/src/openai-provider.js +2 -2
  25. package/esm/src/agent/agent-service-server.d.ts +9 -1
  26. package/esm/src/agent/agent-service-server.d.ts.map +1 -1
  27. package/esm/src/agent/agent-service-server.js +14 -1
  28. package/esm/src/agent/hosted-agent-service-runtime.d.ts +10 -1
  29. package/esm/src/agent/hosted-agent-service-runtime.d.ts.map +1 -1
  30. package/esm/src/agent/hosted-agent-service-runtime.js +18 -1
  31. package/esm/src/agent/hosted-stream-terminal-error.js +1 -1
  32. package/esm/src/agent/index.d.ts +3 -2
  33. package/esm/src/agent/index.d.ts.map +1 -1
  34. package/esm/src/agent/index.js +3 -2
  35. package/esm/src/agent/runtime-agent-definition-files.d.ts.map +1 -1
  36. package/esm/src/agent/runtime-agent-definition-files.js +8 -3
  37. package/esm/src/agent/veryfront-cloud-agent-service.d.ts +41 -0
  38. package/esm/src/agent/veryfront-cloud-agent-service.d.ts.map +1 -0
  39. package/esm/src/agent/veryfront-cloud-agent-service.js +501 -0
  40. package/esm/src/chat/provider-errors.js +3 -3
  41. package/esm/src/config/schemas/config.schema.d.ts +24 -0
  42. package/esm/src/config/schemas/config.schema.d.ts.map +1 -1
  43. package/esm/src/config/schemas/config.schema.js +48 -0
  44. package/esm/src/discovery/index.d.ts +1 -0
  45. package/esm/src/discovery/index.d.ts.map +1 -1
  46. package/esm/src/discovery/index.js +1 -0
  47. package/esm/src/discovery/project-discovery-config.d.ts +30 -0
  48. package/esm/src/discovery/project-discovery-config.d.ts.map +1 -0
  49. package/esm/src/discovery/project-discovery-config.js +33 -0
  50. package/esm/src/embedding/resolve.js +5 -5
  51. package/esm/src/embedding/veryfront-cloud/provider.js +3 -3
  52. package/esm/src/extensions/builtin-extensions.d.ts +2 -2
  53. package/esm/src/extensions/builtin-extensions.d.ts.map +1 -1
  54. package/esm/src/extensions/builtin-extensions.js +26 -27
  55. package/esm/src/extensions/interfaces/index.d.ts +9 -5
  56. package/esm/src/extensions/interfaces/index.d.ts.map +1 -1
  57. package/esm/src/extensions/interfaces/index.js +7 -3
  58. package/esm/src/extensions/{interfaces → llm}/embedding-provider.d.ts +1 -1
  59. package/esm/src/extensions/llm/embedding-provider.d.ts.map +1 -0
  60. package/esm/src/extensions/{interfaces → llm}/embedding-provider.js +1 -1
  61. package/esm/src/extensions/llm/index.d.ts +16 -0
  62. package/esm/src/extensions/llm/index.d.ts.map +1 -0
  63. package/esm/src/extensions/llm/index.js +13 -0
  64. package/esm/src/extensions/llm/llm-provider-registry.d.ts +11 -0
  65. package/esm/src/extensions/llm/llm-provider-registry.d.ts.map +1 -0
  66. package/esm/src/extensions/{registries/ai-provider-registry.js → llm/llm-provider-registry.js} +6 -6
  67. package/esm/src/extensions/{interfaces/ai-provider.d.ts → llm/llm-provider.d.ts} +16 -16
  68. package/esm/src/extensions/llm/llm-provider.d.ts.map +1 -0
  69. package/esm/src/extensions/{interfaces/ai-provider.js → llm/llm-provider.js} +4 -4
  70. package/esm/src/extensions/loader.d.ts +1 -1
  71. package/esm/src/extensions/loader.js +1 -1
  72. package/esm/src/extensions/orchestrate.d.ts +1 -1
  73. package/esm/src/extensions/orchestrate.d.ts.map +1 -1
  74. package/esm/src/extensions/recommendations.js +4 -4
  75. package/esm/src/provider/local/env.d.ts +1 -1
  76. package/esm/src/provider/local/env.js +1 -1
  77. package/esm/src/provider/model-registry.d.ts.map +1 -1
  78. package/esm/src/provider/model-registry.js +9 -9
  79. package/esm/src/provider/shared/index.d.ts +1 -1
  80. package/esm/src/provider/shared/index.js +1 -1
  81. package/esm/src/provider/veryfront-cloud/openai.js +4 -4
  82. package/esm/src/provider/veryfront-cloud/provider.js +2 -2
  83. package/esm/src/server/bootstrap.d.ts.map +1 -1
  84. package/esm/src/server/bootstrap.js +4 -5
  85. package/esm/src/server/handlers/request/api/project-discovery.d.ts.map +1 -1
  86. package/esm/src/server/handlers/request/api/project-discovery.js +6 -22
  87. package/esm/src/server/index.d.ts +1 -1
  88. package/esm/src/server/index.d.ts.map +1 -1
  89. package/esm/src/server/index.js +1 -1
  90. package/esm/src/server/service-server.d.ts +18 -0
  91. package/esm/src/server/service-server.d.ts.map +1 -1
  92. package/esm/src/server/service-server.js +318 -0
  93. package/esm/src/utils/version-constant.d.ts +1 -1
  94. package/esm/src/utils/version-constant.js +1 -1
  95. package/esm/src/workflow/schemas/workflow.schema.d.ts +1 -1
  96. package/package.json +6 -1
  97. package/src/cli/auth/provider-store.ts +1 -1
  98. package/src/cli/commands/doctor/ai-checks.ts +1 -1
  99. package/src/cli/skills/core-skills.ts +1 -1
  100. package/src/deno.js +9 -5
  101. package/src/extensions/{ext-anthropic → ext-llm-anthropic}/src/anthropic-provider.ts +5 -5
  102. package/src/extensions/ext-llm-anthropic/src/index.ts +34 -0
  103. package/src/extensions/{ext-google → ext-llm-google}/src/google-provider.ts +6 -6
  104. package/src/extensions/ext-llm-google/src/index.ts +31 -0
  105. package/src/extensions/ext-llm-openai/src/index.ts +33 -0
  106. package/src/extensions/{ext-openai → ext-llm-openai}/src/openai-provider.ts +7 -7
  107. package/src/src/agent/agent-service-server.ts +26 -0
  108. package/src/src/agent/hosted-agent-service-runtime.ts +42 -0
  109. package/src/src/agent/hosted-stream-terminal-error.ts +1 -1
  110. package/src/src/agent/index.ts +16 -0
  111. package/src/src/agent/runtime-agent-definition-files.ts +8 -3
  112. package/src/src/agent/veryfront-cloud-agent-service.ts +798 -0
  113. package/src/src/chat/provider-errors.ts +3 -3
  114. package/src/src/config/schemas/config.schema.ts +48 -0
  115. package/src/src/discovery/index.ts +4 -0
  116. package/src/src/discovery/project-discovery-config.ts +89 -0
  117. package/src/src/embedding/resolve.ts +6 -6
  118. package/src/src/embedding/veryfront-cloud/provider.ts +4 -4
  119. package/src/src/extensions/builtin-extensions.ts +32 -33
  120. package/src/src/extensions/interfaces/index.ts +11 -7
  121. package/src/src/extensions/{interfaces → llm}/embedding-provider.ts +1 -1
  122. package/src/src/extensions/llm/index.ts +17 -0
  123. package/src/src/extensions/{registries/ai-provider-registry.ts → llm/llm-provider-registry.ts} +12 -12
  124. package/src/src/extensions/{interfaces/ai-provider.ts → llm/llm-provider.ts} +15 -15
  125. package/src/src/extensions/loader.ts +1 -1
  126. package/src/src/extensions/orchestrate.ts +1 -1
  127. package/src/src/extensions/recommendations.ts +4 -4
  128. package/src/src/provider/local/env.ts +1 -1
  129. package/src/src/provider/model-registry.ts +11 -10
  130. package/src/src/provider/shared/index.ts +1 -1
  131. package/src/src/provider/veryfront-cloud/openai.ts +4 -4
  132. package/src/src/provider/veryfront-cloud/provider.ts +2 -2
  133. package/src/src/server/bootstrap.ts +7 -5
  134. package/src/src/server/handlers/request/api/project-discovery.ts +6 -27
  135. package/src/src/server/index.ts +4 -0
  136. package/src/src/server/service-server.ts +428 -0
  137. package/src/src/utils/version-constant.ts +1 -1
  138. package/esm/extensions/ext-anthropic/src/anthropic-provider.d.ts.map +0 -1
  139. package/esm/extensions/ext-anthropic/src/index.d.ts.map +0 -1
  140. package/esm/extensions/ext-google/src/google-provider.d.ts.map +0 -1
  141. package/esm/extensions/ext-google/src/index.d.ts.map +0 -1
  142. package/esm/extensions/ext-google/src/index.js +0 -26
  143. package/esm/extensions/ext-openai/src/index.d.ts.map +0 -1
  144. package/esm/extensions/ext-openai/src/index.js +0 -28
  145. package/esm/extensions/ext-openai/src/openai-provider.d.ts.map +0 -1
  146. package/esm/src/extensions/interfaces/ai-provider.d.ts.map +0 -1
  147. package/esm/src/extensions/interfaces/embedding-provider.d.ts.map +0 -1
  148. package/esm/src/extensions/registries/ai-provider-registry.d.ts +0 -11
  149. package/esm/src/extensions/registries/ai-provider-registry.d.ts.map +0 -1
  150. package/src/extensions/ext-anthropic/src/index.ts +0 -34
  151. package/src/extensions/ext-google/src/index.ts +0 -31
  152. package/src/extensions/ext-openai/src/index.ts +0 -33
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.498",
3
+ "version": "0.1.500",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
@@ -185,6 +185,10 @@
185
185
  "import": "./esm/src/extensions/interfaces/index.js",
186
186
  "types": "./esm/src/extensions/interfaces/index.d.ts"
187
187
  },
188
+ "./extensions/llm": {
189
+ "import": "./esm/src/extensions/llm/index.js",
190
+ "types": "./esm/src/extensions/llm/index.d.ts"
191
+ },
188
192
  "./testing": {
189
193
  "import": "./esm/src/testing/index.js",
190
194
  "types": "./esm/src/testing/index.d.ts"
@@ -259,6 +263,7 @@
259
263
  "@types/hast": "3.0.3",
260
264
  "@types/mdast": "4.0.3",
261
265
  "@types/unist": "3.0.2",
266
+ "bash-tool": "^1.3.16",
262
267
  "class-variance-authority": "0.7.1",
263
268
  "es-module-lexer": "2.0.0",
264
269
  "esbuild": "0.27.4",
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provider-namespaced token storage for AI provider API keys.
2
+ * Provider-namespaced token storage for LLM provider API keys.
3
3
  *
4
4
  * Stores API keys as plaintext with 0600 permissions in
5
5
  * ~/.config/veryfront/tokens/<provider>. Same security model
@@ -46,7 +46,7 @@ export async function checkAIConfig(projectDir: string): Promise<DiagnosticResul
46
46
  results.push({
47
47
  status: "warn",
48
48
  name: "AI Providers",
49
- message: "No AI providers configured",
49
+ message: "No LLM providers configured",
50
50
  });
51
51
  return results;
52
52
  }
@@ -75,7 +75,7 @@ Create a new Veryfront application with proper structure and conventions.
75
75
  provider: {
76
76
  type: "string",
77
77
  default: "anthropic",
78
- description: "AI provider to configure",
78
+ description: "LLM provider to configure",
79
79
  },
80
80
  },
81
81
  },
package/src/deno.js CHANGED
@@ -1,17 +1,17 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.498",
3
+ "version": "0.1.500",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
7
7
  "./cli",
8
- "./extensions/ext-anthropic",
8
+ "./extensions/ext-llm-anthropic",
9
+ "./extensions/ext-llm-google",
10
+ "./extensions/ext-llm-openai",
9
11
  "./extensions/ext-babel",
10
- "./extensions/ext-google",
11
12
  "./extensions/ext-jwt",
12
13
  "./extensions/ext-mdx",
13
14
  "./extensions/ext-node-compat",
14
- "./extensions/ext-openai",
15
15
  "./extensions/ext-opentelemetry",
16
16
  "./extensions/ext-esbuild",
17
17
  "./extensions/ext-redis",
@@ -70,6 +70,7 @@ export default {
70
70
  "./embedding": "./src/embedding/index.ts",
71
71
  "./extensions": "./src/extensions/index.ts",
72
72
  "./extensions/interfaces": "./src/extensions/interfaces/index.ts",
73
+ "./extensions/llm": "./src/extensions/llm/index.ts",
73
74
  "./testing": "./src/testing/index.ts",
74
75
  "./testing/assert": "./src/testing/assert.ts",
75
76
  "./testing/bdd": "./src/testing/bdd.ts",
@@ -274,7 +275,9 @@ export default {
274
275
  "veryfront/chat/conversation": "./src/chat/conversation.ts",
275
276
  "veryfront/chat/message-prep": "./src/chat/message-prep.ts",
276
277
  "veryfront/chat/final-step-fallback": "./src/chat/final-step-fallback.ts",
277
- "veryfront/chat/provider-errors": "./src/chat/provider-errors.ts"
278
+ "veryfront/chat/provider-errors": "./src/chat/provider-errors.ts",
279
+ "bash-tool": "npm:bash-tool@1.3.16",
280
+ "just-bash": "npm:just-bash@2.14.5"
278
281
  },
279
282
  "compilerOptions": {
280
283
  "jsx": "react-jsx",
@@ -372,6 +375,7 @@ export default {
372
375
  "start-split": "deno task generate && deno run --allow-all cli/main.ts serve --split",
373
376
  "start-split:binary": "deno task generate && deno run --allow-all cli/main.ts serve --split --binary",
374
377
  "sbom": "deno run --allow-read --allow-write scripts/build/generate-sbom.ts",
378
+ "submit-deps": "deno run --allow-read --allow-env --allow-net=api.github.com scripts/security/submit-dependency-snapshot.ts",
375
379
  "audit": "deno run --allow-read --allow-run --allow-write scripts/security/audit-npm.ts"
376
380
  },
377
381
  "lint": {
@@ -1,14 +1,14 @@
1
1
  /**
2
- * Anthropic provider — implements the {@link AIProvider} contract for
2
+ * Anthropic provider — implements the {@link LLMProvider} contract for
3
3
  * Anthropic's Messages API (direct + via Veryfront Cloud / Bedrock-compatible
4
4
  * proxies).
5
5
  *
6
6
  * Ported from `src/provider/runtime-loader.ts` as part of PR 12.
7
7
  *
8
- * @module extensions/ext-anthropic/anthropic-provider
8
+ * @module extensions/ext-llm-anthropic/anthropic-provider
9
9
  */
10
10
 
11
- import type { AIProvider, AIProviderConfig } from "../../../src/extensions/interfaces/index.js";
11
+ import type { LLMProvider, LLMProviderConfig } from "../../../src/extensions/llm/index.js";
12
12
  import type { ModelRuntime } from "../../../src/provider/types.js";
13
13
  import {
14
14
  buildProviderError,
@@ -1207,10 +1207,10 @@ export function createAnthropicModelRuntime(
1207
1207
  };
1208
1208
  }
1209
1209
 
1210
- export class AnthropicProvider implements AIProvider {
1210
+ export class AnthropicProvider implements LLMProvider {
1211
1211
  readonly id = "anthropic";
1212
1212
 
1213
- createModel(modelId: string, config: AIProviderConfig): ModelRuntime {
1213
+ createModel(modelId: string, config: LLMProviderConfig): ModelRuntime {
1214
1214
  return createAnthropicModelRuntime(
1215
1215
  {
1216
1216
  apiKey: config.credential,
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @veryfront/ext-llm-anthropic — registers the Anthropic provider into the
3
+ * core `LLMProviderRegistry`.
4
+ *
5
+ * @module extensions/ext-llm-anthropic
6
+ */
7
+
8
+ import type { ExtensionFactory } from "../../../src/extensions/index.js";
9
+ import type { LLMProviderRegistry } from "../../../src/extensions/llm/index.js";
10
+ import { LLMProviderRegistryName } from "../../../src/extensions/llm/index.js";
11
+ import { AnthropicProvider } from "./anthropic-provider.js";
12
+
13
+ const extAnthropic: ExtensionFactory = () => {
14
+ const provider = new AnthropicProvider();
15
+ let registryRef: LLMProviderRegistry | undefined;
16
+ return {
17
+ name: "ext-llm-anthropic",
18
+ version: "0.1.0",
19
+ capabilities: [{ type: "contract", name: "LLMProvider:anthropic" }],
20
+ setup(ctx) {
21
+ const registry = ctx.require<LLMProviderRegistry>(LLMProviderRegistryName);
22
+ registry.register(provider);
23
+ registryRef = registry;
24
+ ctx.logger.info("[ext-llm-anthropic] Anthropic provider registered");
25
+ },
26
+ teardown() {
27
+ registryRef?.unregister(provider.id);
28
+ registryRef = undefined;
29
+ },
30
+ };
31
+ };
32
+
33
+ export default extAnthropic;
34
+ export { AnthropicProvider };
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Google provider — implements the {@link AIProvider} contract for Google's
2
+ * Google provider — implements the {@link LLMProvider} contract for Google's
3
3
  * Generative Language API (direct + via Veryfront Cloud).
4
4
  *
5
5
  * Ported from `src/provider/runtime-loader.ts` as part of PR 13.
6
6
  *
7
- * @module extensions/ext-google/google-provider
7
+ * @module extensions/ext-llm-google/google-provider
8
8
  */
9
9
 
10
- import type { AIProvider, AIProviderConfig } from "../../../src/extensions/interfaces/index.js";
10
+ import type { LLMProvider, LLMProviderConfig } from "../../../src/extensions/llm/index.js";
11
11
  import type { EmbeddingRuntime, ModelRuntime } from "../../../src/provider/types.js";
12
12
  import {
13
13
  buildProviderError,
@@ -858,10 +858,10 @@ export function createGoogleEmbeddingRuntime(
858
858
  };
859
859
  }
860
860
 
861
- export class GoogleProvider implements AIProvider {
861
+ export class GoogleProvider implements LLMProvider {
862
862
  readonly id = "google";
863
863
 
864
- createModel(modelId: string, config: AIProviderConfig): ModelRuntime {
864
+ createModel(modelId: string, config: LLMProviderConfig): ModelRuntime {
865
865
  return createGoogleModelRuntime(
866
866
  {
867
867
  apiKey: config.credential,
@@ -873,7 +873,7 @@ export class GoogleProvider implements AIProvider {
873
873
  );
874
874
  }
875
875
 
876
- createEmbedding(modelId: string, config: AIProviderConfig): EmbeddingRuntime {
876
+ createEmbedding(modelId: string, config: LLMProviderConfig): EmbeddingRuntime {
877
877
  return createGoogleEmbeddingRuntime(
878
878
  {
879
879
  apiKey: config.credential,
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @veryfront/ext-llm-google — registers the Google provider into the
3
+ * core `LLMProviderRegistry`.
4
+ *
5
+ * @module extensions/ext-llm-google
6
+ */
7
+
8
+ import type { ExtensionFactory } from "../../../src/extensions/index.js";
9
+ import type { LLMProviderRegistry } from "../../../src/extensions/llm/index.js";
10
+ import { LLMProviderRegistryName } from "../../../src/extensions/llm/index.js";
11
+ import { GoogleProvider } from "./google-provider.js";
12
+
13
+ const extGoogle: ExtensionFactory = () => {
14
+ const provider = new GoogleProvider();
15
+ return {
16
+ name: "ext-llm-google",
17
+ version: "0.1.0",
18
+ capabilities: [{ type: "contract", name: "LLMProvider:google" }],
19
+ setup(ctx) {
20
+ const registry = ctx.require<LLMProviderRegistry>(LLMProviderRegistryName);
21
+ registry.register(provider);
22
+ ctx.logger.info("[ext-llm-google] Google provider registered");
23
+ },
24
+ teardown() {
25
+ // No resources to release.
26
+ },
27
+ };
28
+ };
29
+
30
+ export default extGoogle;
31
+ export { GoogleProvider };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @veryfront/ext-llm-openai — registers the OpenAI provider into the
3
+ * core `LLMProviderRegistry`.
4
+ *
5
+ * @module extensions/ext-llm-openai
6
+ */
7
+
8
+ import type { ExtensionFactory } from "../../../src/extensions/index.js";
9
+ import type { LLMProviderRegistry } from "../../../src/extensions/llm/index.js";
10
+ import { LLMProviderRegistryName } from "../../../src/extensions/llm/index.js";
11
+ import { OpenAIProvider } from "./openai-provider.js";
12
+
13
+ const extOpenAI: ExtensionFactory = () => {
14
+ const provider = new OpenAIProvider();
15
+ let registry: LLMProviderRegistry | undefined;
16
+ return {
17
+ name: "ext-llm-openai",
18
+ version: "0.1.0",
19
+ capabilities: [{ type: "contract", name: "LLMProvider:openai" }],
20
+ setup(ctx) {
21
+ registry = ctx.require<LLMProviderRegistry>(LLMProviderRegistryName);
22
+ registry.register(provider);
23
+ ctx.logger.info("[ext-llm-openai] OpenAI provider registered");
24
+ },
25
+ teardown() {
26
+ registry?.unregister(provider.id);
27
+ registry = undefined;
28
+ },
29
+ };
30
+ };
31
+
32
+ export default extOpenAI;
33
+ export { OpenAIProvider };
@@ -1,14 +1,14 @@
1
1
  /**
2
- * OpenAI provider — implements the {@link AIProvider} contract for OpenAI,
2
+ * OpenAI provider — implements the {@link LLMProvider} contract for OpenAI,
3
3
  * OpenAI-compatible endpoints (Azure OpenAI, Moonshot AI), and OpenAI's
4
4
  * Responses API.
5
5
  *
6
6
  * Ported from `src/provider/runtime-loader.ts` as part of PR 11.
7
7
  *
8
- * @module extensions/ext-openai/openai-provider
8
+ * @module extensions/ext-llm-openai/openai-provider
9
9
  */
10
10
 
11
- import type { AIProvider, AIProviderConfig } from "../../../src/extensions/interfaces/index.js";
11
+ import type { LLMProvider, LLMProviderConfig } from "../../../src/extensions/llm/index.js";
12
12
  import type { EmbeddingRuntime, ModelRuntime } from "../../../src/provider/types.js";
13
13
  import {
14
14
  buildProviderError,
@@ -1467,10 +1467,10 @@ export function createOpenAIEmbeddingRuntime(
1467
1467
  };
1468
1468
  }
1469
1469
 
1470
- export class OpenAIProvider implements AIProvider {
1470
+ export class OpenAIProvider implements LLMProvider {
1471
1471
  readonly id = "openai";
1472
1472
 
1473
- createModel(modelId: string, config: AIProviderConfig): ModelRuntime {
1473
+ createModel(modelId: string, config: LLMProviderConfig): ModelRuntime {
1474
1474
  return createOpenAIModelRuntime(
1475
1475
  {
1476
1476
  apiKey: config.credential,
@@ -1482,7 +1482,7 @@ export class OpenAIProvider implements AIProvider {
1482
1482
  );
1483
1483
  }
1484
1484
 
1485
- createEmbedding(modelId: string, config: AIProviderConfig): EmbeddingRuntime {
1485
+ createEmbedding(modelId: string, config: LLMProviderConfig): EmbeddingRuntime {
1486
1486
  return createOpenAIEmbeddingRuntime(
1487
1487
  {
1488
1488
  apiKey: config.credential,
@@ -1494,7 +1494,7 @@ export class OpenAIProvider implements AIProvider {
1494
1494
  );
1495
1495
  }
1496
1496
 
1497
- createResponses(modelId: string, config: AIProviderConfig): ModelRuntime {
1497
+ createResponses(modelId: string, config: LLMProviderConfig): ModelRuntime {
1498
1498
  return createOpenAIResponsesRuntime(
1499
1499
  {
1500
1500
  apiKey: config.credential,
@@ -2,6 +2,8 @@ import {
2
2
  createVeryfrontServer,
3
3
  type NodeVeryfrontServiceServer,
4
4
  startNodeVeryfrontServer,
5
+ startVeryfrontServer,
6
+ type VeryfrontServiceServer,
5
7
  type VeryfrontServiceServerLogger,
6
8
  type VeryfrontServiceServerRuntime,
7
9
  } from "../server/service-server.js";
@@ -26,7 +28,15 @@ export type StartNodeAgentServiceServerOptions = CreateAgentServiceServerRuntime
26
28
  hardShutdownTimeoutMs?: number;
27
29
  };
28
30
 
31
+ export type StartAgentServiceServerOptions = CreateAgentServiceServerRuntimeOptions & {
32
+ port: number;
33
+ bindAddress?: string;
34
+ signals?: readonly NodeJS.Signals[];
35
+ hardShutdownTimeoutMs?: number;
36
+ };
37
+
29
38
  export type NodeAgentServiceServer = NodeVeryfrontServiceServer;
39
+ export type AgentServiceServer = VeryfrontServiceServer | NodeVeryfrontServiceServer;
30
40
 
31
41
  function getAgentServiceServerName(
32
42
  options: CreateAgentServiceServerRuntimeOptions,
@@ -70,3 +80,19 @@ export async function startNodeAgentServiceServer(
70
80
  await server.ready;
71
81
  return server;
72
82
  }
83
+
84
+ export async function startAgentServiceServer(
85
+ options: StartAgentServiceServerOptions,
86
+ ): Promise<AgentServiceServer> {
87
+ const runtime = createAgentServiceServerRuntime(options);
88
+ const server = await startVeryfrontServer({
89
+ runtime,
90
+ port: options.port,
91
+ bindAddress: options.bindAddress,
92
+ logger: options.logger,
93
+ signals: options.signals,
94
+ hardShutdownTimeoutMs: options.hardShutdownTimeoutMs,
95
+ });
96
+ await server.ready;
97
+ return server;
98
+ }
@@ -27,7 +27,9 @@ import type { ParsedHostedChatRequest } from "./hosted-chat-request-parser.js";
27
27
  import type { AgUiResumeValue } from "./ag-ui-tool-shared.js";
28
28
  import type { RuntimeAgentMarkdownDefinition } from "./runtime-agent-definition.js";
29
29
  import {
30
+ type AgentServiceServer,
30
31
  type NodeAgentServiceServer,
32
+ startAgentServiceServer,
31
33
  startNodeAgentServiceServer,
32
34
  } from "./agent-service-server.js";
33
35
  import type { VeryfrontServiceServerLogger } from "../server/service-server.js";
@@ -115,6 +117,15 @@ export type StartNodeAgentServiceOptions<
115
117
  TConfig extends AgentServiceRuntimeConfig = AgentServiceRuntimeConfig,
116
118
  > = StartNodeHostedAgentServiceOptions<TExecution, TConfig>;
117
119
 
120
+ export type StartAgentServiceRuntimeOptions<
121
+ TExecution extends object,
122
+ TConfig extends AgentServiceRuntimeConfig = AgentServiceRuntimeConfig,
123
+ > = CreateAgentServiceRuntimeOptions<TExecution, TConfig> & {
124
+ bindAddress?: string;
125
+ hardShutdownTimeoutMs?: number;
126
+ signals?: readonly NodeJS.Signals[];
127
+ };
128
+
118
129
  export type StartNodeHostedAgentServiceResult<
119
130
  TExecution extends object,
120
131
  TConfig extends HostedAgentServiceRuntimeConfig = HostedAgentServiceRuntimeConfig,
@@ -127,6 +138,13 @@ export type StartNodeAgentServiceResult<
127
138
  TConfig extends AgentServiceRuntimeConfig = AgentServiceRuntimeConfig,
128
139
  > = StartNodeHostedAgentServiceResult<TExecution, TConfig>;
129
140
 
141
+ export type StartAgentServiceRuntimeResult<
142
+ TExecution extends object,
143
+ TConfig extends AgentServiceRuntimeConfig = AgentServiceRuntimeConfig,
144
+ > = AgentServiceRuntimeBundle<TExecution, TConfig> & {
145
+ server: AgentServiceServer;
146
+ };
147
+
130
148
  function defaultTrace<TResult>(
131
149
  _operationName: string,
132
150
  operation: () => Promise<TResult>,
@@ -236,3 +254,27 @@ export async function startNodeAgentService<
236
254
  ): Promise<StartNodeAgentServiceResult<TExecution, TConfig>> {
237
255
  return startNodeHostedAgentService(options);
238
256
  }
257
+
258
+ export async function startAgentServiceRuntime<
259
+ TExecution extends object,
260
+ TConfig extends AgentServiceRuntimeConfig = AgentServiceRuntimeConfig,
261
+ >(
262
+ options: StartAgentServiceRuntimeOptions<TExecution, TConfig>,
263
+ ): Promise<StartAgentServiceRuntimeResult<TExecution, TConfig>> {
264
+ const bundle = createAgentServiceRuntime(options);
265
+ const server = await startAgentServiceServer({
266
+ runtime: bundle.runtime,
267
+ serviceName: options.serviceName,
268
+ lifecycle: bundle.lifecycle,
269
+ port: bundle.config.PORT,
270
+ bindAddress: options.bindAddress,
271
+ signals: options.signals,
272
+ logger: options.logger,
273
+ hardShutdownTimeoutMs: options.hardShutdownTimeoutMs,
274
+ });
275
+
276
+ return {
277
+ ...bundle,
278
+ server,
279
+ };
280
+ }
@@ -5,7 +5,7 @@ import { parseProviderError } from "../chat/provider-errors.js";
5
5
  const EMPTY_RESPONSE_TERMINAL_ERROR_CODE = "EMPTY_RESPONSE";
6
6
  const EMPTY_RESPONSE_TERMINAL_ERROR_MESSAGE = "Assistant completed without producing a response";
7
7
  const EXTERNAL_SERVICE_ERROR_CODE = "EXTERNAL_SERVICE_ERROR";
8
- const EXTERNAL_SERVICE_ERROR_MESSAGE = "AI provider service error";
8
+ const EXTERNAL_SERVICE_ERROR_MESSAGE = "LLM provider service error";
9
9
  const STREAM_ERROR_TERMINAL_ERROR_CODE = "STREAM_ERROR";
10
10
 
11
11
  export type HostedStreamTerminalError = {
@@ -252,10 +252,13 @@ export {
252
252
  type NormalizedAgentServiceContract,
253
253
  } from "./agent-service.js";
254
254
  export {
255
+ type AgentServiceServer,
255
256
  type AgentServiceServerLifecycle,
256
257
  createAgentServiceServerRuntime,
257
258
  type CreateAgentServiceServerRuntimeOptions,
258
259
  type NodeAgentServiceServer,
260
+ startAgentServiceServer,
261
+ type StartAgentServiceServerOptions,
259
262
  startNodeAgentServiceServer,
260
263
  type StartNodeAgentServiceServerOptions,
261
264
  } from "./agent-service-server.js";
@@ -316,6 +319,9 @@ export {
316
319
  type HostedAgentServiceRuntimeConfig,
317
320
  type HostedAgentServiceRuntimeLogger,
318
321
  type HostedAgentServiceRuntimeTrace,
322
+ startAgentServiceRuntime,
323
+ type StartAgentServiceRuntimeOptions,
324
+ type StartAgentServiceRuntimeResult,
319
325
  startNodeAgentService,
320
326
  type StartNodeAgentServiceOptions,
321
327
  type StartNodeAgentServiceResult,
@@ -323,6 +329,16 @@ export {
323
329
  type StartNodeHostedAgentServiceOptions,
324
330
  type StartNodeHostedAgentServiceResult,
325
331
  } from "./hosted-agent-service-runtime.js";
332
+ export {
333
+ createNodeVeryfrontCloudAgentServiceRuntime,
334
+ type NodeVeryfrontCloudAgentServiceOptions,
335
+ type NodeVeryfrontCloudAgentServicePreparedExecution,
336
+ type NodeVeryfrontCloudAgentServiceProcessTarget,
337
+ runNodeVeryfrontCloudAgentServiceMain,
338
+ startAgentService,
339
+ startNodeVeryfrontCloudAgentService,
340
+ type VeryfrontCloudAgentServiceOptions,
341
+ } from "./veryfront-cloud-agent-service.js";
326
342
  export {
327
343
  type AgentServiceConfig,
328
344
  type AgentServiceConfigInput,
@@ -1,5 +1,5 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
- import { resolve } from "node:path";
2
+ import { basename, resolve } from "node:path";
3
3
  import { z } from "zod";
4
4
  import {
5
5
  parseRuntimeAgentMarkdownDefinition,
@@ -45,15 +45,20 @@ export function resolveRuntimeAgentDefinitionsDir(
45
45
  ): string {
46
46
  const parsedInput = resolveRuntimeAgentDefinitionsDirInputSchema.parse(input);
47
47
  const fileName = getRuntimeAgentDefinitionFileName(parsedInput);
48
- const firstCandidate = resolve(parsedInput.baseDir, "../agents");
48
+ const firstCandidate = resolve(parsedInput.baseDir, "agents");
49
+ const sourceLayoutCandidate = resolve(parsedInput.baseDir, "../agents");
49
50
  const candidates = [
50
51
  firstCandidate,
52
+ sourceLayoutCandidate,
51
53
  resolve(parsedInput.baseDir, "../../agents"),
52
54
  resolve(parsedInput.baseDir, "../../../agents"),
53
55
  ];
56
+ const fallbackCandidate = basename(parsedInput.baseDir) === "src"
57
+ ? sourceLayoutCandidate
58
+ : firstCandidate;
54
59
 
55
60
  return candidates.find((candidate) => hasRuntimeAgentDefinitionFile(candidate, fileName)) ??
56
- firstCandidate;
61
+ fallbackCandidate;
57
62
  }
58
63
 
59
64
  export function resolveRuntimeAgentMarkdownDefinitionFilePath(