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.
- package/esm/_dnt.polyfills.d.ts +11 -0
- package/esm/_dnt.polyfills.d.ts.map +1 -1
- package/esm/_dnt.polyfills.js +14 -0
- package/esm/cli/auth/login.d.ts.map +1 -1
- package/esm/cli/auth/login.js +11 -0
- package/esm/cli/auth/provider-store.d.ts +20 -0
- package/esm/cli/auth/provider-store.d.ts.map +1 -0
- package/esm/cli/auth/provider-store.js +62 -0
- package/esm/cli/auth/providers/anthropic.d.ts +2 -0
- package/esm/cli/auth/providers/anthropic.d.ts.map +1 -0
- package/esm/cli/auth/providers/anthropic.js +37 -0
- package/esm/cli/auth/providers/openai.d.ts +2 -0
- package/esm/cli/auth/providers/openai.d.ts.map +1 -0
- package/esm/cli/auth/providers/openai.js +35 -0
- package/esm/cli/auth/utils.d.ts +5 -0
- package/esm/cli/auth/utils.d.ts.map +1 -1
- package/esm/cli/auth/utils.js +9 -0
- package/esm/cli/router.d.ts.map +1 -1
- package/esm/cli/router.js +22 -1
- package/esm/deno.js +1 -1
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +17 -2
- package/esm/src/agent/runtime/tool-helpers.d.ts +2 -1
- package/esm/src/agent/runtime/tool-helpers.d.ts.map +1 -1
- package/esm/src/agent/runtime/tool-helpers.js +6 -3
- package/esm/src/channels/control-plane.js +6 -6
- package/esm/src/discovery/handlers/agent-handler.d.ts.map +1 -1
- package/esm/src/discovery/handlers/agent-handler.js +10 -1
- package/esm/src/html/html-injection.d.ts.map +1 -1
- package/esm/src/html/html-injection.js +6 -5
- package/esm/src/html/nonce-injection.d.ts +2 -0
- package/esm/src/html/nonce-injection.d.ts.map +1 -0
- package/esm/src/html/nonce-injection.js +104 -0
- package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
- package/esm/src/internal-agents/run-stream.js +26 -4
- package/esm/src/rendering/orchestrator/html.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/html.js +3 -89
- package/esm/src/rendering/rsc/client-boot.ts +18 -1
- package/esm/src/rendering/script-page-handling.js +1 -0
- package/esm/src/server/handlers/preview/markdown-html-generator.d.ts +2 -0
- package/esm/src/server/handlers/preview/markdown-html-generator.d.ts.map +1 -1
- package/esm/src/server/handlers/preview/markdown-html-generator.js +10 -7
- package/esm/src/server/handlers/preview/markdown-preview.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/preview/markdown-preview.handler.js +6 -3
- package/esm/src/server/handlers/request/api/project-discovery.d.ts.map +1 -1
- package/esm/src/server/handlers/request/api/project-discovery.js +16 -5
- package/esm/src/server/handlers/request/api/security-headers.d.ts +1 -0
- package/esm/src/server/handlers/request/api/security-headers.d.ts.map +1 -1
- package/esm/src/server/handlers/request/api/security-headers.js +4 -1
- package/esm/src/server/handlers/request/openapi-docs.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/openapi-docs.handler.js +10 -6
- package/esm/src/server/handlers/request/rsc/index.d.ts.map +1 -1
- package/esm/src/server/handlers/request/rsc/index.js +5 -2
- package/esm/src/server/handlers/request/ssr/ssr-response-builder.d.ts.map +1 -1
- package/esm/src/server/handlers/request/ssr/ssr-response-builder.js +12 -2
- package/esm/src/server/handlers/request/static.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/static.handler.js +18 -10
- package/esm/src/server/handlers/response/not-found.d.ts.map +1 -1
- package/esm/src/server/handlers/response/not-found.js +14 -15
- package/esm/src/server/services/rsc/endpoints/endpoint-router.d.ts +1 -1
- package/esm/src/server/services/rsc/endpoints/endpoint-router.d.ts.map +1 -1
- package/esm/src/server/services/rsc/endpoints/endpoint-router.js +3 -3
- package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.d.ts.map +1 -1
- package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.js +1 -1
- package/esm/src/server/services/rsc/endpoints/types.d.ts +1 -0
- package/esm/src/server/services/rsc/endpoints/types.d.ts.map +1 -1
- package/esm/src/server/services/rsc/orchestrators/handler.d.ts +1 -1
- package/esm/src/server/services/rsc/orchestrators/handler.d.ts.map +1 -1
- package/esm/src/server/services/rsc/orchestrators/handler.js +2 -2
- package/esm/src/server/services/rsc/orchestrators/page-handler.d.ts +1 -1
- package/esm/src/server/services/rsc/orchestrators/page-handler.d.ts.map +1 -1
- package/esm/src/server/services/rsc/orchestrators/page-handler.js +7 -5
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
- package/src/_dnt.polyfills.ts +27 -0
- package/src/cli/auth/login.ts +12 -0
- package/src/cli/auth/provider-store.ts +82 -0
- package/src/cli/auth/providers/anthropic.ts +46 -0
- package/src/cli/auth/providers/openai.ts +45 -0
- package/src/cli/auth/utils.ts +10 -0
- package/src/cli/router.ts +24 -1
- package/src/deno.js +1 -1
- package/src/src/agent/runtime/index.ts +22 -0
- package/src/src/agent/runtime/tool-helpers.ts +15 -3
- package/src/src/channels/control-plane.ts +6 -6
- package/src/src/discovery/handlers/agent-handler.ts +10 -1
- package/src/src/html/html-injection.ts +9 -5
- package/src/src/html/nonce-injection.ts +129 -0
- package/src/src/internal-agents/run-stream.ts +35 -4
- package/src/src/rendering/orchestrator/html.ts +3 -105
- package/src/src/rendering/script-page-handling.ts +1 -0
- package/src/src/server/handlers/preview/markdown-html-generator.ts +12 -6
- package/src/src/server/handlers/preview/markdown-preview.handler.ts +6 -3
- package/src/src/server/handlers/request/api/project-discovery.ts +18 -5
- package/src/src/server/handlers/request/api/security-headers.ts +10 -1
- package/src/src/server/handlers/request/openapi-docs.handler.ts +10 -6
- package/src/src/server/handlers/request/rsc/index.ts +5 -2
- package/src/src/server/handlers/request/ssr/ssr-response-builder.ts +16 -2
- package/src/src/server/handlers/request/static.handler.ts +22 -10
- package/src/src/server/handlers/response/not-found.ts +14 -15
- package/src/src/server/services/rsc/endpoints/endpoint-router.ts +3 -3
- package/src/src/server/services/rsc/endpoints/rsc-bundles.generated.ts +1 -1
- package/src/src/server/services/rsc/endpoints/types.ts +1 -0
- package/src/src/server/services/rsc/orchestrators/handler.ts +2 -2
- package/src/src/server/services/rsc/orchestrators/page-handler.ts +8 -5
- package/src/src/utils/version-constant.ts +1 -1
package/esm/_dnt.polyfills.d.ts
CHANGED
|
@@ -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"}
|
package/esm/_dnt.polyfills.js
CHANGED
|
@@ -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,
|
|
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"}
|
package/esm/cli/auth/login.js
CHANGED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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
|
+
}
|
package/esm/cli/auth/utils.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/esm/cli/auth/utils.js
CHANGED
|
@@ -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
|
+
}
|
package/esm/cli/router.d.ts.map
CHANGED
|
@@ -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;
|
|
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 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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
|
|
154
|
+
id,
|
|
155
155
|
name: typeof rawConfig.name === "string" && rawConfig.name.trim().length > 0
|
|
156
156
|
? rawConfig.name
|
|
157
|
-
:
|
|
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((
|
|
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;
|
|
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) =>
|
|
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,
|
|
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
|
|
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 @@
|
|
|
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"}
|