veryfront 0.1.130 → 0.1.132

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 (107) hide show
  1. package/esm/_dnt.polyfills.d.ts +11 -0
  2. package/esm/_dnt.polyfills.d.ts.map +1 -1
  3. package/esm/_dnt.polyfills.js +14 -0
  4. package/esm/cli/auth/login.d.ts.map +1 -1
  5. package/esm/cli/auth/login.js +11 -0
  6. package/esm/cli/auth/provider-store.d.ts +20 -0
  7. package/esm/cli/auth/provider-store.d.ts.map +1 -0
  8. package/esm/cli/auth/provider-store.js +62 -0
  9. package/esm/cli/auth/providers/anthropic.d.ts +2 -0
  10. package/esm/cli/auth/providers/anthropic.d.ts.map +1 -0
  11. package/esm/cli/auth/providers/anthropic.js +37 -0
  12. package/esm/cli/auth/providers/openai.d.ts +2 -0
  13. package/esm/cli/auth/providers/openai.d.ts.map +1 -0
  14. package/esm/cli/auth/providers/openai.js +35 -0
  15. package/esm/cli/auth/utils.d.ts +5 -0
  16. package/esm/cli/auth/utils.d.ts.map +1 -1
  17. package/esm/cli/auth/utils.js +9 -0
  18. package/esm/cli/router.d.ts.map +1 -1
  19. package/esm/cli/router.js +22 -1
  20. package/esm/deno.js +1 -1
  21. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  22. package/esm/src/agent/runtime/index.js +17 -2
  23. package/esm/src/agent/runtime/tool-helpers.d.ts +2 -1
  24. package/esm/src/agent/runtime/tool-helpers.d.ts.map +1 -1
  25. package/esm/src/agent/runtime/tool-helpers.js +6 -3
  26. package/esm/src/channels/control-plane.js +6 -6
  27. package/esm/src/discovery/handlers/agent-handler.d.ts.map +1 -1
  28. package/esm/src/discovery/handlers/agent-handler.js +10 -1
  29. package/esm/src/html/html-injection.d.ts.map +1 -1
  30. package/esm/src/html/html-injection.js +6 -5
  31. package/esm/src/html/nonce-injection.d.ts +2 -0
  32. package/esm/src/html/nonce-injection.d.ts.map +1 -0
  33. package/esm/src/html/nonce-injection.js +104 -0
  34. package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
  35. package/esm/src/internal-agents/run-stream.js +26 -4
  36. package/esm/src/rendering/orchestrator/html.d.ts.map +1 -1
  37. package/esm/src/rendering/orchestrator/html.js +3 -89
  38. package/esm/src/rendering/rsc/client-boot.ts +18 -1
  39. package/esm/src/rendering/script-page-handling.js +1 -0
  40. package/esm/src/server/handlers/preview/markdown-html-generator.d.ts +2 -0
  41. package/esm/src/server/handlers/preview/markdown-html-generator.d.ts.map +1 -1
  42. package/esm/src/server/handlers/preview/markdown-html-generator.js +10 -7
  43. package/esm/src/server/handlers/preview/markdown-preview.handler.d.ts.map +1 -1
  44. package/esm/src/server/handlers/preview/markdown-preview.handler.js +6 -3
  45. package/esm/src/server/handlers/request/api/project-discovery.d.ts.map +1 -1
  46. package/esm/src/server/handlers/request/api/project-discovery.js +16 -5
  47. package/esm/src/server/handlers/request/api/security-headers.d.ts +1 -0
  48. package/esm/src/server/handlers/request/api/security-headers.d.ts.map +1 -1
  49. package/esm/src/server/handlers/request/api/security-headers.js +4 -1
  50. package/esm/src/server/handlers/request/openapi-docs.handler.d.ts.map +1 -1
  51. package/esm/src/server/handlers/request/openapi-docs.handler.js +10 -6
  52. package/esm/src/server/handlers/request/rsc/index.d.ts.map +1 -1
  53. package/esm/src/server/handlers/request/rsc/index.js +5 -2
  54. package/esm/src/server/handlers/request/ssr/ssr-response-builder.d.ts.map +1 -1
  55. package/esm/src/server/handlers/request/ssr/ssr-response-builder.js +12 -2
  56. package/esm/src/server/handlers/request/static.handler.d.ts.map +1 -1
  57. package/esm/src/server/handlers/request/static.handler.js +18 -10
  58. package/esm/src/server/handlers/response/not-found.d.ts.map +1 -1
  59. package/esm/src/server/handlers/response/not-found.js +14 -15
  60. package/esm/src/server/services/rsc/endpoints/endpoint-router.d.ts +1 -1
  61. package/esm/src/server/services/rsc/endpoints/endpoint-router.d.ts.map +1 -1
  62. package/esm/src/server/services/rsc/endpoints/endpoint-router.js +3 -3
  63. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.d.ts.map +1 -1
  64. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.js +1 -1
  65. package/esm/src/server/services/rsc/endpoints/types.d.ts +1 -0
  66. package/esm/src/server/services/rsc/endpoints/types.d.ts.map +1 -1
  67. package/esm/src/server/services/rsc/orchestrators/handler.d.ts +1 -1
  68. package/esm/src/server/services/rsc/orchestrators/handler.d.ts.map +1 -1
  69. package/esm/src/server/services/rsc/orchestrators/handler.js +2 -2
  70. package/esm/src/server/services/rsc/orchestrators/page-handler.d.ts +1 -1
  71. package/esm/src/server/services/rsc/orchestrators/page-handler.d.ts.map +1 -1
  72. package/esm/src/server/services/rsc/orchestrators/page-handler.js +7 -5
  73. package/esm/src/utils/version-constant.d.ts +1 -1
  74. package/esm/src/utils/version-constant.js +1 -1
  75. package/package.json +1 -1
  76. package/src/_dnt.polyfills.ts +27 -0
  77. package/src/cli/auth/login.ts +12 -0
  78. package/src/cli/auth/provider-store.ts +82 -0
  79. package/src/cli/auth/providers/anthropic.ts +46 -0
  80. package/src/cli/auth/providers/openai.ts +45 -0
  81. package/src/cli/auth/utils.ts +10 -0
  82. package/src/cli/router.ts +24 -1
  83. package/src/deno.js +1 -1
  84. package/src/src/agent/runtime/index.ts +22 -0
  85. package/src/src/agent/runtime/tool-helpers.ts +15 -3
  86. package/src/src/channels/control-plane.ts +6 -6
  87. package/src/src/discovery/handlers/agent-handler.ts +10 -1
  88. package/src/src/html/html-injection.ts +9 -5
  89. package/src/src/html/nonce-injection.ts +129 -0
  90. package/src/src/internal-agents/run-stream.ts +35 -4
  91. package/src/src/rendering/orchestrator/html.ts +3 -105
  92. package/src/src/rendering/script-page-handling.ts +1 -0
  93. package/src/src/server/handlers/preview/markdown-html-generator.ts +12 -6
  94. package/src/src/server/handlers/preview/markdown-preview.handler.ts +6 -3
  95. package/src/src/server/handlers/request/api/project-discovery.ts +18 -5
  96. package/src/src/server/handlers/request/api/security-headers.ts +10 -1
  97. package/src/src/server/handlers/request/openapi-docs.handler.ts +10 -6
  98. package/src/src/server/handlers/request/rsc/index.ts +5 -2
  99. package/src/src/server/handlers/request/ssr/ssr-response-builder.ts +16 -2
  100. package/src/src/server/handlers/request/static.handler.ts +22 -10
  101. package/src/src/server/handlers/response/not-found.ts +14 -15
  102. package/src/src/server/services/rsc/endpoints/endpoint-router.ts +3 -3
  103. package/src/src/server/services/rsc/endpoints/rsc-bundles.generated.ts +1 -1
  104. package/src/src/server/services/rsc/endpoints/types.ts +1 -0
  105. package/src/src/server/services/rsc/orchestrators/handler.ts +2 -2
  106. package/src/src/server/services/rsc/orchestrators/page-handler.ts +8 -5
  107. package/src/src/utils/version-constant.ts +1 -1
