@keystrokehq/keystroke 0.0.99 → 0.0.101
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/dist/action.cjs +1 -1
- package/dist/action.mjs +1 -1
- package/dist/agent.cjs +5 -5
- package/dist/agent.cjs.map +1 -1
- package/dist/agent.d.cts +3 -274
- package/dist/agent.d.mts +3 -274
- package/dist/agent.mjs +5 -5
- package/dist/agent.mjs.map +1 -1
- package/dist/credentials.cjs +1 -1
- package/dist/credentials.mjs +1 -1
- package/dist/{dist-B1fqDXYa.mjs → dist-CAGgGvND.mjs} +41 -8
- package/dist/dist-CAGgGvND.mjs.map +1 -0
- package/dist/{dist-T7a5DjzV.cjs → dist-DG2RS68d.cjs} +41 -8
- package/dist/dist-DG2RS68d.cjs.map +1 -0
- package/dist/{dist-ByV6mHKd.cjs → dist-DJhg5KTL.cjs} +120 -41
- package/dist/{dist-ByV6mHKd.cjs.map → dist-DJhg5KTL.cjs.map} +1 -1
- package/dist/{dist-CxaI84Ch.cjs → dist-DKGeSeMa.cjs} +3 -3
- package/dist/{dist-CxaI84Ch.cjs.map → dist-DKGeSeMa.cjs.map} +1 -1
- package/dist/{dist-BML_gJSh.mjs → dist-DzfOPx7X.mjs} +115 -42
- package/dist/{dist-BML_gJSh.mjs.map → dist-DzfOPx7X.mjs.map} +1 -1
- package/dist/{dist-CiaGdqFg.mjs → dist-cDEt5yzO.mjs} +3 -3
- package/dist/{dist-CiaGdqFg.mjs.map → dist-cDEt5yzO.mjs.map} +1 -1
- package/dist/index-CBgXyNH2.d.mts +275 -0
- package/dist/index-CBgXyNH2.d.mts.map +1 -0
- package/dist/index-CiuCYKLw.d.cts.map +1 -1
- package/dist/index-CiuCYKLw.d.mts.map +1 -1
- package/dist/index-L5a2mf72.d.cts +275 -0
- package/dist/index-L5a2mf72.d.cts.map +1 -0
- package/dist/{mistral-BLRy436m.cjs → mistral-9mfXttcp.cjs} +2 -2
- package/dist/{mistral-BLRy436m.cjs.map → mistral-9mfXttcp.cjs.map} +1 -1
- package/dist/{mistral-CI7CQc_C.mjs → mistral-CGHbHFQG.mjs} +2 -2
- package/dist/{mistral-CI7CQc_C.mjs.map → mistral-CGHbHFQG.mjs.map} +1 -1
- package/dist/{sse-Bxvdniu5.mjs → sse-CcbP5P9d.mjs} +2 -2
- package/dist/{sse-Bxvdniu5.mjs.map → sse-CcbP5P9d.mjs.map} +1 -1
- package/dist/{sse-DGaTY14k.cjs → sse-DSHssCpN.cjs} +2 -2
- package/dist/{sse-DGaTY14k.cjs.map → sse-DSHssCpN.cjs.map} +1 -1
- package/dist/trigger.cjs +67 -30
- package/dist/trigger.cjs.map +1 -1
- package/dist/trigger.d.cts +37 -22
- package/dist/trigger.d.cts.map +1 -1
- package/dist/trigger.d.mts +37 -22
- package/dist/trigger.d.mts.map +1 -1
- package/dist/trigger.mjs +65 -31
- package/dist/trigger.mjs.map +1 -1
- package/dist/workflow.cjs +1 -1
- package/dist/workflow.mjs +1 -1
- package/package.json +1 -1
- package/dist/agent.d.cts.map +0 -1
- package/dist/agent.d.mts.map +0 -1
- package/dist/dist-B1fqDXYa.mjs.map +0 -1
- package/dist/dist-T7a5DjzV.cjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_dist = require("./dist-CLqJza2Y.cjs");
|
|
2
|
-
const require_dist$1 = require("./dist-
|
|
3
|
-
const require_dist$2 = require("./dist-
|
|
2
|
+
const require_dist$1 = require("./dist-DG2RS68d.cjs");
|
|
3
|
+
const require_dist$2 = require("./dist-DJhg5KTL.cjs");
|
|
4
4
|
let zod = require("zod");
|
|
5
5
|
let node_async_hooks = require("node:async_hooks");
|
|
6
6
|
//#region ../workflow/dist/index.mjs
|
|
@@ -490,4 +490,4 @@ Object.defineProperty(exports, "serializeWorkflowError", {
|
|
|
490
490
|
}
|
|
491
491
|
});
|
|
492
492
|
|
|
493
|
-
//# sourceMappingURL=dist-
|
|
493
|
+
//# sourceMappingURL=dist-DKGeSeMa.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dist-CxaI84Ch.cjs","names":["z","SandboxDefinitionSchema","normalizeCredentialList","withSpan","logSystem","captureConsole","getActionCredentialRequirements","executeAction","resolveActionCredentials","AsyncLocalStorage","registerWorkflowRunGetter"],"sources":["../../workflow/dist/index.mjs"],"sourcesContent":["import { z } from \"zod\";\nimport { SandboxDefinitionSchema } from \"@keystrokehq/sandbox\";\nimport { captureConsole, logSystem, withSpan } from \"@keystrokehq/tracing\";\nimport { executeAction, getActionCredentialRequirements, normalizeCredentialList, registerWorkflowRunGetter } from \"@keystrokehq/action\";\nimport { resolveActionCredentials } from \"@keystrokehq/credentials\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n//#region src/workflow-definition.ts\nconst zodSchema = z.custom((v) => v instanceof z.ZodType, \"must be a Zod schema\");\n/** Runtime validation for an unbranded workflow definition. */\nconst workflowCoreSchema = z.object({\n\tkey: z.string().trim().min(1),\n\tname: z.string().optional(),\n\tdescription: z.string().optional(),\n\tsubscription: z.object({ mode: z.enum([\"system\", \"subscribable\"]).optional() }).optional(),\n\tsandbox: SandboxDefinitionSchema.optional(),\n\tinput: zodSchema,\n\toutput: zodSchema,\n\trun: z.function()\n});\nconst WORKFLOW = Symbol.for(\"keystroke.workflow\");\n/**\n* Validates brand + shape via `workflowCoreSchema` so discovery and guards\n* reject malformed definitions.\n*/\nfunction isWorkflow(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (!(WORKFLOW in value) || value[WORKFLOW] !== true) return false;\n\treturn workflowCoreSchema.safeParse(value).success;\n}\n//#endregion\n//#region src/define-workflow.ts\nfunction defineWorkflow(def) {\n\tconst result = workflowCoreSchema.safeParse(def);\n\tif (!result.success) throw new Error(`Invalid workflow definition: ${formatIssues(result.error.issues)}`);\n\treturn {\n\t\t...result.data,\n\t\t[WORKFLOW]: true\n\t};\n}\nfunction formatIssues(issues) {\n\treturn issues.map((issue) => {\n\t\treturn `${issue.path.length > 0 ? `${issue.path.join(\".\")}: ` : \"\"}${issue.message}`;\n\t}).join(\"; \");\n}\n//#endregion\n//#region src/replay/error.ts\nfunction serializeWorkflowError(error) {\n\tif (error instanceof Error) return {\n\t\tname: error.name,\n\t\tmessage: error.message\n\t};\n\treturn { message: String(error) };\n}\n/** Rebuild an Error from a recorded error so replay re-raises the same failure. */\nfunction deserializeWorkflowError(data) {\n\tconst serialized = data;\n\tconst error = new Error(serialized?.message ?? \"Workflow step failed\");\n\tif (serialized?.name) error.name = serialized.name;\n\treturn error;\n}\n//#endregion\n//#region src/replay/duration.ts\nconst UNIT_MS = {\n\tms: 1,\n\ts: 1e3,\n\tm: 6e4,\n\th: 36e5,\n\td: 864e5\n};\n/** Resolve a sleep duration to an absolute resume time. */\nfunction resolveResumeAt(duration, now = /* @__PURE__ */ new Date()) {\n\tif (duration instanceof Date) return duration;\n\tif (typeof duration === \"number\") return new Date(now.getTime() + Math.max(0, duration));\n\treturn new Date(now.getTime() + parseDurationToMs(duration));\n}\nfunction parseDurationToMs(value) {\n\tconst match = /^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h|d)$/.exec(value.trim());\n\tif (!match) throw new Error(`Invalid sleep duration \"${value}\". Use a number of ms, a Date, or a string like \"5s\", \"10m\", \"1h\".`);\n\tconst amount = Number(match[1]);\n\tconst unit = match[2];\n\treturn Math.round(amount * UNIT_MS[unit]);\n}\n//#endregion\n//#region src/replay/events-consumer.ts\n/** Indexes replay events by correlationId for O(1) cache-hit checks during replay. */\nvar EventsConsumer = class {\n\tbyCorrelationId = /* @__PURE__ */ new Map();\n\tconstructor(events) {\n\t\tfor (const event of events) {\n\t\t\tif (!event.correlationId) continue;\n\t\t\tconst list = this.byCorrelationId.get(event.correlationId);\n\t\t\tif (list) list.push(event);\n\t\t\telse this.byCorrelationId.set(event.correlationId, [event]);\n\t\t}\n\t}\n\tevents(correlationId) {\n\t\treturn this.byCorrelationId.get(correlationId) ?? [];\n\t}\n\thasEventType(correlationId, type) {\n\t\treturn this.events(correlationId).some((event) => event.type === type);\n\t}\n\t/**\n\t* Cache lookup for a step. Returns the recorded output on a `step_completed`,\n\t* re-raises the recorded error on a terminal `step_failed` (so a permanently\n\t* failed step is not re-executed), and otherwise reports a miss — including\n\t* when only `step_retrying` events exist (the step re-runs on the next pass).\n\t*/\n\tgetStepResult(correlationId) {\n\t\tconst events = this.events(correlationId);\n\t\tconst failed = events.find((event) => event.type === \"step_failed\");\n\t\tif (failed) throw deserializeWorkflowError(failed.data);\n\t\tconst completed = events.find((event) => event.type === \"step_completed\");\n\t\tif (completed) return {\n\t\t\tcompleted: true,\n\t\t\tresult: completed.data\n\t\t};\n\t\treturn { completed: false };\n\t}\n\t/** Number of prior `step_retrying` events recorded for a step (= failed attempts so far). */\n\tcountRetrying(correlationId) {\n\t\treturn this.events(correlationId).filter((event) => event.type === \"step_retrying\").length;\n\t}\n\tisSleepCompleted(correlationId) {\n\t\treturn this.hasEventType(correlationId, \"sleep_completed\");\n\t}\n\t/** Returns the persisted resumeAt for a scheduled-but-not-completed sleep, if any. */\n\tgetSleepResumeAt(correlationId) {\n\t\tconst scheduled = this.events(correlationId).find((event) => event.type === \"sleep_scheduled\");\n\t\tif (!scheduled) return;\n\t\tconst data = scheduled.data;\n\t\treturn data?.resumeAt ? new Date(data.resumeAt) : void 0;\n\t}\n\tgetHookToken(correlationId) {\n\t\treturn (this.events(correlationId).find((event) => event.type === \"hook_created\")?.data)?.token;\n\t}\n\tgetHookResult(correlationId) {\n\t\tconst resumed = this.events(correlationId).find((event) => event.type === \"hook_resumed\");\n\t\tif (!resumed) return { resolved: false };\n\t\treturn {\n\t\t\tresolved: true,\n\t\t\tpayload: resumed.data?.payload\n\t\t};\n\t}\n};\n//#endregion\n//#region src/replay/suspension.ts\n/** A promise that never settles — returned by a suspending primitive so the body parks. */\nfunction createPendingPromise() {\n\treturn new Promise(() => {});\n}\n/**\n* Collects pending items requested within a single tick and resolves once, so\n* parallel suspensions (e.g. Promise.all of two sleeps) batch into one suspension.\n*/\nvar SuspensionCoordinator = class {\n\titems = /* @__PURE__ */ new Map();\n\tscheduled = false;\n\tresolve;\n\tpromise;\n\tconstructor() {\n\t\tthis.promise = new Promise((resolve) => {\n\t\t\tthis.resolve = resolve;\n\t\t});\n\t}\n\trequest(item) {\n\t\tthis.items.set(item.correlationId, item);\n\t\tif (!this.scheduled) {\n\t\t\tthis.scheduled = true;\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthis.resolve([...this.items.values()]);\n\t\t\t});\n\t\t}\n\t}\n\twaitForSuspension() {\n\t\treturn this.promise;\n\t}\n};\n//#endregion\n//#region src/replay/replay-context.ts\nfunction createReplayState(params) {\n\treturn {\n\t\trunId: params.runId,\n\t\tconsumer: params.consumer,\n\t\tcoordinator: params.coordinator,\n\t\teventLog: params.eventLog,\n\t\tnewEvents: [],\n\t\tnow: params.now ?? /* @__PURE__ */ new Date(),\n\t\thookBaseUrl: params.hookBaseUrl,\n\t\tsleepCounter: 0,\n\t\thookCounter: 0,\n\t\tstepOccurrences: /* @__PURE__ */ new Map(),\n\t\tstepCorrelationIds: /* @__PURE__ */ new Set()\n\t};\n}\n/**\n* Allocate the correlation id for a step. An explicit `.stepId(x)` maps to\n* `step:x` (and must be unique within a run); otherwise the key is\n* `step:<actionKey>#<occurrence>` so that two calls to the same action get\n* distinct, replay-stable ids and inserting an unrelated call never shifts the\n* ids of later calls (unlike a single global ordinal).\n*/\nfunction nextStepCorrelationId(state, actionKey, explicitId) {\n\tif (explicitId !== void 0) {\n\t\tconst correlationId = `step:${explicitId}`;\n\t\tif (state.stepCorrelationIds.has(correlationId)) throw new Error(`Duplicate step id \"${explicitId}\" in workflow run ${state.runId}`);\n\t\tstate.stepCorrelationIds.add(correlationId);\n\t\treturn correlationId;\n\t}\n\tconst occurrence = state.stepOccurrences.get(actionKey) ?? 0;\n\tstate.stepOccurrences.set(actionKey, occurrence + 1);\n\tconst correlationId = `step:${actionKey}#${occurrence}`;\n\tstate.stepCorrelationIds.add(correlationId);\n\treturn correlationId;\n}\nfunction createSleep(state) {\n\treturn function sleep(duration) {\n\t\tconst correlationId = `sleep#${state.sleepCounter++}`;\n\t\tif (state.consumer.isSleepCompleted(correlationId)) return Promise.resolve();\n\t\tconst scheduledResumeAt = state.consumer.getSleepResumeAt(correlationId);\n\t\tconst resumeAt = scheduledResumeAt ?? resolveResumeAt(duration, state.now);\n\t\tif (scheduledResumeAt && resumeAt.getTime() <= state.now.getTime()) {\n\t\t\tstate.newEvents.push({\n\t\t\t\tid: `sleep_completed:${state.runId}:${correlationId}`,\n\t\t\t\trunId: state.runId,\n\t\t\t\ttype: \"sleep_completed\",\n\t\t\t\tcorrelationId\n\t\t\t});\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\tif (!scheduledResumeAt) state.newEvents.push({\n\t\t\tid: `sleep_scheduled:${state.runId}:${correlationId}`,\n\t\t\trunId: state.runId,\n\t\t\ttype: \"sleep_scheduled\",\n\t\t\tcorrelationId,\n\t\t\tdata: { resumeAt: resumeAt.toISOString() }\n\t\t});\n\t\tstate.coordinator.request({\n\t\t\tkind: \"sleep\",\n\t\t\tcorrelationId,\n\t\t\tresumeAt\n\t\t});\n\t\treturn createPendingPromise();\n\t};\n}\nfunction createHook(state) {\n\treturn function hook(options) {\n\t\tconst correlationId = `hook#${state.hookCounter++}`;\n\t\tconst token = options?.token ?? state.consumer.getHookToken(correlationId) ?? `hook_${crypto.randomUUID()}`;\n\t\treturn {\n\t\t\ttoken,\n\t\t\tresumeUrl: state.hookBaseUrl ? `${state.hookBaseUrl}/hooks/${token}/resume` : `/hooks/${token}/resume`,\n\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\tconst result = state.consumer.getHookResult(correlationId);\n\t\t\t\tif (result.resolved) {\n\t\t\t\t\tconst payload = options?.schema ? options.schema.parse(result.payload) : result.payload;\n\t\t\t\t\treturn Promise.resolve(payload).then(onFulfilled, onRejected);\n\t\t\t\t}\n\t\t\t\tif (!state.consumer.hasEventType(correlationId, \"hook_created\")) state.newEvents.push({\n\t\t\t\t\tid: `hook_created:${state.runId}:${correlationId}`,\n\t\t\t\t\trunId: state.runId,\n\t\t\t\t\ttype: \"hook_created\",\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\tdata: { token }\n\t\t\t\t});\n\t\t\t\tstate.coordinator.request({\n\t\t\t\t\tkind: \"hook\",\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\ttoken\n\t\t\t\t});\n\t\t\t\treturn createPendingPromise().then(onFulfilled, onRejected);\n\t\t\t}\n\t\t};\n\t};\n}\n//#endregion\n//#region src/create-action-runner.ts\nfunction withCredentialChainOverride(requirements, chain) {\n\tif (!requirements || !chain) return requirements;\n\treturn normalizeCredentialList(requirements).map((requirement) => ({\n\t\t...requirement,\n\t\tchain\n\t}));\n}\n/**\n* Builds the per-run action runner. Each action call resolves a stable\n* `correlation_id`, short-circuits from the durable event log on a cache hit,\n* and otherwise executes and appends `step_completed` immediately (preserving\n* per-step crash durability). A thrown step appends `step_retrying` (non-fatal,\n* re-run on the next attempt) and rethrows; the terminal `step_failed` is\n* written by the job handler once the queue exhausts retries.\n*/\nfunction createActionRunner(state, options = {}) {\n\tconst { runId, consumer, eventLog } = state;\n\treturn async (action, input, runOptions) => {\n\t\tconst correlationId = nextStepCorrelationId(state, action.key, runOptions?.id);\n\t\tconst cached = consumer.getStepResult(correlationId);\n\t\tif (cached.completed) {\n\t\t\tawait withSpan({\n\t\t\t\tkind: \"action\",\n\t\t\t\tname: action.key,\n\t\t\t\trefId: `${runId}:${correlationId}`,\n\t\t\t\tmetadata: {\n\t\t\t\t\trunId,\n\t\t\t\t\tactionKey: action.key,\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\treplayed: true\n\t\t\t\t}\n\t\t\t}, async () => {\n\t\t\t\tawait logSystem(\"info\", \"action replayed from checkpoint\", {\n\t\t\t\t\trunId,\n\t\t\t\t\tactionKey: action.key,\n\t\t\t\t\tcorrelationId\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn action.output.parse(cached.result);\n\t\t}\n\t\treturn withSpan({\n\t\t\tkind: \"action\",\n\t\t\tname: action.key,\n\t\t\trefId: `${runId}:${correlationId}`,\n\t\t\tmetadata: {\n\t\t\t\trunId,\n\t\t\t\tactionKey: action.key,\n\t\t\t\tcorrelationId\n\t\t\t}\n\t\t}, async () => captureConsole(async () => {\n\t\t\ttry {\n\t\t\t\tconst requirements = withCredentialChainOverride(getActionCredentialRequirements(action), runOptions?.credentialChain);\n\t\t\t\tconst contextOverride = runOptions?.credentialSelection ? { selection: runOptions.credentialSelection } : void 0;\n\t\t\t\tconst validatedOutput = await executeAction(action, input, requirements?.length ? await resolveActionCredentials(requirements, {\n\t\t\t\t\tresolveCredentials: options.resolveCredentials,\n\t\t\t\t\tcontext: options.credentialContext,\n\t\t\t\t\toauthAdapter: options.oauthAdapter,\n\t\t\t\t\tconsumer: {\n\t\t\t\t\t\tkind: \"action\",\n\t\t\t\t\t\tname: action.key\n\t\t\t\t\t},\n\t\t\t\t\tcontextOverride\n\t\t\t\t}) : {});\n\t\t\t\tawait eventLog.append({\n\t\t\t\t\tid: `step_completed:${runId}:${correlationId}`,\n\t\t\t\t\trunId,\n\t\t\t\t\ttype: \"step_completed\",\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\tdata: validatedOutput\n\t\t\t\t});\n\t\t\t\treturn validatedOutput;\n\t\t\t} catch (error) {\n\t\t\t\tconst attempt = consumer.countRetrying(correlationId);\n\t\t\t\tawait eventLog.append({\n\t\t\t\t\tid: `step_retrying:${runId}:${correlationId}:${attempt}`,\n\t\t\t\t\trunId,\n\t\t\t\t\ttype: \"step_retrying\",\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\tdata: serializeWorkflowError(error)\n\t\t\t\t});\n\t\t\t\tstate.failedCorrelationId = correlationId;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}));\n\t};\n}\n//#endregion\n//#region src/run-context.ts\nconst storage = new AsyncLocalStorage();\nregisterWorkflowRunGetter(() => {\n\tconst store = storage.getStore();\n\tif (!store) return;\n\treturn { actionRunner: store.actionRunner };\n});\nfunction runWithWorkflowContext(store, fn) {\n\treturn storage.run(store, fn);\n}\n//#endregion\n//#region src/replay/memory-event-log.ts\n/** In-memory durable log for inline execution and tests. */\nvar MemoryEventLog = class {\n\tevents = [];\n\tids = /* @__PURE__ */ new Set();\n\tasync append(event) {\n\t\tconst id = event.id ?? crypto.randomUUID();\n\t\tif (this.ids.has(id)) return false;\n\t\tthis.ids.add(id);\n\t\tthis.events.push({\n\t\t\tid,\n\t\t\trunId: event.runId,\n\t\t\tseq: this.events.length,\n\t\t\ttype: event.type,\n\t\t\tcorrelationId: event.correlationId ?? null,\n\t\t\tdata: event.data ?? null\n\t\t});\n\t\treturn true;\n\t}\n\tasync listReplay(runId) {\n\t\treturn this.events.filter((event) => event.runId === runId).map((event) => ({ ...event }));\n\t}\n};\n//#endregion\n//#region src/execute-workflow.ts\n/**\n* The single way to run a workflow: replay its event log from the top, execute\n* un-cached primitives, and either complete/fail or suspend at the first\n* un-satisfied sleep/hook. New events (sleep_scheduled/sleep_completed/\n* hook_created/run_completed/run_failed) are flushed before returning.\n*\n* Durability comes entirely from the log — a suspended run resumes by calling\n* this again with the same `runId` and event log once the sleep is due or the\n* hook is resumed.\n*/\nasync function executeWorkflow(workflow, input, options = {}) {\n\tconst runId = options.runId ?? crypto.randomUUID();\n\tconst eventLog = options.eventLog ?? new MemoryEventLog();\n\tconst consumer = new EventsConsumer(await eventLog.listReplay(runId));\n\tconst coordinator = new SuspensionCoordinator();\n\tconst state = createReplayState({\n\t\trunId,\n\t\tconsumer,\n\t\tcoordinator,\n\t\teventLog,\n\t\thookBaseUrl: options.hookBaseUrl,\n\t\tnow: options.now\n\t});\n\tconst actionRunner = createActionRunner(state, {\n\t\tresolveCredentials: options.resolveCredentials,\n\t\tcredentialContext: options.credentialContext,\n\t\toauthAdapter: options.oauthAdapter\n\t});\n\tconst ctx = {\n\t\trunId,\n\t\tsleep: createSleep(state),\n\t\thook: createHook(state),\n\t\t...options.context\n\t};\n\tconst validatedInput = workflow.input.parse(input);\n\tconst bodyPromise = runWithWorkflowContext({\n\t\tactionRunner,\n\t\trunId\n\t}, () => captureConsole(async () => workflow.run(validatedInput, ctx)));\n\tconst outcome = await Promise.race([bodyPromise.then((output) => ({\n\t\ttype: \"done\",\n\t\toutput\n\t}), (error) => ({\n\t\ttype: \"error\",\n\t\terror\n\t})), coordinator.waitForSuspension().then((items) => ({\n\t\ttype: \"suspended\",\n\t\titems\n\t}))]);\n\tlet result;\n\tif (outcome.type === \"suspended\") {\n\t\tbodyPromise.catch(() => {});\n\t\tresult = {\n\t\t\tstatus: \"suspended\",\n\t\t\titems: outcome.items\n\t\t};\n\t} else if (outcome.type === \"done\") {\n\t\tconst output = workflow.output.parse(outcome.output);\n\t\tstate.newEvents.push({\n\t\t\tid: `run_completed:${runId}`,\n\t\t\trunId,\n\t\t\ttype: \"run_completed\",\n\t\t\tdata: { output }\n\t\t});\n\t\tresult = {\n\t\t\tstatus: \"completed\",\n\t\t\toutput\n\t\t};\n\t} else result = {\n\t\tstatus: \"failed\",\n\t\terror: outcome.error,\n\t\tfailedCorrelationId: state.failedCorrelationId\n\t};\n\tfor (const event of state.newEvents) await eventLog.append(event);\n\treturn result;\n}\n//#endregion\nexport { MemoryEventLog, defineWorkflow, deserializeWorkflowError, executeWorkflow, isWorkflow, serializeWorkflowError };\n\n//# sourceMappingURL=index.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dist-DKGeSeMa.cjs","names":["z","SandboxDefinitionSchema","normalizeCredentialList","withSpan","logSystem","captureConsole","getActionCredentialRequirements","executeAction","resolveActionCredentials","AsyncLocalStorage","registerWorkflowRunGetter"],"sources":["../../workflow/dist/index.mjs"],"sourcesContent":["import { z } from \"zod\";\nimport { SandboxDefinitionSchema } from \"@keystrokehq/sandbox\";\nimport { captureConsole, logSystem, withSpan } from \"@keystrokehq/tracing\";\nimport { executeAction, getActionCredentialRequirements, normalizeCredentialList, registerWorkflowRunGetter } from \"@keystrokehq/action\";\nimport { resolveActionCredentials } from \"@keystrokehq/credentials\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n//#region src/workflow-definition.ts\nconst zodSchema = z.custom((v) => v instanceof z.ZodType, \"must be a Zod schema\");\n/** Runtime validation for an unbranded workflow definition. */\nconst workflowCoreSchema = z.object({\n\tkey: z.string().trim().min(1),\n\tname: z.string().optional(),\n\tdescription: z.string().optional(),\n\tsubscription: z.object({ mode: z.enum([\"system\", \"subscribable\"]).optional() }).optional(),\n\tsandbox: SandboxDefinitionSchema.optional(),\n\tinput: zodSchema,\n\toutput: zodSchema,\n\trun: z.function()\n});\nconst WORKFLOW = Symbol.for(\"keystroke.workflow\");\n/**\n* Validates brand + shape via `workflowCoreSchema` so discovery and guards\n* reject malformed definitions.\n*/\nfunction isWorkflow(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (!(WORKFLOW in value) || value[WORKFLOW] !== true) return false;\n\treturn workflowCoreSchema.safeParse(value).success;\n}\n//#endregion\n//#region src/define-workflow.ts\nfunction defineWorkflow(def) {\n\tconst result = workflowCoreSchema.safeParse(def);\n\tif (!result.success) throw new Error(`Invalid workflow definition: ${formatIssues(result.error.issues)}`);\n\treturn {\n\t\t...result.data,\n\t\t[WORKFLOW]: true\n\t};\n}\nfunction formatIssues(issues) {\n\treturn issues.map((issue) => {\n\t\treturn `${issue.path.length > 0 ? `${issue.path.join(\".\")}: ` : \"\"}${issue.message}`;\n\t}).join(\"; \");\n}\n//#endregion\n//#region src/replay/error.ts\nfunction serializeWorkflowError(error) {\n\tif (error instanceof Error) return {\n\t\tname: error.name,\n\t\tmessage: error.message\n\t};\n\treturn { message: String(error) };\n}\n/** Rebuild an Error from a recorded error so replay re-raises the same failure. */\nfunction deserializeWorkflowError(data) {\n\tconst serialized = data;\n\tconst error = new Error(serialized?.message ?? \"Workflow step failed\");\n\tif (serialized?.name) error.name = serialized.name;\n\treturn error;\n}\n//#endregion\n//#region src/replay/duration.ts\nconst UNIT_MS = {\n\tms: 1,\n\ts: 1e3,\n\tm: 6e4,\n\th: 36e5,\n\td: 864e5\n};\n/** Resolve a sleep duration to an absolute resume time. */\nfunction resolveResumeAt(duration, now = /* @__PURE__ */ new Date()) {\n\tif (duration instanceof Date) return duration;\n\tif (typeof duration === \"number\") return new Date(now.getTime() + Math.max(0, duration));\n\treturn new Date(now.getTime() + parseDurationToMs(duration));\n}\nfunction parseDurationToMs(value) {\n\tconst match = /^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h|d)$/.exec(value.trim());\n\tif (!match) throw new Error(`Invalid sleep duration \"${value}\". Use a number of ms, a Date, or a string like \"5s\", \"10m\", \"1h\".`);\n\tconst amount = Number(match[1]);\n\tconst unit = match[2];\n\treturn Math.round(amount * UNIT_MS[unit]);\n}\n//#endregion\n//#region src/replay/events-consumer.ts\n/** Indexes replay events by correlationId for O(1) cache-hit checks during replay. */\nvar EventsConsumer = class {\n\tbyCorrelationId = /* @__PURE__ */ new Map();\n\tconstructor(events) {\n\t\tfor (const event of events) {\n\t\t\tif (!event.correlationId) continue;\n\t\t\tconst list = this.byCorrelationId.get(event.correlationId);\n\t\t\tif (list) list.push(event);\n\t\t\telse this.byCorrelationId.set(event.correlationId, [event]);\n\t\t}\n\t}\n\tevents(correlationId) {\n\t\treturn this.byCorrelationId.get(correlationId) ?? [];\n\t}\n\thasEventType(correlationId, type) {\n\t\treturn this.events(correlationId).some((event) => event.type === type);\n\t}\n\t/**\n\t* Cache lookup for a step. Returns the recorded output on a `step_completed`,\n\t* re-raises the recorded error on a terminal `step_failed` (so a permanently\n\t* failed step is not re-executed), and otherwise reports a miss — including\n\t* when only `step_retrying` events exist (the step re-runs on the next pass).\n\t*/\n\tgetStepResult(correlationId) {\n\t\tconst events = this.events(correlationId);\n\t\tconst failed = events.find((event) => event.type === \"step_failed\");\n\t\tif (failed) throw deserializeWorkflowError(failed.data);\n\t\tconst completed = events.find((event) => event.type === \"step_completed\");\n\t\tif (completed) return {\n\t\t\tcompleted: true,\n\t\t\tresult: completed.data\n\t\t};\n\t\treturn { completed: false };\n\t}\n\t/** Number of prior `step_retrying` events recorded for a step (= failed attempts so far). */\n\tcountRetrying(correlationId) {\n\t\treturn this.events(correlationId).filter((event) => event.type === \"step_retrying\").length;\n\t}\n\tisSleepCompleted(correlationId) {\n\t\treturn this.hasEventType(correlationId, \"sleep_completed\");\n\t}\n\t/** Returns the persisted resumeAt for a scheduled-but-not-completed sleep, if any. */\n\tgetSleepResumeAt(correlationId) {\n\t\tconst scheduled = this.events(correlationId).find((event) => event.type === \"sleep_scheduled\");\n\t\tif (!scheduled) return;\n\t\tconst data = scheduled.data;\n\t\treturn data?.resumeAt ? new Date(data.resumeAt) : void 0;\n\t}\n\tgetHookToken(correlationId) {\n\t\treturn (this.events(correlationId).find((event) => event.type === \"hook_created\")?.data)?.token;\n\t}\n\tgetHookResult(correlationId) {\n\t\tconst resumed = this.events(correlationId).find((event) => event.type === \"hook_resumed\");\n\t\tif (!resumed) return { resolved: false };\n\t\treturn {\n\t\t\tresolved: true,\n\t\t\tpayload: resumed.data?.payload\n\t\t};\n\t}\n};\n//#endregion\n//#region src/replay/suspension.ts\n/** A promise that never settles — returned by a suspending primitive so the body parks. */\nfunction createPendingPromise() {\n\treturn new Promise(() => {});\n}\n/**\n* Collects pending items requested within a single tick and resolves once, so\n* parallel suspensions (e.g. Promise.all of two sleeps) batch into one suspension.\n*/\nvar SuspensionCoordinator = class {\n\titems = /* @__PURE__ */ new Map();\n\tscheduled = false;\n\tresolve;\n\tpromise;\n\tconstructor() {\n\t\tthis.promise = new Promise((resolve) => {\n\t\t\tthis.resolve = resolve;\n\t\t});\n\t}\n\trequest(item) {\n\t\tthis.items.set(item.correlationId, item);\n\t\tif (!this.scheduled) {\n\t\t\tthis.scheduled = true;\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthis.resolve([...this.items.values()]);\n\t\t\t});\n\t\t}\n\t}\n\twaitForSuspension() {\n\t\treturn this.promise;\n\t}\n};\n//#endregion\n//#region src/replay/replay-context.ts\nfunction createReplayState(params) {\n\treturn {\n\t\trunId: params.runId,\n\t\tconsumer: params.consumer,\n\t\tcoordinator: params.coordinator,\n\t\teventLog: params.eventLog,\n\t\tnewEvents: [],\n\t\tnow: params.now ?? /* @__PURE__ */ new Date(),\n\t\thookBaseUrl: params.hookBaseUrl,\n\t\tsleepCounter: 0,\n\t\thookCounter: 0,\n\t\tstepOccurrences: /* @__PURE__ */ new Map(),\n\t\tstepCorrelationIds: /* @__PURE__ */ new Set()\n\t};\n}\n/**\n* Allocate the correlation id for a step. An explicit `.stepId(x)` maps to\n* `step:x` (and must be unique within a run); otherwise the key is\n* `step:<actionKey>#<occurrence>` so that two calls to the same action get\n* distinct, replay-stable ids and inserting an unrelated call never shifts the\n* ids of later calls (unlike a single global ordinal).\n*/\nfunction nextStepCorrelationId(state, actionKey, explicitId) {\n\tif (explicitId !== void 0) {\n\t\tconst correlationId = `step:${explicitId}`;\n\t\tif (state.stepCorrelationIds.has(correlationId)) throw new Error(`Duplicate step id \"${explicitId}\" in workflow run ${state.runId}`);\n\t\tstate.stepCorrelationIds.add(correlationId);\n\t\treturn correlationId;\n\t}\n\tconst occurrence = state.stepOccurrences.get(actionKey) ?? 0;\n\tstate.stepOccurrences.set(actionKey, occurrence + 1);\n\tconst correlationId = `step:${actionKey}#${occurrence}`;\n\tstate.stepCorrelationIds.add(correlationId);\n\treturn correlationId;\n}\nfunction createSleep(state) {\n\treturn function sleep(duration) {\n\t\tconst correlationId = `sleep#${state.sleepCounter++}`;\n\t\tif (state.consumer.isSleepCompleted(correlationId)) return Promise.resolve();\n\t\tconst scheduledResumeAt = state.consumer.getSleepResumeAt(correlationId);\n\t\tconst resumeAt = scheduledResumeAt ?? resolveResumeAt(duration, state.now);\n\t\tif (scheduledResumeAt && resumeAt.getTime() <= state.now.getTime()) {\n\t\t\tstate.newEvents.push({\n\t\t\t\tid: `sleep_completed:${state.runId}:${correlationId}`,\n\t\t\t\trunId: state.runId,\n\t\t\t\ttype: \"sleep_completed\",\n\t\t\t\tcorrelationId\n\t\t\t});\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\tif (!scheduledResumeAt) state.newEvents.push({\n\t\t\tid: `sleep_scheduled:${state.runId}:${correlationId}`,\n\t\t\trunId: state.runId,\n\t\t\ttype: \"sleep_scheduled\",\n\t\t\tcorrelationId,\n\t\t\tdata: { resumeAt: resumeAt.toISOString() }\n\t\t});\n\t\tstate.coordinator.request({\n\t\t\tkind: \"sleep\",\n\t\t\tcorrelationId,\n\t\t\tresumeAt\n\t\t});\n\t\treturn createPendingPromise();\n\t};\n}\nfunction createHook(state) {\n\treturn function hook(options) {\n\t\tconst correlationId = `hook#${state.hookCounter++}`;\n\t\tconst token = options?.token ?? state.consumer.getHookToken(correlationId) ?? `hook_${crypto.randomUUID()}`;\n\t\treturn {\n\t\t\ttoken,\n\t\t\tresumeUrl: state.hookBaseUrl ? `${state.hookBaseUrl}/hooks/${token}/resume` : `/hooks/${token}/resume`,\n\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\tconst result = state.consumer.getHookResult(correlationId);\n\t\t\t\tif (result.resolved) {\n\t\t\t\t\tconst payload = options?.schema ? options.schema.parse(result.payload) : result.payload;\n\t\t\t\t\treturn Promise.resolve(payload).then(onFulfilled, onRejected);\n\t\t\t\t}\n\t\t\t\tif (!state.consumer.hasEventType(correlationId, \"hook_created\")) state.newEvents.push({\n\t\t\t\t\tid: `hook_created:${state.runId}:${correlationId}`,\n\t\t\t\t\trunId: state.runId,\n\t\t\t\t\ttype: \"hook_created\",\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\tdata: { token }\n\t\t\t\t});\n\t\t\t\tstate.coordinator.request({\n\t\t\t\t\tkind: \"hook\",\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\ttoken\n\t\t\t\t});\n\t\t\t\treturn createPendingPromise().then(onFulfilled, onRejected);\n\t\t\t}\n\t\t};\n\t};\n}\n//#endregion\n//#region src/create-action-runner.ts\nfunction withCredentialChainOverride(requirements, chain) {\n\tif (!requirements || !chain) return requirements;\n\treturn normalizeCredentialList(requirements).map((requirement) => ({\n\t\t...requirement,\n\t\tchain\n\t}));\n}\n/**\n* Builds the per-run action runner. Each action call resolves a stable\n* `correlation_id`, short-circuits from the durable event log on a cache hit,\n* and otherwise executes and appends `step_completed` immediately (preserving\n* per-step crash durability). A thrown step appends `step_retrying` (non-fatal,\n* re-run on the next attempt) and rethrows; the terminal `step_failed` is\n* written by the job handler once the queue exhausts retries.\n*/\nfunction createActionRunner(state, options = {}) {\n\tconst { runId, consumer, eventLog } = state;\n\treturn async (action, input, runOptions) => {\n\t\tconst correlationId = nextStepCorrelationId(state, action.key, runOptions?.id);\n\t\tconst cached = consumer.getStepResult(correlationId);\n\t\tif (cached.completed) {\n\t\t\tawait withSpan({\n\t\t\t\tkind: \"action\",\n\t\t\t\tname: action.key,\n\t\t\t\trefId: `${runId}:${correlationId}`,\n\t\t\t\tmetadata: {\n\t\t\t\t\trunId,\n\t\t\t\t\tactionKey: action.key,\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\treplayed: true\n\t\t\t\t}\n\t\t\t}, async () => {\n\t\t\t\tawait logSystem(\"info\", \"action replayed from checkpoint\", {\n\t\t\t\t\trunId,\n\t\t\t\t\tactionKey: action.key,\n\t\t\t\t\tcorrelationId\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn action.output.parse(cached.result);\n\t\t}\n\t\treturn withSpan({\n\t\t\tkind: \"action\",\n\t\t\tname: action.key,\n\t\t\trefId: `${runId}:${correlationId}`,\n\t\t\tmetadata: {\n\t\t\t\trunId,\n\t\t\t\tactionKey: action.key,\n\t\t\t\tcorrelationId\n\t\t\t}\n\t\t}, async () => captureConsole(async () => {\n\t\t\ttry {\n\t\t\t\tconst requirements = withCredentialChainOverride(getActionCredentialRequirements(action), runOptions?.credentialChain);\n\t\t\t\tconst contextOverride = runOptions?.credentialSelection ? { selection: runOptions.credentialSelection } : void 0;\n\t\t\t\tconst validatedOutput = await executeAction(action, input, requirements?.length ? await resolveActionCredentials(requirements, {\n\t\t\t\t\tresolveCredentials: options.resolveCredentials,\n\t\t\t\t\tcontext: options.credentialContext,\n\t\t\t\t\toauthAdapter: options.oauthAdapter,\n\t\t\t\t\tconsumer: {\n\t\t\t\t\t\tkind: \"action\",\n\t\t\t\t\t\tname: action.key\n\t\t\t\t\t},\n\t\t\t\t\tcontextOverride\n\t\t\t\t}) : {});\n\t\t\t\tawait eventLog.append({\n\t\t\t\t\tid: `step_completed:${runId}:${correlationId}`,\n\t\t\t\t\trunId,\n\t\t\t\t\ttype: \"step_completed\",\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\tdata: validatedOutput\n\t\t\t\t});\n\t\t\t\treturn validatedOutput;\n\t\t\t} catch (error) {\n\t\t\t\tconst attempt = consumer.countRetrying(correlationId);\n\t\t\t\tawait eventLog.append({\n\t\t\t\t\tid: `step_retrying:${runId}:${correlationId}:${attempt}`,\n\t\t\t\t\trunId,\n\t\t\t\t\ttype: \"step_retrying\",\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\tdata: serializeWorkflowError(error)\n\t\t\t\t});\n\t\t\t\tstate.failedCorrelationId = correlationId;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}));\n\t};\n}\n//#endregion\n//#region src/run-context.ts\nconst storage = new AsyncLocalStorage();\nregisterWorkflowRunGetter(() => {\n\tconst store = storage.getStore();\n\tif (!store) return;\n\treturn { actionRunner: store.actionRunner };\n});\nfunction runWithWorkflowContext(store, fn) {\n\treturn storage.run(store, fn);\n}\n//#endregion\n//#region src/replay/memory-event-log.ts\n/** In-memory durable log for inline execution and tests. */\nvar MemoryEventLog = class {\n\tevents = [];\n\tids = /* @__PURE__ */ new Set();\n\tasync append(event) {\n\t\tconst id = event.id ?? crypto.randomUUID();\n\t\tif (this.ids.has(id)) return false;\n\t\tthis.ids.add(id);\n\t\tthis.events.push({\n\t\t\tid,\n\t\t\trunId: event.runId,\n\t\t\tseq: this.events.length,\n\t\t\ttype: event.type,\n\t\t\tcorrelationId: event.correlationId ?? null,\n\t\t\tdata: event.data ?? null\n\t\t});\n\t\treturn true;\n\t}\n\tasync listReplay(runId) {\n\t\treturn this.events.filter((event) => event.runId === runId).map((event) => ({ ...event }));\n\t}\n};\n//#endregion\n//#region src/execute-workflow.ts\n/**\n* The single way to run a workflow: replay its event log from the top, execute\n* un-cached primitives, and either complete/fail or suspend at the first\n* un-satisfied sleep/hook. New events (sleep_scheduled/sleep_completed/\n* hook_created/run_completed/run_failed) are flushed before returning.\n*\n* Durability comes entirely from the log — a suspended run resumes by calling\n* this again with the same `runId` and event log once the sleep is due or the\n* hook is resumed.\n*/\nasync function executeWorkflow(workflow, input, options = {}) {\n\tconst runId = options.runId ?? crypto.randomUUID();\n\tconst eventLog = options.eventLog ?? new MemoryEventLog();\n\tconst consumer = new EventsConsumer(await eventLog.listReplay(runId));\n\tconst coordinator = new SuspensionCoordinator();\n\tconst state = createReplayState({\n\t\trunId,\n\t\tconsumer,\n\t\tcoordinator,\n\t\teventLog,\n\t\thookBaseUrl: options.hookBaseUrl,\n\t\tnow: options.now\n\t});\n\tconst actionRunner = createActionRunner(state, {\n\t\tresolveCredentials: options.resolveCredentials,\n\t\tcredentialContext: options.credentialContext,\n\t\toauthAdapter: options.oauthAdapter\n\t});\n\tconst ctx = {\n\t\trunId,\n\t\tsleep: createSleep(state),\n\t\thook: createHook(state),\n\t\t...options.context\n\t};\n\tconst validatedInput = workflow.input.parse(input);\n\tconst bodyPromise = runWithWorkflowContext({\n\t\tactionRunner,\n\t\trunId\n\t}, () => captureConsole(async () => workflow.run(validatedInput, ctx)));\n\tconst outcome = await Promise.race([bodyPromise.then((output) => ({\n\t\ttype: \"done\",\n\t\toutput\n\t}), (error) => ({\n\t\ttype: \"error\",\n\t\terror\n\t})), coordinator.waitForSuspension().then((items) => ({\n\t\ttype: \"suspended\",\n\t\titems\n\t}))]);\n\tlet result;\n\tif (outcome.type === \"suspended\") {\n\t\tbodyPromise.catch(() => {});\n\t\tresult = {\n\t\t\tstatus: \"suspended\",\n\t\t\titems: outcome.items\n\t\t};\n\t} else if (outcome.type === \"done\") {\n\t\tconst output = workflow.output.parse(outcome.output);\n\t\tstate.newEvents.push({\n\t\t\tid: `run_completed:${runId}`,\n\t\t\trunId,\n\t\t\ttype: \"run_completed\",\n\t\t\tdata: { output }\n\t\t});\n\t\tresult = {\n\t\t\tstatus: \"completed\",\n\t\t\toutput\n\t\t};\n\t} else result = {\n\t\tstatus: \"failed\",\n\t\terror: outcome.error,\n\t\tfailedCorrelationId: state.failedCorrelationId\n\t};\n\tfor (const event of state.newEvents) await eventLog.append(event);\n\treturn result;\n}\n//#endregion\nexport { MemoryEventLog, defineWorkflow, deserializeWorkflowError, executeWorkflow, isWorkflow, serializeWorkflowError };\n\n//# sourceMappingURL=index.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Bn as __require, Ln as __commonJSMin, Vn as __toESM } from "./dist-f_JGyGWx.mjs";
|
|
2
|
-
import { b as normalizeCredentialList, m as CREDENTIAL_SCOPE_LEVEL_TO_SCOPE_TYPE } from "./dist-
|
|
2
|
+
import { b as normalizeCredentialList, m as CREDENTIAL_SCOPE_LEVEL_TO_SCOPE_TYPE } from "./dist-CAGgGvND.mjs";
|
|
3
3
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
4
4
|
import "node:fs";
|
|
5
5
|
import { ZodFirstPartyTypeKind } from "zod/v3";
|
|
@@ -13255,7 +13255,7 @@ async function connectMcpServer(name, options) {
|
|
|
13255
13255
|
}
|
|
13256
13256
|
async function createTransport(url, transport, requestInit, fetchImpl) {
|
|
13257
13257
|
if (transport === "sse") {
|
|
13258
|
-
const { SSEClientTransport } = await import("./sse-
|
|
13258
|
+
const { SSEClientTransport } = await import("./sse-CcbP5P9d.mjs");
|
|
13259
13259
|
return new SSEClientTransport(url, {
|
|
13260
13260
|
requestInit,
|
|
13261
13261
|
fetch: fetchImpl
|
|
@@ -15756,6 +15756,16 @@ function and(...unfilteredConditions) {
|
|
|
15756
15756
|
new StringChunk(")")
|
|
15757
15757
|
]);
|
|
15758
15758
|
}
|
|
15759
|
+
function or(...unfilteredConditions) {
|
|
15760
|
+
const conditions = unfilteredConditions.filter((c) => c !== void 0);
|
|
15761
|
+
if (conditions.length === 0) return;
|
|
15762
|
+
if (conditions.length === 1) return new SQL(conditions);
|
|
15763
|
+
return new SQL([
|
|
15764
|
+
new StringChunk("("),
|
|
15765
|
+
sql.join(conditions, new StringChunk(" or ")),
|
|
15766
|
+
new StringChunk(")")
|
|
15767
|
+
]);
|
|
15768
|
+
}
|
|
15759
15769
|
function isNull(value) {
|
|
15760
15770
|
return sql`${value} is null`;
|
|
15761
15771
|
}
|
|
@@ -16334,6 +16344,41 @@ function index(name) {
|
|
|
16334
16344
|
function uniqueIndex(name) {
|
|
16335
16345
|
return new IndexBuilderOn(name, true);
|
|
16336
16346
|
}
|
|
16347
|
+
const traceContextStorage = new AsyncLocalStorage();
|
|
16348
|
+
function getTraceContext() {
|
|
16349
|
+
return traceContextStorage.getStore();
|
|
16350
|
+
}
|
|
16351
|
+
const CONSOLE_LEVELS = [
|
|
16352
|
+
"log",
|
|
16353
|
+
"debug",
|
|
16354
|
+
"info",
|
|
16355
|
+
"warn",
|
|
16356
|
+
"error"
|
|
16357
|
+
];
|
|
16358
|
+
async function captureConsole(fn) {
|
|
16359
|
+
const originals = /* @__PURE__ */ new Map();
|
|
16360
|
+
for (const level of CONSOLE_LEVELS) {
|
|
16361
|
+
originals.set(level, console[level].bind(console));
|
|
16362
|
+
console[level] = (...args) => {
|
|
16363
|
+
originals.get(level)?.(...args);
|
|
16364
|
+
getTraceContext();
|
|
16365
|
+
};
|
|
16366
|
+
}
|
|
16367
|
+
try {
|
|
16368
|
+
return await fn();
|
|
16369
|
+
} finally {
|
|
16370
|
+
for (const level of CONSOLE_LEVELS) {
|
|
16371
|
+
const original = originals.get(level);
|
|
16372
|
+
if (original) console[level] = original;
|
|
16373
|
+
}
|
|
16374
|
+
}
|
|
16375
|
+
}
|
|
16376
|
+
async function logSystem(level, message, data) {
|
|
16377
|
+
getTraceContext();
|
|
16378
|
+
}
|
|
16379
|
+
async function withSpan(input, fn) {
|
|
16380
|
+
return await fn();
|
|
16381
|
+
}
|
|
16337
16382
|
//#endregion
|
|
16338
16383
|
//#region ../database/dist/index.mjs
|
|
16339
16384
|
const tenantScopeStorage = new AsyncLocalStorage();
|
|
@@ -16393,6 +16438,8 @@ const agentSessions = pgTable("agent_sessions", {
|
|
|
16393
16438
|
id: text$1("id").primaryKey(),
|
|
16394
16439
|
projectId: text$1("project_id").notNull(),
|
|
16395
16440
|
agentId: text$1("agent_id").notNull().references(() => agents.id),
|
|
16441
|
+
sourceKind: text$1("source_kind").$type().notNull().default("api"),
|
|
16442
|
+
sourceId: text$1("source_id"),
|
|
16396
16443
|
parentSpanId: text$1("parent_span_id"),
|
|
16397
16444
|
createdAt: timestamp("created_at", { withTimezone: true }).notNull(),
|
|
16398
16445
|
updatedAt: timestamp("updated_at", { withTimezone: true }).notNull(),
|
|
@@ -16402,6 +16449,8 @@ const agentSessionsSqlite = sqliteTable("agent_sessions", {
|
|
|
16402
16449
|
id: text("id").primaryKey(),
|
|
16403
16450
|
projectId: text("project_id").notNull(),
|
|
16404
16451
|
agentId: text("agent_id").notNull().references(() => agentsSqlite.id),
|
|
16452
|
+
sourceKind: text("source_kind").$type().notNull().default("api"),
|
|
16453
|
+
sourceId: text("source_id"),
|
|
16405
16454
|
parentSpanId: text("parent_span_id"),
|
|
16406
16455
|
createdAt: integer("created_at", { mode: "timestamp_ms" }).notNull(),
|
|
16407
16456
|
updatedAt: integer("updated_at", { mode: "timestamp_ms" }).notNull(),
|
|
@@ -16429,7 +16478,9 @@ const triggerAttachments = pgTable("trigger_attachments", {
|
|
|
16429
16478
|
id: text$1("id").primaryKey(),
|
|
16430
16479
|
projectId: text$1("project_id").notNull(),
|
|
16431
16480
|
key: text$1("key").notNull(),
|
|
16432
|
-
|
|
16481
|
+
targetKind: text$1("target_kind").$type().notNull().default("workflow"),
|
|
16482
|
+
workflowKey: text$1("workflow_key"),
|
|
16483
|
+
agentKey: text$1("agent_key"),
|
|
16433
16484
|
moduleFile: text$1("module_file").notNull(),
|
|
16434
16485
|
source: jsonb("source").$type().notNull(),
|
|
16435
16486
|
registeredAt: timestamp("registered_at", { withTimezone: true }).notNull(),
|
|
@@ -16440,7 +16491,9 @@ const triggerAttachmentsSqlite = sqliteTable("trigger_attachments", {
|
|
|
16440
16491
|
id: text("id").primaryKey(),
|
|
16441
16492
|
projectId: text("project_id").notNull(),
|
|
16442
16493
|
key: text("key").notNull(),
|
|
16443
|
-
|
|
16494
|
+
targetKind: text("target_kind").$type().notNull().default("workflow"),
|
|
16495
|
+
workflowKey: text("workflow_key"),
|
|
16496
|
+
agentKey: text("agent_key"),
|
|
16444
16497
|
moduleFile: text("module_file").notNull(),
|
|
16445
16498
|
source: text("source", { mode: "json" }).$type().notNull(),
|
|
16446
16499
|
registeredAt: integer("registered_at", { mode: "timestamp_ms" }).notNull(),
|
|
@@ -16512,6 +16565,8 @@ const workflowRuns = pgTable("workflow_runs", {
|
|
|
16512
16565
|
triggerRunId: text$1("trigger_run_id").references(() => triggerRuns.id),
|
|
16513
16566
|
parentWorkflowRunId: text$1("parent_workflow_run_id"),
|
|
16514
16567
|
parentSpanId: text$1("parent_span_id"),
|
|
16568
|
+
sourceKind: text$1("source_kind").$type().notNull().default("api"),
|
|
16569
|
+
sourceId: text$1("source_id"),
|
|
16515
16570
|
status: text$1("status").$type().notNull(),
|
|
16516
16571
|
trigger: text$1("trigger").$type().notNull(),
|
|
16517
16572
|
triggeredAt: timestamp("triggered_at", { withTimezone: true }).notNull(),
|
|
@@ -16530,6 +16585,8 @@ const workflowRunsSqlite = sqliteTable("workflow_runs", {
|
|
|
16530
16585
|
triggerRunId: text("trigger_run_id").references(() => triggerRunsSqlite.id),
|
|
16531
16586
|
parentWorkflowRunId: text("parent_workflow_run_id"),
|
|
16532
16587
|
parentSpanId: text("parent_span_id"),
|
|
16588
|
+
sourceKind: text("source_kind").$type().notNull().default("api"),
|
|
16589
|
+
sourceId: text("source_id"),
|
|
16533
16590
|
status: text("status").$type().notNull(),
|
|
16534
16591
|
trigger: text("trigger").$type().notNull(),
|
|
16535
16592
|
triggeredAt: integer("triggered_at", { mode: "timestamp_ms" }).notNull(),
|
|
@@ -16937,6 +16994,10 @@ function scopedAnd$1(table, ...conditions) {
|
|
|
16937
16994
|
function projectScopeId() {
|
|
16938
16995
|
return getProjectScopeId();
|
|
16939
16996
|
}
|
|
16997
|
+
/** Use with left joins on workflowRuns/triggerRuns/agentSessions keyed by trace or ref id. */
|
|
16998
|
+
function traceRootProjectScopeFilter() {
|
|
16999
|
+
return or(eq(workflowRuns.projectId, getProjectScopeId()), eq(triggerRuns.projectId, getProjectScopeId()), eq(agentSessions.projectId, getProjectScopeId()));
|
|
17000
|
+
}
|
|
16940
17001
|
async function selectActiveAgentByRoute(route) {
|
|
16941
17002
|
return (await getDb$1().select({
|
|
16942
17003
|
id: agents.id,
|
|
@@ -16946,6 +17007,8 @@ async function selectActiveAgentByRoute(route) {
|
|
|
16946
17007
|
async function insertAgentSession(values) {
|
|
16947
17008
|
await getDb$1().insert(agentSessions).values({
|
|
16948
17009
|
...values,
|
|
17010
|
+
sourceKind: values.sourceKind ?? "api",
|
|
17011
|
+
sourceId: values.sourceId ?? null,
|
|
16949
17012
|
projectId: projectScopeId()
|
|
16950
17013
|
});
|
|
16951
17014
|
}
|
|
@@ -16983,16 +17046,61 @@ async function selectCredentialInstancesForScope$1(key, scopeType, scopeId) {
|
|
|
16983
17046
|
const scopeCondition = scopeId === null ? and(eq(credentialInstances.scopeType, scopeType), isNull(credentialInstances.scopeId)) : and(eq(credentialInstances.scopeType, scopeType), eq(credentialInstances.scopeId, scopeId));
|
|
16984
17047
|
return db.select().from(credentialInstances).where(credentialScopeAnd(scopeType, eq(credentialInstances.key, key), scopeCondition));
|
|
16985
17048
|
}
|
|
17049
|
+
async function selectTraceSpanById(id) {
|
|
17050
|
+
const db = getDb$1();
|
|
17051
|
+
const rows = await db.select({ span: traceSpans }).from(traceSpans).leftJoin(workflowRuns, eq(workflowRuns.id, traceSpans.traceId)).leftJoin(triggerRuns, eq(triggerRuns.id, traceSpans.traceId)).leftJoin(agentSessions, eq(agentSessions.id, traceSpans.traceId)).where(and(eq(traceSpans.id, id), traceRootProjectScopeFilter())).limit(1);
|
|
17052
|
+
if (rows[0]) return rows[0].span;
|
|
17053
|
+
return (await db.select({ span: traceSpans }).from(traceSpans).leftJoin(workflowRuns, eq(workflowRuns.id, traceSpans.refId)).leftJoin(triggerRuns, eq(triggerRuns.id, traceSpans.refId)).leftJoin(agentSessions, eq(agentSessions.id, traceSpans.refId)).where(and(eq(traceSpans.id, id), traceRootProjectScopeFilter())).limit(1))[0]?.span;
|
|
17054
|
+
}
|
|
17055
|
+
function runSource(kind, id) {
|
|
17056
|
+
return {
|
|
17057
|
+
kind,
|
|
17058
|
+
id: id ?? null
|
|
17059
|
+
};
|
|
17060
|
+
}
|
|
17061
|
+
function sourceFromSpan(span) {
|
|
17062
|
+
switch (span.kind) {
|
|
17063
|
+
case "workflow_run": return runSource("workflow", span.refId);
|
|
17064
|
+
case "agent_session": return runSource("agent", span.refId);
|
|
17065
|
+
case "trigger_run": return runSource("trigger", span.refId);
|
|
17066
|
+
case "gateway_event": {
|
|
17067
|
+
const metadata = span.metadata;
|
|
17068
|
+
if (metadata && typeof metadata === "object" && "gatewayAttachmentId" in metadata) {
|
|
17069
|
+
const attachmentId = metadata.gatewayAttachmentId;
|
|
17070
|
+
if (typeof attachmentId === "string") return runSource("gateway", attachmentId);
|
|
17071
|
+
}
|
|
17072
|
+
return;
|
|
17073
|
+
}
|
|
17074
|
+
case "action": {
|
|
17075
|
+
const metadata = span.metadata;
|
|
17076
|
+
if (metadata && typeof metadata === "object" && "runId" in metadata) {
|
|
17077
|
+
const runId = metadata.runId;
|
|
17078
|
+
if (typeof runId === "string") return runSource("workflow", runId);
|
|
17079
|
+
}
|
|
17080
|
+
return;
|
|
17081
|
+
}
|
|
17082
|
+
default: return;
|
|
17083
|
+
}
|
|
17084
|
+
}
|
|
17085
|
+
async function resolveRunSourceFromTraceContext() {
|
|
17086
|
+
const parent = getTraceContext();
|
|
17087
|
+
if (!parent?.spanId) return runSource("api");
|
|
17088
|
+
const span = await selectTraceSpanById(parent.spanId);
|
|
17089
|
+
if (!span) return runSource("api");
|
|
17090
|
+
return sourceFromSpan(span) ?? runSource("api");
|
|
17091
|
+
}
|
|
16986
17092
|
async function getAgentByRoute(route) {
|
|
16987
17093
|
return selectActiveAgentByRoute(route);
|
|
16988
17094
|
}
|
|
16989
17095
|
const MESSAGE_EVENT_TYPE = "message";
|
|
16990
|
-
async function createSession(agentId, id) {
|
|
17096
|
+
async function createSession(agentId, id, source = runSource("api")) {
|
|
16991
17097
|
const now = /* @__PURE__ */ new Date();
|
|
16992
17098
|
const sessionId = id ?? crypto.randomUUID();
|
|
16993
17099
|
await insertAgentSession({
|
|
16994
17100
|
id: sessionId,
|
|
16995
17101
|
agentId,
|
|
17102
|
+
sourceKind: source.kind,
|
|
17103
|
+
sourceId: source.id,
|
|
16996
17104
|
createdAt: now,
|
|
16997
17105
|
updatedAt: now,
|
|
16998
17106
|
deletedAt: null
|
|
@@ -17992,42 +18100,7 @@ async function resolveActionCredentials(requirements, options) {
|
|
|
17992
18100
|
});
|
|
17993
18101
|
return parseResolvedCredentials(requirements, await resolveCredentials(requirements, options.consumer, options.contextOverride));
|
|
17994
18102
|
}
|
|
17995
|
-
const traceContextStorage = new AsyncLocalStorage();
|
|
17996
|
-
function getTraceContext() {
|
|
17997
|
-
return traceContextStorage.getStore();
|
|
17998
|
-
}
|
|
17999
|
-
const CONSOLE_LEVELS = [
|
|
18000
|
-
"log",
|
|
18001
|
-
"debug",
|
|
18002
|
-
"info",
|
|
18003
|
-
"warn",
|
|
18004
|
-
"error"
|
|
18005
|
-
];
|
|
18006
|
-
async function captureConsole(fn) {
|
|
18007
|
-
const originals = /* @__PURE__ */ new Map();
|
|
18008
|
-
for (const level of CONSOLE_LEVELS) {
|
|
18009
|
-
originals.set(level, console[level].bind(console));
|
|
18010
|
-
console[level] = (...args) => {
|
|
18011
|
-
originals.get(level)?.(...args);
|
|
18012
|
-
getTraceContext();
|
|
18013
|
-
};
|
|
18014
|
-
}
|
|
18015
|
-
try {
|
|
18016
|
-
return await fn();
|
|
18017
|
-
} finally {
|
|
18018
|
-
for (const level of CONSOLE_LEVELS) {
|
|
18019
|
-
const original = originals.get(level);
|
|
18020
|
-
if (original) console[level] = original;
|
|
18021
|
-
}
|
|
18022
|
-
}
|
|
18023
|
-
}
|
|
18024
|
-
async function logSystem(level, message, data) {
|
|
18025
|
-
getTraceContext();
|
|
18026
|
-
}
|
|
18027
|
-
async function withSpan(input, fn) {
|
|
18028
|
-
return await fn();
|
|
18029
|
-
}
|
|
18030
18103
|
//#endregion
|
|
18031
|
-
export {
|
|
18104
|
+
export { zodToJsonSchema as A, isMcp as C, extractWWWAuthenticateParams as D, auth as E, createFetchWithInit as O, defineMcp as S, UnauthorizedError as T, logSystem as _, resolveActionCredentials as a, connectMcpServer as b, appendEvent as c, getSession as d, listMessageEvents as f, getTraceContext as g, captureConsole as h, isCredentialError as i, JSONRPCMessageSchema as j, normalizeHeaders as k, createSession as l, touchSession as m, captureCredentialToolErrors as n, resolveMcpTools as o, resolveRunSourceFromTraceContext as p, createCredentialResolver as r, MESSAGE_EVENT_TYPE as s, buildCredentialRunContext as t, getAgentByRoute as u, withSpan as v, createParser as w, connectMcpStdio as x, connectMcpDefinition as y };
|
|
18032
18105
|
|
|
18033
|
-
//# sourceMappingURL=dist-
|
|
18106
|
+
//# sourceMappingURL=dist-DzfOPx7X.mjs.map
|