@openbox-ai/openbox-mastra-sdk 0.1.0
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/LICENSE +21 -0
- package/README.md +158 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.js +2 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/openbox-client.d.ts +42 -0
- package/dist/client/openbox-client.js +405 -0
- package/dist/client/openbox-client.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/openbox-config.d.ts +54 -0
- package/dist/config/openbox-config.js +162 -0
- package/dist/config/openbox-config.js.map +1 -0
- package/dist/governance/activity-runtime.d.ts +42 -0
- package/dist/governance/activity-runtime.js +712 -0
- package/dist/governance/activity-runtime.js.map +1 -0
- package/dist/governance/approval-registry.d.ts +17 -0
- package/dist/governance/approval-registry.js +32 -0
- package/dist/governance/approval-registry.js.map +1 -0
- package/dist/governance/context.d.ts +16 -0
- package/dist/governance/context.js +13 -0
- package/dist/governance/context.js.map +1 -0
- package/dist/governance/index.d.ts +2 -0
- package/dist/governance/index.js +1 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/mastra/index.d.ts +16 -0
- package/dist/mastra/index.js +5 -0
- package/dist/mastra/index.js.map +1 -0
- package/dist/mastra/with-openbox.d.ts +30 -0
- package/dist/mastra/with-openbox.js +243 -0
- package/dist/mastra/with-openbox.js.map +1 -0
- package/dist/mastra/wrap-agent.d.ts +14 -0
- package/dist/mastra/wrap-agent.js +1744 -0
- package/dist/mastra/wrap-agent.js.map +1 -0
- package/dist/mastra/wrap-tool.d.ts +18 -0
- package/dist/mastra/wrap-tool.js +49 -0
- package/dist/mastra/wrap-tool.js.map +1 -0
- package/dist/mastra/wrap-workflow.d.ts +14 -0
- package/dist/mastra/wrap-workflow.js +386 -0
- package/dist/mastra/wrap-workflow.js.map +1 -0
- package/dist/otel/index.d.ts +11 -0
- package/dist/otel/index.js +2 -0
- package/dist/otel/index.js.map +1 -0
- package/dist/otel/setup-openbox-opentelemetry.d.ts +38 -0
- package/dist/otel/setup-openbox-opentelemetry.js +2249 -0
- package/dist/otel/setup-openbox-opentelemetry.js.map +1 -0
- package/dist/span/index.d.ts +5 -0
- package/dist/span/index.js +2 -0
- package/dist/span/index.js.map +1 -0
- package/dist/span/openbox-span-processor.d.ts +90 -0
- package/dist/span/openbox-span-processor.js +580 -0
- package/dist/span/openbox-span-processor.js.map +1 -0
- package/dist/types/errors.d.ts +25 -0
- package/dist/types/errors.js +40 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/governance-verdict-response.d.ts +57 -0
- package/dist/types/governance-verdict-response.js +84 -0
- package/dist/types/governance-verdict-response.js.map +1 -0
- package/dist/types/guardrails.d.ts +23 -0
- package/dist/types/guardrails.js +27 -0
- package/dist/types/guardrails.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/verdict.d.ts +22 -0
- package/dist/types/verdict.js +55 -0
- package/dist/types/verdict.js.map +1 -0
- package/dist/types/workflow-event-type.d.ts +10 -0
- package/dist/types/workflow-event-type.js +13 -0
- package/dist/types/workflow-event-type.js.map +1 -0
- package/dist/types/workflow-span-buffer.d.ts +31 -0
- package/dist/types/workflow-span-buffer.js +42 -0
- package/dist/types/workflow-span-buffer.js.map +1 -0
- package/docs/README.md +66 -0
- package/docs/api-reference.md +348 -0
- package/docs/approvals-and-guardrails.md +163 -0
- package/docs/architecture.md +186 -0
- package/docs/configuration.md +214 -0
- package/docs/event-model.md +215 -0
- package/docs/installation.md +108 -0
- package/docs/integration-patterns.md +214 -0
- package/docs/security-and-privacy.md +174 -0
- package/docs/telemetry.md +196 -0
- package/docs/troubleshooting.md +210 -0
- package/package.json +136 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/governance/activity-runtime.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\n\nimport { trace } from \"@opentelemetry/api\";\nimport type { ToolExecutionContext } from \"@mastra/core/tools\";\n\nimport type { OpenBoxClient } from \"../client/index.js\";\nimport type { OpenBoxConfig } from \"../config/index.js\";\nimport type { OpenBoxSpanProcessor } from \"../span/index.js\";\nimport {\n ApprovalExpiredError,\n ApprovalPendingError,\n ApprovalRejectedError,\n GovernanceVerdictResponse,\n GovernanceHaltError,\n GuardrailsValidationError,\n Verdict,\n WorkflowEventType,\n WorkflowSpanBuffer\n} from \"../types/index.js\";\nimport {\n getOpenBoxExecutionContext,\n runWithOpenBoxExecutionContext\n} from \"./context.js\";\nimport {\n clearActivityApproval,\n clearPendingApproval,\n isActivityApproved,\n markActivityApproved,\n setPendingApproval\n} from \"./approval-registry.js\";\n\nexport interface WorkflowSuspendContext {\n runId: string;\n setState: (state: unknown) => void | Promise<void>;\n state: unknown;\n suspend: (\n payload: unknown,\n options?: Record<string, unknown>\n ) => unknown | Promise<unknown>;\n workflowId: string;\n}\n\nexport interface ToolExecutionContextLike {\n agent?: ToolExecutionContext[\"agent\"];\n requestContext?: ToolExecutionContext[\"requestContext\"];\n workflow?: WorkflowSuspendContext | undefined;\n}\n\nexport interface ActivityRuntimeDependencies {\n client: OpenBoxClient;\n config: OpenBoxConfig;\n spanProcessor: OpenBoxSpanProcessor;\n}\n\nexport interface GovernedActivityOptions<TInput, TOutput> {\n dependencies: ActivityRuntimeDependencies;\n execute: (input: TInput) => Promise<TOutput>;\n input: TInput;\n runtimeContext: ToolExecutionContextLike;\n type: string;\n}\n\nexport async function executeGovernedActivity<TInput, TOutput>({\n dependencies,\n execute,\n input,\n runtimeContext,\n type\n}: GovernedActivityOptions<TInput, TOutput>): Promise<TOutput | undefined> {\n const descriptor = resolveActivityDescriptor(type, runtimeContext);\n const startedInputForEvent = appendGoalToActivityInput(\n serializeActivityInputForStartEvent(input),\n descriptor.goal\n );\n let inputForExecution = cloneValue(input);\n\n ensureSpanBuffer(descriptor, dependencies.spanProcessor);\n dependencies.spanProcessor.clearActivityAbort(\n descriptor.workflowId,\n descriptor.activityId\n );\n dependencies.spanProcessor.clearHaltRequested(\n descriptor.workflowId,\n descriptor.activityId\n );\n dependencies.spanProcessor.setActivityContext(\n descriptor.workflowId,\n descriptor.activityId,\n {\n activity_id: descriptor.activityId,\n activity_input: startedInputForEvent,\n activity_type: descriptor.activityType,\n attempt: descriptor.attempt,\n ...(descriptor.goal ? { goal: descriptor.goal } : {}),\n run_id: descriptor.runId,\n task_queue: descriptor.taskQueue,\n workflow_id: descriptor.workflowId,\n workflow_type: descriptor.workflowType\n }\n );\n\n const startVerdict = dependencies.config.sendActivityStartEvent\n ? await evaluateActivityEvent(dependencies, {\n activity_id: descriptor.activityId,\n activity_input: startedInputForEvent,\n activity_type: descriptor.activityType,\n attempt: descriptor.attempt,\n event_type: WorkflowEventType.ACTIVITY_STARTED,\n ...(descriptor.goal ? { goal: descriptor.goal } : {}),\n run_id: descriptor.runId,\n task_queue: descriptor.taskQueue,\n workflow_id: descriptor.workflowId,\n workflow_type: descriptor.workflowType\n })\n : null;\n\n applyStopVerdict(startVerdict);\n assertGuardrailsValid(startVerdict, \"Guardrails validation failed\");\n\n if (\n startVerdict?.guardrailsResult?.inputType === \"activity_input\" &&\n startVerdict.guardrailsResult.redactedInput !== undefined\n ) {\n const normalizedRedactedInput = normalizeRedactedActivityInput(\n inputForExecution,\n startVerdict.guardrailsResult.redactedInput\n );\n inputForExecution = applyRedaction(\n inputForExecution,\n normalizedRedactedInput\n ) as TInput;\n }\n\n if (\n dependencies.config.hitlEnabled &&\n Verdict.requiresApproval(startVerdict?.verdict ?? Verdict.ALLOW)\n ) {\n const approvalPayload = {\n openbox: {\n activityId: descriptor.activityId,\n activityType: descriptor.activityType,\n approvalId: startVerdict?.approvalId,\n reason: startVerdict?.reason,\n requestedAt: rfc3339Now(),\n runId: descriptor.runId,\n workflowId: descriptor.workflowId,\n workflowType: descriptor.workflowType\n }\n };\n\n setPendingApproval({\n activityId: descriptor.activityId,\n activityType: descriptor.activityType,\n approvalId: startVerdict?.approvalId,\n requestedAt: approvalPayload.openbox.requestedAt,\n runId: descriptor.runId,\n workflowId: descriptor.workflowId,\n workflowType: descriptor.workflowType\n });\n\n const workflowSuspend = runtimeContext.workflow?.suspend;\n\n if (workflowSuspend) {\n return (await workflowSuspend(approvalPayload)) as TOutput | undefined;\n }\n\n await waitForApprovalInline(dependencies.client, descriptor, startVerdict?.reason);\n }\n\n return runWithOpenBoxExecutionContext(\n {\n activityId: descriptor.activityId,\n activityType: descriptor.activityType,\n attempt: descriptor.attempt,\n goal: descriptor.goal,\n runId: descriptor.runId,\n source: \"tool\",\n taskQueue: descriptor.taskQueue,\n workflowId: descriptor.workflowId,\n workflowType: descriptor.workflowType\n },\n async () => {\n let error: Record<string, unknown> | undefined;\n let haltReason: string | undefined;\n let output: TOutput | undefined;\n const activityStartMs = Date.now();\n\n try {\n output = await trace\n .getTracer(\"openbox.mastra\")\n .startActiveSpan(`activity.${descriptor.activityType}`, async activeSpan => {\n activeSpan.setAttribute(\"openbox.workflow_id\", descriptor.workflowId);\n activeSpan.setAttribute(\"openbox.activity_id\", descriptor.activityId);\n activeSpan.setAttribute(\"openbox.run_id\", descriptor.runId);\n dependencies.spanProcessor.registerTrace(\n activeSpan.spanContext().traceId,\n descriptor.workflowId,\n descriptor.activityId,\n descriptor.runId\n );\n\n try {\n return await execute(inputForExecution);\n } finally {\n activeSpan.end();\n }\n });\n } catch (caughtError) {\n if (\n caughtError instanceof ApprovalPendingError &&\n dependencies.config.hitlEnabled\n ) {\n const approvalPayload = {\n openbox: {\n activityId: descriptor.activityId,\n activityType: descriptor.activityType,\n approvalId: undefined,\n reason: caughtError.message,\n requestedAt: rfc3339Now(),\n runId: descriptor.runId,\n workflowId: descriptor.workflowId,\n workflowType: descriptor.workflowType\n }\n };\n\n setPendingApproval({\n activityId: descriptor.activityId,\n activityType: descriptor.activityType,\n approvalId: undefined,\n requestedAt: approvalPayload.openbox.requestedAt,\n runId: descriptor.runId,\n workflowId: descriptor.workflowId,\n workflowType: descriptor.workflowType\n });\n\n const workflowSuspend = runtimeContext.workflow?.suspend;\n\n if (workflowSuspend) {\n return (await workflowSuspend(approvalPayload)) as TOutput | undefined;\n }\n\n await waitForApprovalInline(\n dependencies.client,\n descriptor,\n caughtError.message\n );\n }\n\n error = serializeError(caughtError);\n throw caughtError;\n } finally {\n try {\n const wasAborted = dependencies.spanProcessor.getActivityAbort(\n descriptor.workflowId,\n descriptor.activityId\n );\n const activityEndMs = Date.now();\n const durationMs = Math.max(0, activityEndMs - activityStartMs);\n\n const alreadyApproved = isActivityApproved(\n descriptor.runId,\n descriptor.activityId\n );\n\n if (!wasAborted) {\n const completedInputForEvent = appendGoalToActivityInput(\n serializeActivityInputForCompletedEvent(inputForExecution),\n descriptor.goal\n );\n const completedActivityTypePayload =\n dependencies.config.hitlEnabled ? {} : { activity_type: descriptor.activityType };\n const completedVerdict = await evaluateActivityEvent(dependencies, {\n activity_id: descriptor.activityId,\n activity_input: completedInputForEvent,\n activity_output: serializeValue(output),\n ...completedActivityTypePayload,\n attempt: descriptor.attempt,\n duration_ms: durationMs,\n end_time: activityEndMs,\n error,\n event_type: WorkflowEventType.ACTIVITY_COMPLETED,\n ...(descriptor.goal ? { goal: descriptor.goal } : {}),\n run_id: descriptor.runId,\n span_count: 0,\n start_time: activityStartMs,\n status: error ? \"failed\" : \"completed\",\n task_queue: descriptor.taskQueue,\n workflow_id: descriptor.workflowId,\n workflow_type: descriptor.workflowType\n });\n\n applyStopVerdict(completedVerdict);\n assertGuardrailsValid(\n completedVerdict,\n \"Guardrails output validation failed\"\n );\n\n if (\n completedVerdict?.guardrailsResult?.inputType === \"activity_output\" &&\n completedVerdict.guardrailsResult.redactedInput !== undefined\n ) {\n output = applyRedaction(\n output,\n completedVerdict.guardrailsResult.redactedInput\n ) as TOutput;\n }\n\n if (\n dependencies.config.hitlEnabled &&\n Verdict.requiresApproval(completedVerdict?.verdict ?? Verdict.ALLOW) &&\n !alreadyApproved &&\n !isActivityApproved(descriptor.runId, descriptor.activityId)\n ) {\n const approvalPayload = {\n openbox: {\n activityId: descriptor.activityId,\n activityType: descriptor.activityType,\n approvalId: completedVerdict?.approvalId,\n reason: completedVerdict?.reason,\n requestedAt: rfc3339Now(),\n runId: descriptor.runId,\n workflowId: descriptor.workflowId,\n workflowType: descriptor.workflowType\n }\n };\n\n setPendingApproval({\n activityId: descriptor.activityId,\n activityType: descriptor.activityType,\n approvalId: completedVerdict?.approvalId,\n requestedAt: approvalPayload.openbox.requestedAt,\n runId: descriptor.runId,\n workflowId: descriptor.workflowId,\n workflowType: descriptor.workflowType\n });\n\n const workflowSuspend = runtimeContext.workflow?.suspend;\n\n if (workflowSuspend) {\n output = (await workflowSuspend(approvalPayload)) as\n | TOutput\n | undefined;\n } else {\n await waitForApprovalInline(\n dependencies.client,\n descriptor,\n completedVerdict?.reason ??\n \"Activity output requires human approval\"\n );\n }\n }\n }\n\n haltReason = dependencies.spanProcessor.getHaltRequested(\n descriptor.workflowId,\n descriptor.activityId\n );\n } finally {\n dependencies.spanProcessor.clearActivityAbort(\n descriptor.workflowId,\n descriptor.activityId\n );\n dependencies.spanProcessor.clearHaltRequested(\n descriptor.workflowId,\n descriptor.activityId\n );\n dependencies.spanProcessor.clearActivityContext(\n descriptor.workflowId,\n descriptor.activityId\n );\n clearActivityApproval(descriptor.runId, descriptor.activityId);\n }\n }\n\n if (haltReason) {\n throw new GovernanceHaltError(`Governance blocked: ${haltReason}`);\n }\n\n return output;\n }\n );\n}\n\nconst INLINE_APPROVAL_TIMEOUT_MS = 300_000;\nconst INLINE_APPROVAL_INITIAL_POLL_INTERVAL_MS = 2_500;\nconst INLINE_APPROVAL_MAX_POLL_INTERVAL_MS = 15_000;\nconst INLINE_APPROVAL_BACKOFF_MULTIPLIER = 2;\nconst inflightInlineApprovalWaits = new Map<string, Promise<void>>();\n\nasync function waitForApprovalInline(\n client: OpenBoxClient,\n descriptor: ReturnType<typeof resolveActivityDescriptor>,\n reason: string | undefined\n): Promise<void> {\n const inflightKey = `${descriptor.runId}::${descriptor.activityId}`;\n const existingWait = inflightInlineApprovalWaits.get(inflightKey);\n\n if (existingWait) {\n await existingWait;\n return;\n }\n\n const waitPromise = (async () => {\n const timeoutAt = Date.now() + INLINE_APPROVAL_TIMEOUT_MS;\n let pollIntervalMs = INLINE_APPROVAL_INITIAL_POLL_INTERVAL_MS;\n\n while (Date.now() < timeoutAt) {\n await delay(pollIntervalMs);\n\n if (Date.now() >= timeoutAt) {\n break;\n }\n\n const approval = await client.pollApproval({\n activityId: descriptor.activityId,\n runId: descriptor.runId,\n workflowId: descriptor.workflowId\n });\n\n if (!approval) {\n pollIntervalMs = Math.min(\n INLINE_APPROVAL_MAX_POLL_INTERVAL_MS,\n Math.ceil(pollIntervalMs * INLINE_APPROVAL_BACKOFF_MULTIPLIER)\n );\n continue;\n }\n\n if (approval.expired) {\n clearPendingApproval(descriptor.runId);\n throw new ApprovalExpiredError(\n `Approval expired for activity ${descriptor.activityType}`\n );\n }\n\n const verdict = Verdict.fromString(\n (approval.verdict) ??\n (approval.action)\n );\n\n if (verdict === Verdict.ALLOW) {\n markActivityApproved(descriptor.runId, descriptor.activityId);\n clearPendingApproval(descriptor.runId);\n return;\n }\n\n if (Verdict.shouldStop(verdict)) {\n clearPendingApproval(descriptor.runId);\n throw new ApprovalRejectedError(\n `Activity rejected: ${String(approval.reason ?? \"Activity rejected\")}`\n );\n }\n\n pollIntervalMs = Math.min(\n INLINE_APPROVAL_MAX_POLL_INTERVAL_MS,\n Math.ceil(pollIntervalMs * INLINE_APPROVAL_BACKOFF_MULTIPLIER)\n );\n }\n\n throw new ApprovalPendingError(\n reason ?? `Awaiting approval for activity ${descriptor.activityType}`\n );\n })();\n\n inflightInlineApprovalWaits.set(inflightKey, waitPromise);\n\n try {\n await waitPromise;\n } finally {\n inflightInlineApprovalWaits.delete(inflightKey);\n }\n}\n\nasync function delay(ms: number): Promise<void> {\n if (ms <= 0) {\n return;\n }\n\n await new Promise<void>(resolve => {\n setTimeout(resolve, ms);\n });\n}\n\nexport function serializeValue(value: unknown): unknown {\n if (value == null) {\n return value;\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n\n if (value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"utf8\");\n }\n\n if (Array.isArray(value)) {\n return value.map(item => serializeValue(item));\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, entry]) => [\n key,\n serializeValue(entry)\n ])\n );\n }\n\n return String(value);\n}\n\nexport function normalizeSpansForGovernance(\n spans: Array<Record<string, unknown>>\n): Array<Record<string, unknown>> {\n return spans.map(span => normalizeSpanForGovernance(span));\n}\n\nfunction serializeActivityInputForStartEvent(value: unknown): unknown {\n const serialized = serializeValue(value);\n\n if (serialized == null) {\n return [];\n }\n\n return serialized;\n}\n\n// Guardrails need direct field access on ActivityStarted payloads, while the\n// current AGE service still expects ActivityCompleted.activity_input as a list.\nfunction serializeActivityInputForCompletedEvent(value: unknown): unknown[] {\n const serialized = serializeValue(value);\n\n if (serialized == null) {\n return [];\n }\n\n return Array.isArray(serialized) ? serialized : [serialized];\n}\n\nexport function appendGoalToActivityInput(\n activityInput: unknown,\n goal: string | undefined\n): unknown {\n if (!goal || goal.trim().length === 0) {\n return activityInput;\n }\n\n const trimmedGoal = goal.trim();\n\n if (trimmedGoal.length === 0) {\n return activityInput;\n }\n\n if (Array.isArray(activityInput)) {\n const inputItems = activityInput as unknown[];\n\n if (inputItems.length === 0) {\n return [{ goal: trimmedGoal }];\n }\n\n const [first, ...rest] = inputItems;\n\n if (first && typeof first === \"object\" && !Array.isArray(first)) {\n const firstRecord = first as Record<string, unknown>;\n const existingGoal = firstRecord.goal;\n\n if (typeof existingGoal === \"string\" && existingGoal.trim().length > 0) {\n return inputItems;\n }\n\n return [{ ...firstRecord, goal: trimmedGoal }, ...rest];\n }\n\n return [...inputItems, { goal: trimmedGoal }];\n }\n\n if (activityInput === undefined || activityInput === null) {\n return [{ goal: trimmedGoal }];\n }\n\n if (activityInput && typeof activityInput === \"object\") {\n const activityRecord = activityInput as Record<string, unknown>;\n const existingGoal = activityRecord.goal;\n\n if (typeof existingGoal === \"string\" && existingGoal.trim().length > 0) {\n return activityInput;\n }\n\n return {\n ...activityRecord,\n goal: trimmedGoal\n };\n }\n\n return [activityInput, { goal: trimmedGoal }];\n}\n\nfunction normalizeRedactedActivityInput(\n originalInput: unknown,\n redactedInput: unknown\n): unknown {\n // Governance services may return activity_input redaction in list form.\n // For single-argument tools/steps, unwrap list->value so execution shape is preserved.\n if (!Array.isArray(originalInput) && Array.isArray(redactedInput)) {\n if (redactedInput.length === 0) {\n return redactedInput;\n }\n\n if (redactedInput.length === 1) {\n return redactedInput[0];\n }\n }\n\n return redactedInput;\n}\n\nexport function applyRedaction(original: unknown, redacted: unknown): unknown {\n if (\n original &&\n redacted &&\n typeof original === \"object\" &&\n typeof redacted === \"object\" &&\n !Array.isArray(original) &&\n !Array.isArray(redacted)\n ) {\n const updated: Record<string, unknown> = {\n ...(original as Record<string, unknown>)\n };\n\n for (const [key, value] of Object.entries(redacted as Record<string, unknown>)) {\n updated[key] = applyRedaction(\n (original as Record<string, unknown>)[key],\n value\n );\n }\n\n return updated;\n }\n\n if (Array.isArray(redacted)) {\n return redacted.map((value, index) =>\n applyRedaction(Array.isArray(original) ? original[index] : undefined, value)\n );\n }\n\n return cloneValue(redacted);\n}\n\nfunction cloneValue<T>(value: T): T {\n if (value === undefined) {\n return value;\n }\n\n return structuredClone(value);\n}\n\nfunction rfc3339Now(): string {\n return new Date().toISOString();\n}\n\nfunction resolveActivityDescriptor(\n type: string,\n runtimeContext: ToolExecutionContextLike\n): {\n activityId: string;\n activityType: string;\n attempt: number;\n goal?: string;\n runId: string;\n taskQueue: string;\n workflowId: string;\n workflowType: string;\n} {\n const normalizedType = normalizeActivityType(type);\n const activeContext = getOpenBoxExecutionContext();\n const runId =\n runtimeContext.workflow?.runId ??\n activeContext?.runId ??\n runtimeContext.agent?.toolCallId ??\n randomUUID();\n const workflowId =\n runtimeContext.workflow?.workflowId ??\n activeContext?.workflowId ??\n `tool:${type}`;\n const workflowType = activeContext?.workflowType ?? workflowId;\n const activityId =\n runtimeContext.agent?.toolCallId ??\n activeContext?.activityId ??\n `${workflowId}:${type}`;\n\n return {\n activityId,\n activityType: normalizedType,\n attempt: activeContext?.attempt ?? 1,\n ...(activeContext?.goal ? { goal: activeContext.goal } : {}),\n runId,\n taskQueue: activeContext?.taskQueue ?? \"mastra\",\n workflowId,\n workflowType\n };\n}\n\nfunction normalizeActivityType(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n return \"activity\";\n }\n\n if (/^[a-z][A-Za-z0-9]*$/.test(trimmed)) {\n return trimmed;\n }\n\n const tokens = trimmed\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .split(/[^A-Za-z0-9]+/)\n .filter(Boolean)\n .map(token => token.toLowerCase());\n\n if (tokens.length === 0) {\n return \"activity\";\n }\n\n const [first, ...rest] = tokens;\n return `${first}${rest\n .map(token => token.charAt(0).toUpperCase() + token.slice(1))\n .join(\"\")}`;\n}\n\nasync function evaluateActivityEvent(\n dependencies: ActivityRuntimeDependencies,\n payload: Record<string, unknown> & {\n event_type: WorkflowEventType;\n }\n): Promise<GovernanceVerdictResponse | null> {\n const body = {\n source: \"workflow-telemetry\",\n timestamp: rfc3339Now(),\n ...payload\n };\n\n try {\n return await dependencies.client.evaluate(body);\n } catch (error) {\n if (dependencies.config.onApiError === \"fail_closed\") {\n return new GovernanceVerdictResponse({\n reason: `Governance API error: ${\n error instanceof Error ? error.message : String(error)\n }`,\n verdict: Verdict.HALT\n });\n }\n\n return null;\n }\n}\n\nfunction applyStopVerdict(\n verdict: GovernanceVerdictResponse | null\n): void {\n if (verdict && Verdict.shouldStop(verdict.verdict)) {\n throw new GovernanceHaltError(\n `Governance blocked: ${verdict.reason ?? \"No reason provided\"}`\n );\n }\n}\n\nfunction assertGuardrailsValid(\n verdict: GovernanceVerdictResponse | null,\n fallbackMessage: string\n): void {\n if (!verdict?.guardrailsResult || verdict.guardrailsResult.validationPassed) {\n return;\n }\n\n const reasons = verdict.guardrailsResult.getReasonStrings();\n const reason = reasons.length > 0 ? reasons.join(\"; \") : fallbackMessage;\n\n throw new GuardrailsValidationError(reason);\n}\n\nfunction serializeError(error: unknown): Record<string, unknown> {\n if (error instanceof Error) {\n return {\n message: error.message,\n type: error.name\n };\n }\n\n return {\n message: String(error),\n type: typeof error\n };\n}\n\nfunction ensureSpanBuffer(\n descriptor: {\n runId: string;\n taskQueue: string;\n workflowId: string;\n workflowType: string;\n },\n spanProcessor: OpenBoxSpanProcessor\n): void {\n const existing = spanProcessor.getBuffer(\n descriptor.workflowId,\n descriptor.runId\n );\n\n if (!existing || existing.runId !== descriptor.runId) {\n spanProcessor.registerWorkflow(\n descriptor.workflowId,\n new WorkflowSpanBuffer({\n runId: descriptor.runId,\n taskQueue: descriptor.taskQueue,\n workflowId: descriptor.workflowId,\n workflowType: descriptor.workflowType\n })\n );\n }\n}\n\nfunction normalizeSpanForGovernance(\n span: Record<string, unknown>\n): Record<string, unknown> {\n const attributes = asRecord(span.attributes);\n const normalizedAttributes = {\n ...attributes\n };\n const urlFull = toStringOrUndefined(normalizedAttributes[\"url.full\"]);\n\n if (!toStringOrUndefined(normalizedAttributes[\"http.url\"]) && urlFull) {\n normalizedAttributes[\"http.url\"] = urlFull;\n }\n\n const normalized: Record<string, unknown> = {\n attributes: normalizedAttributes,\n end_time: toFiniteNumber(span.end_time ?? span.endTime),\n events: normalizeSpanEvents(span.events),\n name: toStringOrUndefined(span.name),\n span_id: toStringOrUndefined(span.span_id ?? span.spanId),\n start_time: toFiniteNumber(span.start_time ?? span.startTime),\n trace_id: toStringOrUndefined(span.trace_id ?? span.traceId)\n };\n const parentSpanId = toStringOrUndefined(\n span.parent_span_id ?? span.parentSpanId\n );\n const kind = toStringOrUndefined(span.kind);\n const durationNs =\n toFiniteNumber(span.duration_ns ?? span.durationNs) ??\n calculateDurationNs(normalized.start_time, normalized.end_time);\n const status = normalizeSpanStatus(span.status);\n const requestHeaders = toStringRecord(\n span.request_headers ?? span.requestHeaders\n );\n const responseHeaders = toStringRecord(\n span.response_headers ?? span.responseHeaders\n );\n const requestBody = toStringOrUndefined(span.request_body ?? span.requestBody);\n const responseBody = toStringOrUndefined(span.response_body ?? span.responseBody);\n const semanticType = toStringOrUndefined(\n span.semantic_type ?? span.semanticType\n );\n\n if (parentSpanId) {\n normalized.parent_span_id = parentSpanId;\n }\n\n if (kind) {\n normalized.kind = kind;\n }\n\n if (durationNs !== undefined) {\n normalized.duration_ns = durationNs;\n }\n\n if (status) {\n normalized.status = status;\n }\n\n if (requestHeaders) {\n normalized.request_headers = requestHeaders;\n }\n\n if (responseHeaders) {\n normalized.response_headers = responseHeaders;\n }\n\n if (requestBody !== undefined) {\n normalized.request_body = requestBody;\n }\n\n if (responseBody !== undefined) {\n normalized.response_body = responseBody;\n }\n\n if (semanticType) {\n normalized.semantic_type = semanticType;\n }\n\n return normalized;\n}\n\nfunction calculateDurationNs(\n startTime: unknown,\n endTime: unknown\n): number | undefined {\n if (typeof startTime !== \"number\" || typeof endTime !== \"number\") {\n return undefined;\n }\n\n return Math.max(0, endTime - startTime);\n}\n\nfunction normalizeSpanEvents(events: unknown): Array<Record<string, unknown>> {\n if (!Array.isArray(events)) {\n return [];\n }\n\n return events.map(event => {\n const eventRecord = asRecord(event);\n\n return {\n attributes: asRecord(eventRecord.attributes),\n name: toStringOrUndefined(eventRecord.name) ?? \"\",\n timestamp: toFiniteNumber(eventRecord.timestamp) ?? 0\n };\n });\n}\n\nfunction normalizeSpanStatus(\n status: unknown\n): Record<string, unknown> | undefined {\n const statusRecord = asRecord(status);\n const code = toStringOrUndefined(statusRecord.code);\n const description = toStringOrUndefined(statusRecord.description);\n\n if (!code && !description) {\n return undefined;\n }\n\n return {\n ...(code ? { code } : {}),\n ...(description ? { description } : {})\n };\n}\n\nfunction toFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction toStringOrUndefined(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return {};\n }\n\n return value as Record<string, unknown>;\n}\n\nfunction toStringRecord(\n value: unknown\n): Record<string, string> | undefined {\n const record = asRecord(value);\n\n if (Object.keys(record).length === 0) {\n return undefined;\n }\n\n const serialized = Object.fromEntries(\n Object.entries(record).flatMap(([key, entry]) =>\n typeof entry === \"string\" ? ([[key, entry]] as const) : []\n )\n );\n\n return Object.keys(serialized).length > 0 ? serialized : undefined;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface PendingApprovalEntry {
|
|
2
|
+
activityId: string;
|
|
3
|
+
activityType: string;
|
|
4
|
+
approvalId?: string | undefined;
|
|
5
|
+
requestedAt: string;
|
|
6
|
+
runId: string;
|
|
7
|
+
workflowId: string;
|
|
8
|
+
workflowType: string;
|
|
9
|
+
}
|
|
10
|
+
declare function getPendingApproval(runId: string): PendingApprovalEntry | undefined;
|
|
11
|
+
declare function setPendingApproval(entry: PendingApprovalEntry): void;
|
|
12
|
+
declare function clearPendingApproval(runId: string): void;
|
|
13
|
+
declare function markActivityApproved(runId: string, activityId: string): void;
|
|
14
|
+
declare function isActivityApproved(runId: string, activityId: string): boolean;
|
|
15
|
+
declare function clearActivityApproval(runId: string, activityId: string): void;
|
|
16
|
+
|
|
17
|
+
export { type PendingApprovalEntry, clearActivityApproval, clearPendingApproval, getPendingApproval, isActivityApproved, markActivityApproved, setPendingApproval };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const pendingApprovals = /* @__PURE__ */ new Map();
|
|
2
|
+
const approvedActivities = /* @__PURE__ */ new Set();
|
|
3
|
+
function toApprovedActivityKey(runId, activityId) {
|
|
4
|
+
return `${runId}::${activityId}`;
|
|
5
|
+
}
|
|
6
|
+
function getPendingApproval(runId) {
|
|
7
|
+
return pendingApprovals.get(runId);
|
|
8
|
+
}
|
|
9
|
+
function setPendingApproval(entry) {
|
|
10
|
+
pendingApprovals.set(entry.runId, entry);
|
|
11
|
+
}
|
|
12
|
+
function clearPendingApproval(runId) {
|
|
13
|
+
pendingApprovals.delete(runId);
|
|
14
|
+
}
|
|
15
|
+
function markActivityApproved(runId, activityId) {
|
|
16
|
+
approvedActivities.add(toApprovedActivityKey(runId, activityId));
|
|
17
|
+
}
|
|
18
|
+
function isActivityApproved(runId, activityId) {
|
|
19
|
+
return approvedActivities.has(toApprovedActivityKey(runId, activityId));
|
|
20
|
+
}
|
|
21
|
+
function clearActivityApproval(runId, activityId) {
|
|
22
|
+
approvedActivities.delete(toApprovedActivityKey(runId, activityId));
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
clearActivityApproval,
|
|
26
|
+
clearPendingApproval,
|
|
27
|
+
getPendingApproval,
|
|
28
|
+
isActivityApproved,
|
|
29
|
+
markActivityApproved,
|
|
30
|
+
setPendingApproval
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=approval-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/governance/approval-registry.ts"],"sourcesContent":["export interface PendingApprovalEntry {\n activityId: string;\n activityType: string;\n approvalId?: string | undefined;\n requestedAt: string;\n runId: string;\n workflowId: string;\n workflowType: string;\n}\n\nconst pendingApprovals = new Map<string, PendingApprovalEntry>();\nconst approvedActivities = new Set<string>();\n\nfunction toApprovedActivityKey(runId: string, activityId: string): string {\n return `${runId}::${activityId}`;\n}\n\nexport function getPendingApproval(runId: string): PendingApprovalEntry | undefined {\n return pendingApprovals.get(runId);\n}\n\nexport function setPendingApproval(entry: PendingApprovalEntry): void {\n pendingApprovals.set(entry.runId, entry);\n}\n\nexport function clearPendingApproval(runId: string): void {\n pendingApprovals.delete(runId);\n}\n\nexport function markActivityApproved(runId: string, activityId: string): void {\n approvedActivities.add(toApprovedActivityKey(runId, activityId));\n}\n\nexport function isActivityApproved(runId: string, activityId: string): boolean {\n return approvedActivities.has(toApprovedActivityKey(runId, activityId));\n}\n\nexport function clearActivityApproval(runId: string, activityId: string): void {\n approvedActivities.delete(toApprovedActivityKey(runId, activityId));\n}\n"],"mappings":"AAUA,MAAM,mBAAmB,oBAAI,IAAkC;AAC/D,MAAM,qBAAqB,oBAAI,IAAY;AAE3C,SAAS,sBAAsB,OAAe,YAA4B;AACxE,SAAO,GAAG,KAAK,KAAK,UAAU;AAChC;AAEO,SAAS,mBAAmB,OAAiD;AAClF,SAAO,iBAAiB,IAAI,KAAK;AACnC;AAEO,SAAS,mBAAmB,OAAmC;AACpE,mBAAiB,IAAI,MAAM,OAAO,KAAK;AACzC;AAEO,SAAS,qBAAqB,OAAqB;AACxD,mBAAiB,OAAO,KAAK;AAC/B;AAEO,SAAS,qBAAqB,OAAe,YAA0B;AAC5E,qBAAmB,IAAI,sBAAsB,OAAO,UAAU,CAAC;AACjE;AAEO,SAAS,mBAAmB,OAAe,YAA6B;AAC7E,SAAO,mBAAmB,IAAI,sBAAsB,OAAO,UAAU,CAAC;AACxE;AAEO,SAAS,sBAAsB,OAAe,YAA0B;AAC7E,qBAAmB,OAAO,sBAAsB,OAAO,UAAU,CAAC;AACpE;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface OpenBoxExecutionContext {
|
|
2
|
+
activityId?: string | undefined;
|
|
3
|
+
activityType?: string | undefined;
|
|
4
|
+
agentId?: string | undefined;
|
|
5
|
+
attempt?: number | undefined;
|
|
6
|
+
goal?: string | undefined;
|
|
7
|
+
runId?: string | undefined;
|
|
8
|
+
source?: "agent" | "tool" | "workflow" | undefined;
|
|
9
|
+
taskQueue?: string | undefined;
|
|
10
|
+
workflowId?: string | undefined;
|
|
11
|
+
workflowType?: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
declare function getOpenBoxExecutionContext(): OpenBoxExecutionContext | undefined;
|
|
14
|
+
declare function runWithOpenBoxExecutionContext<T>(context: OpenBoxExecutionContext, callback: () => Promise<T>): Promise<T>;
|
|
15
|
+
|
|
16
|
+
export { type OpenBoxExecutionContext, getOpenBoxExecutionContext, runWithOpenBoxExecutionContext };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
const executionContextStore = new AsyncLocalStorage();
|
|
3
|
+
function getOpenBoxExecutionContext() {
|
|
4
|
+
return executionContextStore.getStore();
|
|
5
|
+
}
|
|
6
|
+
async function runWithOpenBoxExecutionContext(context, callback) {
|
|
7
|
+
return executionContextStore.run(context, callback);
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
getOpenBoxExecutionContext,
|
|
11
|
+
runWithOpenBoxExecutionContext
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/governance/context.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport interface OpenBoxExecutionContext {\n activityId?: string | undefined;\n activityType?: string | undefined;\n agentId?: string | undefined;\n attempt?: number | undefined;\n goal?: string | undefined;\n runId?: string | undefined;\n source?: \"agent\" | \"tool\" | \"workflow\" | undefined;\n taskQueue?: string | undefined;\n workflowId?: string | undefined;\n workflowType?: string | undefined;\n}\n\nconst executionContextStore = new AsyncLocalStorage<OpenBoxExecutionContext>();\n\nexport function getOpenBoxExecutionContext():\n | OpenBoxExecutionContext\n | undefined {\n return executionContextStore.getStore();\n}\n\nexport async function runWithOpenBoxExecutionContext<T>(\n context: OpenBoxExecutionContext,\n callback: () => Promise<T>\n): Promise<T> {\n return executionContextStore.run(context, callback);\n}\n"],"mappings":"AAAA,SAAS,yBAAyB;AAelC,MAAM,wBAAwB,IAAI,kBAA2C;AAEtE,SAAS,6BAEF;AACZ,SAAO,sBAAsB,SAAS;AACxC;AAEA,eAAsB,+BACpB,SACA,UACY;AACZ,SAAO,sBAAsB,IAAI,SAAS,QAAQ;AACpD;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { ApprovalPollRequest, ApprovalPollResponse, OpenBoxApiErrorPolicy, OpenBoxClient, OpenBoxClientOptions } from './client/openbox-client.js';
|
|
2
|
+
export { API_KEY_PATTERN, OpenBoxConfig, OpenBoxConfigInput, getOpenBoxConfig, initializeOpenBox, parseOpenBoxConfig, setOpenBoxConfig, validateApiKeyFormat, validateUrlSecurity } from './config/openbox-config.js';
|
|
3
|
+
export { WrapToolOptions, wrapTool } from './mastra/wrap-tool.js';
|
|
4
|
+
export { wrapAgent } from './mastra/wrap-agent.js';
|
|
5
|
+
export { wrapWorkflow } from './mastra/wrap-workflow.js';
|
|
6
|
+
export { OpenBoxRuntime, WithOpenBoxOptions, getOpenBoxRuntime, withOpenBox } from './mastra/with-openbox.js';
|
|
7
|
+
export { OpenBoxTelemetryController, OpenBoxTelemetryOptions, OpenBoxTracedOptions, setupOpenBoxOpenTelemetry, traced } from './otel/setup-openbox-opentelemetry.js';
|
|
8
|
+
export { OpenBoxSpanData, OpenBoxSpanProcessor, OpenBoxSpanProcessorOptions, StoredSpanBody, StoredTraceBody, StoredWorkflowVerdict, WorkflowSpanProcessor } from './span/openbox-span-processor.js';
|
|
9
|
+
export { ApprovalExpiredError, ApprovalPendingError, ApprovalRejectedError, GovernanceAPIError, GovernanceHaltError, GuardrailsValidationError, OpenBoxAuthError, OpenBoxConfigError, OpenBoxError, OpenBoxInsecureURLError, OpenBoxNetworkError } from './types/errors.js';
|
|
10
|
+
export { GovernanceVerdictResponse, GovernanceVerdictResponseInit } from './types/governance-verdict-response.js';
|
|
11
|
+
export { GuardrailReason, GuardrailsCheckResult, GuardrailsCheckResultInit } from './types/guardrails.js';
|
|
12
|
+
export { Verdict } from './types/verdict.js';
|
|
13
|
+
export { WorkflowEventType } from './types/workflow-event-type.js';
|
|
14
|
+
export { WorkflowSpanBuffer, WorkflowSpanBufferInit } from './types/workflow-span-buffer.js';
|
|
15
|
+
import '@opentelemetry/instrumentation';
|
|
16
|
+
import '@opentelemetry/sdk-trace-node';
|
|
17
|
+
import '@opentelemetry/api';
|
|
18
|
+
import '@opentelemetry/sdk-trace-base';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./client/index.js";
|
|
2
|
+
export * from "./config/index.js";
|
|
3
|
+
export * from "./governance/index.js";
|
|
4
|
+
export * from "./mastra/index.js";
|
|
5
|
+
export * from "./otel/index.js";
|
|
6
|
+
export * from "./span/index.js";
|
|
7
|
+
export * from "./types/index.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./client/index.js\";\nexport * from \"./config/index.js\";\nexport * from \"./governance/index.js\";\nexport * from \"./mastra/index.js\";\nexport * from \"./otel/index.js\";\nexport * from \"./span/index.js\";\nexport * from \"./types/index.js\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { WrapToolOptions, wrapTool } from './wrap-tool.js';
|
|
2
|
+
export { wrapAgent } from './wrap-agent.js';
|
|
3
|
+
export { wrapWorkflow } from './wrap-workflow.js';
|
|
4
|
+
export { OpenBoxRuntime, WithOpenBoxOptions, getOpenBoxRuntime, withOpenBox } from './with-openbox.js';
|
|
5
|
+
import '../client/openbox-client.js';
|
|
6
|
+
import '../types/governance-verdict-response.js';
|
|
7
|
+
import '../types/guardrails.js';
|
|
8
|
+
import '../types/verdict.js';
|
|
9
|
+
import '../config/openbox-config.js';
|
|
10
|
+
import '../span/openbox-span-processor.js';
|
|
11
|
+
import '@opentelemetry/api';
|
|
12
|
+
import '@opentelemetry/sdk-trace-base';
|
|
13
|
+
import '../types/workflow-span-buffer.js';
|
|
14
|
+
import '../otel/setup-openbox-opentelemetry.js';
|
|
15
|
+
import '@opentelemetry/instrumentation';
|
|
16
|
+
import '@opentelemetry/sdk-trace-node';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/mastra/index.ts"],"sourcesContent":["export * from \"./wrap-tool.js\";\nexport * from \"./wrap-agent.js\";\nexport * from \"./wrap-workflow.js\";\nexport * from \"./with-openbox.js\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { OpenBoxClient } from '../client/openbox-client.js';
|
|
2
|
+
import { OpenBoxConfigInput } from '../config/openbox-config.js';
|
|
3
|
+
import { OpenBoxTelemetryController } from '../otel/setup-openbox-opentelemetry.js';
|
|
4
|
+
import { OpenBoxSpanProcessor } from '../span/openbox-span-processor.js';
|
|
5
|
+
import { WrapToolOptions } from './wrap-tool.js';
|
|
6
|
+
import '../types/governance-verdict-response.js';
|
|
7
|
+
import '../types/guardrails.js';
|
|
8
|
+
import '../types/verdict.js';
|
|
9
|
+
import '@opentelemetry/instrumentation';
|
|
10
|
+
import '@opentelemetry/sdk-trace-node';
|
|
11
|
+
import '@opentelemetry/api';
|
|
12
|
+
import '@opentelemetry/sdk-trace-base';
|
|
13
|
+
import '../types/workflow-span-buffer.js';
|
|
14
|
+
|
|
15
|
+
interface WithOpenBoxOptions extends OpenBoxConfigInput {
|
|
16
|
+
client?: OpenBoxClient | undefined;
|
|
17
|
+
dbLibraries?: ReadonlySet<string> | undefined;
|
|
18
|
+
fetch?: typeof fetch | undefined;
|
|
19
|
+
fileSkipPatterns?: string[] | undefined;
|
|
20
|
+
ignoredUrls?: string[] | undefined;
|
|
21
|
+
spanProcessor?: OpenBoxSpanProcessor | undefined;
|
|
22
|
+
}
|
|
23
|
+
interface OpenBoxRuntime extends WrapToolOptions {
|
|
24
|
+
shutdown: () => Promise<void>;
|
|
25
|
+
telemetry: OpenBoxTelemetryController;
|
|
26
|
+
}
|
|
27
|
+
declare function withOpenBox<TTarget extends object>(target: TTarget, options?: WithOpenBoxOptions): Promise<TTarget>;
|
|
28
|
+
declare function getOpenBoxRuntime(target: unknown): OpenBoxRuntime | undefined;
|
|
29
|
+
|
|
30
|
+
export { type OpenBoxRuntime, type WithOpenBoxOptions, getOpenBoxRuntime, withOpenBox };
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { OpenBoxClient } from "../client/index.js";
|
|
2
|
+
import {
|
|
3
|
+
parseOpenBoxConfig,
|
|
4
|
+
setOpenBoxConfig
|
|
5
|
+
} from "../config/index.js";
|
|
6
|
+
import { setupOpenBoxOpenTelemetry } from "../otel/index.js";
|
|
7
|
+
import { OpenBoxSpanProcessor } from "../span/index.js";
|
|
8
|
+
import { OpenBoxConfigError } from "../types/index.js";
|
|
9
|
+
import { wrapAgent } from "./wrap-agent.js";
|
|
10
|
+
import { wrapTool } from "./wrap-tool.js";
|
|
11
|
+
import { wrapWorkflow } from "./wrap-workflow.js";
|
|
12
|
+
const OPENBOX_RUNTIME = /* @__PURE__ */ Symbol.for("openbox.mastra.runtime");
|
|
13
|
+
const OPENBOX_WITH_OPENBOX = /* @__PURE__ */ Symbol.for("openbox.mastra.withOpenBox");
|
|
14
|
+
const OPENBOX_AGENT_LOCAL_PATCH = /* @__PURE__ */ Symbol.for("openbox.mastra.withOpenBox.agentLocal");
|
|
15
|
+
const OPENBOX_MASTRA_PATCH = /* @__PURE__ */ Symbol.for("openbox.mastra.withOpenBox.mastra");
|
|
16
|
+
async function withOpenBox(target, options = {}) {
|
|
17
|
+
const resolved = resolveMastraTarget(target);
|
|
18
|
+
const existingRuntime = getOpenBoxRuntime(resolved.mastra);
|
|
19
|
+
if (existingRuntime) {
|
|
20
|
+
attachRuntime(target, existingRuntime);
|
|
21
|
+
return target;
|
|
22
|
+
}
|
|
23
|
+
const runtime = await createRuntime(options);
|
|
24
|
+
patchMastra(resolved.mastra, runtime);
|
|
25
|
+
wrapTopLevelRegistries(resolved.mastra, runtime);
|
|
26
|
+
await hydrateAgentLocalRegistries(resolved.mastra, runtime);
|
|
27
|
+
defineHiddenProperty(resolved.mastra, OPENBOX_WITH_OPENBOX, true);
|
|
28
|
+
attachRuntime(target, runtime);
|
|
29
|
+
return target;
|
|
30
|
+
}
|
|
31
|
+
function getOpenBoxRuntime(target) {
|
|
32
|
+
if (!target || typeof target !== "object") {
|
|
33
|
+
return void 0;
|
|
34
|
+
}
|
|
35
|
+
const directRuntime = target[OPENBOX_RUNTIME];
|
|
36
|
+
if (directRuntime) {
|
|
37
|
+
return directRuntime;
|
|
38
|
+
}
|
|
39
|
+
const nestedMastra = target.mastra;
|
|
40
|
+
if (looksLikeMastra(nestedMastra)) {
|
|
41
|
+
return nestedMastra[OPENBOX_RUNTIME];
|
|
42
|
+
}
|
|
43
|
+
return void 0;
|
|
44
|
+
}
|
|
45
|
+
async function createRuntime(options) {
|
|
46
|
+
const config = parseOpenBoxConfig(options);
|
|
47
|
+
const client = options.client ?? new OpenBoxClient(buildClientOptions(config, options.fetch));
|
|
48
|
+
if (config.validate) {
|
|
49
|
+
await client.validateApiKey();
|
|
50
|
+
}
|
|
51
|
+
setOpenBoxConfig(config);
|
|
52
|
+
const ignoredUrls = [.../* @__PURE__ */ new Set([config.apiUrl, ...options.ignoredUrls ?? []])];
|
|
53
|
+
const spanProcessor = options.spanProcessor ?? new OpenBoxSpanProcessor({
|
|
54
|
+
ignoredUrlPrefixes: ignoredUrls
|
|
55
|
+
});
|
|
56
|
+
const telemetry = setupOpenBoxOpenTelemetry({
|
|
57
|
+
captureHttpBodies: config.httpCapture,
|
|
58
|
+
dbLibraries: options.dbLibraries,
|
|
59
|
+
fileSkipPatterns: options.fileSkipPatterns,
|
|
60
|
+
governanceClient: client,
|
|
61
|
+
ignoredUrls,
|
|
62
|
+
instrumentDatabases: config.instrumentDatabases,
|
|
63
|
+
instrumentFileIo: config.instrumentFileIo,
|
|
64
|
+
onHookApiError: config.onApiError,
|
|
65
|
+
spanProcessor
|
|
66
|
+
});
|
|
67
|
+
let shutdownComplete = false;
|
|
68
|
+
return {
|
|
69
|
+
client,
|
|
70
|
+
config,
|
|
71
|
+
async shutdown() {
|
|
72
|
+
if (shutdownComplete) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
shutdownComplete = true;
|
|
76
|
+
await telemetry.shutdown();
|
|
77
|
+
},
|
|
78
|
+
spanProcessor,
|
|
79
|
+
telemetry
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function resolveMastraTarget(target) {
|
|
83
|
+
if (looksLikeMastra(target)) {
|
|
84
|
+
return {
|
|
85
|
+
mastra: target
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const nestedMastra = target.mastra;
|
|
89
|
+
if (looksLikeMastra(nestedMastra)) {
|
|
90
|
+
return {
|
|
91
|
+
mastra: nestedMastra
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
throw new OpenBoxConfigError(
|
|
95
|
+
"withOpenBox() expected a Mastra instance or an app object with a 'mastra' property."
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
function patchMastra(mastra, runtime) {
|
|
99
|
+
const baseMastra = mastra;
|
|
100
|
+
if (baseMastra[OPENBOX_MASTRA_PATCH]) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const originalAddTool = mastra.addTool.bind(mastra);
|
|
104
|
+
const originalAddWorkflow = mastra.addWorkflow.bind(mastra);
|
|
105
|
+
const originalAddAgent = mastra.addAgent.bind(mastra);
|
|
106
|
+
mastra.addTool = ((tool, key) => {
|
|
107
|
+
originalAddTool(wrapTool(tool, runtime), key);
|
|
108
|
+
});
|
|
109
|
+
mastra.addWorkflow = ((workflow, key) => {
|
|
110
|
+
originalAddWorkflow(wrapWorkflow(workflow, runtime), key);
|
|
111
|
+
});
|
|
112
|
+
mastra.addAgent = ((agent, key, options) => {
|
|
113
|
+
const wrappedAgent = patchAgent(agent, runtime);
|
|
114
|
+
originalAddAgent(wrappedAgent, key, options);
|
|
115
|
+
void hydrateAgentLocalRegistriesForAgent(wrappedAgent, runtime);
|
|
116
|
+
});
|
|
117
|
+
defineHiddenProperty(baseMastra, OPENBOX_MASTRA_PATCH, true);
|
|
118
|
+
}
|
|
119
|
+
function wrapTopLevelRegistries(mastra, runtime) {
|
|
120
|
+
wrapToolRecord(mastra.listTools(), runtime);
|
|
121
|
+
wrapWorkflowRecord(mastra.listWorkflows(), runtime);
|
|
122
|
+
const agents = mastra.listAgents();
|
|
123
|
+
for (const [key, agent] of Object.entries(agents)) {
|
|
124
|
+
agents[key] = patchAgent(agent, runtime);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async function hydrateAgentLocalRegistries(mastra, runtime) {
|
|
128
|
+
const agents = mastra.listAgents();
|
|
129
|
+
await Promise.all(
|
|
130
|
+
Object.values(agents).map((agent) => hydrateAgentLocalRegistriesForAgent(agent, runtime))
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
async function hydrateAgentLocalRegistriesForAgent(agent, runtime) {
|
|
134
|
+
const patchedAgent = patchAgent(agent, runtime);
|
|
135
|
+
if (patchedAgent.listTools) {
|
|
136
|
+
const tools = await patchedAgent.listTools();
|
|
137
|
+
applyAgentToolRecord(patchedAgent, tools, runtime);
|
|
138
|
+
}
|
|
139
|
+
if (patchedAgent.listWorkflows) {
|
|
140
|
+
const workflows = await patchedAgent.listWorkflows();
|
|
141
|
+
wrapWorkflowRecord(workflows, runtime);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function patchAgent(agent, runtime) {
|
|
145
|
+
const wrappedAgent = wrapAgent(agent, runtime);
|
|
146
|
+
const baseAgent = wrappedAgent;
|
|
147
|
+
if (baseAgent[OPENBOX_AGENT_LOCAL_PATCH]) {
|
|
148
|
+
return wrappedAgent;
|
|
149
|
+
}
|
|
150
|
+
const originalSetTools = baseAgent.__setTools?.bind(baseAgent);
|
|
151
|
+
const originalListTools = baseAgent.listTools?.bind(baseAgent);
|
|
152
|
+
const originalListWorkflows = baseAgent.listWorkflows?.bind(baseAgent);
|
|
153
|
+
if (originalSetTools) {
|
|
154
|
+
baseAgent.__setTools = (tools) => {
|
|
155
|
+
const wrappedTools = wrapToolRecord(tools, runtime);
|
|
156
|
+
originalSetTools(wrappedTools);
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
if (originalListTools) {
|
|
160
|
+
baseAgent.listTools = (...args) => {
|
|
161
|
+
const result = originalListTools(...args);
|
|
162
|
+
if (isPromise(result)) {
|
|
163
|
+
return result.then((tools) => applyAgentToolRecord(baseAgent, tools, runtime));
|
|
164
|
+
}
|
|
165
|
+
return applyAgentToolRecord(baseAgent, result, runtime);
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
if (originalListWorkflows) {
|
|
169
|
+
baseAgent.listWorkflows = (...args) => {
|
|
170
|
+
const result = originalListWorkflows(...args);
|
|
171
|
+
if (isPromise(result)) {
|
|
172
|
+
return result.then((workflows) => wrapWorkflowRecord(workflows, runtime));
|
|
173
|
+
}
|
|
174
|
+
return wrapWorkflowRecord(result, runtime);
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
defineHiddenProperty(baseAgent, OPENBOX_AGENT_LOCAL_PATCH, true);
|
|
178
|
+
return wrappedAgent;
|
|
179
|
+
}
|
|
180
|
+
function applyAgentToolRecord(agent, tools, runtime) {
|
|
181
|
+
const wrappedTools = wrapToolRecord(tools, runtime);
|
|
182
|
+
agent.__setTools?.(wrappedTools);
|
|
183
|
+
return wrappedTools;
|
|
184
|
+
}
|
|
185
|
+
function wrapToolRecord(tools, runtime) {
|
|
186
|
+
if (!tools) {
|
|
187
|
+
return tools;
|
|
188
|
+
}
|
|
189
|
+
for (const [key, tool] of Object.entries(tools)) {
|
|
190
|
+
tools[key] = wrapTool(tool, runtime);
|
|
191
|
+
}
|
|
192
|
+
return tools;
|
|
193
|
+
}
|
|
194
|
+
function wrapWorkflowRecord(workflows, runtime) {
|
|
195
|
+
if (!workflows) {
|
|
196
|
+
return workflows;
|
|
197
|
+
}
|
|
198
|
+
for (const [key, workflow] of Object.entries(workflows)) {
|
|
199
|
+
workflows[key] = wrapWorkflow(workflow, runtime);
|
|
200
|
+
}
|
|
201
|
+
return workflows;
|
|
202
|
+
}
|
|
203
|
+
function attachRuntime(target, runtime) {
|
|
204
|
+
defineHiddenProperty(target, OPENBOX_RUNTIME, runtime);
|
|
205
|
+
const nestedMastra = target.mastra;
|
|
206
|
+
if (!looksLikeMastra(target) && looksLikeMastra(nestedMastra)) {
|
|
207
|
+
defineHiddenProperty(nestedMastra, OPENBOX_RUNTIME, runtime);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function defineHiddenProperty(target, key, value) {
|
|
211
|
+
Object.defineProperty(target, key, {
|
|
212
|
+
configurable: true,
|
|
213
|
+
enumerable: false,
|
|
214
|
+
value,
|
|
215
|
+
writable: true
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function looksLikeMastra(value) {
|
|
219
|
+
if (!value || typeof value !== "object") {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
const candidate = value;
|
|
223
|
+
return typeof candidate.addAgent === "function" && typeof candidate.addTool === "function" && typeof candidate.addWorkflow === "function" && typeof candidate.listAgents === "function" && typeof candidate.listTools === "function" && typeof candidate.listWorkflows === "function";
|
|
224
|
+
}
|
|
225
|
+
function buildClientOptions(config, customFetch) {
|
|
226
|
+
return {
|
|
227
|
+
...customFetch ? { fetch: customFetch } : {},
|
|
228
|
+
apiKey: config.apiKey,
|
|
229
|
+
apiUrl: config.apiUrl,
|
|
230
|
+
evaluateMaxRetries: config.evaluateMaxRetries,
|
|
231
|
+
evaluateRetryBaseDelayMs: config.evaluateRetryBaseDelayMs,
|
|
232
|
+
onApiError: config.onApiError,
|
|
233
|
+
timeoutSeconds: config.governanceTimeout
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
function isPromise(value) {
|
|
237
|
+
return typeof value === "object" && value !== null && typeof value.then === "function";
|
|
238
|
+
}
|
|
239
|
+
export {
|
|
240
|
+
getOpenBoxRuntime,
|
|
241
|
+
withOpenBox
|
|
242
|
+
};
|
|
243
|
+
//# sourceMappingURL=with-openbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/mastra/with-openbox.ts"],"sourcesContent":["import type { Mastra } from \"@mastra/core/mastra\";\n\nimport { OpenBoxClient } from \"../client/index.js\";\nimport {\n parseOpenBoxConfig,\n setOpenBoxConfig,\n type OpenBoxConfig,\n type OpenBoxConfigInput\n} from \"../config/index.js\";\nimport { setupOpenBoxOpenTelemetry, type OpenBoxTelemetryController } from \"../otel/index.js\";\nimport { OpenBoxSpanProcessor } from \"../span/index.js\";\nimport { OpenBoxConfigError } from \"../types/index.js\";\nimport { wrapAgent } from \"./wrap-agent.js\";\nimport { wrapTool, type WrapToolOptions } from \"./wrap-tool.js\";\nimport { wrapWorkflow } from \"./wrap-workflow.js\";\n\nconst OPENBOX_RUNTIME = Symbol.for(\"openbox.mastra.runtime\");\nconst OPENBOX_WITH_OPENBOX = Symbol.for(\"openbox.mastra.withOpenBox\");\nconst OPENBOX_AGENT_LOCAL_PATCH = Symbol.for(\"openbox.mastra.withOpenBox.agentLocal\");\nconst OPENBOX_MASTRA_PATCH = Symbol.for(\"openbox.mastra.withOpenBox.mastra\");\n\ntype GovernableMastra = Mastra;\ntype ToolRecord = Record<string, unknown>;\ntype WorkflowRecord = Record<string, unknown>;\n\ninterface AgentWithLocalRegistries extends Record<PropertyKey, unknown> {\n __setTools?: ((tools: ToolRecord) => void) | undefined;\n listTools?: ((...args: unknown[]) => ToolRecord | Promise<ToolRecord>) | undefined;\n listWorkflows?: ((...args: unknown[]) => WorkflowRecord | Promise<WorkflowRecord>) | undefined;\n}\n\nexport interface WithOpenBoxOptions extends OpenBoxConfigInput {\n client?: OpenBoxClient | undefined;\n dbLibraries?: ReadonlySet<string> | undefined;\n fetch?: typeof fetch | undefined;\n fileSkipPatterns?: string[] | undefined;\n ignoredUrls?: string[] | undefined;\n spanProcessor?: OpenBoxSpanProcessor | undefined;\n}\n\nexport interface OpenBoxRuntime extends WrapToolOptions {\n shutdown: () => Promise<void>;\n telemetry: OpenBoxTelemetryController;\n}\n\nexport async function withOpenBox<TTarget extends object>(\n target: TTarget,\n options: WithOpenBoxOptions = {}\n): Promise<TTarget> {\n const resolved = resolveMastraTarget(target);\n const existingRuntime = getOpenBoxRuntime(resolved.mastra);\n\n if (existingRuntime) {\n attachRuntime(target, existingRuntime);\n return target;\n }\n\n const runtime = await createRuntime(options);\n\n patchMastra(resolved.mastra, runtime);\n wrapTopLevelRegistries(resolved.mastra, runtime);\n await hydrateAgentLocalRegistries(resolved.mastra, runtime);\n\n defineHiddenProperty(resolved.mastra, OPENBOX_WITH_OPENBOX, true);\n attachRuntime(target, runtime);\n\n return target;\n}\n\nexport function getOpenBoxRuntime(target: unknown): OpenBoxRuntime | undefined {\n if (!target || typeof target !== \"object\") {\n return undefined;\n }\n\n const directRuntime = (target as Record<PropertyKey, unknown>)[\n OPENBOX_RUNTIME\n ] as OpenBoxRuntime | undefined;\n\n if (directRuntime) {\n return directRuntime;\n }\n\n const nestedMastra = (target as { mastra?: unknown }).mastra;\n\n if (looksLikeMastra(nestedMastra)) {\n return (nestedMastra as unknown as Record<PropertyKey, unknown>)[\n OPENBOX_RUNTIME\n ] as OpenBoxRuntime | undefined;\n }\n\n return undefined;\n}\n\nasync function createRuntime(options: WithOpenBoxOptions): Promise<OpenBoxRuntime> {\n const config = parseOpenBoxConfig(options);\n const client =\n options.client ??\n new OpenBoxClient(buildClientOptions(config, options.fetch));\n\n if (config.validate) {\n await client.validateApiKey();\n }\n\n setOpenBoxConfig(config);\n\n const ignoredUrls = [...new Set([config.apiUrl, ...(options.ignoredUrls ?? [])])];\n const spanProcessor =\n options.spanProcessor ??\n new OpenBoxSpanProcessor({\n ignoredUrlPrefixes: ignoredUrls\n });\n const telemetry = setupOpenBoxOpenTelemetry({\n captureHttpBodies: config.httpCapture,\n dbLibraries: options.dbLibraries,\n fileSkipPatterns: options.fileSkipPatterns,\n governanceClient: client,\n ignoredUrls,\n instrumentDatabases: config.instrumentDatabases,\n instrumentFileIo: config.instrumentFileIo,\n onHookApiError: config.onApiError,\n spanProcessor\n });\n let shutdownComplete = false;\n\n return {\n client,\n config,\n async shutdown() {\n if (shutdownComplete) {\n return;\n }\n\n shutdownComplete = true;\n await telemetry.shutdown();\n },\n spanProcessor,\n telemetry\n };\n}\n\nfunction resolveMastraTarget(target: object): { mastra: GovernableMastra } {\n if (looksLikeMastra(target)) {\n return {\n mastra: target\n };\n }\n\n const nestedMastra = (target as { mastra?: unknown }).mastra;\n\n if (looksLikeMastra(nestedMastra)) {\n return {\n mastra: nestedMastra\n };\n }\n\n throw new OpenBoxConfigError(\n \"withOpenBox() expected a Mastra instance or an app object with a 'mastra' property.\"\n );\n}\n\nfunction patchMastra(mastra: GovernableMastra, runtime: OpenBoxRuntime): void {\n const baseMastra = mastra as GovernableMastra & Record<PropertyKey, unknown>;\n\n if (baseMastra[OPENBOX_MASTRA_PATCH]) {\n return;\n }\n\n const originalAddTool = mastra.addTool.bind(mastra);\n const originalAddWorkflow = mastra.addWorkflow.bind(mastra);\n const originalAddAgent = mastra.addAgent.bind(mastra);\n\n mastra.addTool = ((tool: Parameters<typeof originalAddTool>[0], key?: string) => {\n originalAddTool(wrapTool(tool, runtime), key);\n }) as GovernableMastra[\"addTool\"];\n\n mastra.addWorkflow = ((\n workflow: Parameters<typeof originalAddWorkflow>[0],\n key?: string\n ) => {\n originalAddWorkflow(wrapWorkflow(workflow, runtime), key);\n }) as GovernableMastra[\"addWorkflow\"];\n\n mastra.addAgent = ((\n agent: Parameters<typeof originalAddAgent>[0],\n key?: string,\n options?: Parameters<typeof originalAddAgent>[2]\n ) => {\n const wrappedAgent = patchAgent(agent, runtime);\n originalAddAgent(wrappedAgent, key, options);\n\n void hydrateAgentLocalRegistriesForAgent(wrappedAgent, runtime);\n }) as GovernableMastra[\"addAgent\"];\n\n defineHiddenProperty(baseMastra, OPENBOX_MASTRA_PATCH, true);\n}\n\nfunction wrapTopLevelRegistries(mastra: GovernableMastra, runtime: OpenBoxRuntime): void {\n wrapToolRecord(mastra.listTools(), runtime);\n wrapWorkflowRecord(mastra.listWorkflows(), runtime);\n\n const agents = mastra.listAgents();\n\n for (const [key, agent] of Object.entries(agents)) {\n agents[key] = patchAgent(agent, runtime);\n }\n}\n\nasync function hydrateAgentLocalRegistries(\n mastra: GovernableMastra,\n runtime: OpenBoxRuntime\n): Promise<void> {\n const agents = mastra.listAgents();\n\n await Promise.all(\n Object.values(agents).map(agent => hydrateAgentLocalRegistriesForAgent(agent, runtime))\n );\n}\n\nasync function hydrateAgentLocalRegistriesForAgent(\n agent: unknown,\n runtime: OpenBoxRuntime\n): Promise<void> {\n const patchedAgent = patchAgent(agent, runtime) as AgentWithLocalRegistries;\n\n if (patchedAgent.listTools) {\n const tools = await patchedAgent.listTools();\n applyAgentToolRecord(patchedAgent, tools, runtime);\n }\n\n if (patchedAgent.listWorkflows) {\n const workflows = await patchedAgent.listWorkflows();\n wrapWorkflowRecord(workflows, runtime);\n }\n}\n\nfunction patchAgent<TAgent>(agent: TAgent, runtime: OpenBoxRuntime): TAgent {\n const wrappedAgent = wrapAgent(agent, runtime);\n const baseAgent = wrappedAgent as AgentWithLocalRegistries;\n\n if (baseAgent[OPENBOX_AGENT_LOCAL_PATCH]) {\n return wrappedAgent;\n }\n\n const originalSetTools = baseAgent.__setTools?.bind(baseAgent);\n const originalListTools = baseAgent.listTools?.bind(baseAgent);\n const originalListWorkflows = baseAgent.listWorkflows?.bind(baseAgent);\n\n if (originalSetTools) {\n baseAgent.__setTools = (tools: ToolRecord) => {\n const wrappedTools = wrapToolRecord(tools, runtime);\n originalSetTools(wrappedTools);\n };\n }\n\n if (originalListTools) {\n baseAgent.listTools = (...args: unknown[]) => {\n const result = originalListTools(...args);\n\n if (isPromise(result)) {\n return result.then(tools => applyAgentToolRecord(baseAgent, tools, runtime));\n }\n\n return applyAgentToolRecord(baseAgent, result, runtime);\n };\n }\n\n if (originalListWorkflows) {\n baseAgent.listWorkflows = (...args: unknown[]) => {\n const result = originalListWorkflows(...args);\n\n if (isPromise(result)) {\n return result.then(workflows => wrapWorkflowRecord(workflows, runtime));\n }\n\n return wrapWorkflowRecord(result, runtime);\n };\n }\n\n defineHiddenProperty(baseAgent, OPENBOX_AGENT_LOCAL_PATCH, true);\n\n return wrappedAgent;\n}\n\nfunction applyAgentToolRecord(\n agent: AgentWithLocalRegistries,\n tools: ToolRecord,\n runtime: OpenBoxRuntime\n): ToolRecord {\n const wrappedTools = wrapToolRecord(tools, runtime);\n\n agent.__setTools?.(wrappedTools);\n\n return wrappedTools;\n}\n\nfunction wrapToolRecord<TRecord extends ToolRecord | undefined>(\n tools: TRecord,\n runtime: OpenBoxRuntime\n): TRecord {\n if (!tools) {\n return tools;\n }\n\n for (const [key, tool] of Object.entries(tools)) {\n tools[key] = wrapTool(tool, runtime);\n }\n\n return tools;\n}\n\nfunction wrapWorkflowRecord<TRecord extends WorkflowRecord | undefined>(\n workflows: TRecord,\n runtime: OpenBoxRuntime\n): TRecord {\n if (!workflows) {\n return workflows;\n }\n\n for (const [key, workflow] of Object.entries(workflows)) {\n workflows[key] = wrapWorkflow(workflow, runtime);\n }\n\n return workflows;\n}\n\nfunction attachRuntime(\n target: object,\n runtime: OpenBoxRuntime\n): void {\n defineHiddenProperty(target, OPENBOX_RUNTIME, runtime);\n\n const nestedMastra = (target as { mastra?: unknown }).mastra;\n\n if (!looksLikeMastra(target) && looksLikeMastra(nestedMastra)) {\n defineHiddenProperty(nestedMastra, OPENBOX_RUNTIME, runtime);\n }\n}\n\nfunction defineHiddenProperty(\n target: object,\n key: PropertyKey,\n value: unknown\n): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: false,\n value,\n writable: true\n });\n}\n\nfunction looksLikeMastra(value: unknown): value is GovernableMastra {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const candidate = value as Record<string, unknown>;\n\n return (\n typeof candidate.addAgent === \"function\" &&\n typeof candidate.addTool === \"function\" &&\n typeof candidate.addWorkflow === \"function\" &&\n typeof candidate.listAgents === \"function\" &&\n typeof candidate.listTools === \"function\" &&\n typeof candidate.listWorkflows === \"function\"\n );\n}\n\nfunction buildClientOptions(\n config: OpenBoxConfig,\n customFetch?: typeof fetch\n): ConstructorParameters<typeof OpenBoxClient>[0] {\n return {\n ...(customFetch ? { fetch: customFetch } : {}),\n apiKey: config.apiKey,\n apiUrl: config.apiUrl,\n evaluateMaxRetries: config.evaluateMaxRetries,\n evaluateRetryBaseDelayMs: config.evaluateRetryBaseDelayMs,\n onApiError: config.onApiError,\n timeoutSeconds: config.governanceTimeout\n };\n}\n\nfunction isPromise<T>(value: T | Promise<T>): value is Promise<T> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as Promise<T>).then === \"function\"\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { WrapToolOptions } from './wrap-tool.js';
|
|
2
|
+
import '../client/openbox-client.js';
|
|
3
|
+
import '../types/governance-verdict-response.js';
|
|
4
|
+
import '../types/guardrails.js';
|
|
5
|
+
import '../types/verdict.js';
|
|
6
|
+
import '../config/openbox-config.js';
|
|
7
|
+
import '../span/openbox-span-processor.js';
|
|
8
|
+
import '@opentelemetry/api';
|
|
9
|
+
import '@opentelemetry/sdk-trace-base';
|
|
10
|
+
import '../types/workflow-span-buffer.js';
|
|
11
|
+
|
|
12
|
+
declare function wrapAgent<TAgent>(agent: TAgent, options: WrapToolOptions): TAgent;
|
|
13
|
+
|
|
14
|
+
export { wrapAgent };
|