eve 0.52.1 → 0.52.2
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/CHANGELOG.md +20 -0
- package/dist/src/chunks/{use-eve-agent-CxkGSusZ.js → use-eve-agent-1NAM6ftx.js} +19 -9
- package/dist/src/chunks/{use-eve-agent-Crmh_YB-.js → use-eve-agent-BEjdhhhK.js} +19 -9
- package/dist/src/cli/dev/tui/subagent-pump.js +1 -1
- package/dist/src/client/eve-agent-store.js +1 -1
- package/dist/src/client/ndjson.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +1 -1
- package/dist/src/compiler/default-tool-policy.d.ts +6 -0
- package/dist/src/compiler/default-tool-policy.js +1 -0
- package/dist/src/compiler/extension-compatibility.d.ts +6 -6
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-agent-config.js +1 -1
- package/dist/src/compiler/normalize-manifest.js +1 -1
- package/dist/src/context/build-dynamic-tools.js +1 -1
- package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
- package/dist/src/evals/cli/eval.js +1 -1
- package/dist/src/execution/tools/sleep-workflow.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/execution/workflow-webhook-route.js +1 -1
- package/dist/src/framework/sources/registry.js +1 -1
- package/dist/src/harness/approval-delivery-coordinator.js +1 -1
- package/dist/src/harness/compaction-prompt.d.ts +1 -0
- package/dist/src/harness/compaction-prompt.js +1 -1
- package/dist/src/harness/compaction.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-definition/core.js +1 -1
- package/dist/src/internal/authored-definition/schema-backed.js +1 -1
- package/dist/src/internal/node-esm-compat-banner.d.ts +19 -6
- package/dist/src/internal/node-esm-compat-banner.js +2 -2
- package/dist/src/internal/workflow-bundle/dynamic-tool-transform.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-core-shim.js +1 -1
- package/dist/src/public/channels/slack/connections.d.ts +2 -2
- package/dist/src/public/channels/slack/connections.js +1 -1
- package/dist/src/public/memory/file/backends/default.js +1 -1
- package/dist/src/public/tools/agent.d.ts +1 -0
- package/dist/src/public/tools/agent.js +1 -0
- package/dist/src/public/tools/ask-question.d.ts +1 -0
- package/dist/src/public/tools/ask-question.js +1 -0
- package/dist/src/public/tools/connection-search.d.ts +1 -0
- package/dist/src/public/tools/connection-search.js +1 -0
- package/dist/src/public/tools/task-cancel.d.ts +1 -0
- package/dist/src/public/tools/task-cancel.js +1 -0
- package/dist/src/public/tools/task-update.d.ts +1 -0
- package/dist/src/public/tools/task-update.js +1 -0
- package/dist/src/runtime/connections/openapi-schema.js +1 -1
- package/dist/src/runtime/resolve-agent.js +1 -1
- package/dist/src/runtime/resolve-tool.js +1 -1
- package/dist/src/runtime/subagents/dynamic-agent-config.js +1 -1
- package/dist/src/setup/integrations/file-memory/vercel.d.ts +2 -2
- package/dist/src/setup/integrations/file-memory/vercel.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/shared/agent-definition.d.ts +7 -0
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tools/definition.d.ts +8 -0
- package/dist/src/tools/definition.js +1 -1
- package/dist/src/tools/durable-callbacks.d.ts +4 -1
- package/dist/src/tools/durable-callbacks.js +1 -1
- package/dist/src/tools/dynamic.d.ts +2 -0
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/channels/slack.mdx +2 -0
- package/docs/concepts/built-in-tools.md +397 -68
- package/docs/connections/openapi.mdx +4 -0
- package/docs/evals/running.mdx +2 -0
- package/docs/guides/client/streaming.mdx +7 -1
- package/docs/guides/dynamic-capabilities.md +1 -1
- package/docs/guides/frontend/overview.mdx +1 -1
- package/docs/memory/custom-provider.md +4 -1
- package/docs/memory/file.md +25 -12
- package/docs/tools/workflows.mdx +3 -1
- package/package.json +32 -7
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const BANNER_LINES=[{importLine:`import { fileURLToPath as __eveFileURLToPath } from "node:url";`,declarationLine:`const __filename = __eveFileURLToPath(import.meta.url);`,
|
|
2
|
-
`)}function createNodeEsmCompatBannerPlugin(e={}){return{name:`eve-node-esm-compat-banner`,renderChunk(t,n){let r=buildNodeEsmCompatBanner(t,e);return r===``?null:{code:`${r}\n${t}`,map:createPrependedLineSourceMap({insertedLineCount:r.split(`
|
|
1
|
+
const BANNER_LINES=[{importLine:`import { fileURLToPath as __eveFileURLToPath } from "node:url";`,declarationLine:`const __filename = __eveFileURLToPath(import.meta.url);`,bindingName:`__filename`},{importLine:`import { dirname as __eveDirname } from "node:path";`,declarationLine:`const __dirname = __eveDirname(__filename);`,bindingName:`__dirname`}],FILENAME_BANNER_LINE=BANNER_LINES[0],DIRNAME_BANNER_LINE=BANNER_LINES[1],REQUIRE_LINE={importLine:`import { createRequire as __eveCreateRequire } from "node:module";`,declarationLine:`const require = __eveCreateRequire(import.meta.url);`,bindingName:`require`};function buildNodeEsmCompatBanner(e,t={}){let n=[...BANNER_LINES];t.includeRequire===!0&&n.push(REQUIRE_LINE);let r=[],i=[],a=collectTopLevelVariableBindings(e),o=a.has(FILENAME_BANNER_LINE.bindingName),s=a.has(DIRNAME_BANNER_LINE.bindingName);for(let e of n)a.has(e.bindingName)||(r.push(e.importLine),i.push(e===DIRNAME_BANNER_LINE&&o?`const __dirname = __eveDirname(__eveFileURLToPath(import.meta.url));`:e.declarationLine));return o&&!s&&r.unshift(FILENAME_BANNER_LINE.importLine),i.length===0?``:[...r,...i].join(`
|
|
2
|
+
`)}function collectTopLevelVariableBindings(e){let t=new Set;for(let n of e.body)if(n.type===`VariableDeclaration`)for(let e of n.declarations??[])e.id.type===`Identifier`&&e.id.name!==void 0&&t.add(e.id.name);return t}function createNodeEsmCompatBannerPlugin(e={}){return{name:`eve-node-esm-compat-banner`,renderChunk(t,n){let r=buildNodeEsmCompatBanner(this.parse(t),e);return r===``?null:{code:`${r}\n${t}`,map:createPrependedLineSourceMap({insertedLineCount:r.split(`
|
|
3
3
|
`).length,source:n?.fileName??`eve-node-esm-compat-banner-input`,sourceContent:t})}}}}function createPrependedLineSourceMap({insertedLineCount:e,source:t,sourceContent:n}){let r=n.split(`
|
|
4
4
|
`).length,i=Array.from({length:r},(e,t)=>encodeVlqFields(t===0?[0,0,0,0]:[0,0,1,0]));return{version:3,sources:[t],sourcesContent:[n],names:[],mappings:`${`;`.repeat(e)}${i.join(`;`)}`}}function encodeVlqFields(e){return e.map(e=>encodeVlqInteger(e)).join(``)}function encodeVlqInteger(e){let t=e<0?(-e<<1)+1:e<<1,n=``;do{let e=t&31;t>>>=5,t>0&&(e|=32),n+=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`[e]}while(t>0);return n}export{buildNodeEsmCompatBanner,createNodeEsmCompatBannerPlugin};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{parseWithNitroRolldownAst}from"#internal/bundler/nitro-rolldown.js";import{collectReferencedIdentifierNames,findProperty,walkNode}from"#internal/workflow-bundle/dynamic-tool-ast-references.js";async function transformDynamicToolExecute(e,t,n=NO_WORKFLOW_FUNCTIONS){if(!t.includes(`defineTool`)&&!t.includes(`defineWorkflowTool`))return null;let r=await parseWithNitroRolldownAst(e,t),i=findDefineToolAliases(r);if(i.size===0)return null;let a=[];return walkForCallbacks(t,r,a,[],{defineToolAliases:i,workflowFunctions:n}),a.length===0?null:applyTransform(t,a)}const NO_WORKFLOW_FUNCTIONS=new Set;function findDefineToolAliases(e){let t=new Set;return walkNode(e,e=>{if(e.type!==`ImportDeclaration`)return!0;let n=e.source?.value;if(typeof n!=`string`||n!==`eve`&&!n.startsWith(`eve/`))return!1;for(let n of e.specifiers??[])n.type===`ImportNamespaceSpecifier`&&n.local?.name&&t.add(`${n.local.name}.defineWorkflowTool`),n.type===`ImportSpecifier`&&[`defineTool`,`defineWorkflowTool`].includes(String(n.imported?.name??n.imported?.value))&&n.local?.name&&t.add(n.local.name);return!1}),t}function readDefinerName(e){if(e?.type===`Identifier`)return e.name;if(e?.type!==`MemberExpression`||e.object?.type!==`Identifier`)return;let t=e.computed?e.property?.value:e.property?.name;return typeof t==`string`?`${e.object.name}.${t}`:void 0}function walkForCallbacks(e,t,n,r,i){if(t){if(isFunction(t)){let a=t.body;if(!a)return;walkForCallbacks(e,a,n,[...r,{params:extractParamNames(t),vars:collectScopeVarDeclarations(a)}],i);return}if(t.type===`CallExpression`&&i.defineToolAliases.has(readDefinerName(t.callee)??``)&&t.arguments?.length===1&&t.arguments[0]?.type===`ObjectExpression`){collectToolCallbacks(e,t.arguments[0],n,r,i);return}for(let a of Object.values(t))if(Array.isArray(a))for(let t of a)isAstNode(t)&&walkForCallbacks(e,t,n,r,i);else isAstNode(a)&&walkForCallbacks(e,a,n,r,i)}}function isWorkflowExecute(e,t){let n=e?.value;return n?.type===`Identifier`&&n.name!==void 0&&t.workflowFunctions.has(n.name)}function collectToolCallbacks(e,t,n,r,i){let a=findProperty(t,`execute`);isWorkflowExecute(a,i)||collectCallbackProperty(e,a,`execute`,`execute`,n,r),collectCallbackProperty(e,findProperty(t,`toModelOutput`),`toModelOutput`,`toModelOutput`,n,r);let o=findProperty(t,`approval`),s=o?.value;s?.type===`ObjectExpression`?(collectCallbackProperty(e,findProperty(s,`request`),`approvalRequest`,`request`,n,r),collectCallbackProperty(e,findProperty(s,`response`),`approvalResponse`,`response`,n,r)):collectCallbackProperty(e,o,`approvalRequest`,`approval`,n,r)}function collectCallbackProperty(e,t,n,r,i,a){if(t?.type!==`Property`||t.start===void 0||t.end===void 0)return;let o=t.value;if(o&&o.start!==void 0&&o.end!==void 0){if(isFunction(o)||t.method===!0){let s=o.body;if(!s)return;i.push({body:extractFnBody(e,o),bodyNode:s,isAsync:o.async===!0,isGenerator:o.generator===!0,isReference:!1,nestedScopes:a,params:extractFnParams(e,o),phase:n,propertyName:r,propEnd:t.end,propStart:t.start});return}o.type===`Identifier`&&i.push({body:`{ return ${e.slice(o.start,o.end)}(...__args); }`,bodyNode:o,isAsync:!1,isGenerator:!1,isReference:!0,nestedScopes:a,params:`...__args`,phase:n,propertyName:r,propEnd:t.end,propStart:t.start})}}function applyTransform(e,t){let n=[],r=[];for(let[e,i]of t.entries()){let t=collectReferencedIdentifierNames(i.bodyNode),a=i.nestedScopes.flatMap(e=>[...e.params,...e.vars]),o=extractCallbackParamNames(i.params),s=dedupeShadowed(a).filter(e=>!o.has(e)&&t.has(e)),c=s.length>0?`{ ${s.join(`, `)} }`:`{}`,l=i.phase.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`),u=i.phase===`execute`?`__eve_dynamic_exec_${e}`:`__eve_dynamic_${l}_${e}`,d=i.params,f=d?`__vars, ${d}`:`__vars`,p=s.length>0?`const ${c} = __vars;\n `:``,m=i.body.slice(1,-1).trim(),h=i.isAsync?`async `:``,g=i.isGenerator?`*`:``;r.push(`${h}function${g} ${u}(${f}) {\n ${p}${m}\n}`);let _=`__eveStampDynamicCallback(${createLiveWrapper(i,u,c)}, ${u}, ${c})`;n.push({end:i.propEnd,start:i.propStart,text:`${i.propertyName}: ${_}`})}let i=e;for(let e of n.sort((e,t)=>t.start-e.start))i=i.slice(0,e.start)+e.text+i.slice(e.end);return{code:`${[`var __eveDurableCallbackSym = Symbol.for("eve:durable-dynamic-callback");`,`function __eveStampDynamicCallback(callback, impl, closure) {`,` Object.defineProperty(callback, __eveDurableCallbackSym, { configurable: true, value: { callback: impl, closure } });`,` return callback;`,`}`].join(`
|
|
1
|
+
import{parseWithNitroRolldownAst}from"#internal/bundler/nitro-rolldown.js";import{collectReferencedIdentifierNames,findProperty,walkNode}from"#internal/workflow-bundle/dynamic-tool-ast-references.js";async function transformDynamicToolExecute(e,t,n=NO_WORKFLOW_FUNCTIONS){if(!t.includes(`defineTool`)&&!t.includes(`defineWorkflowTool`))return null;let r=await parseWithNitroRolldownAst(e,t),i=findDefineToolAliases(r);if(i.size===0)return null;let a=[];return walkForCallbacks(t,r,a,[],{defineToolAliases:i,workflowFunctions:n}),a.length===0?null:applyTransform(t,a)}const NO_WORKFLOW_FUNCTIONS=new Set;function findDefineToolAliases(e){let t=new Set;return walkNode(e,e=>{if(e.type!==`ImportDeclaration`)return!0;let n=e.source?.value;if(typeof n!=`string`||n!==`eve`&&!n.startsWith(`eve/`))return!1;for(let n of e.specifiers??[])n.type===`ImportNamespaceSpecifier`&&n.local?.name&&t.add(`${n.local.name}.defineWorkflowTool`),n.type===`ImportSpecifier`&&[`defineTool`,`defineWorkflowTool`].includes(String(n.imported?.name??n.imported?.value))&&n.local?.name&&t.add(n.local.name);return!1}),t}function readDefinerName(e){if(e?.type===`Identifier`)return e.name;if(e?.type!==`MemberExpression`||e.object?.type!==`Identifier`)return;let t=e.computed?e.property?.value:e.property?.name;return typeof t==`string`?`${e.object.name}.${t}`:void 0}function walkForCallbacks(e,t,n,r,i){if(t){if(isFunction(t)){let a=t.body;if(!a)return;walkForCallbacks(e,a,n,[...r,{params:extractParamNames(t),vars:collectScopeVarDeclarations(a)}],i);return}if(t.type===`CallExpression`&&i.defineToolAliases.has(readDefinerName(t.callee)??``)&&t.arguments?.length===1&&t.arguments[0]?.type===`ObjectExpression`){collectToolCallbacks(e,t.arguments[0],n,r,i);return}for(let a of Object.values(t))if(Array.isArray(a))for(let t of a)isAstNode(t)&&walkForCallbacks(e,t,n,r,i);else isAstNode(a)&&walkForCallbacks(e,a,n,r,i)}}function isWorkflowExecute(e,t){let n=e?.value;return n?.type===`Identifier`&&n.name!==void 0&&t.workflowFunctions.has(n.name)}function collectToolCallbacks(e,t,n,r,i){let a=findProperty(t,`execute`);isWorkflowExecute(a,i)||collectCallbackProperty(e,a,`execute`,`execute`,n,r),collectCallbackProperty(e,findProperty(t,`toModelOutput`),`toModelOutput`,`toModelOutput`,n,r),collectCallbackProperty(e,findProperty(t,`approvalKey`),`approvalKey`,`approvalKey`,n,r);let o=findProperty(t,`approval`),s=o?.value;s?.type===`ObjectExpression`?(collectCallbackProperty(e,findProperty(s,`request`),`approvalRequest`,`request`,n,r),collectCallbackProperty(e,findProperty(s,`response`),`approvalResponse`,`response`,n,r)):collectCallbackProperty(e,o,`approvalRequest`,`approval`,n,r)}function collectCallbackProperty(e,t,n,r,i,a){if(t?.type!==`Property`||t.start===void 0||t.end===void 0)return;let o=t.value;if(o&&o.start!==void 0&&o.end!==void 0){if(isFunction(o)||t.method===!0){let s=o.body;if(!s)return;i.push({body:extractFnBody(e,o),bodyNode:s,isAsync:o.async===!0,isGenerator:o.generator===!0,isReference:!1,nestedScopes:a,params:extractFnParams(e,o),phase:n,propertyName:r,propEnd:t.end,propStart:t.start});return}o.type===`Identifier`&&i.push({body:`{ return ${e.slice(o.start,o.end)}(...__args); }`,bodyNode:o,isAsync:!1,isGenerator:!1,isReference:!0,nestedScopes:a,params:`...__args`,phase:n,propertyName:r,propEnd:t.end,propStart:t.start})}}function applyTransform(e,t){let n=[],r=[];for(let[e,i]of t.entries()){let t=collectReferencedIdentifierNames(i.bodyNode),a=i.nestedScopes.flatMap(e=>[...e.params,...e.vars]),o=extractCallbackParamNames(i.params),s=dedupeShadowed(a).filter(e=>!o.has(e)&&t.has(e)),c=s.length>0?`{ ${s.join(`, `)} }`:`{}`,l=i.phase.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`),u=i.phase===`execute`?`__eve_dynamic_exec_${e}`:`__eve_dynamic_${l}_${e}`,d=i.params,f=d?`__vars, ${d}`:`__vars`,p=s.length>0?`const ${c} = __vars;\n `:``,m=i.body.slice(1,-1).trim(),h=i.isAsync?`async `:``,g=i.isGenerator?`*`:``;r.push(`${h}function${g} ${u}(${f}) {\n ${p}${m}\n}`);let _=`__eveStampDynamicCallback(${createLiveWrapper(i,u,c)}, ${u}, ${c})`;n.push({end:i.propEnd,start:i.propStart,text:`${i.propertyName}: ${_}`})}let i=e;for(let e of n.sort((e,t)=>t.start-e.start))i=i.slice(0,e.start)+e.text+i.slice(e.end);return{code:`${[`var __eveDurableCallbackSym = Symbol.for("eve:durable-dynamic-callback");`,`function __eveStampDynamicCallback(callback, impl, closure) {`,` Object.defineProperty(callback, __eveDurableCallbackSym, { configurable: true, value: { callback: impl, closure } });`,` return callback;`,`}`].join(`
|
|
2
2
|
`)}\n${i}\n\n${r.join(`
|
|
3
3
|
`)}\n`}}function createLiveWrapper(e,t,n){if(e.isReference)return`(...__args) => ${t}(${n}, ...__args)`;let r=e.isAsync?`async `:``;return e.isGenerator?`${r}function* (...__args) { yield* ${t}(${n}, ...__args); }`:`${r}(...__args) => ${e.isAsync?`await `:``}${t}(${n}, ...__args)`}function dedupeShadowed(e){let t=new Set,n=[];for(let r=e.length-1;r>=0;r--){let i=e[r];t.has(i)||(t.add(i),n.unshift(i))}return n}function collectScopeVarDeclarations(e){let t=[];return walkNode(e,n=>n!==e&&isFunction(n)?!1:(n.type===`VariableDeclarator`&&collectPatternNames(n.id,t),n.type===`FunctionDeclaration`&&n.id?.name&&t.push(n.id.name),!0)),t}function collectPatternNames(e,t){if(e){if(e.type===`Identifier`&&e.name){t.push(e.name);return}if(e.type===`ObjectPattern`)for(let n of e.properties??[])collectPatternNames(n.type===`RestElement`?n.argument:n.value,t);if(e.type===`ArrayPattern`)for(let n of e.elements??[])collectPatternNames(n,t);e.type===`AssignmentPattern`&&collectPatternNames(e.left,t)}}function extractParamNames(e){let t=[];for(let n of e.params??[])collectPatternNames(n,t);return t}function extractFnParams(e,t){if(!t.params||t.params.length===0)return``;let n=t.params[0],r=t.params[t.params.length-1];return n.start===void 0||r.end===void 0?``:e.slice(n.start,r.end)}function extractFnBody(e,t){let n=t.body;if(!n||n.start===void 0||n.end===void 0)return`{}`;let r=e.slice(n.start,n.end);return t.type===`ArrowFunctionExpression`&&n.type!==`BlockStatement`?`{ return ${r}; }`:r}function splitParamsTopLevel(e){let t=[],n=0,r=0;for(let i=0;i<e.length;i++){let a=e[i];a===`<`||a===`(`||a===`[`||a===`{`?n++:a===`>`||a===`)`||a===`]`||a===`}`?n--:a===`,`&&n===0&&(t.push(e.slice(r,i)),r=i+1)}return t.push(e.slice(r)),t}function extractParamBindingName(e){let t=e.trim(),n=0;for(let e=0;e<t.length;e++){let r=t[e];if(r===`<`||r===`(`||r===`[`||r===`{`)n++;else if(r===`>`||r===`)`||r===`]`||r===`}`)n--;else if(n===0&&(r===`:`||r===`=`))return t.slice(0,e).trim()}return t}function extractCallbackParamNames(e){let t=[];if(!e)return new Set;for(let n of splitParamsTopLevel(e)){let e=extractParamBindingName(n);e.startsWith(`...`)?t.push(e.slice(3)):t.push(e)}return new Set(t)}function isFunction(e){return e.type===`ArrowFunctionExpression`||e.type===`FunctionDeclaration`||e.type===`FunctionExpression`}function isAstNode(e){return typeof e==`object`&&!!e&&typeof e.type==`string`}export{transformDynamicToolExecute as transformDynamicToolAwait,transformDynamicToolExecute};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const WORKFLOW_CONTEXT_SYMBOL=Symbol.for(`WORKFLOW_CONTEXT`),WORKFLOW_CREATE_HOOK=Symbol.for(`WORKFLOW_CREATE_HOOK`),WORKFLOW_GET_STREAM_ID=Symbol.for(`WORKFLOW_GET_STREAM_ID`),WORKFLOW_SLEEP=Symbol.for(`WORKFLOW_SLEEP`),WORKFLOW_USE_STEP=Symbol.for(`WORKFLOW_USE_STEP`),STREAM_NAME_SYMBOL=Symbol.for(`WORKFLOW_STREAM_NAME`),workflowGlobal=globalThis;var RetryableError=class extends Error{constructor(e){super(e),this.name=`RetryableError`}},FatalError=class extends Error{fatal=!0;constructor(e){super(e),this.name=`FatalError`}};function createHook(e){let t=workflowGlobal[WORKFLOW_CREATE_HOOK];if(t===void 0)throw Error("`createHook()` can only be called inside a workflow function");return t(e)}function getWorkflowMetadata(){let e=workflowGlobal[WORKFLOW_CONTEXT_SYMBOL];if(e===void 0)throw Error("`getWorkflowMetadata()` can only be called inside a workflow or step function");return e}function getWritable(e={}){let t=workflowGlobal[WORKFLOW_GET_STREAM_ID];if(t===void 0)throw Error("`getWritable()` can only be called inside a workflow function");let n=t(e.namespace);return Object.create(globalThis.WritableStream.prototype,{[STREAM_NAME_SYMBOL]:{value:n,writable:!1}})}function createWebhook(e){let
|
|
1
|
+
const WORKFLOW_CONTEXT_SYMBOL=Symbol.for(`WORKFLOW_CONTEXT`),WORKFLOW_CREATE_HOOK=Symbol.for(`WORKFLOW_CREATE_HOOK`),WORKFLOW_GET_STREAM_ID=Symbol.for(`WORKFLOW_GET_STREAM_ID`),WORKFLOW_SLEEP=Symbol.for(`WORKFLOW_SLEEP`),WORKFLOW_USE_STEP=Symbol.for(`WORKFLOW_USE_STEP`),STREAM_NAME_SYMBOL=Symbol.for(`WORKFLOW_STREAM_NAME`),workflowGlobal=globalThis;var RetryableError=class extends Error{constructor(e){super(e),this.name=`RetryableError`}},FatalError=class extends Error{fatal=!0;constructor(e){super(e),this.name=`FatalError`}};function createHook(e){let t=workflowGlobal[WORKFLOW_CREATE_HOOK];if(t===void 0)throw Error("`createHook()` can only be called inside a workflow function");return t(e)}function getWorkflowMetadata(){let e=workflowGlobal[WORKFLOW_CONTEXT_SYMBOL];if(e===void 0)throw Error("`getWorkflowMetadata()` can only be called inside a workflow or step function");return e}function getWritable(e={}){let t=workflowGlobal[WORKFLOW_GET_STREAM_ID];if(t===void 0)throw Error("`getWritable()` can only be called inside a workflow function");let n=t(e.namespace);return Object.create(globalThis.WritableStream.prototype,{[STREAM_NAME_SYMBOL]:{value:n,writable:!1}})}function createWebhook(e){let{respondWith:t,token:n,...r}=e??{};if(n!==void 0)throw Error("`createWebhook()` does not accept a `token` option. Use `createHook()` with `resumeHook()` for deterministic tokens.");let i=createHook({...r,metadata:t===void 0?void 0:{respondWith:t},isWebhook:!0}),a=getWorkflowMetadata();return i.url=`${typeof a.url==`string`?a.url:``}/.well-known/workflow/v1/webhook/${encodeURIComponent(i.token)}`,i}function defineHook(){return{create:createHook,resume(){throw Error("`defineHook().resume()` can only be called from external contexts.")}}}function sleep(e){let t=workflowGlobal[WORKFLOW_SLEEP];if(t===void 0)throw Error("`sleep()` can only be called inside a workflow function");return t(e)}function resumeHook(){throw Error("`resumeHook()` can only be called from outside a workflow function")}function getStepMetadata(){throw Error("`getStepMetadata()` can only be called inside a step function")}async function setAttributes(e,t={}){let n=Object.entries(e);if(n.length===0)return;let r=workflowGlobal[WORKFLOW_USE_STEP];if(r===void 0)throw Error("`setAttributes()` can only be called inside a workflow runtime context");let i=n.map(([e,t])=>({key:e,value:t===void 0?null:t})),a=t.allowReservedAttributes===!0?{allowReservedAttributes:!0}:{};await r(`__builtin_set_attributes`)(i,a)}export{FatalError,RetryableError,createHook,createWebhook,defineHook,getStepMetadata,getWorkflowMetadata,getWritable,resumeHook,setAttributes,sleep};
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* challenge is a credential: anyone in a shared thread could complete a
|
|
7
7
|
* posted sign-in link and bind their own identity to the session. The
|
|
8
8
|
* default handler therefore posts a link-free public status while
|
|
9
|
-
* delivering the actual challenge as an ephemeral "Sign in
|
|
9
|
+
* delivering the actual challenge as an ephemeral "Sign in"
|
|
10
10
|
* message visible only to the triggering user.
|
|
11
11
|
*
|
|
12
12
|
* When no user can be targeted (no triggering user id, no challenge
|
|
@@ -46,7 +46,7 @@ export declare function buildAuthCompletedText(input: {
|
|
|
46
46
|
readonly reason?: string;
|
|
47
47
|
}): string;
|
|
48
48
|
/**
|
|
49
|
-
* Block Kit blocks for the ephemeral "Sign in
|
|
49
|
+
* Block Kit blocks for the ephemeral "Sign in" link button.
|
|
50
50
|
* Device-code flows carry a `userCode` the user must enter after
|
|
51
51
|
* following the link, so it is rendered alongside the button. Slack
|
|
52
52
|
* ephemerals accept the same block list shape as regular messages so the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function formatConnectionDisplayName(e){return e.length===0?e:e.charAt(0).toUpperCase()+e.slice(1)}function buildAuthRequiredPublicText(e){return e.hasUser?`Connect with ${e.displayName} to continue`:`Authorization required for ${e.displayName} (no triggering user)`}function buildAuthCompletedText(e){if(e.outcome===`authorized`)return`:white_check_mark: ${e.displayName} connected`;let t=e.reason===void 0?``:` (${e.reason})`;return`:x: ${e.displayName} authorization ${e.outcome}${t}`}function buildAuthEphemeralBlocks(e){let t=[];return e.userCode!==void 0&&e.userCode.length>0&&t.push({type:`section`,text:{type:`mrkdwn`,text:`Use code \`${e.userCode}\` when prompted.`}}),t.push({type:`actions`,elements:[{type:`button`,text:{type:`plain_text`,text:`Sign in
|
|
1
|
+
function formatConnectionDisplayName(e){return e.length===0?e:e.charAt(0).toUpperCase()+e.slice(1)}function buildAuthRequiredPublicText(e){return e.hasUser?`Connect with ${e.displayName} to continue`:`Authorization required for ${e.displayName} (no triggering user)`}function buildAuthCompletedText(e){if(e.outcome===`authorized`)return`:white_check_mark: ${e.displayName} connected`;let t=e.reason===void 0?``:` (${e.reason})`;return`:x: ${e.displayName} authorization ${e.outcome}${t}`}function buildAuthEphemeralBlocks(e){let t=[];return e.userCode!==void 0&&e.userCode.length>0&&t.push({type:`section`,text:{type:`mrkdwn`,text:`Use code \`${e.userCode}\` when prompted.`}}),t.push({type:`actions`,elements:[{type:`button`,text:{type:`plain_text`,text:`Sign in`},url:e.url,style:`primary`}]}),t}export{buildAuthCompletedText,buildAuthEphemeralBlocks,buildAuthRequiredPublicText,formatConnectionDisplayName};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isEveDevEnvironment}from"#internal/application/dev-environment.js";import{inMemory}from"#public/memory/file/backends/in-memory.js";import{lazyBackend}from"#public/memory/file/backends/lazy.js";import{vercelBlob}from"#public/memory/file/backends/vercel-blob.js";const ENVIRONMENT_PROBES={vercelBlobCredentials:()=>credentialsFromEnvironment(`EVE_MEMORY_BLOB`)??credentialsFromEnvironment(`BLOB`),isEveDevelopment:isEveDevEnvironment,isDeployedOnVercel:()=>hasEnvironmentValue(`VERCEL`)},DEVELOPMENT_BACKEND=inMemory();function defaultFileMemoryBackend(){return lazyBackend(()=>selectDefaultFileMemoryBackend(ENVIRONMENT_PROBES))}function selectDefaultFileMemoryBackend(e){if(e.isDeployedOnVercel()){let t=e.vercelBlobCredentials();if(t!==void 0)return vercelBlob(t);throw Error("fileMemory() requires Vercel Blob storage.
|
|
1
|
+
import{isEveDevEnvironment}from"#internal/application/dev-environment.js";import{inMemory}from"#public/memory/file/backends/in-memory.js";import{lazyBackend}from"#public/memory/file/backends/lazy.js";import{vercelBlob}from"#public/memory/file/backends/vercel-blob.js";const ENVIRONMENT_PROBES={vercelBlobCredentials:()=>credentialsFromEnvironment(`EVE_MEMORY_BLOB`)??credentialsFromEnvironment(`BLOB`),isEveDevelopment:isEveDevEnvironment,isDeployedOnVercel:()=>hasEnvironmentValue(`VERCEL`)},DEVELOPMENT_BACKEND=inMemory();function defaultFileMemoryBackend(){return lazyBackend(()=>selectDefaultFileMemoryBackend(ENVIRONMENT_PROBES))}function selectDefaultFileMemoryBackend(e){if(e.isDeployedOnVercel()){let t=e.vercelBlobCredentials();if(t!==void 0)return vercelBlob(t);throw Error("fileMemory() requires Vercel Blob storage. Set up EVE_MEMORY_BLOB_STORE_ID with `/add memory/file` in eve dev or `eve integration setup file-memory`, then redeploy. Alternatively, pass fileMemory({ backend }).")}if(e.isEveDevelopment())return DEVELOPMENT_BACKEND;throw Error(`fileMemory() requires an explicit backend outside Vercel and eve dev. Pass fileMemory({ backend }).`)}function hasEnvironmentValue(e){return!!process.env[e]?.trim()}function credentialsFromEnvironment(e){let t=environmentValue(`${e}_STORE_ID`);if(t!==void 0)return{storeId:t};let n=environmentValue(`${e}_READ_WRITE_TOKEN`);return n===void 0?void 0:{token:n}}function environmentValue(e){let t=process.env[e]?.trim();return t===``?void 0:t}export{defaultFileMemoryBackend};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { agent, agent as default } from "#tools/framework/agent.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{agent,agent as agent_default}from"#tools/framework/agent.js";export{agent,agent_default as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { askQuestion, askQuestion as default } from "#tools/framework/ask-question.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{askQuestion,askQuestion as ask_question_default}from"#tools/framework/ask-question.js";export{askQuestion,ask_question_default as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { connectionSearch, connectionSearch as default, } from "#tools/framework/connection-search.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{connectionSearch,connectionSearch as connection_search_default}from"#tools/framework/connection-search.js";export{connectionSearch,connection_search_default as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { taskCancel, taskCancel as default } from "#tools/framework/task-cancel.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{taskCancel,taskCancel as task_cancel_default}from"#tools/framework/task-cancel.js";export{task_cancel_default as default,taskCancel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { taskUpdate, taskUpdate as default } from "#tools/framework/task-update.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{taskUpdate,taskUpdate as task_update_default}from"#tools/framework/task-update.js";export{task_update_default as default,taskUpdate};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isObject}from"#shared/guards.js";function buildInputSchema(e,t){let n={},r=[];for(let t of e)n[t.name]=t.description===void 0?t.schema:{...t.schema,description:t.description},t.required&&r.push(t.name);t!==void 0&&(n.body=t.schema,t.required&&r.push(`body`));let i={type:`object`,properties:n};return r.length>0&&(i.required=r),i}function deref(e,t){return typeof t.$ref==`string`?resolveRef(e,t.$ref)??{}:t}function derefSchema(e,t,n=0,r=new Set){if(isArray(t))return t.map(t=>derefSchema(e,t,n+1,r));if(!isObject(t))return t;if(n>12)return{};if(typeof t.$ref==`string`){if(r.has(t.$ref))return{};let i=resolveRef(e,t.$ref);return i===void 0?{}:derefSchema(e,i,n+1,new Set([...r,t.$ref]))}let i={};for(let[a,o]of Object.entries(t))i[a]=derefSchema(e,o,n+1,r);return normalizeSchemaType(i),normalizeNullable(i),i}const VALID_JSON_SCHEMA_TYPES=new Set([`string`,`number`,`integer`,`boolean`,`object`,`array`,`null`]);function normalizeSchemaType(e){let t=e.type;if(typeof t==`string`&&!VALID_JSON_SCHEMA_TYPES.has(t))delete e.type;else if(isArray(t)){let n=t.filter(e=>typeof e==`string`&&VALID_JSON_SCHEMA_TYPES.has(e));n.length===0?delete e.type:e.type=n}}function normalizeNullable(e){if(!(`nullable`in e))return;let t=e.nullable===!0;if(delete e.nullable,!t)return;let n=e.type;typeof n==`string`?n!==`null`&&(e.type=[n,`null`]):isArray(n)?n.includes(`null`)||(e.type=[...n,`null`]):isArray(e.enum)&&!e.enum.includes(null)&&(e.enum=[...e.enum,null])}function resolveRef(e,t){if(!t.startsWith(`#/`))return;let n=t.slice(2).split(`/`).map(e=>e.replace(/~1/g,`/`).replace(/~0/g,`~`)),r=e;for(let e of n){if(!isObject(r))return;r=r[e]}return r}function isArray(e){return Array.isArray(e)}export{buildInputSchema,deref,derefSchema,isArray};
|
|
1
|
+
import{isObject}from"#shared/guards.js";function buildInputSchema(e,t){let n={},r=[];for(let t of e)n[t.name]=t.description===void 0?t.schema:{...t.schema,description:t.description},t.required&&r.push(t.name);t!==void 0&&(n.body=t.schema,t.required&&r.push(`body`));let i={type:`object`,properties:n};return r.length>0&&(i.required=r),i}function deref(e,t){return typeof t.$ref==`string`?resolveRef(e,t.$ref)??{}:t}function derefSchema(e,t,n=0,r=new Set){if(isArray(t))return t.map(t=>derefSchema(e,t,n+1,r));if(!isObject(t))return t;if(n>12)return{};if(typeof t.$ref==`string`){if(r.has(t.$ref))return{};let i=resolveRef(e,t.$ref);return i===void 0?{}:derefSchema(e,i,n+1,new Set([...r,t.$ref]))}let i={};for(let[a,o]of Object.entries(t))i[a]=a==="default"||a===`example`?o:(a===`properties`||a===`patternProperties`||a===`$defs`||a===`definitions`)&&isObject(o)?Object.fromEntries(Object.entries(o).map(([t,i])=>[t,derefSchema(e,i,n+2,r)])):derefSchema(e,o,n+1,r);return normalizeSchemaType(i),normalizeNullable(i),normalizeSchemaAnnotations(i),i}const VALID_JSON_SCHEMA_TYPES=new Set([`string`,`number`,`integer`,`boolean`,`object`,`array`,`null`]);function normalizeSchemaType(e){let t=e.type;if(typeof t==`string`&&!VALID_JSON_SCHEMA_TYPES.has(t))delete e.type;else if(isArray(t)){let n=t.filter(e=>typeof e==`string`&&VALID_JSON_SCHEMA_TYPES.has(e));n.length===0?delete e.type:e.type=n}}function normalizeNullable(e){if(!(`nullable`in e))return;let t=e.nullable===!0;if(delete e.nullable,!t)return;let n=e.type;typeof n==`string`?n!==`null`&&(e.type=[n,`null`]):isArray(n)?n.includes(`null`)||(e.type=[...n,`null`]):isArray(e.enum)&&!e.enum.includes(null)&&(e.enum=[...e.enum,null])}function normalizeSchemaAnnotations(e){let t=e.type;if(typeof t==`string`||isArray(t))for(let n of[`default`,`example`])n in e&&!matchesSchemaType(e[n],t)&&delete e[n]}function matchesSchemaType(e,t){return(typeof t==`string`?[t]:t).some(t=>{switch(t){case`string`:return typeof e==`string`;case`number`:return typeof e==`number`&&Number.isFinite(e);case`integer`:return typeof e==`number`&&Number.isInteger(e);case`boolean`:return typeof e==`boolean`;case`object`:return isObject(e);case`array`:return isArray(e);case`null`:return e===null;default:return!1}})}function resolveRef(e,t){if(!t.startsWith(`#/`))return;let n=t.slice(2).split(`/`).map(e=>e.replace(/~1/g,`/`).replace(/~0/g,`~`)),r=e;for(let e of n){if(!isObject(r))return;r=r[e]}return r}function isArray(e){return Array.isArray(e)}export{buildInputSchema,deref,derefSchema,isArray};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{resolveConnectionDefinition}from"#runtime/resolve-connection.js";import{ResolveAgentError,createResolvedModuleSourceRef}from"#runtime/resolve-helpers.js";import{resolveChannelDefinition}from"#runtime/resolve-channel.js";import{resolveDynamicConnectionDefinition}from"#runtime/resolve-dynamic-connection.js";import{resolveHookDefinition}from"#runtime/resolve-hook.js";import{resolveSandboxDefinition}from"#runtime/resolve-sandbox.js";import{resolveDynamicInstructionsDefinition}from"#runtime/resolve-dynamic-instructions.js";import{resolveDynamicSkillDefinition}from"#runtime/resolve-dynamic-skill.js";import{resolveDynamicToolDefinition}from"#runtime/resolve-dynamic-tool.js";import{resolveToolDefinition}from"#runtime/resolve-tool.js";import{resolveMemoryDefinition}from"#runtime/resolve-memory.js";async function resolveAgent(e){let t=e.manifest.skills.map(t=>({...t,owner:requireCompiledSourceOwner(e.manifest,t),metadata:t.metadata===void 0?void 0:{...t.metadata}})),n=await Promise.all(e.manifest.channelRoutes.effective.map(t=>resolveChannelDefinition(t,e.moduleMap,e.nodeId))),r=await Promise.all(e.manifest.tools.map(t=>resolveToolDefinition(t,e.moduleMap,e.nodeId,requireBindingOwner(e.manifest,t.sourceId)))),i=await Promise.all(e.manifest.dynamicConnections.map(t=>resolveDynamicConnectionDefinition(t,e.moduleMap,e.nodeId))),a=await Promise.all((e.manifest.dynamicInstructions??[]).map(t=>resolveDynamicInstructionsDefinition(t,e.moduleMap,e.nodeId))),o=await Promise.all((e.manifest.dynamicSkills??[]).map(t=>resolveDynamicSkillDefinition(t,e.moduleMap,e.nodeId))),s=await Promise.all(e.manifest.dynamicTools.map(t=>resolveDynamicToolDefinition(t,e.moduleMap,e.nodeId))),c=await Promise.all(e.manifest.hooks.map(t=>resolveHookDefinition(t,e.moduleMap,e.nodeId))),l=await Promise.all(e.manifest.connections.map(t=>resolveConnectionDefinition(t,e.moduleMap,e.nodeId))),u=await Promise.all(e.manifest.memories.map(t=>resolveMemoryDefinition(t,e.moduleMap,e.nodeId))),d=await resolveSandboxDefinition(e.manifest.sandbox,e.moduleMap,e.nodeId),f=e.manifest.instructions.map(t=>createResolvedInstructionsDefinition(e.manifest,t)),p=e.manifest.workspaceResourceRoot,m={channels:n,connections:l,dynamicConnectionResolvers:i,workflowTool:e.manifest.workflowTool===void 0?void 0:{maxSubagents:e.manifest.workflowTool.maxSubagents},dynamicInstructionsResolvers:a,dynamicSkillResolvers:o,dynamicToolResolvers:s,hooks:c,instructions:f,metadata:{agentRoot:e.manifest.agentRoot,appRoot:e.manifest.appRoot,diagnosticsSummary:e.manifest.diagnosticsSummary},memories:u,sandbox:d,workspaceResourceRoot:p,skills:t,tools:r,workspaceSpec:{rootEntries:[...p.rootEntries]}};return`config`in e.manifest?{...m,config:createResolvedAgentConfig(e.manifest)}:m}function requireBindingOwner(e,t){let n=e.bindings[t];if(n===void 0)throw Error(`Compiled source "${t}" has no binding.`);return n.owner}function createResolvedInstructionsDefinition(e,t){return{content:t.content,name:t.name,owner:requireCompiledSourceOwner(e,t),logicalPath:t.logicalPath,role:t.role,sourceId:t.sourceId,sourceKind:t.sourceKind}}function requireCompiledSourceOwner(e,t){let n=e.bindings[t.sourceId]?.owner??t.owner;if(n===void 0)throw Error(`Compiled source "${t.sourceId}" has no owner.`);return n}function createResolvedAgentConfig(e){let t={name:e.config.name};if(e.config.compaction!==void 0){let n={};e.config.compaction.model!==void 0&&(n.model=e.config.compaction.model.source===void 0?{contextWindowTokens:e.config.compaction.model.contextWindowTokens,id:e.config.compaction.model.id,maxOutputTokens:e.config.compaction.model.maxOutputTokens,providerOptions:e.config.compaction.model.providerOptions}:{contextWindowTokens:e.config.compaction.model.contextWindowTokens,id:e.config.compaction.model.id,maxOutputTokens:e.config.compaction.model.maxOutputTokens,providerOptions:e.config.compaction.model.providerOptions,source:{exportName:e.config.compaction.model.source.exportName,sourceKind:`module`,logicalPath:e.config.compaction.model.source.logicalPath,sourceId:e.config.compaction.model.source.sourceId}}),e.config.compaction.thresholdPercent!==void 0&&(n.thresholdPercent=e.config.compaction.thresholdPercent),t.compaction=n}if(e.config.experimental!==void 0&&(t.experimental={instrumentationProviders:e.config.experimental.instrumentationProviders,workflow:e.config.experimental.workflow===void 0?void 0:{world:e.config.experimental.workflow.world}}),e.config.outputSchema!==void 0&&(t.outputSchema=e.config.outputSchema),e.config.reasoning!==void 0&&(t.reasoning=e.config.reasoning),e.config.source!==void 0&&(t.source=createResolvedModuleSourceRef(e.config.source)),e.config.limits!==void 0&&(t.limits={maxInputTokensPerSession:e.config.limits.maxInputTokensPerSession,maxOutputTokensPerSession:e.config.limits.maxOutputTokensPerSession,maxTokenCostUsdPerSession:e.config.limits.maxTokenCostUsdPerSession,sessionTimeoutMs:e.config.limits.sessionTimeoutMs}),e.config.dynamicModel!==void 0)return{...t,dynamicModel:{...createResolvedModuleSourceRef(e.config.dynamicModel),eventNames:[...e.config.dynamicModel.eventNames]}};let n=e.config.model;return{...t,model:n.source===void 0?{id:n.id,contextWindowTokens:n.contextWindowTokens,maxOutputTokens:n.maxOutputTokens,providerOptions:n.providerOptions}:{contextWindowTokens:n.contextWindowTokens,id:n.id,maxOutputTokens:n.maxOutputTokens,providerOptions:n.providerOptions,source:{exportName:n.source.exportName,sourceKind:`module`,logicalPath:n.source.logicalPath,sourceId:n.source.sourceId}}}}export{ResolveAgentError,resolveAgent};
|
|
1
|
+
import{resolveConnectionDefinition}from"#runtime/resolve-connection.js";import{ResolveAgentError,createResolvedModuleSourceRef}from"#runtime/resolve-helpers.js";import{resolveChannelDefinition}from"#runtime/resolve-channel.js";import{resolveDynamicConnectionDefinition}from"#runtime/resolve-dynamic-connection.js";import{resolveHookDefinition}from"#runtime/resolve-hook.js";import{resolveSandboxDefinition}from"#runtime/resolve-sandbox.js";import{resolveDynamicInstructionsDefinition}from"#runtime/resolve-dynamic-instructions.js";import{resolveDynamicSkillDefinition}from"#runtime/resolve-dynamic-skill.js";import{resolveDynamicToolDefinition}from"#runtime/resolve-dynamic-tool.js";import{resolveToolDefinition}from"#runtime/resolve-tool.js";import{resolveMemoryDefinition}from"#runtime/resolve-memory.js";async function resolveAgent(e){let t=e.manifest.skills.map(t=>({...t,owner:requireCompiledSourceOwner(e.manifest,t),metadata:t.metadata===void 0?void 0:{...t.metadata}})),n=await Promise.all(e.manifest.channelRoutes.effective.map(t=>resolveChannelDefinition(t,e.moduleMap,e.nodeId))),r=await Promise.all(e.manifest.tools.map(t=>resolveToolDefinition(t,e.moduleMap,e.nodeId,requireBindingOwner(e.manifest,t.sourceId)))),i=await Promise.all(e.manifest.dynamicConnections.map(t=>resolveDynamicConnectionDefinition(t,e.moduleMap,e.nodeId))),a=await Promise.all((e.manifest.dynamicInstructions??[]).map(t=>resolveDynamicInstructionsDefinition(t,e.moduleMap,e.nodeId))),o=await Promise.all((e.manifest.dynamicSkills??[]).map(t=>resolveDynamicSkillDefinition(t,e.moduleMap,e.nodeId))),s=await Promise.all(e.manifest.dynamicTools.map(t=>resolveDynamicToolDefinition(t,e.moduleMap,e.nodeId))),c=await Promise.all(e.manifest.hooks.map(t=>resolveHookDefinition(t,e.moduleMap,e.nodeId))),l=await Promise.all(e.manifest.connections.map(t=>resolveConnectionDefinition(t,e.moduleMap,e.nodeId))),u=await Promise.all(e.manifest.memories.map(t=>resolveMemoryDefinition(t,e.moduleMap,e.nodeId))),d=await resolveSandboxDefinition(e.manifest.sandbox,e.moduleMap,e.nodeId),f=e.manifest.instructions.map(t=>createResolvedInstructionsDefinition(e.manifest,t)),p=e.manifest.workspaceResourceRoot,m={channels:n,connections:l,dynamicConnectionResolvers:i,workflowTool:e.manifest.workflowTool===void 0?void 0:{maxSubagents:e.manifest.workflowTool.maxSubagents},dynamicInstructionsResolvers:a,dynamicSkillResolvers:o,dynamicToolResolvers:s,hooks:c,instructions:f,metadata:{agentRoot:e.manifest.agentRoot,appRoot:e.manifest.appRoot,diagnosticsSummary:e.manifest.diagnosticsSummary},memories:u,sandbox:d,workspaceResourceRoot:p,skills:t,tools:r,workspaceSpec:{rootEntries:[...p.rootEntries]}};return`config`in e.manifest?{...m,config:createResolvedAgentConfig(e.manifest)}:m}function requireBindingOwner(e,t){let n=e.bindings[t];if(n===void 0)throw Error(`Compiled source "${t}" has no binding.`);return n.owner}function createResolvedInstructionsDefinition(e,t){return{content:t.content,name:t.name,owner:requireCompiledSourceOwner(e,t),logicalPath:t.logicalPath,role:t.role,sourceId:t.sourceId,sourceKind:t.sourceKind}}function requireCompiledSourceOwner(e,t){let n=e.bindings[t.sourceId]?.owner??t.owner;if(n===void 0)throw Error(`Compiled source "${t.sourceId}" has no owner.`);return n}function createResolvedAgentConfig(e){let t={name:e.config.name};if(e.config.defaultTools!==void 0&&(t.defaultTools=e.config.defaultTools),e.config.compaction!==void 0){let n={};e.config.compaction.model!==void 0&&(n.model=e.config.compaction.model.source===void 0?{contextWindowTokens:e.config.compaction.model.contextWindowTokens,id:e.config.compaction.model.id,maxOutputTokens:e.config.compaction.model.maxOutputTokens,providerOptions:e.config.compaction.model.providerOptions}:{contextWindowTokens:e.config.compaction.model.contextWindowTokens,id:e.config.compaction.model.id,maxOutputTokens:e.config.compaction.model.maxOutputTokens,providerOptions:e.config.compaction.model.providerOptions,source:{exportName:e.config.compaction.model.source.exportName,sourceKind:`module`,logicalPath:e.config.compaction.model.source.logicalPath,sourceId:e.config.compaction.model.source.sourceId}}),e.config.compaction.thresholdPercent!==void 0&&(n.thresholdPercent=e.config.compaction.thresholdPercent),t.compaction=n}if(e.config.experimental!==void 0&&(t.experimental={instrumentationProviders:e.config.experimental.instrumentationProviders,workflow:e.config.experimental.workflow===void 0?void 0:{world:e.config.experimental.workflow.world}}),e.config.outputSchema!==void 0&&(t.outputSchema=e.config.outputSchema),e.config.reasoning!==void 0&&(t.reasoning=e.config.reasoning),e.config.source!==void 0&&(t.source=createResolvedModuleSourceRef(e.config.source)),e.config.limits!==void 0&&(t.limits={maxInputTokensPerSession:e.config.limits.maxInputTokensPerSession,maxOutputTokensPerSession:e.config.limits.maxOutputTokensPerSession,maxTokenCostUsdPerSession:e.config.limits.maxTokenCostUsdPerSession,sessionTimeoutMs:e.config.limits.sessionTimeoutMs}),e.config.dynamicModel!==void 0)return{...t,dynamicModel:{...createResolvedModuleSourceRef(e.config.dynamicModel),eventNames:[...e.config.dynamicModel.eventNames]}};let n=e.config.model;return{...t,model:n.source===void 0?{id:n.id,contextWindowTokens:n.contextWindowTokens,maxOutputTokens:n.maxOutputTokens,providerOptions:n.providerOptions}:{contextWindowTokens:n.contextWindowTokens,id:n.id,maxOutputTokens:n.maxOutputTokens,providerOptions:n.providerOptions,source:{exportName:n.source.exportName,sourceKind:`module`,logicalPath:n.source.logicalPath,sourceId:n.source.sourceId}}}}export{ResolveAgentError,resolveAgent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{expectFunction,expectObjectRecord}from"#internal/authored-module.js";import{toErrorMessage}from"#shared/errors.js";import{isToolSchema,toInputSchema,toOutputSchema}from"#tools/schema.js";import{registerDefinitionSource,stampDefinitionKey}from"#internal/authored-definition/source-identity.js";import{normalizeApproval}from"#internal/authored-definition/approval.js";import{ResolveAgentError,loadResolvedModuleExport}from"#runtime/resolve-helpers.js";async function resolveToolDefinition(e,t,n,r){if(!e.hasExecute)return{behavior:e.behavior,description:e.description,inputSchema:toInputSchema(e.inputSchema),logicalPath:e.logicalPath,name:e.name,outputSchema:toOutputSchema(e.outputSchema),owner:r,sourceId:e.sourceId,sourceKind:`module`};try{let i=await loadResolvedModuleExport({definition:e,kindLabel:`tool`,moduleMap:t,nodeId:n}),a=expectObjectRecord(i,describe(e,`to return an object`)),o={kind:`tool`,logicalPath:e.logicalPath,name:e.name,owner:r},s=`tool-source:${e.sourceId}`;stampDefinitionKey(a,s),registerDefinitionSource(s,o),registerDefinitionSource(`tool:${a.description}`,o);let c=expectFunction(a.execute,describe(e,`to provide an execute function`)),l=isToolSchema(a.inputSchema)?a.inputSchema:toInputSchema(e.inputSchema),u=isToolSchema(a.outputSchema)?a.outputSchema:toOutputSchema(e.outputSchema);return{behavior:e.behavior,description:e.description,execute:c,execution:e.execution,exportName:e.exportName,inputSchema:l,logicalPath:e.logicalPath,name:e.name,owner:r,outputSchema:u,sourceId:e.sourceId,sourceKind:`module`,...extractOptionalHooks(a,e)}}catch(t){throw t instanceof ResolveAgentError?t:new ResolveAgentError(`Failed to attach the tool execute function from "${e.logicalPath}": ${toErrorMessage(t)}`,{logicalPath:e.logicalPath,sourceId:e.sourceId})}}function extractOptionalHooks(e,t){let n={};return e.approval!==void 0&&(n.approval=normalizeApproval(e.approval,describe(t,`to provide a valid approval definition`))),e.toModelOutput!==void 0&&(n.toModelOutput=expectFunction(e.toModelOutput,describe(t,`to provide a toModelOutput function`))),n}function describe(e,t){return`Expected the tool export "${e.exportName??`default`}" from "${e.logicalPath}" ${t}.`}export{resolveToolDefinition};
|
|
1
|
+
import{expectFunction,expectObjectRecord}from"#internal/authored-module.js";import{toErrorMessage}from"#shared/errors.js";import{isToolSchema,toInputSchema,toOutputSchema}from"#tools/schema.js";import{registerDefinitionSource,stampDefinitionKey}from"#internal/authored-definition/source-identity.js";import{normalizeApproval}from"#internal/authored-definition/approval.js";import{ResolveAgentError,loadResolvedModuleExport}from"#runtime/resolve-helpers.js";async function resolveToolDefinition(e,t,n,r){if(!e.hasExecute)return{behavior:e.behavior,description:e.description,inputSchema:toInputSchema(e.inputSchema),logicalPath:e.logicalPath,name:e.name,outputSchema:toOutputSchema(e.outputSchema),owner:r,sourceId:e.sourceId,sourceKind:`module`};try{let i=await loadResolvedModuleExport({definition:e,kindLabel:`tool`,moduleMap:t,nodeId:n}),a=expectObjectRecord(i,describe(e,`to return an object`)),o={kind:`tool`,logicalPath:e.logicalPath,name:e.name,owner:r},s=`tool-source:${e.sourceId}`;stampDefinitionKey(a,s),registerDefinitionSource(s,o),registerDefinitionSource(`tool:${a.description}`,o);let c=expectFunction(a.execute,describe(e,`to provide an execute function`)),l=isToolSchema(a.inputSchema)?a.inputSchema:toInputSchema(e.inputSchema),u=isToolSchema(a.outputSchema)?a.outputSchema:toOutputSchema(e.outputSchema);return{behavior:e.behavior,description:e.description,execute:c,execution:e.execution,exportName:e.exportName,inputSchema:l,logicalPath:e.logicalPath,name:e.name,owner:r,outputSchema:u,sourceId:e.sourceId,sourceKind:`module`,...extractOptionalHooks(a,e)}}catch(t){throw t instanceof ResolveAgentError?t:new ResolveAgentError(`Failed to attach the tool execute function from "${e.logicalPath}": ${toErrorMessage(t)}`,{logicalPath:e.logicalPath,sourceId:e.sourceId})}}function extractOptionalHooks(e,t){let n={};return e.approval!==void 0&&(n.approval=normalizeApproval(e.approval,describe(t,`to provide a valid approval definition`))),e.approvalKey!==void 0&&(n.approvalKey=expectFunction(e.approvalKey,describe(t,`to provide an approvalKey function`))),e.toModelOutput!==void 0&&(n.toModelOutput=expectFunction(e.toModelOutput,describe(t,`to provide a toModelOutput function`))),n}function describe(e,t){return`Expected the tool export "${e.exportName??`default`}" from "${e.logicalPath}" ${t}.`}export{resolveToolDefinition};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{serializeOutputSchema}from"#tools/schema.js";import{normalizeAgentDefinition}from"#internal/authored-definition/core.js";import{isDynamicModelDefinition}from"#shared/agent-definition.js";import{resolveRuntimeModelSelection}from"#runtime/agent/resolve-model.js";async function normalizeDynamicSubagentAgentConfig(e){let t=`Dynamic subagent "${e.name}" must return defineAgent(...), defineRemoteAgent(...), or null.`,n=normalizeAgentDefinition(e.value,t);if(!n.description)throw Error(`${t} The "description" field is required.`);if(n.build!==void 0)throw Error(`${t} The "build" field cannot be selected at runtime.`);if(n.experimental!==void 0)throw Error(`${t} The "experimental" field cannot be selected at runtime.`);if(isDynamicModelDefinition(n.model))throw Error(`${t} The returned "model" must be static.`);let r={description:n.description,model:await normalizeDurableModelSelection({catalog:e.catalog,selection:{model:n.model,modelContextWindowTokens:n.modelContextWindowTokens,modelOptions:n.modelOptions},state:e.state})};if(n.compaction!==void 0){let t={};n.compaction.model!==void 0&&(t.model=await normalizeDurableModelSelection({catalog:e.catalog,selection:{model:n.compaction.model,modelContextWindowTokens:n.compaction.modelContextWindowTokens,modelOptions:n.modelOptions},state:e.state})),n.compaction.thresholdPercent!==void 0&&(t.thresholdPercent=n.compaction.thresholdPercent),r.compaction=t}return n.limits!==void 0&&(r.limits=n.limits),n.outputSchema!==void 0&&(r.outputSchema=serializeOutputSchema(n.outputSchema)),n.reasoning!==void 0&&(r.reasoning=n.reasoning),r}async function normalizeDurableModelSelection(e){return(await resolveRuntimeModelSelection({catalog:e.catalog,durability:`durable`,selection:e.selection,state:e.state})).reference}export{normalizeDynamicSubagentAgentConfig};
|
|
1
|
+
import{serializeOutputSchema}from"#tools/schema.js";import{normalizeAgentDefinition}from"#internal/authored-definition/core.js";import{isDynamicModelDefinition}from"#shared/agent-definition.js";import{resolveRuntimeModelSelection}from"#runtime/agent/resolve-model.js";async function normalizeDynamicSubagentAgentConfig(e){let t=`Dynamic subagent "${e.name}" must return defineAgent(...), defineRemoteAgent(...), or null.`,n=normalizeAgentDefinition(e.value,t);if(!n.description)throw Error(`${t} The "description" field is required.`);if(n.build!==void 0)throw Error(`${t} The "build" field cannot be selected at runtime.`);if(n.defaultTools!==void 0)throw Error(`${t} The "defaultTools" field cannot be selected at runtime.`);if(n.experimental!==void 0)throw Error(`${t} The "experimental" field cannot be selected at runtime.`);if(isDynamicModelDefinition(n.model))throw Error(`${t} The returned "model" must be static.`);let r={description:n.description,model:await normalizeDurableModelSelection({catalog:e.catalog,selection:{model:n.model,modelContextWindowTokens:n.modelContextWindowTokens,modelOptions:n.modelOptions},state:e.state})};if(n.compaction!==void 0){let t={};n.compaction.model!==void 0&&(t.model=await normalizeDurableModelSelection({catalog:e.catalog,selection:{model:n.compaction.model,modelContextWindowTokens:n.compaction.modelContextWindowTokens,modelOptions:n.modelOptions},state:e.state})),n.compaction.thresholdPercent!==void 0&&(t.thresholdPercent=n.compaction.thresholdPercent),r.compaction=t}return n.limits!==void 0&&(r.limits=n.limits),n.outputSchema!==void 0&&(r.outputSchema=serializeOutputSchema(n.outputSchema)),n.reasoning!==void 0&&(r.reasoning=n.reasoning),r}async function normalizeDurableModelSelection(e){return(await resolveRuntimeModelSelection({catalog:e.catalog,durability:`durable`,selection:e.selection,state:e.state})).reference}export{normalizeDynamicSubagentAgentConfig};
|
|
@@ -2,7 +2,7 @@ import { z } from "#compiled/zod/index.js";
|
|
|
2
2
|
import { type ChannelSetupLog } from "#setup/cli/index.js";
|
|
3
3
|
import type { VercelProjectReference } from "#setup/project-resolution.js";
|
|
4
4
|
import { type RunVercelOptions } from "#setup/primitives/run-vercel.js";
|
|
5
|
-
export declare const FILE_MEMORY_BLOB_PREFIX = "
|
|
5
|
+
export declare const FILE_MEMORY_BLOB_PREFIX = "EVE_MEMORY_BLOB";
|
|
6
6
|
export declare const FILE_MEMORY_BLOB_ENVIRONMENTS: readonly ["production", "preview", "development"];
|
|
7
7
|
declare const ProjectSchema: z.ZodObject<{
|
|
8
8
|
id: z.ZodString;
|
|
@@ -52,7 +52,7 @@ export interface FileMemoryVercelClient {
|
|
|
52
52
|
environments: readonly string[];
|
|
53
53
|
prefix: string;
|
|
54
54
|
projectId: string;
|
|
55
|
-
|
|
55
|
+
storeId: string;
|
|
56
56
|
}): Promise<void>;
|
|
57
57
|
getConnections(storeId: string): Promise<readonly BlobStoreConnection[]>;
|
|
58
58
|
getProject(): Promise<VercelProjectConfiguration>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readFile}from"node:fs/promises";import{z}from"#compiled/zod/index.js";import{join}from"node:path";import{captureVercel}from"#setup/primitives/run-vercel.js";import{createPromptCommandOutput,withPhase}from"#setup/cli/index.js";const FILE_MEMORY_BLOB_PREFIX=`EVE_MEMORY_`,FILE_MEMORY_BLOB_ENVIRONMENTS=[`production`,`preview`,`development`],ProjectSchema=z.object({id:z.string().min(1),name:z.string().min(1),resourceConfig:z.object({functionDefaultRegions:z.array(z.string().min(1)).optional()}).optional(),defaultResourceConfig:z.object({functionDefaultRegions:z.array(z.string().min(1)).optional()}).optional()}).passthrough(),StoreReferenceSchema=z.object({id:z.string().min(1),name:z.string().min(1),projects:z.array(z.object({id:z.string().min(1),name:z.string().min(1)}).passthrough()).default([]),region:z.string().min(1).optional()}).passthrough(),StoreSchema=z.object({access:z.enum([`private`,`public`]),id:z.string().min(1),name:z.string().min(1),region:z.string().min(1),type:z.string().optional()}).passthrough(),StoreConnectionSchema=z.object({envVarEnvironments:z.array(z.string()).default([]),envVarPrefix:z.string().nullish(),id:z.string().optional(),projectId:z.string().min(1)}).passthrough();function parseJson(e,t,n){try{return t.parse(JSON.parse(e))}catch{throw Error(`Vercel returned invalid ${n} data. Upgrade the Vercel CLI and try again.`)}}function commandFailure(e,t){let n=[t.failure.stderr,t.failure.stdout,t.failure.message].find(e=>e.trim().length>0);return Error(n===void 0?`${e} failed.`:`${e} failed: ${n.trim()}`)}function createFileMemoryVercelClient(e){let t={cwd:e.appRoot,nonInteractive:!0,onOutput:e.onOutput,signal:e.signal},n=[`--scope`,e.project.orgId];async function captureJson(n,r,i,a){let o=await captureVercel(n,{...t,stdin:a});if(e.signal?.throwIfAborted(),!o.ok)throw commandFailure(i,o);return parseJson(o.stdout,r,i.toLowerCase())}async function captureMutation(n,r){let i=await captureVercel(n,t);if(e.signal?.throwIfAborted(),!i.ok)throw commandFailure(r,i)}return{async createStore({name:e,region:t}){return(await captureJson([`api`,`/v1/storage/stores/blob`,`-X`,`POST`,`--input`,`-`,`--raw`,...n],z.object({store:StoreSchema}),`Vercel Blob store creation`,JSON.stringify({access:`private`,name:e,region:t}))).store},async connectStore({environments:e,prefix:t,projectId:r,storeName:i}){await captureMutation([`integration-resource`,`connect`,i,r,`--prefix`,t,...e.flatMap(e=>[`--environment`,e]),`--yes`,...n],`Vercel Blob project connection`)},async getConnections(e){return(await captureJson([`api`,`/v1/storage/stores/${encodeURIComponent(e)}/connections`,`--raw`,...n],z.object({connections:z.array(StoreConnectionSchema)}),`Vercel Blob connections lookup`)).connections},async getProject(){return await captureJson([`api`,`/v9/projects/${encodeURIComponent(e.project.projectId)}?teamId=${encodeURIComponent(e.project.orgId)}`,`--raw`,...n],ProjectSchema,`Vercel project lookup`)},async getStore(e){return(await captureJson([`api`,`/v1/storage/stores/${encodeURIComponent(e)}`,`--raw`,...n],z.object({store:StoreSchema}),`Vercel Blob store lookup`)).store},async listStores(){return(await captureJson([`blob`,`list-stores`,`--all`,`--json`,...n],z.object({stores:z.array(StoreReferenceSchema)}),`Vercel Blob stores lookup`)).stores},async pullEnvironment(){await captureMutation([`env`,`pull`,`.env.local`,`--yes`,`--project`,e.project.projectId,...n],`Vercel environment pull`)}}}function resolveFileMemoryRegion(e){return e.localRegions?.[0]??e.project.resourceConfig?.functionDefaultRegions?.[0]??e.project.defaultResourceConfig?.functionDefaultRegions?.[0]??`iad1`}function fileMemoryStoreName(e,t){let n=e.toLowerCase().replace(/[^a-z0-9]+/gu,`-`).replace(/^-+|-+$/gu,``)||`project`,r=t.toLowerCase().replace(/[^a-z0-9]+/gu,``).slice(-8)||`memory`,i=12+r.length;return`eve-memory-${n.slice(0,64-i).replace(/-+$/gu,``)}-${r}`}async function readLocalRegions(e){try{let t=await readFile(join(e,`vercel.json`),`utf8`),n=z.object({regions:z.array(z.string().min(1)).optional()}).safeParse(JSON.parse(t));if(!n.success)throw Error("vercel.json has an invalid `regions` value.");return n.data.regions}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return;throw e instanceof SyntaxError?Error(`vercel.json contains invalid JSON.`):e}}function hasProject(e,t){return e.projects.some(e=>e.id===t)}function exactConnection(e,t){return e.projectId===t&&e.envVarPrefix===`EVE_MEMORY_`}function isEveMemoryConnection(e,t){return e.projectId===t&&e.envVarPrefix?.startsWith(`EVE_MEMORY_`)===!0}function assertPrivateBlobStore(e){if(e.type!==void 0&&e.type!==`blob`)throw Error(`Vercel resource "${e.name}" uses the eve file-memory prefix but is not a Blob store. Disconnect that binding before retrying.`);if(e.access!==`private`)throw Error(`Vercel Blob store "${e.name}" is public. Disconnect an eve-prefixed binding or choose a private store before retrying; eve will not replace it automatically.`)}function assertCompleteConnection(e,t){if(FILE_MEMORY_BLOB_ENVIRONMENTS.filter(t=>!e.envVarEnvironments.includes(t)).length>0)throw Error(`Vercel Blob store "${t}" has an incomplete ${FILE_MEMORY_BLOB_PREFIX} connection. Reconnect it for production, preview, and development before retrying; eve will not disconnect or replace it automatically.`)}async function inspectStore(e,t){let[n,r]=await Promise.all([t.getStore(e.id),t.getConnections(e.id)]);return{connections:r,store:n}}async function prepareFileMemoryBlob(e){let t=e.client??createFileMemoryVercelClient({appRoot:e.appRoot,project:e.project,signal:e.signal}),[n,r,i]=await Promise.all([t.getProject(),e.localRegions?.()??readLocalRegions(e.appRoot),t.listStores()]);if(e.signal?.throwIfAborted(),n.id!==e.project.projectId)throw Error(`Vercel returned project "${n.id}" while file-memory setup expected "${e.project.projectId}". Relink the project and retry.`);let a=resolveFileMemoryRegion({localRegions:r,project:n}),o=fileMemoryStoreName(n.name,n.id),s=i.filter(t=>t.name===o||hasProject(t,e.project.projectId)),c=await Promise.all(s.map(async e=>await inspectStore(e,t))),l=c.flatMap(t=>t.connections.filter(t=>exactConnection(t,e.project.projectId)).map(e=>({candidate:t,connection:e})));if(l.length>1)throw Error(`Multiple Vercel Blob connections target project "${n.name}" with prefix ${FILE_MEMORY_BLOB_PREFIX}. Disconnect the extra binding before retrying.`);if(l.length===1){let t=l[0];if(t===void 0)throw Error(`Expected an eve file-memory Blob store.`);let{candidate:r,connection:i}=t;assertPrivateBlobStore(r.store),assertCompleteConnection(i,r.store.name);let o=r.store.region===a?void 0:`The existing file-memory store remains in ${r.store.region}; the project now prefers ${a}. eve preserved the store to avoid memory loss.`;return{action:`reuse`,project:e.project,projectName:n.name,region:r.store.region,regionWarning:o,storeId:r.store.id,storeName:r.store.name}}let u=c.find(({connections:t})=>t.some(t=>isEveMemoryConnection(t,e.project.projectId)));if(u!==void 0)throw Error(`Vercel resource "${u.store.name}" has an incompatible eve file-memory prefix. Disconnect it before retrying; eve will not change an ambiguous binding automatically.`);let d=c.filter(({store:e})=>e.name===o);if(d.length>1)throw Error(`Multiple Vercel Blob stores match the expected file-memory name "${o}". Rename or remove the duplicate before retrying.`);if(d.length===1){let t=d[0];if(t===void 0)throw Error(`Expected a file-memory Blob store candidate.`);if(assertPrivateBlobStore(t.store),t.store.region!==a)throw Error(`Unconnected Vercel Blob store "${o}" is in ${t.store.region}, but project "${n.name}" uses ${a}. Rename that store or connect it manually; eve will not replace it automatically.`);if(t.connections.length>0)throw Error(`Vercel Blob store "${o}" already has a project connection, so eve cannot safely adopt it. Disconnect it or choose a different store before retrying.`);return{action:`repair`,project:e.project,projectName:n.name,region:a,storeId:t.store.id,storeName:o}}return{action:`create`,project:e.project,projectName:n.name,region:a,storeName:o}}async function verifyFileMemoryBlob(e,t,n){let[r,i]=await Promise.all([n.getStore(t),n.getConnections(t)]);if(assertPrivateBlobStore(r),r.name!==e.storeName)throw Error(`Vercel connected an unexpected Blob store named "${r.name}".`);if(r.region!==e.region)throw Error(`Vercel Blob store "${r.name}" is in ${r.region}, but setup expected ${e.region}.`);let a=i.filter(t=>exactConnection(t,e.project.projectId));if(a.length!==1)throw Error(`Vercel Blob store "${r.name}" does not have exactly one ${FILE_MEMORY_BLOB_PREFIX} connection to project "${e.projectName}".`);let o=a[0];if(o===void 0)throw Error(`Expected a verified eve file-memory connection.`);return assertCompleteConnection(o,r.name),r}async function applyFileMemoryBlob(e){let t=createPromptCommandOutput(e.log),n=e.client??createFileMemoryVercelClient({appRoot:e.appRoot,onOutput:t,project:e.plan.project,signal:e.signal}),r=e.plan.storeId;if(e.plan.action===`create`){let t=await withPhase(e.log,`Creating private Vercel Blob store...`,async()=>await n.createStore({name:e.plan.storeName,region:e.plan.region}));if(assertPrivateBlobStore(t),t.name!==e.plan.storeName||t.region!==e.plan.region)throw Error(`Vercel created Blob store "${t.name}" in ${t.region}, but setup expected "${e.plan.storeName}" in ${e.plan.region}.`);r=t.id}if(r===void 0)throw Error(`File-memory Blob setup did not resolve a store ID.`);e.plan.action!==`reuse`&&await withPhase(e.log,`Connecting file memory to the Vercel project...`,async()=>await n.connectStore({environments:FILE_MEMORY_BLOB_ENVIRONMENTS,prefix:FILE_MEMORY_BLOB_PREFIX,projectId:e.plan.project.projectId,storeName:e.plan.storeName})),await withPhase(e.log,`Pulling Vercel environment variables...`,async()=>await n.pullEnvironment());let i=await withPhase(e.log,`Verifying file-memory storage...`,async()=>await verifyFileMemoryBlob(e.plan,r,n));return{action:e.plan.action,store:i}}export{FILE_MEMORY_BLOB_ENVIRONMENTS,FILE_MEMORY_BLOB_PREFIX,applyFileMemoryBlob,createFileMemoryVercelClient,fileMemoryStoreName,prepareFileMemoryBlob,resolveFileMemoryRegion};
|
|
1
|
+
import{readFile}from"node:fs/promises";import{z}from"#compiled/zod/index.js";import{join}from"node:path";import{captureVercel}from"#setup/primitives/run-vercel.js";import{createPromptCommandOutput,withPhase}from"#setup/cli/index.js";const FILE_MEMORY_BLOB_PREFIX=`EVE_MEMORY_BLOB`,FILE_MEMORY_BLOB_ENVIRONMENTS=[`production`,`preview`,`development`],ProjectSchema=z.object({id:z.string().min(1),name:z.string().min(1),resourceConfig:z.object({functionDefaultRegions:z.array(z.string().min(1)).optional()}).optional(),defaultResourceConfig:z.object({functionDefaultRegions:z.array(z.string().min(1)).optional()}).optional()}).passthrough(),StoreReferenceSchema=z.object({id:z.string().min(1),name:z.string().min(1),projects:z.array(z.object({id:z.string().min(1),name:z.string().min(1)}).passthrough()).default([]),region:z.string().min(1).optional()}).passthrough(),StoreSchema=z.object({access:z.enum([`private`,`public`]),id:z.string().min(1),name:z.string().min(1),region:z.string().min(1),type:z.string().optional()}).passthrough(),StoreConnectionSchema=z.object({envVarEnvironments:z.array(z.string()).default([]),envVarPrefix:z.string().nullish(),id:z.string().optional(),projectId:z.string().min(1)}).passthrough();function parseJson(e,t,n){try{return t.parse(JSON.parse(e))}catch{throw Error(`Vercel returned invalid ${n} data. Upgrade the Vercel CLI and try again.`)}}function commandFailure(e,t){let n=[t.failure.stderr,t.failure.stdout,t.failure.message].find(e=>e.trim().length>0);return Error(n===void 0?`${e} failed.`:`${e} failed: ${n.trim()}`)}function createFileMemoryVercelClient(e){let t={cwd:e.appRoot,nonInteractive:!0,onOutput:e.onOutput,signal:e.signal},n=[`--scope`,e.project.orgId];async function captureJson(n,r,i,a){let o=await captureVercel(n,{...t,stdin:a});if(e.signal?.throwIfAborted(),!o.ok)throw commandFailure(i,o);return parseJson(o.stdout,r,i.toLowerCase())}async function captureMutation(n,r,i){let a=await captureVercel(n,{...t,stdin:i});if(e.signal?.throwIfAborted(),!a.ok)throw commandFailure(r,a)}return{async createStore({name:e,region:t}){return(await captureJson([`api`,`/v1/storage/stores/blob`,`-X`,`POST`,`--input`,`-`,`--raw`,...n],z.object({store:StoreSchema}),`Vercel Blob store creation`,JSON.stringify({access:`private`,name:e,region:t}))).store},async connectStore({environments:e,prefix:t,projectId:r,storeId:i}){await captureMutation([`api`,`/v1/storage/stores/${encodeURIComponent(i)}/connections`,`-X`,`POST`,`--header`,`x-vercel-use-oidc: 1`,`--input`,`-`,...n],`Vercel Blob project connection`,JSON.stringify({envVarEnvironments:e,envVarPrefix:t,projectId:r,skipReadWriteToken:!0}))},async getConnections(e){return(await captureJson([`api`,`/v1/storage/stores/${encodeURIComponent(e)}/connections`,`--raw`,...n],z.object({connections:z.array(StoreConnectionSchema)}),`Vercel Blob connections lookup`)).connections},async getProject(){return await captureJson([`api`,`/v9/projects/${encodeURIComponent(e.project.projectId)}?teamId=${encodeURIComponent(e.project.orgId)}`,`--raw`,...n],ProjectSchema,`Vercel project lookup`)},async getStore(e){return(await captureJson([`api`,`/v1/storage/stores/${encodeURIComponent(e)}`,`--raw`,...n],z.object({store:StoreSchema}),`Vercel Blob store lookup`)).store},async listStores(){return(await captureJson([`blob`,`list-stores`,`--all`,`--json`,...n],z.object({stores:z.array(StoreReferenceSchema)}),`Vercel Blob stores lookup`)).stores},async pullEnvironment(){await captureMutation([`env`,`pull`,`.env.local`,`--yes`,`--project`,e.project.projectId,...n],`Vercel environment pull`)}}}function resolveFileMemoryRegion(e){return e.localRegions?.[0]??e.project.resourceConfig?.functionDefaultRegions?.[0]??e.project.defaultResourceConfig?.functionDefaultRegions?.[0]??`iad1`}function fileMemoryStoreName(e,t){let n=e.toLowerCase().replace(/[^a-z0-9]+/gu,`-`).replace(/^-+|-+$/gu,``)||`project`,r=t.toLowerCase().replace(/[^a-z0-9]+/gu,``).slice(-8)||`memory`,i=12+r.length;return`eve-memory-${n.slice(0,64-i).replace(/-+$/gu,``)}-${r}`}async function readLocalRegions(e){try{let t=await readFile(join(e,`vercel.json`),`utf8`),n=z.object({regions:z.array(z.string().min(1)).optional()}).safeParse(JSON.parse(t));if(!n.success)throw Error("vercel.json has an invalid `regions` value.");return n.data.regions}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return;throw e instanceof SyntaxError?Error(`vercel.json contains invalid JSON.`):e}}function hasProject(e,t){return e.projects.some(e=>e.id===t)}function exactConnection(e,t){return e.projectId===t&&e.envVarPrefix===`EVE_MEMORY_BLOB`}function isEveMemoryConnection(e,t){return e.projectId===t&&e.envVarPrefix?.startsWith(`EVE_MEMORY_`)===!0}function assertPrivateBlobStore(e){if(e.type!==void 0&&e.type!==`blob`)throw Error(`Vercel resource "${e.name}" uses the eve file-memory prefix but is not a Blob store. Disconnect that binding before retrying.`);if(e.access!==`private`)throw Error(`Vercel Blob store "${e.name}" is public. Disconnect an eve-prefixed binding or choose a private store before retrying; eve will not replace it automatically.`)}function assertCompleteConnection(e,t){if(FILE_MEMORY_BLOB_ENVIRONMENTS.filter(t=>!e.envVarEnvironments.includes(t)).length>0)throw Error(`Vercel Blob store "${t}" has an incomplete ${FILE_MEMORY_BLOB_PREFIX} connection. Reconnect it for production, preview, and development before retrying; eve will not disconnect or replace it automatically.`)}async function inspectStore(e,t){let[n,r]=await Promise.all([t.getStore(e.id),t.getConnections(e.id)]);return{connections:r,store:n}}async function prepareFileMemoryBlob(e){let t=e.client??createFileMemoryVercelClient({appRoot:e.appRoot,project:e.project,signal:e.signal}),[n,r,i]=await Promise.all([t.getProject(),e.localRegions?.()??readLocalRegions(e.appRoot),t.listStores()]);if(e.signal?.throwIfAborted(),n.id!==e.project.projectId)throw Error(`Vercel returned project "${n.id}" while file-memory setup expected "${e.project.projectId}". Relink the project and retry.`);let a=resolveFileMemoryRegion({localRegions:r,project:n}),o=fileMemoryStoreName(n.name,n.id),s=i.filter(t=>t.name===o||hasProject(t,e.project.projectId)),c=await Promise.all(s.map(async e=>await inspectStore(e,t))),l=c.flatMap(t=>t.connections.filter(t=>exactConnection(t,e.project.projectId)).map(e=>({candidate:t,connection:e})));if(l.length>1)throw Error(`Multiple Vercel Blob connections target project "${n.name}" with prefix ${FILE_MEMORY_BLOB_PREFIX}. Disconnect the extra binding before retrying.`);if(l.length===1){let t=l[0];if(t===void 0)throw Error(`Expected an eve file-memory Blob store.`);let{candidate:r,connection:i}=t;assertPrivateBlobStore(r.store),assertCompleteConnection(i,r.store.name);let o=r.store.region===a?void 0:`The existing file-memory store remains in ${r.store.region}; the project now prefers ${a}. eve preserved the store to avoid memory loss.`;return{action:`reuse`,project:e.project,projectName:n.name,region:r.store.region,regionWarning:o,storeId:r.store.id,storeName:r.store.name}}let u=c.find(({connections:t})=>t.some(t=>isEveMemoryConnection(t,e.project.projectId)));if(u!==void 0)throw Error(`Vercel resource "${u.store.name}" has an incompatible eve file-memory prefix. Disconnect it before retrying; eve will not change an ambiguous binding automatically.`);let d=c.filter(({store:e})=>e.name===o);if(d.length>1)throw Error(`Multiple Vercel Blob stores match the expected file-memory name "${o}". Rename or remove the duplicate before retrying.`);if(d.length===1){let t=d[0];if(t===void 0)throw Error(`Expected a file-memory Blob store candidate.`);if(assertPrivateBlobStore(t.store),t.store.region!==a)throw Error(`Unconnected Vercel Blob store "${o}" is in ${t.store.region}, but project "${n.name}" uses ${a}. Rename that store or connect it manually; eve will not replace it automatically.`);if(t.connections.length>0)throw Error(`Vercel Blob store "${o}" already has a project connection, so eve cannot safely adopt it. Disconnect it or choose a different store before retrying.`);return{action:`repair`,project:e.project,projectName:n.name,region:a,storeId:t.store.id,storeName:o}}return{action:`create`,project:e.project,projectName:n.name,region:a,storeName:o}}async function verifyFileMemoryBlob(e,t,n){let[r,i]=await Promise.all([n.getStore(t),n.getConnections(t)]);if(assertPrivateBlobStore(r),r.name!==e.storeName)throw Error(`Vercel connected an unexpected Blob store named "${r.name}".`);if(r.region!==e.region)throw Error(`Vercel Blob store "${r.name}" is in ${r.region}, but setup expected ${e.region}.`);let a=i.filter(t=>exactConnection(t,e.project.projectId));if(a.length!==1)throw Error(`Vercel Blob store "${r.name}" does not have exactly one ${FILE_MEMORY_BLOB_PREFIX} connection to project "${e.projectName}".`);let o=a[0];if(o===void 0)throw Error(`Expected a verified eve file-memory connection.`);return assertCompleteConnection(o,r.name),r}async function applyFileMemoryBlob(e){let t=createPromptCommandOutput(e.log),n=e.client??createFileMemoryVercelClient({appRoot:e.appRoot,onOutput:t,project:e.plan.project,signal:e.signal}),r=e.plan.storeId;if(e.plan.action===`create`){let t=await withPhase(e.log,`Creating private Vercel Blob store...`,async()=>await n.createStore({name:e.plan.storeName,region:e.plan.region}));if(assertPrivateBlobStore(t),t.name!==e.plan.storeName||t.region!==e.plan.region)throw Error(`Vercel created Blob store "${t.name}" in ${t.region}, but setup expected "${e.plan.storeName}" in ${e.plan.region}.`);r=t.id}if(r===void 0)throw Error(`File-memory Blob setup did not resolve a store ID.`);e.plan.action!==`reuse`&&await withPhase(e.log,`Connecting file memory to the Vercel project...`,async()=>await n.connectStore({environments:FILE_MEMORY_BLOB_ENVIRONMENTS,prefix:FILE_MEMORY_BLOB_PREFIX,projectId:e.plan.project.projectId,storeId:r})),await withPhase(e.log,`Pulling Vercel environment variables...`,async()=>await n.pullEnvironment());let i=await withPhase(e.log,`Verifying file-memory storage...`,async()=>await verifyFileMemoryBlob(e.plan,r,n));return{action:e.plan.action,store:i}}export{FILE_MEMORY_BLOB_ENVIRONMENTS,FILE_MEMORY_BLOB_PREFIX,applyFileMemoryBlob,createFileMemoryVercelClient,fileMemoryStoreName,prepareFileMemoryBlob,resolveFileMemoryRegion};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{pinnedNodeEngineMajor}from"../../node-engine.js";import{parseChatGptModelSelection}from"../../../shared/chatgpt-model.js";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"../update/module-files.js";import{pathExists,writeTextFile}from"../files.js";import{blockingCreateInPlaceEntries}from"../create-in-place.js";import{resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_APP_TEMPLATE_FILES}from"./web-template.js";import{mkdir,readdir,stat}from"node:fs/promises";import{basename,join,resolve}from"node:path";const CURRENT_DIRECTORY_PROJECT_NAME=`.`,DEFAULT_AI_PACKAGE_VERSION=`^7.0.82`,DEFAULT_CONNECT_PACKAGE_VERSION=`1.0.0`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.52.
|
|
1
|
+
import{pinnedNodeEngineMajor}from"../../node-engine.js";import{parseChatGptModelSelection}from"../../../shared/chatgpt-model.js";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"../update/module-files.js";import{pathExists,writeTextFile}from"../files.js";import{blockingCreateInPlaceEntries}from"../create-in-place.js";import{resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_APP_TEMPLATE_FILES}from"./web-template.js";import{mkdir,readdir,stat}from"node:fs/promises";import{basename,join,resolve}from"node:path";const CURRENT_DIRECTORY_PROJECT_NAME=`.`,DEFAULT_AI_PACKAGE_VERSION=`^7.0.82`,DEFAULT_CONNECT_PACKAGE_VERSION=`1.0.0`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.52.2`,nodeEngine:`>=24`};function resolveEvePackageContract(e=DEFAULT_EVE_PACKAGE_CONTRACT){return{version:resolveVersionToken(`evePackage.version`,e.version),nodeEngine:resolveVersionToken(`evePackage.nodeEngine`,e.nodeEngine)}}function modelProviderSlug(e){let t=(e.split(`/`)[0]??``).replaceAll(/[^A-Za-z0-9._-]/gu,``);return t.length>0?t:`anthropic`}function byokProviderEnvVar(e){let t=modelProviderSlug(e).toUpperCase().replaceAll(/[^A-Z0-9]/gu,`_`);return`${/^[0-9]/.test(t)?`_`:``}${t}_API_KEY`}function agentTemplateFiles(e,t){return{"agent/agent.ts":renderAgentTemplate(e,t),"agent/channels/eve.ts":WEB_APP_TEMPLATE_FILES[`agent/channels/eve.ts`],"agent/instructions.md":AGENT_INSTRUCTIONS_TEMPLATE}}function renderAgentTemplate(e,t){let n=parseChatGptModelSelection(e);return n===void 0?BASE_AGENT_TEMPLATE.replaceAll(`__EVE_INIT_MODEL__`,e).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(t)):`import { defineAgent } from "eve";\nimport { chatgpt } from "eve/models/openai";\n\nexport default defineAgent({\n model: chatgpt(${JSON.stringify(n)}),\n${reasoningTemplateLine(t)}});\n`}function reasoningTemplateLine(e){return e===void 0||e===`provider-default`?``:` reasoning: "${e}",\n`}function renderTemplate(e,t){return e===BASE_AGENT_TEMPLATE&&parseChatGptModelSelection(t.model)!==void 0?renderAgentTemplate(t.model,t.reasoning):e.replaceAll(`__EVE_INIT_APP_NAME__`,t.appName).replaceAll(`__EVE_INIT_MODEL__`,t.model).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(t.reasoning)).replaceAll(`__EVE_INIT_BYOK_PROVIDER__`,modelProviderSlug(t.model)).replaceAll(`__EVE_INIT_BYOK_ENV_VAR__`,byokProviderEnvVar(t.model)).replaceAll(`__EVE_INIT_PACKAGE_VERSION__`,formatEveDependencySpecifier(t.eveVersion)).replaceAll(`__EVE_INIT_AI_SDK_VERSION__`,t.aiPackageVersion).replaceAll(`__EVE_INIT_CONNECT_VERSION__`,t.connectPackageVersion).replaceAll(`__EVE_INIT_ZOD_VERSION__`,t.zodPackageVersion).replaceAll(`__EVE_INIT_TYPESCRIPT_VERSION__`,t.typescriptPackageVersion).replaceAll(`__EVE_INIT_TYPES_NODE_VERSION__`,t.nodeTypesVersion).replaceAll(`__EVE_INIT_NODE_ENGINE__`,t.nodeEngine)}function formatEveDependencySpecifier(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z-.]+)?$/.test(e)?`^${e}`:e}const BASE_AGENT_TEMPLATE=`import { defineAgent } from "eve";
|
|
2
2
|
|
|
3
3
|
export default defineAgent({
|
|
4
4
|
model: "__EVE_INIT_MODEL__",
|
|
@@ -244,6 +244,7 @@ export type InternalAgentDefinition = {
|
|
|
244
244
|
description?: string;
|
|
245
245
|
build?: AgentBuildDefinition;
|
|
246
246
|
compaction?: InternalAgentCompactionDefinition;
|
|
247
|
+
defaultTools?: boolean;
|
|
247
248
|
experimental?: AgentExperimentalDefinition;
|
|
248
249
|
model: InternalAgentModelDefinition;
|
|
249
250
|
outputSchema?: JsonObject;
|
|
@@ -267,6 +268,12 @@ type PublicAgentDefinitionBase = {
|
|
|
267
268
|
readonly description?: string;
|
|
268
269
|
readonly build?: AgentBuildDefinition;
|
|
269
270
|
readonly compaction?: PublicAgentCompactionDefinition;
|
|
271
|
+
/**
|
|
272
|
+
* Whether eve automatically adds its optional default tools. Defaults to `true`.
|
|
273
|
+
* Required connection tooling and tools authored under `agent/tools/` remain
|
|
274
|
+
* available when this is `false`.
|
|
275
|
+
*/
|
|
276
|
+
readonly defaultTools?: boolean;
|
|
270
277
|
/**
|
|
271
278
|
* Experimental, opt-in capabilities. Unstable, see
|
|
272
279
|
* {@link AgentExperimentalDefinition}.
|
package/dist/src/svelte/index.js
CHANGED
|
@@ -44,6 +44,8 @@ export interface PublicToolDefinition<TInput = unknown, TOutput = unknown> exten
|
|
|
44
44
|
* The AI SDK can use this for tool result typing.
|
|
45
45
|
*/
|
|
46
46
|
outputSchema?: PublicToolOutputSchema<TOutput>;
|
|
47
|
+
/** Derives the input-scoped key recorded when this tool is approved. */
|
|
48
|
+
approvalKey?: (input: Readonly<ApprovalContextInput<TInput>>) => string;
|
|
47
49
|
}
|
|
48
50
|
export interface InternalToolDefinitionWithExecuteFn<TInput = unknown, TOutput = unknown> extends InternalToolDefinition {
|
|
49
51
|
execute: ToolExecuteFn<TInput, TOutput>;
|
|
@@ -179,6 +181,7 @@ export declare function defineTool<TSchema extends StandardSchemaV1<unknown, unk
|
|
|
179
181
|
outputSchema?: PublicToolDefinition<unknown, TaskReceipt>["outputSchema"];
|
|
180
182
|
execute(input: StandardSchemaV1.InferOutput<TSchema>, ctx: ToolContext, task: TaskExec): TReturn;
|
|
181
183
|
approval?: BackgroundToolDefinition<StandardSchemaV1.InferOutput<TSchema>, unknown>["approval"];
|
|
184
|
+
approvalKey?: BackgroundToolDefinition<StandardSchemaV1.InferOutput<TSchema>, unknown>["approvalKey"];
|
|
182
185
|
toModelOutput?: BackgroundToolDefinition<unknown, BackgroundToolOutputFromExecuteReturn<TReturn>>["toModelOutput"];
|
|
183
186
|
}): BackgroundToolDefinitionWithExecuteReturn<StandardSchemaV1.InferOutput<TSchema>, BackgroundToolOutputFromExecuteReturn<TReturn>, TReturn>;
|
|
184
187
|
export declare function defineTool<TInputSchema extends StandardSchemaV1<unknown, unknown> | StandardJSONSchemaV1<unknown, unknown>, TOutputSchema extends StandardJSONSchemaV1<unknown, unknown>, TReturn extends Promise<StandardJSONSchemaV1.InferOutput<TOutputSchema>> | StandardJSONSchemaV1.InferOutput<TOutputSchema> | AsyncIterable<StandardJSONSchemaV1.InferOutput<TOutputSchema>>>(definition: {
|
|
@@ -187,6 +190,7 @@ export declare function defineTool<TInputSchema extends StandardSchemaV1<unknown
|
|
|
187
190
|
outputSchema: TOutputSchema;
|
|
188
191
|
execute(input: StandardSchemaV1.InferOutput<TInputSchema>, ctx: ToolContext): TReturn;
|
|
189
192
|
approval?: ToolDefinition<StandardSchemaV1.InferOutput<TInputSchema>, unknown>["approval"];
|
|
193
|
+
approvalKey?: ToolDefinition<StandardSchemaV1.InferOutput<TInputSchema>, unknown>["approvalKey"];
|
|
190
194
|
toModelOutput?: ToolDefinition<unknown, StandardJSONSchemaV1.InferOutput<TOutputSchema>>["toModelOutput"];
|
|
191
195
|
}): ToolDefinitionWithExecuteReturn<StandardSchemaV1.InferOutput<TInputSchema>, StandardJSONSchemaV1.InferOutput<TOutputSchema>, TReturn>;
|
|
192
196
|
export declare function defineTool<TSchema extends StandardSchemaV1<unknown, unknown> | StandardJSONSchemaV1<unknown, unknown>, TReturn>(definition: {
|
|
@@ -195,6 +199,7 @@ export declare function defineTool<TSchema extends StandardSchemaV1<unknown, unk
|
|
|
195
199
|
outputSchema?: JsonObject;
|
|
196
200
|
execute(input: StandardSchemaV1.InferOutput<TSchema>, ctx: ToolContext): TReturn;
|
|
197
201
|
approval?: ToolDefinition<StandardSchemaV1.InferOutput<TSchema>, unknown>["approval"];
|
|
202
|
+
approvalKey?: ToolDefinition<StandardSchemaV1.InferOutput<TSchema>, unknown>["approvalKey"];
|
|
198
203
|
toModelOutput?: ToolDefinition<unknown, ToolOutputFromExecuteReturn<TReturn>>["toModelOutput"];
|
|
199
204
|
}): ToolDefinitionWithExecuteReturn<StandardSchemaV1.InferOutput<TSchema>, ToolOutputFromExecuteReturn<TReturn>, TReturn>;
|
|
200
205
|
export declare function defineTool<TOutputSchema extends StandardJSONSchemaV1<unknown, unknown>, TReturn extends Promise<StandardJSONSchemaV1.InferOutput<TOutputSchema>> | StandardJSONSchemaV1.InferOutput<TOutputSchema> | AsyncIterable<StandardJSONSchemaV1.InferOutput<TOutputSchema>>>(definition: {
|
|
@@ -203,6 +208,7 @@ export declare function defineTool<TOutputSchema extends StandardJSONSchemaV1<un
|
|
|
203
208
|
outputSchema: TOutputSchema;
|
|
204
209
|
execute(input: Record<string, unknown>, ctx: ToolContext): TReturn;
|
|
205
210
|
approval?: ToolDefinition<Record<string, unknown>, unknown>["approval"];
|
|
211
|
+
approvalKey?: ToolDefinition<Record<string, unknown>, unknown>["approvalKey"];
|
|
206
212
|
toModelOutput?: ToolDefinition<unknown, StandardJSONSchemaV1.InferOutput<TOutputSchema>>["toModelOutput"];
|
|
207
213
|
}): ToolDefinitionWithExecuteReturn<Record<string, unknown>, StandardJSONSchemaV1.InferOutput<TOutputSchema>, TReturn>;
|
|
208
214
|
export declare function defineTool<TReturn>(definition: {
|
|
@@ -211,6 +217,7 @@ export declare function defineTool<TReturn>(definition: {
|
|
|
211
217
|
outputSchema?: JsonObject;
|
|
212
218
|
execute(input: Record<string, unknown>, ctx: ToolContext): TReturn;
|
|
213
219
|
approval?: ToolDefinition<Record<string, unknown>, unknown>["approval"];
|
|
220
|
+
approvalKey?: ToolDefinition<Record<string, unknown>, unknown>["approvalKey"];
|
|
214
221
|
toModelOutput?: ToolDefinition<unknown, ToolOutputFromExecuteReturn<TReturn>>["toModelOutput"];
|
|
215
222
|
}): ToolDefinitionWithExecuteReturn<Record<string, unknown>, ToolOutputFromExecuteReturn<TReturn>, TReturn>;
|
|
216
223
|
export declare function defineTool<TInput = unknown, TOutput = unknown>(definition: ToolDefinition<TInput, TOutput>): ToolDefinition<TInput, TOutput>;
|
|
@@ -218,6 +225,7 @@ export declare function stampToolDefinition<T extends {
|
|
|
218
225
|
readonly description: string;
|
|
219
226
|
readonly execute: (...args: never[]) => unknown;
|
|
220
227
|
readonly approval?: Approval<never>;
|
|
228
|
+
readonly approvalKey?: (...args: never[]) => unknown;
|
|
221
229
|
readonly toModelOutput?: (...args: never[]) => unknown;
|
|
222
230
|
}>(definition: T, definer: "defineTool" | "defineWorkflowTool"): T;
|
|
223
231
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{collectDurableDynamicToolCallbacks,stampDurableDynamicToolCallbacks}from"#tools/durable-callbacks.js";import{TOOL_BRAND}from"#tools/dynamic.js";import{stampDefinitionKey}from"#internal/authored-definition/source-identity.js";function defineTool(e){return stampToolDefinition(e,`defineTool`)}function stampToolDefinition(e,t){if(e.auth!==void 0)throw Error(`${t}: The "auth" field is no longer supported. Pass auth providers inline to ctx.getToken(provider) or ctx.requireAuth(provider).`);return Object.assign(e,{[TOOL_BRAND]:!0}),stampDurableDynamicToolCallbacks(e,collectDurableDynamicToolCallbacks({approval:e.approval,execute:e.execute,toModelOutput:e.toModelOutput})),stampDefinitionKey(e,`tool:${e.description}`),e}const DISABLED_TOOL_SENTINEL_KIND=`eve:disabled-tool`;function disableTool(){return{kind:DISABLED_TOOL_SENTINEL_KIND}}function isDisabledToolSentinel(e){return typeof e==`object`&&!!e&&e.kind===DISABLED_TOOL_SENTINEL_KIND}export{defineTool,disableTool,isDisabledToolSentinel,stampToolDefinition};
|
|
1
|
+
import{collectDurableDynamicToolCallbacks,stampDurableDynamicToolCallbacks}from"#tools/durable-callbacks.js";import{TOOL_BRAND}from"#tools/dynamic.js";import{stampDefinitionKey}from"#internal/authored-definition/source-identity.js";function defineTool(e){return stampToolDefinition(e,`defineTool`)}function stampToolDefinition(e,t){if(e.auth!==void 0)throw Error(`${t}: The "auth" field is no longer supported. Pass auth providers inline to ctx.getToken(provider) or ctx.requireAuth(provider).`);return Object.assign(e,{[TOOL_BRAND]:!0}),stampDurableDynamicToolCallbacks(e,collectDurableDynamicToolCallbacks({approval:e.approval,approvalKey:e.approvalKey,execute:e.execute,toModelOutput:e.toModelOutput})),stampDefinitionKey(e,`tool:${e.description}`),e}const DISABLED_TOOL_SENTINEL_KIND=`eve:disabled-tool`;function disableTool(){return{kind:DISABLED_TOOL_SENTINEL_KIND}}function isDisabledToolSentinel(e){return typeof e==`object`&&!!e&&e.kind===DISABLED_TOOL_SENTINEL_KIND}export{defineTool,disableTool,isDisabledToolSentinel,stampToolDefinition};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Approval } from "#approval/definition.js";
|
|
2
2
|
import type { JsonObject } from "#shared/json.js";
|
|
3
|
-
export type DurableDynamicCallbackPhase = "approvalRequest" | "approvalResponse" | "execute" | "toModelOutput";
|
|
3
|
+
export type DurableDynamicCallbackPhase = "approvalKey" | "approvalRequest" | "approvalResponse" | "execute" | "toModelOutput";
|
|
4
4
|
export type DurableDynamicCallbackFn = (closure: JsonObject, ...args: never[]) => unknown;
|
|
5
5
|
/**
|
|
6
6
|
* Persisted binding for one callback phase. Identity is
|
|
@@ -13,6 +13,7 @@ export interface DurableDynamicCallbackReference {
|
|
|
13
13
|
}
|
|
14
14
|
export interface DurableDynamicToolCallbacks {
|
|
15
15
|
readonly execute: DurableDynamicCallbackReference;
|
|
16
|
+
readonly approvalKey?: DurableDynamicCallbackReference;
|
|
16
17
|
readonly approvalRequest?: DurableDynamicCallbackReference;
|
|
17
18
|
readonly approvalResponse?: DurableDynamicCallbackReference;
|
|
18
19
|
readonly toModelOutput?: DurableDynamicCallbackReference;
|
|
@@ -24,6 +25,7 @@ export interface StampedDurableDynamicCallback {
|
|
|
24
25
|
}
|
|
25
26
|
export type LiveDurableDynamicToolCallbacks = Partial<{
|
|
26
27
|
execute: StampedDurableDynamicCallback;
|
|
28
|
+
approvalKey: StampedDurableDynamicCallback;
|
|
27
29
|
approvalRequest: StampedDurableDynamicCallback;
|
|
28
30
|
approvalResponse: StampedDurableDynamicCallback;
|
|
29
31
|
toModelOutput: StampedDurableDynamicCallback;
|
|
@@ -53,6 +55,7 @@ export declare function readDurableDynamicCallback(callback: unknown): StampedDu
|
|
|
53
55
|
export declare function stampDurableDynamicToolCallbacks(definition: object, callbacks: LiveDurableDynamicToolCallbacks): void;
|
|
54
56
|
export declare function collectDurableDynamicToolCallbacks(input: {
|
|
55
57
|
readonly approval?: Approval<never>;
|
|
58
|
+
readonly approvalKey?: (...args: never[]) => unknown;
|
|
56
59
|
readonly execute: (...args: never[]) => unknown;
|
|
57
60
|
readonly toModelOutput?: (...args: never[]) => unknown;
|
|
58
61
|
}): LiveDurableDynamicToolCallbacks;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{resolveApprovalPolicy}from"#approval/definition.js";const STAMPED_CALLBACK=Symbol.for(`eve:durable-dynamic-callback`),DURABLE_DYNAMIC_TOOL_CALLBACKS=Symbol.for(`eve:durable-dynamic-tool-callbacks`),REGISTRY=Symbol.for(`eve:dynamic-tool-callbacks`);function getRegistry(){let e=globalThis,t=e[REGISTRY];if(t!==void 0)return t;let n=new Map;return e[REGISTRY]=n,n}function registerDurableDynamicCallback(e){let t=getRegistry(),n=t.get(e.toolName);n===void 0&&(n=new Map,t.set(e.toolName,n)),n.set(e.phase,e.callback)}function lookupDurableDynamicCallback(e,t){return getRegistry().get(e)?.get(t)}function callDurableDynamicCallback(e,t,...n){return e(t,...n)}function hasUnregisteredDurableDynamicCallbacks(e){return e.some(e=>Object.keys(e.callbacks).some(t=>lookupDurableDynamicCallback(e.name,t)===void 0))}function stampDurableDynamicCallback(e,t){return Object.defineProperty(e,STAMPED_CALLBACK,{configurable:!0,value:t}),e}function readDurableDynamicCallback(e){if(typeof e==`function`)return Reflect.get(e,STAMPED_CALLBACK)}function stampDurableDynamicToolCallbacks(e,t){Object.defineProperty(e,DURABLE_DYNAMIC_TOOL_CALLBACKS,{configurable:!0,value:t})}function collectDurableDynamicToolCallbacks(e){let t=e.approval===void 0?void 0:readDurableDynamicCallback(resolveApprovalPolicy(e.approval)),n=e.approval===void 0||typeof e.approval==`function`?void 0:readDurableDynamicCallback(e.approval.response),r=readDurableDynamicCallback(e.
|
|
1
|
+
import{resolveApprovalPolicy}from"#approval/definition.js";const STAMPED_CALLBACK=Symbol.for(`eve:durable-dynamic-callback`),DURABLE_DYNAMIC_TOOL_CALLBACKS=Symbol.for(`eve:durable-dynamic-tool-callbacks`),REGISTRY=Symbol.for(`eve:dynamic-tool-callbacks`);function getRegistry(){let e=globalThis,t=e[REGISTRY];if(t!==void 0)return t;let n=new Map;return e[REGISTRY]=n,n}function registerDurableDynamicCallback(e){let t=getRegistry(),n=t.get(e.toolName);n===void 0&&(n=new Map,t.set(e.toolName,n)),n.set(e.phase,e.callback)}function lookupDurableDynamicCallback(e,t){return getRegistry().get(e)?.get(t)}function callDurableDynamicCallback(e,t,...n){return e(t,...n)}function hasUnregisteredDurableDynamicCallbacks(e){return e.some(e=>Object.keys(e.callbacks).some(t=>lookupDurableDynamicCallback(e.name,t)===void 0))}function stampDurableDynamicCallback(e,t){return Object.defineProperty(e,STAMPED_CALLBACK,{configurable:!0,value:t}),e}function readDurableDynamicCallback(e){if(typeof e==`function`)return Reflect.get(e,STAMPED_CALLBACK)}function stampDurableDynamicToolCallbacks(e,t){Object.defineProperty(e,DURABLE_DYNAMIC_TOOL_CALLBACKS,{configurable:!0,value:t})}function collectDurableDynamicToolCallbacks(e){let t=e.approval===void 0?void 0:readDurableDynamicCallback(resolveApprovalPolicy(e.approval)),n=e.approval===void 0||typeof e.approval==`function`?void 0:readDurableDynamicCallback(e.approval.response),r=readDurableDynamicCallback(e.approvalKey),i=readDurableDynamicCallback(e.execute),a=readDurableDynamicCallback(e.toModelOutput),o={};return i!==void 0&&(o.execute=i),r!==void 0&&(o.approvalKey=r),t!==void 0&&(o.approvalRequest=t),n!==void 0&&(o.approvalResponse=n),a!==void 0&&(o.toModelOutput=a),o}function readDurableDynamicToolCallbacks(e){return e[DURABLE_DYNAMIC_TOOL_CALLBACKS]}export{DURABLE_DYNAMIC_TOOL_CALLBACKS,callDurableDynamicCallback,collectDurableDynamicToolCallbacks,hasUnregisteredDurableDynamicCallbacks,lookupDurableDynamicCallback,readDurableDynamicCallback,readDurableDynamicToolCallbacks,registerDurableDynamicCallback,stampDurableDynamicCallback,stampDurableDynamicToolCallbacks};
|
|
@@ -29,6 +29,8 @@ export interface DynamicToolEntry<TInput = Record<string, unknown>, TOutput = an
|
|
|
29
29
|
* use the same durable descriptor boundary as `execute` and `toModelOutput`.
|
|
30
30
|
*/
|
|
31
31
|
readonly approval?: Approval;
|
|
32
|
+
/** Derives the input-scoped key recorded when this tool is approved. */
|
|
33
|
+
readonly approvalKey?: (toolInput: Readonly<Record<string, unknown>>) => string;
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
36
|
* A resolved tool set: keys are entry identifiers, values are
|
package/dist/src/vue/index.js
CHANGED
package/docs/channels/slack.mdx
CHANGED
|
@@ -451,6 +451,8 @@ events: {
|
|
|
451
451
|
},
|
|
452
452
|
```
|
|
453
453
|
|
|
454
|
+
The private authorization button uses the label **Sign in**, so long connection display names do not make the button invalid. The public status identifies the connection.
|
|
455
|
+
|
|
454
456
|
### Proactive sessions
|
|
455
457
|
|
|
456
458
|
Start a session without an inbound message through `ctx.to(slack, target).send(message, { auth })` from another channel, or `to(slack, target).send(message, { auth })` from a schedule `run` handler. The proactive target shape is `{ channelId, installationTeamId?, threadTs?, initialMessage? }`. Set `installationTeamId` to the app installation workspace when a function-form bot token must select an installation. This sends turn input to the agent; it is not a direct Slack post.
|