@bastani/atomic 0.9.41 → 0.9.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +99 -0
- package/dist/builtin/intercom/CHANGELOG.md +26 -0
- package/dist/builtin/intercom/README.md +7 -3
- package/dist/builtin/intercom/broker/broker-status.ts +48 -0
- package/dist/builtin/intercom/broker/broker.ts +90 -9
- package/dist/builtin/intercom/broker/client.ts +112 -12
- package/dist/builtin/intercom/broker/control.ts +225 -0
- package/dist/builtin/intercom/broker/multinode-router.ts +32 -39
- package/dist/builtin/intercom/broker/paths.ts +4 -0
- package/dist/builtin/intercom/broker/pending-send-registry.ts +27 -5
- package/dist/builtin/intercom/broker/shared-storage-setting.ts +60 -0
- package/dist/builtin/intercom/broker/spawn.ts +13 -4
- package/dist/builtin/intercom/broker/sql-lease-store.ts +23 -0
- package/dist/builtin/intercom/broker/watchdog.ts +105 -0
- package/dist/builtin/intercom/index.bundle.mjs +200 -22
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/types.ts +34 -2
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +1 -0
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +24 -0
- package/dist/builtin/workflows/README.md +10 -0
- package/dist/builtin/workflows/builtin/{chunk-txbc93t6.js → chunk-3s95f7ry.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-n2gkzkty.js → chunk-edhf30ef.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-8x61e0s7.js → chunk-frqxd4d1.js} +18 -9
- package/dist/builtin/workflows/builtin/goal.js +2 -2
- package/dist/builtin/workflows/builtin/index.js +3 -3
- package/dist/builtin/workflows/builtin/ralph.js +2 -2
- package/dist/builtin/workflows/package.json +6 -1
- package/dist/builtin/workflows/src/authoring.d.ts +3 -1
- package/dist/builtin/workflows/src/durable/journal/internal.d.ts +13 -0
- package/dist/builtin/workflows/src/durable/journal/resolution.d.ts +2 -0
- package/dist/builtin/workflows/src/durable/journal/sql-run-journal.d.ts +1 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +88554 -82820
- package/dist/builtin/workflows/src/extension/local-worker-entry.mjs +72635 -0
- package/dist/builtin/workflows/src/index.js +53824 -5907
- package/dist/builtin/workflows/src/local-worker-entry.mjs +72635 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +7 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +2 -0
- package/dist/builtin/workflows/src/workers/public-options.d.ts +31 -0
- package/dist/bun/app-host-modules.d.ts +9 -0
- package/dist/bun/app-host-modules.d.ts.map +1 -0
- package/dist/bun/app-host-modules.js +10 -0
- package/dist/bun/app-host-modules.js.map +1 -0
- package/dist/bun/cli.d.ts +3 -1
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +15 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/internal-intercom-broker.d.ts +17 -0
- package/dist/bun/internal-intercom-broker.d.ts.map +1 -1
- package/dist/bun/internal-intercom-broker.js +29 -0
- package/dist/bun/internal-intercom-broker.js.map +1 -1
- package/dist/bun/internal-workflow-worker.d.ts +4 -0
- package/dist/bun/internal-workflow-worker.d.ts.map +1 -0
- package/dist/bun/internal-workflow-worker.js +37 -0
- package/dist/bun/internal-workflow-worker.js.map +1 -0
- package/dist/bun/split-loader.js +10 -2
- package/dist/bun/split-loader.js.map +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +3 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/intercom-command.d.ts +15 -0
- package/dist/cli/intercom-command.d.ts.map +1 -0
- package/dist/cli/intercom-command.js +87 -0
- package/dist/cli/intercom-command.js.map +1 -0
- package/dist/cli/storage-command.d.ts +39 -0
- package/dist/cli/storage-command.d.ts.map +1 -0
- package/dist/cli/storage-command.js +367 -0
- package/dist/cli/storage-command.js.map +1 -0
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +5 -1
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +1 -0
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-tasks.d.ts.map +1 -1
- package/dist/core/agent-session-tasks.js +1 -0
- package/dist/core/agent-session-tasks.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +1 -0
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +2 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/builtin-install-layout.d.ts +6 -0
- package/dist/core/builtin-install-layout.d.ts.map +1 -1
- package/dist/core/builtin-install-layout.js +9 -0
- package/dist/core/builtin-install-layout.js.map +1 -1
- package/dist/core/child-session-options.d.ts.map +1 -1
- package/dist/core/child-session-options.js +3 -0
- package/dist/core/child-session-options.js.map +1 -1
- package/dist/core/exec.js +2 -2
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/template.css +9 -0
- package/dist/core/export-html/template.js +165 -45
- package/dist/core/extensions/loader-host-modules.d.ts +6 -0
- package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-host-modules.js +12 -1
- package/dist/core/extensions/loader-host-modules.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts +6 -0
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +18 -0
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/message-types.d.ts +4 -0
- package/dist/core/extensions/message-types.d.ts.map +1 -1
- package/dist/core/extensions/message-types.js.map +1 -1
- package/dist/core/fast-model-routing-transport.d.ts.map +1 -1
- package/dist/core/fast-model-routing-transport.js +5 -1
- package/dist/core/fast-model-routing-transport.js.map +1 -1
- package/dist/core/intercom-broker-control.d.ts +67 -0
- package/dist/core/intercom-broker-control.d.ts.map +1 -0
- package/dist/core/intercom-broker-control.js +17 -0
- package/dist/core/intercom-broker-control.js.map +1 -0
- package/dist/core/model-runtime-streaming.d.ts.map +1 -1
- package/dist/core/model-runtime-streaming.js +38 -1
- package/dist/core/model-runtime-streaming.js.map +1 -1
- package/dist/core/package-manager-git.d.ts +2 -2
- package/dist/core/package-manager-git.d.ts.map +1 -1
- package/dist/core/package-manager-git.js.map +1 -1
- package/dist/core/package-manager-manifest.d.ts.map +1 -1
- package/dist/core/package-manager-manifest.js +9 -1
- package/dist/core/package-manager-manifest.js.map +1 -1
- package/dist/core/package-manager-npm.d.ts +2 -2
- package/dist/core/package-manager-npm.d.ts.map +1 -1
- package/dist/core/package-manager-npm.js.map +1 -1
- package/dist/core/package-manager-paths.d.ts +7 -7
- package/dist/core/package-manager-paths.d.ts.map +1 -1
- package/dist/core/package-manager-paths.js.map +1 -1
- package/dist/core/package-manager-storage-adapters.d.ts +7 -0
- package/dist/core/package-manager-storage-adapters.d.ts.map +1 -0
- package/dist/core/package-manager-storage-adapters.js +76 -0
- package/dist/core/package-manager-storage-adapters.js.map +1 -0
- package/dist/core/package-manager-types.d.ts +4 -0
- package/dist/core/package-manager-types.d.ts.map +1 -1
- package/dist/core/package-manager-types.js.map +1 -1
- package/dist/core/provider-rate-limits.d.ts +23 -0
- package/dist/core/provider-rate-limits.d.ts.map +1 -0
- package/dist/core/provider-rate-limits.js +113 -0
- package/dist/core/provider-rate-limits.js.map +1 -0
- package/dist/core/provider-request-admission.d.ts +7 -0
- package/dist/core/provider-request-admission.d.ts.map +1 -0
- package/dist/core/provider-request-admission.js +91 -0
- package/dist/core/provider-request-admission.js.map +1 -0
- package/dist/core/resource-admission-scope.d.ts +4 -0
- package/dist/core/resource-admission-scope.d.ts.map +1 -0
- package/dist/core/resource-admission-scope.js +9 -0
- package/dist/core/resource-admission-scope.js.map +1 -0
- package/dist/core/sdk-types.d.ts +16 -0
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts +2 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +18 -2
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-lifecycle-work.d.ts +1 -0
- package/dist/core/session-lifecycle-work.d.ts.map +1 -1
- package/dist/core/session-lifecycle-work.js +1 -0
- package/dist/core/session-lifecycle-work.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +3 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +6 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-schema.d.ts +22 -0
- package/dist/core/settings-schema.d.ts.map +1 -1
- package/dist/core/settings-schema.js +18 -1
- package/dist/core/settings-schema.js.map +1 -1
- package/dist/core/storage/index.d.ts +1 -0
- package/dist/core/storage/index.d.ts.map +1 -1
- package/dist/core/storage/index.js +1 -0
- package/dist/core/storage/index.js.map +1 -1
- package/dist/core/storage/node-sqlite.d.ts +2 -1
- package/dist/core/storage/node-sqlite.d.ts.map +1 -1
- package/dist/core/storage/node-sqlite.js +5 -4
- package/dist/core/storage/node-sqlite.js.map +1 -1
- package/dist/core/storage/provider.d.ts +6 -0
- package/dist/core/storage/provider.d.ts.map +1 -1
- package/dist/core/storage/provider.js +27 -7
- package/dist/core/storage/provider.js.map +1 -1
- package/dist/core/storage/sqlite-facade.d.ts +49 -0
- package/dist/core/storage/sqlite-facade.d.ts.map +1 -0
- package/dist/core/storage/sqlite-facade.js +180 -0
- package/dist/core/storage/sqlite-facade.js.map +1 -0
- package/dist/core/storage/storage-status.d.ts +81 -0
- package/dist/core/storage/storage-status.d.ts.map +1 -0
- package/dist/core/storage/storage-status.js +409 -0
- package/dist/core/storage/storage-status.js.map +1 -0
- package/dist/core/tasks/supervisor.d.ts +2 -1
- package/dist/core/tasks/supervisor.d.ts.map +1 -1
- package/dist/core/tasks/supervisor.js +105 -4
- package/dist/core/tasks/supervisor.js.map +1 -1
- package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
- package/dist/core/tools/bash-pty-native.js +1 -1
- package/dist/core/tools/bash-pty-native.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +28 -2
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +3 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +7 -3
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +9 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +16 -8
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +5 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +69 -2
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.js +2 -2
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +80 -22
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +3 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +6 -2
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +6 -2
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive-engine/engine-health.d.ts +8 -4
- package/dist/modes/interactive-engine/engine-health.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-health.js +41 -6
- package/dist/modes/interactive-engine/engine-health.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +19 -17
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/remote-queue-pause.js +1 -1
- package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -1
- package/dist/modes/rpc/rpc-input-scheduler.d.ts +1 -0
- package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-input-scheduler.js +4 -1
- package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
- package/dist/modes/rpc/rpc-input.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-input.js +29 -7
- package/dist/modes/rpc/rpc-input.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +14 -0
- package/dist/utils/shell.js.map +1 -1
- package/docs/custom-provider/oauth.md +8 -1
- package/docs/extensions/api-reference.md +2 -0
- package/docs/intercom/operations.md +17 -8
- package/docs/intercom/reference.md +1 -1
- package/docs/keybindings.md +1 -1
- package/docs/packages/authoring.md +15 -0
- package/docs/packages.md +3 -2
- package/docs/providers.md +2 -0
- package/docs/reference/cli.md +17 -0
- package/docs/sdk.md +37 -0
- package/docs/settings.md +33 -2
- package/docs/storage.md +191 -219
- package/docs/usage.md +1 -1
- package/docs/workflows/api-reference.md +50 -0
- package/docs/workflows/operations.md +44 -1
- package/docs/workflows.md +25 -0
- package/examples/extensions/gondolin/package-lock.json +14 -24
- package/examples/extensions/gondolin/package.json +1 -1
- package/npm-shrinkwrap.json +35 -35
- package/package.json +4 -4
- package/schemas/settings.schema.json +87 -1
package/dist/core/exec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/core/exec.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAwB/F;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,OAAe,EACf,IAAc,EACd,GAAW,EACX,OAAqB;IAErB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,GAAG;YACH,KAAK,EAAE,KAAK;YACZ,yEAAyE;YACzE,uEAAuE;YACvE,yEAAyE;YACzE,yEAAyE;YACzE,+DAA+D;YAC/D,GAAG,EAAE,6BAA6B,EAAE;YACpC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SACjC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,SAAqC,CAAC;QAE1C,MAAM,WAAW,GAAG,GAAG,EAAE;YACxB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,GAAG,IAAI,CAAC;gBACd,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrB,qDAAqD;gBACrD,UAAU,CAAC,GAAG,EAAE;oBACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBAClB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACtB,CAAC;gBACF,CAAC,EAAE,IAAI,CAAC,CAAC;YACV,CAAC;QACF,CAAC,CAAC;QAEF,sBAAsB;QACtB,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACrB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC5B,WAAW,EAAE,CAAC;YACf,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACvE,CAAC;QACF,CAAC;QAED,iBAAiB;QACjB,IAAI,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YAC7C,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3B,WAAW,EAAE,CAAC;YACf,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,0EAA0E;QAC1E,qCAAqC;QACrC,mBAAmB,CAAC,IAAI,CAAC;aACvB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACd,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/core/exec.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared command execution utilities for extensions and custom tools.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { createChildProcessEnvironment, waitForChildProcess } from \"../utils/child-process.ts\";\n\n/**\n * Options for executing shell commands.\n */\nexport interface ExecOptions {\n\t/** AbortSignal to cancel the command */\n\tsignal?: AbortSignal;\n\t/** Timeout in milliseconds */\n\ttimeout?: number;\n\t/** Working directory */\n\tcwd?: string;\n}\n\n/**\n * Result of executing a shell command.\n */\nexport interface ExecResult {\n\tstdout: string;\n\tstderr: string;\n\tcode: number;\n\tkilled: boolean;\n}\n\n/**\n * Execute a shell command and return stdout/stderr/code.\n * Supports timeout and abort signal.\n */\nexport async function execCommand(\n\tcommand: string,\n\targs: string[],\n\tcwd: string,\n\toptions?: ExecOptions,\n): Promise<ExecResult> {\n\treturn new Promise((resolve) => {\n\t\tconst proc = spawn(command, args, {\n\t\t\tcwd,\n\t\t\tshell: false,\n\t\t\t// Pass the environment explicitly. Bun snapshots the process environment\n\t\t\t// at startup for spawns that omit `env`, so an inherited default would\n\t\t\t// still carry values this process deleted from `process.env` — including\n\t\t\t// the interactive-engine control variables and their --api-key. Preserve\n\t\t\t// Atomic's child attribution in the same explicit environment.\n\t\t\tenv: createChildProcessEnvironment(),\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t});\n\n\t\tlet stdout = \"\";\n\t\tlet stderr = \"\";\n\t\tlet killed = false;\n\t\tlet timeoutId: NodeJS.Timeout | undefined;\n\n\t\tconst killProcess = () => {\n\t\t\tif (!killed) {\n\t\t\t\tkilled = true;\n\t\t\t\tproc.kill(\"SIGTERM\");\n\t\t\t\t// Force kill after 5 seconds if SIGTERM doesn't work\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (!proc.killed) {\n\t\t\t\t\t\tproc.kill(\"SIGKILL\");\n\t\t\t\t\t}\n\t\t\t\t}, 5000);\n\t\t\t}\n\t\t};\n\n\t\t// Handle abort signal\n\t\tif (options?.signal) {\n\t\t\tif (options.signal.aborted) {\n\t\t\t\tkillProcess();\n\t\t\t} else {\n\t\t\t\toptions.signal.addEventListener(\"abort\", killProcess, { once: true });\n\t\t\t}\n\t\t}\n\n\t\t// Handle timeout\n\t\tif (options?.timeout && options.timeout > 0) {\n\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\tkillProcess();\n\t\t\t}, options.timeout);\n\t\t}\n\n\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\tstdout += data.toString();\n\t\t});\n\n\t\tproc.stderr?.on(\"data\", (data) => {\n\t\t\tstderr += data.toString();\n\t\t});\n\n\t\t// Wait for process termination without hanging on inherited stdio handles\n\t\t// held open by detached descendants.\n\t\twaitForChildProcess(proc)\n\t\t\t.then((code) => {\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\tif (options?.signal) {\n\t\t\t\t\toptions.signal.removeEventListener(\"abort\", killProcess);\n\t\t\t\t}\n\t\t\t\tresolve({ stdout, stderr, code: code ?? 0, killed });\n\t\t\t})\n\t\t\t.catch((error: Error) => {\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\tif (options?.signal) {\n\t\t\t\t\toptions.signal.removeEventListener(\"abort\", killProcess);\n\t\t\t\t}\n\t\t\t\tresolve({ stdout, stderr: stderr || error.message, code: 1, killed });\n\t\t\t});\n\t});\n}\n"]}
|
|
@@ -687,6 +687,15 @@
|
|
|
687
687
|
display: block;
|
|
688
688
|
}
|
|
689
689
|
|
|
690
|
+
.system-entry > .message-timestamp {
|
|
691
|
+
padding-left: var(--line-height);
|
|
692
|
+
margin-bottom: 4px;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
.system-entry > :last-child {
|
|
696
|
+
margin-bottom: 0;
|
|
697
|
+
}
|
|
698
|
+
|
|
690
699
|
.system-prompt.provider-prompt {
|
|
691
700
|
border-left: 3px solid var(--warning);
|
|
692
701
|
}
|
|
@@ -98,14 +98,12 @@
|
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
// Sort children by timestamp
|
|
102
|
-
|
|
101
|
+
// Sort children by timestamp. Iterative: long sessions form chains deeper than the JS call stack.
|
|
102
|
+
for (const node of nodeMap.values()) {
|
|
103
103
|
node.children.sort((a, b) =>
|
|
104
104
|
new Date(a.entry.timestamp).getTime() - new Date(b.entry.timestamp).getTime()
|
|
105
105
|
);
|
|
106
|
-
node.children.forEach(sortChildren);
|
|
107
106
|
}
|
|
108
|
-
roots.forEach(sortChildren);
|
|
109
107
|
|
|
110
108
|
return roots;
|
|
111
109
|
}
|
|
@@ -134,14 +132,14 @@
|
|
|
134
132
|
const path = [];
|
|
135
133
|
let current = byId.get(targetId);
|
|
136
134
|
while (current) {
|
|
137
|
-
path.
|
|
135
|
+
path.push(current);
|
|
138
136
|
// Stop if no parent or self-referencing (root)
|
|
139
137
|
if (!current.parentId || current.parentId === current.id) {
|
|
140
138
|
break;
|
|
141
139
|
}
|
|
142
140
|
current = byId.get(current.parentId);
|
|
143
141
|
}
|
|
144
|
-
return path;
|
|
142
|
+
return path.reverse();
|
|
145
143
|
}
|
|
146
144
|
|
|
147
145
|
// Tree node lookup for finding leaves
|
|
@@ -156,12 +154,12 @@
|
|
|
156
154
|
// Build tree node map lazily
|
|
157
155
|
if (!treeNodeMap) {
|
|
158
156
|
treeNodeMap = new Map();
|
|
159
|
-
const
|
|
160
|
-
|
|
157
|
+
const stack = [...buildTree()];
|
|
158
|
+
while (stack.length > 0) {
|
|
159
|
+
const node = stack.pop();
|
|
161
160
|
treeNodeMap.set(node.entry.id, node);
|
|
162
|
-
node.children.
|
|
161
|
+
for (const child of node.children) stack.push(child);
|
|
163
162
|
}
|
|
164
|
-
tree.forEach(mapNodes);
|
|
165
163
|
}
|
|
166
164
|
|
|
167
165
|
const node = treeNodeMap.get(nodeId);
|
|
@@ -185,16 +183,22 @@
|
|
|
185
183
|
const multipleRoots = roots.length > 1;
|
|
186
184
|
|
|
187
185
|
// Mark which subtrees contain the active leaf
|
|
186
|
+
// Iterative post-order: long sessions form chains deeper than the JS call stack.
|
|
188
187
|
const containsActive = new Map();
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
188
|
+
const postOrder = [];
|
|
189
|
+
const pending = [...roots];
|
|
190
|
+
while (pending.length > 0) {
|
|
191
|
+
const node = pending.pop();
|
|
192
|
+
postOrder.push(node);
|
|
193
|
+
for (const child of node.children) pending.push(child);
|
|
194
|
+
}
|
|
195
|
+
for (let i = postOrder.length - 1; i >= 0; i--) {
|
|
196
|
+
const node = postOrder[i];
|
|
197
|
+
containsActive.set(
|
|
198
|
+
node,
|
|
199
|
+
activePathIds.has(node.entry.id) || node.children.some(child => containsActive.get(child))
|
|
200
|
+
);
|
|
196
201
|
}
|
|
197
|
-
roots.forEach(markActive);
|
|
198
202
|
|
|
199
203
|
// Stack: [node, indent, justBranched, showConnector, isLast, gutters, isVirtualRootChild]
|
|
200
204
|
const stack = [];
|
|
@@ -313,6 +317,76 @@
|
|
|
313
317
|
return '';
|
|
314
318
|
}
|
|
315
319
|
|
|
320
|
+
// ============================================================
|
|
321
|
+
// SYSTEM MESSAGES (pure data)
|
|
322
|
+
// ============================================================
|
|
323
|
+
|
|
324
|
+
function systemContentText(content) {
|
|
325
|
+
if (typeof content === 'string') return content;
|
|
326
|
+
if (Array.isArray(content)) {
|
|
327
|
+
return content.filter(c => c.type === 'text' && c.text).map(c => c.text).join('\n');
|
|
328
|
+
}
|
|
329
|
+
return '';
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/** Full prompt text of a system message, mirroring getSystemMessageText() in pi-ai. */
|
|
333
|
+
function getSystemMessageText(msg) {
|
|
334
|
+
const parts = [systemContentText(msg.content)];
|
|
335
|
+
for (const value of Object.values(msg.sections || {})) {
|
|
336
|
+
if (value !== null) parts.push(value);
|
|
337
|
+
}
|
|
338
|
+
return parts.filter(part => part.length > 0).join('\n\n');
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/** Text of a later system message, mirroring renderSystemMessageUpdate() in pi-ai. */
|
|
342
|
+
function renderSystemMessageUpdate(msg) {
|
|
343
|
+
const parts = [];
|
|
344
|
+
const text = systemContentText(msg.content);
|
|
345
|
+
if (text.length > 0) parts.push(text);
|
|
346
|
+
for (const [name, value] of Object.entries(msg.sections || {})) {
|
|
347
|
+
parts.push(value === null
|
|
348
|
+
? `Removed system prompt section "${name}".`
|
|
349
|
+
: `Updated system prompt section "${name}":\n\n${value}`);
|
|
350
|
+
}
|
|
351
|
+
return parts.join('\n\n');
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
function carriesSystemState(entry) {
|
|
355
|
+
return (entry.type === 'message' && entry.message.role === 'system') ||
|
|
356
|
+
(entry.type === 'compaction' && entry.systemMessage);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* Whether a system entry starts the prompt on its branch. Later system entries
|
|
361
|
+
* patch the prompt, so they render as updates instead of a full prompt.
|
|
362
|
+
*/
|
|
363
|
+
function isLeadingSystemEntry(entry) {
|
|
364
|
+
let current = entry.parentId && entry.parentId !== entry.id ? byId.get(entry.parentId) : undefined;
|
|
365
|
+
while (current) {
|
|
366
|
+
if (carriesSystemState(current)) return false;
|
|
367
|
+
if (!current.parentId || current.parentId === current.id) break;
|
|
368
|
+
current = byId.get(current.parentId);
|
|
369
|
+
}
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/** Short description of what a later system message changes, e.g. "project_context, -rules, tools +bash". */
|
|
374
|
+
function describeSystemUpdate(msg) {
|
|
375
|
+
const parts = [];
|
|
376
|
+
if (systemContentText(msg.content).length > 0) parts.push('instructions');
|
|
377
|
+
for (const [name, value] of Object.entries(msg.sections || {})) {
|
|
378
|
+
parts.push(value === null ? `-${name}` : name);
|
|
379
|
+
}
|
|
380
|
+
const toolChanges = [
|
|
381
|
+
...(msg.toolsAdded || []).map(t => `+${t.name}`),
|
|
382
|
+
...(msg.toolsRemoved || []).map(t => `-${t.name}`),
|
|
383
|
+
];
|
|
384
|
+
if (toolChanges.length > 0) parts.push(`tools ${toolChanges.join(' ')}`);
|
|
385
|
+
return parts.join(', ');
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
const hasSystemEntries = entries.some(entry => entry.type === 'message' && entry.message.role === 'system');
|
|
389
|
+
|
|
316
390
|
/**
|
|
317
391
|
* Parse a skill block from message text.
|
|
318
392
|
* Returns null if the text doesn't contain a skill block.
|
|
@@ -338,6 +412,13 @@
|
|
|
338
412
|
case 'message': {
|
|
339
413
|
const msg = entry.message;
|
|
340
414
|
parts.push(msg.role);
|
|
415
|
+
if (msg.role === 'system') {
|
|
416
|
+
parts.push(isLeadingSystemEntry(entry) ? 'system prompt' : 'system update');
|
|
417
|
+
parts.push(getSystemMessageText(msg));
|
|
418
|
+
for (const name of Object.keys(msg.sections || {})) parts.push(name);
|
|
419
|
+
for (const tool of [...(msg.toolsAdded || []), ...(msg.toolsRemoved || [])]) parts.push(tool.name);
|
|
420
|
+
break;
|
|
421
|
+
}
|
|
341
422
|
if (msg.content) parts.push(extractContent(msg.content));
|
|
342
423
|
if (msg.role === 'bashExecution' && msg.command) parts.push(msg.command);
|
|
343
424
|
break;
|
|
@@ -679,6 +760,13 @@
|
|
|
679
760
|
const cmd = truncate(normalize(msg.command || ''));
|
|
680
761
|
return labelHtml + `<span class="tree-role-tool">[bash]:</span> ${escapeHtml(cmd)}`;
|
|
681
762
|
}
|
|
763
|
+
if (msg.role === 'system') {
|
|
764
|
+
if (isLeadingSystemEntry(entry)) {
|
|
765
|
+
return labelHtml + `<span class="tree-muted">[system prompt]</span>`;
|
|
766
|
+
}
|
|
767
|
+
const changes = describeSystemUpdate(msg);
|
|
768
|
+
return labelHtml + `<span class="tree-muted">[system update${changes ? ': ' + escapeHtml(truncate(changes)) : ''}]</span>`;
|
|
769
|
+
}
|
|
682
770
|
return labelHtml + `<span class="tree-muted">[${escapeHtml(msg.role)}]</span>`;
|
|
683
771
|
}
|
|
684
772
|
case 'compaction':
|
|
@@ -1317,6 +1405,24 @@
|
|
|
1317
1405
|
}
|
|
1318
1406
|
|
|
1319
1407
|
if (msg.role === 'toolResult') return '';
|
|
1408
|
+
|
|
1409
|
+
if (msg.role === 'system') {
|
|
1410
|
+
let html = '';
|
|
1411
|
+
if (isLeadingSystemEntry(entry)) {
|
|
1412
|
+
const text = getSystemMessageText(msg);
|
|
1413
|
+
if (text) html += renderSystemPromptBlock('System Prompt', text);
|
|
1414
|
+
html += renderToolsList('Available Tools', msg.toolsAdded);
|
|
1415
|
+
} else {
|
|
1416
|
+
const text = renderSystemMessageUpdate(msg);
|
|
1417
|
+
const changes = describeSystemUpdate(msg);
|
|
1418
|
+
if (text) html += renderSystemPromptBlock(`System Prompt Update${changes ? ': ' + changes : ''}`, text);
|
|
1419
|
+
html += renderToolsList('Tools Added', msg.toolsAdded);
|
|
1420
|
+
if (msg.toolsRemoved && msg.toolsRemoved.length > 0) {
|
|
1421
|
+
html += `<div class="tools-list"><div class="tools-header">Tools Removed</div><div class="tools-content">${msg.toolsRemoved.map(t => `<div class="tool-item"><span class="tool-item-name">${escapeHtml(t.name)}</span></div>`).join('')}</div></div>`;
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
return html ? `<div class="system-entry" id="${entryDomId}">${tsHtml}${html}</div>` : '';
|
|
1425
|
+
}
|
|
1320
1426
|
}
|
|
1321
1427
|
|
|
1322
1428
|
if (entry.type === 'model_change') {
|
|
@@ -1361,7 +1467,7 @@
|
|
|
1361
1467
|
let userMessages = 0, assistantMessages = 0, toolResults = 0;
|
|
1362
1468
|
let customMessages = 0, compactions = 0, branchSummaries = 0, toolCalls = 0;
|
|
1363
1469
|
const tokens = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
|
|
1364
|
-
const cost = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
|
|
1470
|
+
const cost = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 };
|
|
1365
1471
|
const models = new Set();
|
|
1366
1472
|
|
|
1367
1473
|
for (const entry of entryList) {
|
|
@@ -1377,10 +1483,18 @@
|
|
|
1377
1483
|
tokens.cacheRead += msg.usage.cacheRead || 0;
|
|
1378
1484
|
tokens.cacheWrite += msg.usage.cacheWrite || 0;
|
|
1379
1485
|
if (msg.usage.cost) {
|
|
1486
|
+
const componentTotal =
|
|
1487
|
+
(msg.usage.cost.input || 0) +
|
|
1488
|
+
(msg.usage.cost.output || 0) +
|
|
1489
|
+
(msg.usage.cost.cacheRead || 0) +
|
|
1490
|
+
(msg.usage.cost.cacheWrite || 0);
|
|
1380
1491
|
cost.input += msg.usage.cost.input || 0;
|
|
1381
1492
|
cost.output += msg.usage.cost.output || 0;
|
|
1382
1493
|
cost.cacheRead += msg.usage.cost.cacheRead || 0;
|
|
1383
1494
|
cost.cacheWrite += msg.usage.cost.cacheWrite || 0;
|
|
1495
|
+
// Provider-reported totals can intentionally differ from catalog-estimated components.
|
|
1496
|
+
// Fall back to the component sum for sessions written before cost.total was recorded.
|
|
1497
|
+
cost.total += typeof msg.usage.cost.total === 'number' ? msg.usage.cost.total : componentTotal;
|
|
1384
1498
|
}
|
|
1385
1499
|
}
|
|
1386
1500
|
toolCalls += msg.content.filter(c => c.type === 'toolCall').length;
|
|
@@ -1401,7 +1515,7 @@
|
|
|
1401
1515
|
const globalStats = computeStats(entries);
|
|
1402
1516
|
|
|
1403
1517
|
function renderHeader() {
|
|
1404
|
-
const totalCost = globalStats.cost.
|
|
1518
|
+
const totalCost = globalStats.cost.total;
|
|
1405
1519
|
|
|
1406
1520
|
const tokenParts = [];
|
|
1407
1521
|
if (globalStats.tokens.input) tokenParts.push(`↑${formatTokens(globalStats.tokens.input)}`);
|
|
@@ -1439,30 +1553,39 @@
|
|
|
1439
1553
|
</div>
|
|
1440
1554
|
</div>`;
|
|
1441
1555
|
|
|
1442
|
-
//
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
const preview = lines.slice(0, previewLines).join('\n');
|
|
1448
|
-
const remaining = lines.length - previewLines;
|
|
1449
|
-
html += `<div class="system-prompt expandable" onclick="if(window.getSelection().toString())return;this.classList.toggle('expanded')">
|
|
1450
|
-
<div class="system-prompt-header">System Prompt</div>
|
|
1451
|
-
<div class="system-prompt-preview">${escapeHtml(preview)}</div>
|
|
1452
|
-
<div class="system-prompt-expand-hint">... (${remaining} more lines, click to expand)</div>
|
|
1453
|
-
<div class="system-prompt-full">${escapeHtml(systemPrompt)}</div>
|
|
1454
|
-
</div>`;
|
|
1455
|
-
} else {
|
|
1456
|
-
html += `<div class="system-prompt">
|
|
1457
|
-
<div class="system-prompt-header">System Prompt</div>
|
|
1458
|
-
<div class="system-prompt-full" style="display: block">${escapeHtml(systemPrompt)}</div>
|
|
1459
|
-
</div>`;
|
|
1460
|
-
}
|
|
1556
|
+
// Sessions with system entries render the prompt and tools in the transcript, where they
|
|
1557
|
+
// occur. Older sessions have none, so fall back to the exporting agent's current state.
|
|
1558
|
+
if (!hasSystemEntries) {
|
|
1559
|
+
if (systemPrompt) html += renderSystemPromptBlock('System Prompt', systemPrompt);
|
|
1560
|
+
html += renderToolsList('Available Tools', tools);
|
|
1461
1561
|
}
|
|
1462
1562
|
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1563
|
+
return html;
|
|
1564
|
+
}
|
|
1565
|
+
|
|
1566
|
+
function renderSystemPromptBlock(title, text) {
|
|
1567
|
+
const lines = text.split('\n');
|
|
1568
|
+
const previewLines = 10;
|
|
1569
|
+
if (lines.length > previewLines) {
|
|
1570
|
+
const preview = lines.slice(0, previewLines).join('\n');
|
|
1571
|
+
const remaining = lines.length - previewLines;
|
|
1572
|
+
return `<div class="system-prompt expandable" onclick="if(window.getSelection().toString())return;this.classList.toggle('expanded')">
|
|
1573
|
+
<div class="system-prompt-header">${escapeHtml(title)}</div>
|
|
1574
|
+
<div class="system-prompt-preview">${escapeHtml(preview)}</div>
|
|
1575
|
+
<div class="system-prompt-expand-hint">... (${remaining} more lines, click to expand)</div>
|
|
1576
|
+
<div class="system-prompt-full">${escapeHtml(text)}</div>
|
|
1577
|
+
</div>`;
|
|
1578
|
+
}
|
|
1579
|
+
return `<div class="system-prompt">
|
|
1580
|
+
<div class="system-prompt-header">${escapeHtml(title)}</div>
|
|
1581
|
+
<div class="system-prompt-full" style="display: block">${escapeHtml(text)}</div>
|
|
1582
|
+
</div>`;
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1585
|
+
function renderToolsList(title, tools) {
|
|
1586
|
+
if (!tools || tools.length === 0) return '';
|
|
1587
|
+
return `<div class="tools-list">
|
|
1588
|
+
<div class="tools-header">${escapeHtml(title)}</div>
|
|
1466
1589
|
<div class="tools-content">
|
|
1467
1590
|
${tools.map(t => {
|
|
1468
1591
|
const hasParams = t.parameters && typeof t.parameters === 'object' && t.parameters.properties && Object.keys(t.parameters.properties).length > 0;
|
|
@@ -1487,9 +1610,6 @@
|
|
|
1487
1610
|
}).join('')}
|
|
1488
1611
|
</div>
|
|
1489
1612
|
</div>`;
|
|
1490
|
-
}
|
|
1491
|
-
|
|
1492
|
-
return html;
|
|
1493
1613
|
}
|
|
1494
1614
|
|
|
1495
1615
|
// ============================================================
|
|
@@ -7,5 +7,11 @@ export declare const loaderHostModulesTestHooks: {
|
|
|
7
7
|
/** Live host modules shared with single-file builds and transformed extension reloads. */
|
|
8
8
|
export declare function getVirtualModules(): Promise<Record<string, object>>;
|
|
9
9
|
export declare function getWorkflowHostModules(): Promise<Record<"@bastani/atomic" | "@bastani/atomic/storage" | "@bastani/pi-ai" | "@bastani/pi-ai/providers/all", object>>;
|
|
10
|
+
/**
|
|
11
|
+
* Live host modules for storage adapter modules. Outside single-file builds `@bastani/atomic` resolves lazily through
|
|
12
|
+
* the extension aliases instead, so a process that needs only storage, such as the Intercom broker, never evaluates
|
|
13
|
+
* the whole host package.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getStorageAdapterHostModules(): Promise<Record<string, object>>;
|
|
10
16
|
export {};
|
|
11
17
|
//# sourceMappingURL=loader-host-modules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-host-modules.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader-host-modules.ts"],"names":[],"mappings":"AAOA,KAAK,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;AAEvD,iBAAS,yBAAyB,CAAC,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS5G;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0F1E;AAED,eAAO,MAAM,0BAA0B;;CAAgC,CAAC;AAExE,0FAA0F;AAC1F,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAazE;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CACtD,MAAM,CAAC,iBAAiB,GAAG,yBAAyB,GAAG,gBAAgB,GAAG,8BAA8B,EAAE,MAAM,CAAC,CACjH,CAaA"}
|
|
1
|
+
{"version":3,"file":"loader-host-modules.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader-host-modules.ts"],"names":[],"mappings":"AAOA,KAAK,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;AAEvD,iBAAS,yBAAyB,CAAC,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS5G;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0F1E;AAED,eAAO,MAAM,0BAA0B;;CAAgC,CAAC;AAExE,0FAA0F;AAC1F,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAazE;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CACtD,MAAM,CAAC,iBAAiB,GAAG,yBAAyB,GAAG,gBAAgB,GAAG,8BAA8B,EAAE,MAAM,CAAC,CACjH,CAaA;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAIpF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
|
-
import { getPackageDir, isBunBinary } from "../../config.js";
|
|
2
|
+
import { getPackageDir, isBunBinary, isBundledBuild } from "../../config.js";
|
|
3
3
|
import { createModuleRequire } from "../../utils/module-require.js";
|
|
4
4
|
let virtualModules = null;
|
|
5
5
|
let virtualModulesPromise = null;
|
|
@@ -112,4 +112,15 @@ export async function getWorkflowHostModules() {
|
|
|
112
112
|
"@bastani/pi-ai/providers/all": providers,
|
|
113
113
|
};
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Live host modules for storage adapter modules. Outside single-file builds `@bastani/atomic` resolves lazily through
|
|
117
|
+
* the extension aliases instead, so a process that needs only storage, such as the Intercom broker, never evaluates
|
|
118
|
+
* the whole host package.
|
|
119
|
+
*/
|
|
120
|
+
export async function getStorageAdapterHostModules() {
|
|
121
|
+
const storage = await import("../storage/index.js");
|
|
122
|
+
if (!(isBunBinary || isBundledBuild))
|
|
123
|
+
return { "@bastani/atomic/storage": storage };
|
|
124
|
+
return { "@bastani/atomic": await import("../../index.js"), "@bastani/atomic/storage": storage };
|
|
125
|
+
}
|
|
115
126
|
//# sourceMappingURL=loader-host-modules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-host-modules.js","sourceRoot":"","sources":["../../../src/core/extensions/loader-host-modules.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport { getPackageDir, isBunBinary } from \"../../config.js\";\nimport { createModuleRequire } from \"../../utils/module-require.ts\";\n\nlet virtualModules: Record<string, object> | null = null;\nlet virtualModulesPromise: Promise<Record<string, object>> | null = null;\n\ntype HostModuleRequire = (specifier: string) => object;\n\nfunction loadOptionalAtomicNatives(requireFromHost: HostModuleRequire, specifier: string): object | undefined {\n\ttry {\n\t\treturn requireFromHost(specifier);\n\t} catch {\n\t\t// Keep a missing or unloadable platform binding proportional: only an\n\t\t// extension that imports atomic-natives should fail, not every extension\n\t\t// waiting for the shared host-module map.\n\t\treturn undefined;\n\t}\n}\n\nexport async function loadVirtualModules(): Promise<Record<string, object>> {\n\t// Keep the native binding external to both the app sidecar and extension\n\t// bundles while sharing its process-global control plane through the bridge.\n\t// If the platform package is unavailable, omit only this registration so\n\t// unrelated builtins can still load.\n\tconst requireFromHost = createModuleRequire(import.meta.url);\n\tconst atomicNatives = loadOptionalAtomicNatives(\n\t\trequireFromHost,\n\t\tisBunBinary\n\t\t\t? join(getPackageDir(), \"node_modules\", \"@bastani\", \"atomic-natives\", \"native\", \"index.js\")\n\t\t\t: \"@bastani/atomic-natives\",\n\t);\n\tconst [\n\t\ttypebox,\n\t\ttypeboxCompile,\n\t\ttypeboxValue,\n\t\tpiAgentCore,\n\t\tpiTui,\n\t\tpiTuiLayout,\n\t\tpiTuiLayoutNode,\n\t\tpiAi,\n\t\tpiAiOauth,\n\t\tpiAiModels,\n\t\tpiAiCloudflareGatewayBinding,\n\t\tpiAiProviderEnv,\n\t\tpiAiOauthPage,\n\t\tproperLockfile,\n\t\tpiCodingAgent,\n\t\tstorage,\n\t] = await Promise.all([\n\t\timport(\"typebox\"),\n\t\timport(\"typebox/compile\"),\n\t\timport(\"typebox/value\"),\n\t\timport(\"@earendil-works/pi-agent-core\"),\n\t\timport(\"@earendil-works/pi-tui\"),\n\t\timport(\"@earendil-works/pi-tui/dist/layout.js\"),\n\t\timport(\"@earendil-works/pi-tui/dist/layout-node.js\"),\n\t\t// pi 0.80.2: the old global pi-ai API moved off the root entrypoint onto\n\t\t// `/compat` (a strict superset). Extensions still use the root specifier.\n\t\timport(\"@bastani/pi-ai/compat\"),\n\t\timport(\"@bastani/pi-ai/oauth\"),\n\t\timport(\"@bastani/pi-ai/models\"),\n\t\timport(\"@bastani/pi-ai/api/cloudflare-gateway-binding\"),\n\t\timport(\"@bastani/pi-ai/utils/provider-env\"),\n\t\timport(\"@bastani/pi-ai/utils/oauth-page\"),\n\t\t// Keep proper-lockfile in the compiled host so extensions share its live\n\t\t// CommonJS module state instead of evaluating it through jiti.\n\t\timport(\"proper-lockfile\"),\n\t\t// loader.ts exports are not re-exported from index.ts, avoiding a cycle.\n\t\timport(\"../../index.ts\"),\n\t\timport(\"../storage/index.js\"),\n\t]);\n\n\treturn {\n\t\ttypebox,\n\t\t\"typebox/compile\": typeboxCompile,\n\t\t\"typebox/value\": typeboxValue,\n\t\t\"@sinclair/typebox\": typebox,\n\t\t\"@sinclair/typebox/compile\": typeboxCompile,\n\t\t\"@sinclair/typebox/value\": typeboxValue,\n\t\t\"@earendil-works/pi-agent-core\": piAgentCore,\n\t\t\"@earendil-works/pi-tui\": piTui,\n\t\t\"@earendil-works/pi-tui/dist/layout.js\": piTuiLayout,\n\t\t\"@earendil-works/pi-tui/dist/layout-node.js\": piTuiLayoutNode,\n\t\t\"@bastani/pi-ai\": piAi,\n\t\t\"@bastani/pi-ai/compat\": piAi,\n\t\t\"@bastani/pi-ai/oauth\": piAiOauth,\n\t\t\"@bastani/pi-ai/models\": piAiModels,\n\t\t\"@bastani/pi-ai/api/cloudflare-gateway-binding\": piAiCloudflareGatewayBinding,\n\t\t\"@bastani/pi-ai/utils/provider-env\": piAiProviderEnv,\n\t\t\"@bastani/pi-ai/utils/oauth-page\": piAiOauthPage,\n\t\t\"@earendil-works/pi-ai\": piAi,\n\t\t\"@earendil-works/pi-ai/compat\": piAi,\n\t\t\"@earendil-works/pi-ai/oauth\": piAiOauth,\n\t\t\"@earendil-works/pi-ai/models\": piAiModels,\n\t\t\"@earendil-works/pi-ai/api/cloudflare-gateway-binding\": piAiCloudflareGatewayBinding,\n\t\t\"proper-lockfile\": properLockfile,\n\t\t...(atomicNatives ? { \"@bastani/atomic-natives\": atomicNatives } : {}),\n\t\t\"@bastani/atomic\": piCodingAgent,\n\t\t\"@bastani/atomic/storage\": storage,\n\t\t\"@earendil-works/pi-coding-agent\": piCodingAgent,\n\t\t\"@mariozechner/pi-agent-core\": piAgentCore,\n\t\t\"@mariozechner/pi-tui\": piTui,\n\t\t\"@mariozechner/pi-tui/dist/layout.js\": piTuiLayout,\n\t\t\"@mariozechner/pi-ai\": piAi,\n\t\t\"@mariozechner/pi-ai/compat\": piAi,\n\t\t\"@mariozechner/pi-ai/oauth\": piAiOauth,\n\t\t\"@mariozechner/pi-ai/models\": piAiModels,\n\t\t\"@mariozechner/pi-ai/api/cloudflare-gateway-binding\": piAiCloudflareGatewayBinding,\n\t};\n}\n\nexport const loaderHostModulesTestHooks = { loadOptionalAtomicNatives };\n\n/** Live host modules shared with single-file builds and transformed extension reloads. */\nexport async function getVirtualModules(): Promise<Record<string, object>> {\n\tif (virtualModules) return virtualModules;\n\tvirtualModulesPromise ??= loadVirtualModules().then(\n\t\t(modules) => {\n\t\t\tvirtualModules = modules;\n\t\t\treturn modules;\n\t\t},\n\t\t(error: Error) => {\n\t\t\tvirtualModulesPromise = null;\n\t\t\tthrow error;\n\t\t},\n\t);\n\treturn virtualModulesPromise;\n}\n\nexport async function getWorkflowHostModules(): Promise<\n\tRecord<\"@bastani/atomic\" | \"@bastani/atomic/storage\" | \"@bastani/pi-ai\" | \"@bastani/pi-ai/providers/all\", object>\n> {\n\tconst [atomic, storage, piAi, providers] = await Promise.all([\n\t\timport(\"../../index.ts\"),\n\t\timport(\"../storage/index.js\"),\n\t\timport(\"@bastani/pi-ai/compat\"),\n\t\timport(\"@bastani/pi-ai/providers/all\"),\n\t]);\n\treturn {\n\t\t\"@bastani/atomic\": atomic,\n\t\t\"@bastani/atomic/storage\": storage,\n\t\t\"@bastani/pi-ai\": piAi,\n\t\t\"@bastani/pi-ai/providers/all\": providers,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"loader-host-modules.js","sourceRoot":"","sources":["../../../src/core/extensions/loader-host-modules.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport { getPackageDir, isBunBinary, isBundledBuild } from \"../../config.js\";\nimport { createModuleRequire } from \"../../utils/module-require.ts\";\n\nlet virtualModules: Record<string, object> | null = null;\nlet virtualModulesPromise: Promise<Record<string, object>> | null = null;\n\ntype HostModuleRequire = (specifier: string) => object;\n\nfunction loadOptionalAtomicNatives(requireFromHost: HostModuleRequire, specifier: string): object | undefined {\n\ttry {\n\t\treturn requireFromHost(specifier);\n\t} catch {\n\t\t// Keep a missing or unloadable platform binding proportional: only an\n\t\t// extension that imports atomic-natives should fail, not every extension\n\t\t// waiting for the shared host-module map.\n\t\treturn undefined;\n\t}\n}\n\nexport async function loadVirtualModules(): Promise<Record<string, object>> {\n\t// Keep the native binding external to both the app sidecar and extension\n\t// bundles while sharing its process-global control plane through the bridge.\n\t// If the platform package is unavailable, omit only this registration so\n\t// unrelated builtins can still load.\n\tconst requireFromHost = createModuleRequire(import.meta.url);\n\tconst atomicNatives = loadOptionalAtomicNatives(\n\t\trequireFromHost,\n\t\tisBunBinary\n\t\t\t? join(getPackageDir(), \"node_modules\", \"@bastani\", \"atomic-natives\", \"native\", \"index.js\")\n\t\t\t: \"@bastani/atomic-natives\",\n\t);\n\tconst [\n\t\ttypebox,\n\t\ttypeboxCompile,\n\t\ttypeboxValue,\n\t\tpiAgentCore,\n\t\tpiTui,\n\t\tpiTuiLayout,\n\t\tpiTuiLayoutNode,\n\t\tpiAi,\n\t\tpiAiOauth,\n\t\tpiAiModels,\n\t\tpiAiCloudflareGatewayBinding,\n\t\tpiAiProviderEnv,\n\t\tpiAiOauthPage,\n\t\tproperLockfile,\n\t\tpiCodingAgent,\n\t\tstorage,\n\t] = await Promise.all([\n\t\timport(\"typebox\"),\n\t\timport(\"typebox/compile\"),\n\t\timport(\"typebox/value\"),\n\t\timport(\"@earendil-works/pi-agent-core\"),\n\t\timport(\"@earendil-works/pi-tui\"),\n\t\timport(\"@earendil-works/pi-tui/dist/layout.js\"),\n\t\timport(\"@earendil-works/pi-tui/dist/layout-node.js\"),\n\t\t// pi 0.80.2: the old global pi-ai API moved off the root entrypoint onto\n\t\t// `/compat` (a strict superset). Extensions still use the root specifier.\n\t\timport(\"@bastani/pi-ai/compat\"),\n\t\timport(\"@bastani/pi-ai/oauth\"),\n\t\timport(\"@bastani/pi-ai/models\"),\n\t\timport(\"@bastani/pi-ai/api/cloudflare-gateway-binding\"),\n\t\timport(\"@bastani/pi-ai/utils/provider-env\"),\n\t\timport(\"@bastani/pi-ai/utils/oauth-page\"),\n\t\t// Keep proper-lockfile in the compiled host so extensions share its live\n\t\t// CommonJS module state instead of evaluating it through jiti.\n\t\timport(\"proper-lockfile\"),\n\t\t// loader.ts exports are not re-exported from index.ts, avoiding a cycle.\n\t\timport(\"../../index.ts\"),\n\t\timport(\"../storage/index.js\"),\n\t]);\n\n\treturn {\n\t\ttypebox,\n\t\t\"typebox/compile\": typeboxCompile,\n\t\t\"typebox/value\": typeboxValue,\n\t\t\"@sinclair/typebox\": typebox,\n\t\t\"@sinclair/typebox/compile\": typeboxCompile,\n\t\t\"@sinclair/typebox/value\": typeboxValue,\n\t\t\"@earendil-works/pi-agent-core\": piAgentCore,\n\t\t\"@earendil-works/pi-tui\": piTui,\n\t\t\"@earendil-works/pi-tui/dist/layout.js\": piTuiLayout,\n\t\t\"@earendil-works/pi-tui/dist/layout-node.js\": piTuiLayoutNode,\n\t\t\"@bastani/pi-ai\": piAi,\n\t\t\"@bastani/pi-ai/compat\": piAi,\n\t\t\"@bastani/pi-ai/oauth\": piAiOauth,\n\t\t\"@bastani/pi-ai/models\": piAiModels,\n\t\t\"@bastani/pi-ai/api/cloudflare-gateway-binding\": piAiCloudflareGatewayBinding,\n\t\t\"@bastani/pi-ai/utils/provider-env\": piAiProviderEnv,\n\t\t\"@bastani/pi-ai/utils/oauth-page\": piAiOauthPage,\n\t\t\"@earendil-works/pi-ai\": piAi,\n\t\t\"@earendil-works/pi-ai/compat\": piAi,\n\t\t\"@earendil-works/pi-ai/oauth\": piAiOauth,\n\t\t\"@earendil-works/pi-ai/models\": piAiModels,\n\t\t\"@earendil-works/pi-ai/api/cloudflare-gateway-binding\": piAiCloudflareGatewayBinding,\n\t\t\"proper-lockfile\": properLockfile,\n\t\t...(atomicNatives ? { \"@bastani/atomic-natives\": atomicNatives } : {}),\n\t\t\"@bastani/atomic\": piCodingAgent,\n\t\t\"@bastani/atomic/storage\": storage,\n\t\t\"@earendil-works/pi-coding-agent\": piCodingAgent,\n\t\t\"@mariozechner/pi-agent-core\": piAgentCore,\n\t\t\"@mariozechner/pi-tui\": piTui,\n\t\t\"@mariozechner/pi-tui/dist/layout.js\": piTuiLayout,\n\t\t\"@mariozechner/pi-ai\": piAi,\n\t\t\"@mariozechner/pi-ai/compat\": piAi,\n\t\t\"@mariozechner/pi-ai/oauth\": piAiOauth,\n\t\t\"@mariozechner/pi-ai/models\": piAiModels,\n\t\t\"@mariozechner/pi-ai/api/cloudflare-gateway-binding\": piAiCloudflareGatewayBinding,\n\t};\n}\n\nexport const loaderHostModulesTestHooks = { loadOptionalAtomicNatives };\n\n/** Live host modules shared with single-file builds and transformed extension reloads. */\nexport async function getVirtualModules(): Promise<Record<string, object>> {\n\tif (virtualModules) return virtualModules;\n\tvirtualModulesPromise ??= loadVirtualModules().then(\n\t\t(modules) => {\n\t\t\tvirtualModules = modules;\n\t\t\treturn modules;\n\t\t},\n\t\t(error: Error) => {\n\t\t\tvirtualModulesPromise = null;\n\t\t\tthrow error;\n\t\t},\n\t);\n\treturn virtualModulesPromise;\n}\n\nexport async function getWorkflowHostModules(): Promise<\n\tRecord<\"@bastani/atomic\" | \"@bastani/atomic/storage\" | \"@bastani/pi-ai\" | \"@bastani/pi-ai/providers/all\", object>\n> {\n\tconst [atomic, storage, piAi, providers] = await Promise.all([\n\t\timport(\"../../index.ts\"),\n\t\timport(\"../storage/index.js\"),\n\t\timport(\"@bastani/pi-ai/compat\"),\n\t\timport(\"@bastani/pi-ai/providers/all\"),\n\t]);\n\treturn {\n\t\t\"@bastani/atomic\": atomic,\n\t\t\"@bastani/atomic/storage\": storage,\n\t\t\"@bastani/pi-ai\": piAi,\n\t\t\"@bastani/pi-ai/providers/all\": providers,\n\t};\n}\n\n/**\n * Live host modules for storage adapter modules. Outside single-file builds `@bastani/atomic` resolves lazily through\n * the extension aliases instead, so a process that needs only storage, such as the Intercom broker, never evaluates\n * the whole host package.\n */\nexport async function getStorageAdapterHostModules(): Promise<Record<string, object>> {\n\tconst storage = await import(\"../storage/index.js\");\n\tif (!(isBunBinary || isBundledBuild)) return { \"@bastani/atomic/storage\": storage };\n\treturn { \"@bastani/atomic\": await import(\"../../index.ts\"), \"@bastani/atomic/storage\": storage };\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { createJiti } from "jiti";
|
|
1
2
|
import { loadVirtualModules } from "./loader-host-modules.js";
|
|
2
3
|
import type { ExtensionFactory } from "./types.ts";
|
|
3
4
|
export { getVirtualModules } from "./loader-host-modules.js";
|
|
@@ -42,6 +43,11 @@ declare function findPackageRoot(packageName: string, searchPaths?: string[]): s
|
|
|
42
43
|
* In Bun binary mode, virtualModules is used instead.
|
|
43
44
|
*/
|
|
44
45
|
declare function getAliases(): Record<string, string>;
|
|
46
|
+
/**
|
|
47
|
+
* A jiti loader that resolves host package specifiers the way extensions see them: `virtualModules` share live host
|
|
48
|
+
* instances, and outside single-file builds every other host specifier aliases to the installed host files.
|
|
49
|
+
*/
|
|
50
|
+
export declare function createHostModuleJiti(id: string, virtualModules: Record<string, object>, options?: Parameters<typeof createJiti>[1]): Promise<ReturnType<typeof createJiti>>;
|
|
45
51
|
export declare const extensionLoaderTestHooks: {
|
|
46
52
|
loadVirtualModules: typeof loadVirtualModules;
|
|
47
53
|
getAliases: typeof getAliases;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-virtual-modules.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader-virtual-modules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader-virtual-modules.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader-virtual-modules.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAMvC,OAAO,EAAqB,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AA0B7D;;;;GAIG;AACH,iBAAS,oBAAoB,IAAI,MAAM,CAMtC;AAiBD;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAWD,iBAAS,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAGxD;AAgFD,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAYpG;AAmHD,iBAAe,gCAAgC,CAC9C,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,mBAAmB,GAAG,SAAS,GACzC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAyBvC;AAED,MAAM,WAAW,mBAAmB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAOrE;AAiBD;;;;;;;;GAQG;AACH,iBAAS,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ5E;AAKD;;;GAGG;AACH,iBAAS,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4G5C;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACzC,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,OAAO,GAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAM,GAC5C,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CASxC;AAED,eAAO,MAAM,wBAAwB;;;;;;;oDAOY,MAAM,eAAe,mBAAmB;oDAExC,MAAM,eAAe,mBAAmB;;6CAG/C,MAAM,KAAG,OAAO;CACzD,CAAC;AAkFF,wBAAsB,mBAAmB,CACxC,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,mBAAmB,GAC9B,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAiCvC"}
|
|
@@ -386,6 +386,8 @@ function getAliases() {
|
|
|
386
386
|
const piAiOpenRouterEntry = resolveWorkspaceOrImport("ai/dist/providers/openrouter.js", "@bastani/pi-ai");
|
|
387
387
|
const piAiProviderEnvEntry = resolveWorkspaceOrImport("ai/dist/utils/provider-env.js", "@bastani/pi-ai");
|
|
388
388
|
const piAiRetryEntry = resolveWorkspaceOrImport("ai/dist/utils/retry.js", "@bastani/pi-ai");
|
|
389
|
+
const piAiRequestAdmissionEntry = resolveWorkspaceOrImport("ai/dist/utils/request-admission.js", "@bastani/pi-ai");
|
|
390
|
+
const piAiRetryHintsEntry = resolveWorkspaceOrImport("ai/dist/utils/retry-hints.js", "@bastani/pi-ai");
|
|
389
391
|
const piAiCompatSchemaEntry = resolveWorkspaceOrImport("ai/dist/providers/compat-schema.js", "@bastani/pi-ai");
|
|
390
392
|
const piAiModelSchemaEntry = resolveWorkspaceOrImport("ai/dist/providers/model-schema.js", "@bastani/pi-ai");
|
|
391
393
|
const piAiOauthPageEntry = resolveWorkspaceOrImport("ai/dist/utils/oauth-page.js", "@bastani/pi-ai");
|
|
@@ -410,6 +412,8 @@ function getAliases() {
|
|
|
410
412
|
"@bastani/pi-ai/providers/model-schema": piAiModelSchemaEntry,
|
|
411
413
|
"@bastani/pi-ai/utils/provider-env": piAiProviderEnvEntry,
|
|
412
414
|
"@bastani/pi-ai/utils/oauth-page": piAiOauthPageEntry,
|
|
415
|
+
"@bastani/pi-ai/utils/request-admission": piAiRequestAdmissionEntry,
|
|
416
|
+
"@bastani/pi-ai/utils/retry-hints": piAiRetryHintsEntry,
|
|
413
417
|
"@bastani/pi-ai/utils/retry": piAiRetryEntry,
|
|
414
418
|
"@bastani/pi-ai/compat": piAiEntry,
|
|
415
419
|
"@bastani/pi-ai/api/cloudflare-gateway-binding": piAiGatewayBindingEntry,
|
|
@@ -440,6 +444,20 @@ function getAliases() {
|
|
|
440
444
|
};
|
|
441
445
|
return _aliases;
|
|
442
446
|
}
|
|
447
|
+
/**
|
|
448
|
+
* A jiti loader that resolves host package specifiers the way extensions see them: `virtualModules` share live host
|
|
449
|
+
* instances, and outside single-file builds every other host specifier aliases to the installed host files.
|
|
450
|
+
*/
|
|
451
|
+
export async function createHostModuleJiti(id, virtualModules, options = {}) {
|
|
452
|
+
const isSingleFileBuild = isBunBinary || isBundledBuild;
|
|
453
|
+
const createJitiImpl = await getCreateJiti();
|
|
454
|
+
return createJitiImpl(id, {
|
|
455
|
+
...options,
|
|
456
|
+
// Single-file builds have no host files to alias, so every import must reach the virtual modules.
|
|
457
|
+
...(isSingleFileBuild ? { tryNative: false } : { alias: getAliases() }),
|
|
458
|
+
virtualModules,
|
|
459
|
+
});
|
|
460
|
+
}
|
|
443
461
|
export const extensionLoaderTestHooks = {
|
|
444
462
|
loadVirtualModules,
|
|
445
463
|
getAliases,
|