@@ -159,6 +159,17 @@ declare global {
159
159
  }
160
160
  }
161
161
  export {};
162
+ declare global {
163
+ interface Object {
164
+ /**
165
+ * Determines whether an object has a property with the specified name.
166
+ * @param o An object.
167
+ * @param v A property name.
168
+ */
169
+ hasOwn(o: object, v: PropertyKey): boolean;
170
+ }
171
+ }
172
+ export {};
162
173
  declare global {
163
174
  interface PromiseConstructor {
164
175
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"_dnt.polyfills.d.ts","sourceRoot":"","sources":["../src/_dnt.polyfills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_dnt.polyfills.d.ts","sourceRoot":"","sources":["../src/_dnt.polyfills.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,KAAK;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB;CACF;AAED,OAAO,EAAE,CAAC;AACV;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAgC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,UAAU;QAClB;;;;;;;;;;;;;;WAcG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;;;;;;;;;;;WAYG;QACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,GAAG,MAAM,CAAC;QACtE;;;;;;;;WAQG;QACH,IAAI,EAAE,OAAO,CAAC;QAEd;;;;;;;;;;;;WAYG;QACH,QAAQ,EAAE,MAAM,CAAC;QAEjB;;;;;;;;;;;;WAYG;QACH,OAAO,EAAE,MAAM,CAAC;KACjB;CACF;AAED,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,KAAK,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,UAAU,0BAA0B;IAClC,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CACxD;AACD,UAAU,0BAA0B;IAClC,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC;CACtC;AACD,UAAU,kBACR,SAAQ,0BAA0B,EAAE,0BAA0B;CAC/D;AAiBD,eAAO,IAAI,6BAA6B,EA2BnC,0BAA0B,CAAC;AAMhC,eAAO,IAAI,6BAA6B,EA4DnC,0BAA0B,CAAC;AAMhC,eAAO,IAAI,oBAAoB,EAoB1B,kBAAkB,CAAC;AAExB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,gBAAgB;QACxB,SAAS,CAAC,CAAC,EACP,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAC7F,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAEhB,SAAS,CAAC,CAAC,EAAE,CAAC,EACV,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAClE,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAC/B,OAAO,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC1B;CACF;AAoID,OAAO,EAAE,CAAC;AACV,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,KAAK,CAAC,CAAC;QACf;;;;;;;;WAQG;QACH,QAAQ,CAAC,CAAC,SAAS,CAAC,EAClB,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,EACxE,OAAO,CAAC,EAAE,GAAG,GACZ,CAAC,GAAG,SAAS,CAAC;QACjB,QAAQ,CACN,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,OAAO,EACzD,OAAO,CAAC,EAAE,GAAG,GACZ,CAAC,GAAG,SAAS,CAAC;QAEjB;;;;;;;;WAQG;QACH,aAAa,CACX,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,OAAO,EACzD,OAAO,CAAC,EAAE,GAAG,GACZ,MAAM,CAAC;KACX;IACD,UAAU,UAAU;QAClB;;;;;;;;WAQG;QACH,QAAQ,CAAC,CAAC,SAAS,MAAM,EACvB,SAAS,EAAE,CACP,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,KAChB,KAAK,IAAI,CAAC,EACf,OAAO,CAAC,EAAE,GAAG,GACZ,CAAC,GAAG,SAAS,CAAC;QACjB,QAAQ,CACJ,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,OAAO,EACvE,OAAO,CAAC,EAAE,GAAG,GACd,MAAM,GAAG,SAAS,CAAC;QAEtB;;;;;;;;WAQG;QACH,aAAa,CACT,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,OAAO,EACvE,OAAO,CAAC,EAAE,GAAG,GACd,MAAM,CAAC;KACX;CACF;AA4CD,OAAO,EAAE,CAAC;AAgBV,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd;;;;WAIG;QACH,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;KAC5C;CACF;AAED,OAAO,EAAE,CAAC;AACV,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,kBAAkB;QAC1B;;;WAGG;QACH,aAAa,CAAC,CAAC,KAAK;YAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;YAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;SAAE,CAAC;KAC3H;CACF"}
@@ -270,6 +270,20 @@ if (!Uint8Array.prototype.findLast) {
270
270
  return findLast(this, callbackfn, that);
271
271
  };
272
272
  }
273
+ // https://github.com/tc39/proposal-accessible-object-hasownproperty/blob/main/polyfill.js
274
+ if (!Object.hasOwn) {
275
+ Object.defineProperty(Object, "hasOwn", {
276
+ value: function (object, property) {
277
+ if (object == null) {
278
+ throw new TypeError("Cannot convert undefined or null to object");
279
+ }
280
+ return Object.prototype.hasOwnProperty.call(Object(object), property);
281
+ },
282
+ configurable: true,
283
+ enumerable: false,
284
+ writable: true,
285
+ });
286
+ }
273
287
  // https://github.com/tc39/proposal-promise-with-resolvers/blob/3a78801e073e99217dbeb2c43ba7212f3bdc8b83/polyfills.js#L1C1-L9C2
274
288
  if (Promise.withResolvers === undefined) {
275
289
  Promise.withResolvers = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/auth/login.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,iBAAiB,EAAwB,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,WAAW,EAAoB,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQjG,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AAErE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AASD,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAgB3E;AA8ID,wBAAsB,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA8BzE;AAED,wBAAsB,mBAAmB,CACvC,GAAG,GAAE,iBAA0C,GAC9C,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAqB1B;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAI5C;AAED,wBAAsB,MAAM,CAC1B,GAAG,GAAE,iBAA0C,GAC9C,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAuC1B;AAED,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/auth/login.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,iBAAiB,EAAwB,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,WAAW,EAAoB,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQjG,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AAErE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AASD,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAgB3E;AA8ID,wBAAsB,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA8BzE;AAED,wBAAsB,mBAAmB,CACvC,GAAG,GAAE,iBAA0C,GAC9C,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAqB1B;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAI5C;AAED,wBAAsB,MAAM,CAC1B,GAAG,GAAE,iBAA0C,GAC9C,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAmD1B;AAED,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC"}
@@ -238,6 +238,17 @@ export async function whoami(env = getEnvironmentConfig()) {
238
238
  console.log();
239
239
  console.log(" " + warning("✗") + " Not logged in");
240
240
  console.log(" " + dim("Run 'veryfront login' to authenticate"));
241
+ // Show provider tokens
242
+ try {
243
+ const { listProviderTokens } = await import("./provider-store.js");
244
+ const providers = await listProviderTokens();
245
+ for (const p of providers) {
246
+ console.log(" " + success("✓") + ` ${p} API key configured`);
247
+ }
248
+ }
249
+ catch {
250
+ // Provider store not available
251
+ }
241
252
  return null;
242
253
  }
243
254
  export { deleteToken, hasToken, readToken, saveToken };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Provider-namespaced token storage for AI provider API keys.
3
+ *
4
+ * Stores API keys as plaintext with 0600 permissions in
5
+ * ~/.config/veryfront/tokens/<provider>. Same security model
6
+ * as the existing platform token in ~/.config/veryfront/token.
7
+ *
8
+ * @module cli/auth/provider-store
9
+ */
10
+ export type ProviderName = "anthropic" | "openai";
11
+ export interface ProviderCredential {
12
+ apiKey: string;
13
+ validatedAt: string;
14
+ provider: ProviderName;
15
+ }
16
+ export declare function saveProviderToken(provider: ProviderName, credential: ProviderCredential): Promise<void>;
17
+ export declare function readProviderToken(provider: ProviderName): Promise<ProviderCredential | null>;
18
+ export declare function deleteProviderToken(provider: ProviderName): Promise<void>;
19
+ export declare function listProviderTokens(): Promise<ProviderName[]>;
20
+ //# sourceMappingURL=provider-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-store.d.ts","sourceRoot":"","sources":["../../../src/cli/auth/provider-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAElD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAUD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAQpC;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAgBlE"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Provider-namespaced token storage for AI provider API keys.
3
+ *
4
+ * Stores API keys as plaintext with 0600 permissions in
5
+ * ~/.config/veryfront/tokens/<provider>. Same security model
6
+ * as the existing platform token in ~/.config/veryfront/token.
7
+ *
8
+ * @module cli/auth/provider-store
9
+ */
10
+ import { getEnvironmentConfig } from "../../src/config/index.js";
11
+ import { join } from "../../src/platform/compat/path/index.js";
12
+ import { createFileSystem } from "../../src/platform/index.js";
13
+ function getTokenDir() {
14
+ const env = getEnvironmentConfig();
15
+ const configDir = env.xdgConfigHome
16
+ ? join(env.xdgConfigHome, "veryfront")
17
+ : join(env.homeDir, ".config", "veryfront");
18
+ return join(configDir, "tokens");
19
+ }
20
+ export async function saveProviderToken(provider, credential) {
21
+ const fs = createFileSystem();
22
+ const dir = getTokenDir();
23
+ await fs.mkdir(dir, { recursive: true });
24
+ const path = join(dir, provider);
25
+ await fs.writeTextFile(path, JSON.stringify(credential));
26
+ await fs.chmod(path, 0o600);
27
+ }
28
+ export async function readProviderToken(provider) {
29
+ const fs = createFileSystem();
30
+ try {
31
+ const raw = await fs.readTextFile(join(getTokenDir(), provider));
32
+ return JSON.parse(raw);
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ export async function deleteProviderToken(provider) {
39
+ const fs = createFileSystem();
40
+ try {
41
+ await fs.remove(join(getTokenDir(), provider));
42
+ }
43
+ catch {
44
+ // Token doesn't exist — fine
45
+ }
46
+ }
47
+ export async function listProviderTokens() {
48
+ const fs = createFileSystem();
49
+ const providers = [];
50
+ try {
51
+ for await (const entry of fs.readDir(getTokenDir())) {
52
+ if (entry.isFile &&
53
+ (entry.name === "anthropic" || entry.name === "openai")) {
54
+ providers.push(entry.name);
55
+ }
56
+ }
57
+ }
58
+ catch {
59
+ // Directory doesn't exist
60
+ }
61
+ return providers;
62
+ }
@@ -0,0 +1,2 @@
1
+ export declare function loginAnthropic(): Promise<boolean>;
2
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../src/cli/auth/providers/anthropic.ts"],"names":[],"mappings":"AAKA,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAwCvD"}
@@ -0,0 +1,37 @@
1
+ import * as dntShim from "../../../_dnt.shims.js";
2
+ import { logError, logSuccess, promptPassword } from "../../utils/index.js";
3
+ import { saveProviderToken } from "../provider-store.js";
4
+ import { dim } from "../../ui/colors.js";
5
+ export async function loginAnthropic() {
6
+ console.log(`\n Enter your Anthropic API key.`);
7
+ console.log(` ${dim("Get one at: https://console.anthropic.com/settings/keys")}\n`);
8
+ const apiKey = promptPassword(" API key: ");
9
+ if (!apiKey) {
10
+ logError("No API key provided.");
11
+ return false;
12
+ }
13
+ try {
14
+ const resp = await dntShim.fetch("https://api.anthropic.com/v1/models", {
15
+ headers: {
16
+ "x-api-key": apiKey,
17
+ "anthropic-version": "2023-06-01",
18
+ },
19
+ });
20
+ if (!resp.ok) {
21
+ logError(`Invalid API key (HTTP ${resp.status}). Check your key at console.anthropic.com`);
22
+ return false;
23
+ }
24
+ }
25
+ catch (e) {
26
+ logError(`Failed to validate key: ${e instanceof Error ? e.message : String(e)}`);
27
+ return false;
28
+ }
29
+ const credential = {
30
+ apiKey,
31
+ validatedAt: new Date().toISOString(),
32
+ provider: "anthropic",
33
+ };
34
+ await saveProviderToken("anthropic", credential);
35
+ logSuccess("Anthropic API key configured");
36
+ return true;
37
+ }
@@ -0,0 +1,2 @@
1
+ export declare function loginOpenAI(baseUrl?: string): Promise<boolean>;
2
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../src/cli/auth/providers/openai.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuCpE"}
@@ -0,0 +1,35 @@
1
+ import * as dntShim from "../../../_dnt.shims.js";
2
+ import { logError, logSuccess, promptPassword } from "../../utils/index.js";
3
+ import { saveProviderToken } from "../provider-store.js";
4
+ import { dim } from "../../ui/colors.js";
5
+ export async function loginOpenAI(baseUrl) {
6
+ console.log(`\n Enter your OpenAI API key.`);
7
+ console.log(` ${dim("Get one at: https://platform.openai.com/api-keys")}\n`);
8
+ const apiKey = promptPassword(" API key: ");
9
+ if (!apiKey) {
10
+ logError("No API key provided.");
11
+ return false;
12
+ }
13
+ const endpoint = baseUrl ?? "https://api.openai.com";
14
+ try {
15
+ const resp = await dntShim.fetch(`${endpoint}/v1/models`, {
16
+ headers: { Authorization: `Bearer ${apiKey}` },
17
+ });
18
+ if (!resp.ok) {
19
+ logError(`Invalid API key (HTTP ${resp.status}). Check your key at platform.openai.com`);
20
+ return false;
21
+ }
22
+ }
23
+ catch (e) {
24
+ logError(`Failed to validate key: ${e instanceof Error ? e.message : String(e)}`);
25
+ return false;
26
+ }
27
+ const credential = {
28
+ apiKey,
29
+ validatedAt: new Date().toISOString(),
30
+ provider: "openai",
31
+ };
32
+ await saveProviderToken("openai", credential);
33
+ logSuccess("OpenAI API key configured");
34
+ return true;
35
+ }
@@ -5,8 +5,13 @@
5
5
  */
6
6
  import type { AuthMethod } from "./login.js";
7
7
  import type { ParsedArgs } from "../shared/types.js";
8
+ import type { ProviderName } from "./provider-store.js";
8
9
  /**
9
10
  * Parse login method from CLI arguments
10
11
  */
11
12
  export declare function parseLoginMethod(args: ParsedArgs): AuthMethod | undefined;
13
+ /**
14
+ * Parse --provider flag from CLI arguments
15
+ */
16
+ export declare function parseProvider(args: ParsedArgs): ProviderName | undefined;
12
17
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/cli/auth/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,GACf,UAAU,GAAG,SAAS,CAMxB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/cli/auth/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,GACf,UAAU,GAAG,SAAS,CAMxB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,CAIxE"}
@@ -17,3 +17,12 @@ export function parseLoginMethod(args) {
17
17
  return "token";
18
18
  return undefined;
19
19
  }
20
+ /**
21
+ * Parse --provider flag from CLI arguments
22
+ */
23
+ export function parseProvider(args) {
24
+ const provider = args.provider;
25
+ if (provider === "anthropic" || provider === "openai")
26
+ return provider;
27
+ return undefined;
28
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/cli/router.ts"],"names":[],"mappings":"AA0DA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAmEpD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FlE"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/cli/router.ts"],"names":[],"mappings":"AA0DA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA0FpD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FlE"}
package/esm/cli/router.js CHANGED
@@ -76,9 +76,30 @@ const commands = {
76
76
  "deploy": handleDeployCommand,
77
77
  "up": handleUpCommand,
78
78
  "login": async (args) => {
79
+ const { parseProvider } = await import("./auth/utils.js");
80
+ const provider = parseProvider(args);
81
+ if (provider === "anthropic") {
82
+ const { loginAnthropic } = await import("./auth/providers/anthropic.js");
83
+ await loginAnthropic();
84
+ return;
85
+ }
86
+ if (provider === "openai") {
87
+ const { loginOpenAI } = await import("./auth/providers/openai.js");
88
+ await loginOpenAI(args["base-url"]);
89
+ return;
90
+ }
79
91
  await login(parseLoginMethod(args));
80
92
  },
81
- "logout": async () => {
93
+ "logout": async (args) => {
94
+ const { parseProvider } = await import("./auth/utils.js");
95
+ const provider = parseProvider(args);
96
+ if (provider) {
97
+ const { deleteProviderToken } = await import("./auth/provider-store.js");
98
+ await deleteProviderToken(provider);
99
+ const { logSuccess } = await import("./utils/index.js");
100
+ logSuccess(`${provider} API key removed`);
101
+ return;
102
+ }
82
103
  await logout();
83
104
  },
84
105
  "whoami": async () => {
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.130",
3
+ "version": "0.1.132",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,aAAa,EAGlB,KAAK,OAAO,EAEZ,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAgB/D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAuDxB;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CA6BxE;AAED,gEAAgE;AAChE,KAAK,iBAAiB,GAClB;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GACjB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,EACvC,kBAAkB,EAAE,OAAO,GAC1B,iBAAiB,CAiBnB;AA0BD,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAuB;gBAEzB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAS3C;;OAEG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,EACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,CAAC,EAAE,MAAM,EACtB,uBAAuB,CAAC,EAAE,MAAM,GAC/B,OAAO,CAAC,aAAa,CAAC;IA2CzB;;;OAGG;IACG,MAAM,CACV,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,SAAS,CAAC,EAAE;QACV,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;QAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QAClC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;KAC9C,EACD,aAAa,CAAC,EAAE,MAAM,EACtB,uBAAuB,CAAC,EAAE,MAAM,EAChC,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAsHtC;;OAEG;YACW,gBAAgB;IAuO9B;;;;OAIG;YACW,yBAAyB;IA8OvC;;OAEG;YACW,eAAe;IAqC7B;;OAEG;YACW,mBAAmB;IAOjC;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,sBAAsB;IAY9B;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC;IAI5B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAIF;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAGnC"}
@@ -117,6 +117,17 @@ function isLocalModel(model) {
117
117
  m.provider === "local" ||
118
118
  (typeof m.modelId === "string" && m.modelId.startsWith("local/"));
119
119
  }
120
+ function getRuntimeAllowedRemoteTools(config) {
121
+ const configWithRuntimeFilters = config;
122
+ if (!Object.hasOwn(configWithRuntimeFilters, "__vfAllowedRemoteTools")) {
123
+ return undefined;
124
+ }
125
+ const raw = configWithRuntimeFilters.__vfAllowedRemoteTools;
126
+ if (!Array.isArray(raw)) {
127
+ return [];
128
+ }
129
+ return raw.every((toolName) => typeof toolName === "string") ? raw : [];
130
+ }
120
131
  export class AgentRuntime {
121
132
  id;
122
133
  config;
@@ -281,11 +292,13 @@ export class AgentRuntime {
281
292
  }
282
293
  // Request-scoped skill policy (not class-level mutable state)
283
294
  let activeSkillPolicy;
295
+ const allowedRemoteToolNames = getRuntimeAllowedRemoteTools(this.config);
284
296
  for (let step = 0; step < maxSteps; step++) {
285
297
  this.status = "thinking";
286
298
  addSpanEvent(loopSpan, "step_start", { step });
287
299
  let tools = isLocal ? [] : await getAvailableTools(this.config.tools, {
288
300
  includeSkillTools: Boolean(this.config.skills),
301
+ allowedRemoteToolNames,
289
302
  });
290
303
  // Layer 1: Filter tools based on active skill policy (planning-time)
291
304
  if (activeSkillPolicy) {
@@ -387,7 +400,7 @@ export class AgentRuntime {
387
400
  agentId: this.id,
388
401
  toolCallId: tc.toolCallId,
389
402
  projectId: cacheCtx?.projectId,
390
- });
403
+ }, allowedRemoteToolNames);
391
404
  toolCall.status = "completed";
392
405
  toolCall.result = result;
393
406
  toolCall.executionTime = Date.now() - startTime;
@@ -473,11 +486,13 @@ export class AgentRuntime {
473
486
  // Request-scoped skill policy (not class-level mutable state)
474
487
  let activeSkillPolicy;
475
488
  let finalFinishReason;
489
+ const allowedRemoteToolNames = getRuntimeAllowedRemoteTools(this.config);
476
490
  for (let step = 0; step < maxSteps; step++) {
477
491
  throwIfAborted(abortSignal);
478
492
  sendSSE(controller, encoder, { type: "step-start" });
479
493
  let tools = isLocalStreaming ? [] : await getAvailableTools(this.config.tools, {
480
494
  includeSkillTools: Boolean(this.config.skills),
495
+ allowedRemoteToolNames,
481
496
  });
482
497
  // Layer 1: Filter tools based on active skill policy (planning-time)
483
498
  if (activeSkillPolicy) {
@@ -566,7 +581,7 @@ export class AgentRuntime {
566
581
  agentId: this.id,
567
582
  toolCallId: tc.id,
568
583
  ...toolContext,
569
- });
584
+ }, allowedRemoteToolNames);
570
585
  throwIfAborted(abortSignal);
571
586
  toolCall.status = "completed";
572
587
  toolCall.result = result;
@@ -28,7 +28,7 @@ export declare function isDynamicTool(name: string): boolean;
28
28
  */
29
29
  export type ToolConfigEntry = Tool<any, any> | boolean;
30
30
  export declare function resolveConfiguredTool(toolsConfig: true | Record<string, ToolConfigEntry> | undefined, toolName: string): Tool | null;
31
- export declare function executeConfiguredTool(toolName: string, input: Record<string, unknown>, toolsConfig: true | Record<string, ToolConfigEntry> | undefined, context?: ToolExecutionContext): Promise<unknown>;
31
+ export declare function executeConfiguredTool(toolName: string, input: Record<string, unknown>, toolsConfig: true | Record<string, ToolConfigEntry> | undefined, context?: ToolExecutionContext, allowedRemoteToolNames?: string[]): Promise<unknown>;
32
32
  /**
33
33
  * Get available tools based on agent configuration.
34
34
  * When tools === true, loads all tools from registry.
@@ -40,5 +40,6 @@ export declare function executeConfiguredTool(toolName: string, input: Record<st
40
40
  export declare function getAvailableTools(toolsConfig: true | Record<string, ToolConfigEntry> | undefined, options?: {
41
41
  includeSkillTools?: boolean;
42
42
  includeIntegrationTools?: boolean;
43
+ allowedRemoteToolNames?: string[];
43
44
  }): Promise<ToolDefinition[]>;
44
45
  //# sourceMappingURL=tool-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAYtF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,cAAc,CAuBhB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;GAGG;AAEH,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;AAEvD,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,EAC/D,QAAQ,EAAE,MAAM,GACf,IAAI,GAAG,IAAI,CAmBb;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,EAC/D,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAoBD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,EAC/D,OAAO,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3E,OAAO,CAAC,cAAc,EAAE,CAAC,CAwE3B"}
1
+ {"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAYtF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,cAAc,CAuBhB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;GAGG;AAEH,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;AAEvD,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,EAC/D,QAAQ,EAAE,MAAM,GACf,IAAI,GAAG,IAAI,CAmBb;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,EAC/D,OAAO,CAAC,EAAE,oBAAoB,EAC9B,sBAAsB,CAAC,EAAE,MAAM,EAAE,GAChC,OAAO,CAAC,OAAO,CAAC,CAyBlB;AAoBD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,EAC/D,OAAO,CAAC,EAAE;IACR,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;CACnC,GACA,OAAO,CAAC,cAAc,EAAE,CAAC,CA4E3B"}
@@ -59,7 +59,7 @@ export function resolveConfiguredTool(toolsConfig, toolName) {
59
59
  }
60
60
  return null;
61
61
  }
62
- export async function executeConfiguredTool(toolName, input, toolsConfig, context) {
62
+ export async function executeConfiguredTool(toolName, input, toolsConfig, context, allowedRemoteToolNames) {
63
63
  const configuredTool = resolveConfiguredTool(toolsConfig, toolName);
64
64
  if (configuredTool) {
65
65
  return await configuredTool.execute(input, context);
@@ -71,6 +71,9 @@ export async function executeConfiguredTool(toolName, input, toolsConfig, contex
71
71
  }
72
72
  // Fall back to remote execution for integration tools (e.g., github:list-repos)
73
73
  if (isRemoteIntegrationTool(toolName)) {
74
+ if (allowedRemoteToolNames && !allowedRemoteToolNames.includes(toolName)) {
75
+ throw new Error(`Tool "${toolName}" is not allowed for this run`);
76
+ }
74
77
  return await executeRemoteIntegrationTool(toolName, input, context?.endUserId);
75
78
  }
76
79
  return await executeTool(toolName, input, context);
@@ -113,7 +116,7 @@ export async function getAvailableTools(toolsConfig, options) {
113
116
  if (options?.includeIntegrationTools !== false) {
114
117
  try {
115
118
  const { getRemoteIntegrationToolDefinitions } = await import("../../integrations/remote-tools.js");
116
- const remoteDefs = await getRemoteIntegrationToolDefinitions();
119
+ const remoteDefs = (await getRemoteIntegrationToolDefinitions()).filter((def) => !options?.allowedRemoteToolNames || options.allowedRemoteToolNames.includes(def.name));
117
120
  for (const def of remoteDefs) {
118
121
  logToolDefinition(def.name, def);
119
122
  }
@@ -143,7 +146,7 @@ export async function getAvailableTools(toolsConfig, options) {
143
146
  if (options?.includeIntegrationTools !== false) {
144
147
  try {
145
148
  const { getRemoteIntegrationToolDefinitions } = await import("../../integrations/remote-tools.js");
146
- const remoteDefs = await getRemoteIntegrationToolDefinitions();
149
+ const remoteDefs = (await getRemoteIntegrationToolDefinitions()).filter((def) => !options?.allowedRemoteToolNames || options.allowedRemoteToolNames.includes(def.name));
147
150
  for (const def of remoteDefs) {
148
151
  // Skip if already present (e.g., explicitly configured by name)
149
152
  if (!tools.some((t) => t.name === def.name)) {
@@ -148,13 +148,13 @@ function resolveAgentSkills(agent) {
148
148
  }))
149
149
  .sort((left, right) => left.name.localeCompare(right.name));
150
150
  }
151
- function getRuntimeAgentMetadata(agent) {
151
+ function getRuntimeAgentMetadata(id, agent) {
152
152
  const rawConfig = agent.config;
153
153
  return RuntimeAgentSchema.parse({
154
- id: agent.id,
154
+ id,
155
155
  name: typeof rawConfig.name === "string" && rawConfig.name.trim().length > 0
156
156
  ? rawConfig.name
157
- : agent.id,
157
+ : id,
158
158
  description: typeof rawConfig.description === "string" ? rawConfig.description : null,
159
159
  model: agent.config.model ?? null,
160
160
  version: typeof rawConfig.version === "string" ? rawConfig.version : null,
@@ -164,9 +164,9 @@ function getRuntimeAgentMetadata(agent) {
164
164
  export async function listRuntimeAgents(ctx, deps) {
165
165
  await deps.ensureProjectDiscovery(ctx);
166
166
  const agents = deps.getAllAgentIds()
167
- .map((id) => deps.getAgent(id))
168
- .filter((agent) => Boolean(agent))
169
- .map(getRuntimeAgentMetadata)
167
+ .map((id) => ({ id, agent: deps.getAgent(id) }))
168
+ .filter((entry) => Boolean(entry.agent))
169
+ .map(({ id, agent }) => getRuntimeAgentMetadata(id, agent))
170
170
  .sort((left, right) => left.name.localeCompare(right.name));
171
171
  return RuntimeAgentListResponseSchema.parse({ agents });
172
172
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/discovery/handlers/agent-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,eAAO,MAAM,YAAY,EAAE,gBAAgB,CAAC,KAAK,CAWhD,CAAC"}
1
+ {"version":3,"file":"agent-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/discovery/handlers/agent-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,eAAO,MAAM,YAAY,EAAE,gBAAgB,CAAC,KAAK,CAmBhD,CAAC"}
@@ -2,12 +2,21 @@
2
2
  * Agent Discovery Handler
3
3
  */
4
4
  import { registerAgent } from "../../agent/index.js";
5
+ import { agentRegistry } from "../../agent/composition/index.js";
5
6
  import { filenameToId, trackAgentPath } from "../discovery-utils.js";
6
7
  export const agentHandler = {
7
8
  typeName: "agent",
8
9
  validate: (item) => item !== null && typeof item === "object" && typeof item.generate === "function",
9
- getId: (agent, file) => agent.id || filenameToId(file),
10
+ getId: (agent, file) => {
11
+ const configuredId = agent.config.id;
12
+ return typeof configuredId === "string" && configuredId.trim().length > 0
13
+ ? configuredId
14
+ : filenameToId(file);
15
+ },
10
16
  register: (id, agent, file) => {
17
+ if (agent.id !== id) {
18
+ agentRegistry.delete(agent.id);
19
+ }
11
20
  registerAgent(id, agent);
12
21
  trackAgentPath(id, file);
13
22
  return agent;
@@ -1 +1 @@
1
- {"version":3,"file":"html-injection.d.ts","sourceRoot":"","sources":["../../../src/src/html/html-injection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAkB/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,WAAW,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IACvC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAgBD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,wBAAwB,GAChC,MAAM,CA+FR"}
1
+ {"version":3,"file":"html-injection.d.ts","sourceRoot":"","sources":["../../../src/src/html/html-injection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAkB/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,WAAW,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IACvC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAgBD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,wBAAwB,GAChC,MAAM,CAmGR"}
@@ -54,23 +54,24 @@ export function injectHTMLContent(template, content, metadata, options) {
54
54
  environment: options.environment,
55
55
  }),
56
56
  });
57
- const hydrationScript = `<script id="veryfront-hydration-data" type="application/json">${hydrationData}</script>`;
57
+ const nonceAttr = buildNonceAttribute(options.nonce);
58
+ const hydrationScript = `<script id="veryfront-hydration-data" type="application/json"${nonceAttr}>${hydrationData}</script>`;
58
59
  html = html.replace(/<\/body>/i, `${hydrationScript}</body>`);
59
60
  }
60
61
  if (options.mode === "development") {
61
62
  const hasDevScriptsPlaceholder = /{{\s*devScripts\s*}}/i.test(html);
62
63
  if (hasDevScriptsPlaceholder) {
63
- html = html.replace(/{{\s*devScripts\s*}}/gi, getDevScripts());
64
+ html = html.replace(/{{\s*devScripts\s*}}/gi, getDevScripts(options.devPort, options.nonce));
64
65
  }
65
- html = html.replace(/{{\s*devStyles\s*}}/gi, getDevStyles());
66
+ html = html.replace(/{{\s*devStyles\s*}}/gi, getDevStyles(options.nonce));
66
67
  if (!hasDevScriptsPlaceholder && hasBodyClose) {
67
- html = html.replace(/<\/body>/i, `${getDevStyles()}${getDevScripts()}</body>`);
68
+ html = html.replace(/<\/body>/i, `${getDevStyles(options.nonce)}${getDevScripts(options.devPort, options.nonce)}</body>`);
68
69
  }
69
70
  }
70
71
  else {
71
72
  html = html.replace(/{{\s*devScripts\s*}}/gi, "");
72
73
  html = html.replace(/{{\s*devStyles\s*}}/gi, "");
73
- const prodScripts = getProdScripts(options.slug);
74
+ const prodScripts = getProdScripts(options.slug, options.nonce);
74
75
  const hasProdScriptsPlaceholder = /{{\s*prodScripts\s*}}/i.test(html);
75
76
  if (hasProdScriptsPlaceholder) {
76
77
  html = html.replace(/{{\s*prodScripts\s*}}/gi, prodScripts);
@@ -0,0 +1,2 @@
1
+ export declare function addNonceToHtmlTags(html: string, nonce?: string): string;
2
+ //# sourceMappingURL=nonce-injection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonce-injection.d.ts","sourceRoot":"","sources":["../../../src/src/html/nonce-injection.ts"],"names":[],"mappings":"AAmEA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CA6DvE"}