@bastani/atomic 0.9.41 → 0.9.42-alpha.1
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 +49 -0
- package/dist/builtin/intercom/CHANGELOG.md +13 -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 +12 -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
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { basename, extname, isAbsolute, join, resolve } from "node:path";
|
|
4
|
+
import { stripBom } from "../utils/text.js";
|
|
5
|
+
import { getExistingGitInstallPath } from "./package-manager-git.js";
|
|
6
|
+
import { getManifestFromPackageJson } from "./package-manager-manifest.js";
|
|
7
|
+
import { getManagedNpmInstallPath } from "./package-manager-npm.js";
|
|
8
|
+
import { getBaseDirsForScope, resolvePathFromBase } from "./package-manager-paths.js";
|
|
9
|
+
import { parseSource } from "./package-manager-source.js";
|
|
10
|
+
import { SettingsManager } from "./settings-manager.js";
|
|
11
|
+
/** Splits a bare module specifier into its package name and the adapter name after it, if any. */
|
|
12
|
+
function parsePackageSpecifier(specifier) {
|
|
13
|
+
if (isAbsolute(specifier) || /^[.~]|[:\\]/.test(specifier))
|
|
14
|
+
return undefined;
|
|
15
|
+
const segments = specifier.split("/");
|
|
16
|
+
const nameLength = specifier.startsWith("@") ? 2 : 1;
|
|
17
|
+
if (segments.length < nameLength || segments.some((segment) => segment.length === 0))
|
|
18
|
+
return undefined;
|
|
19
|
+
const adapter = segments.slice(nameLength).join("/");
|
|
20
|
+
return { name: segments.slice(0, nameLength).join("/"), ...(adapter ? { adapter } : {}) };
|
|
21
|
+
}
|
|
22
|
+
async function readJson(path) {
|
|
23
|
+
try {
|
|
24
|
+
const value = JSON.parse(stripBom(await readFile(path, "utf8")));
|
|
25
|
+
return typeof value === "object" && value !== null ? value : undefined;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Where a user-scope package source is installed, without consulting the global npm root. */
|
|
32
|
+
function installedPackageRoot(context, source, name) {
|
|
33
|
+
const parsed = parseSource(source);
|
|
34
|
+
if (parsed.type === "npm") {
|
|
35
|
+
if (parsed.name !== name)
|
|
36
|
+
return undefined;
|
|
37
|
+
const path = getManagedNpmInstallPath(context, parsed, "user");
|
|
38
|
+
return existsSync(path) ? path : undefined;
|
|
39
|
+
}
|
|
40
|
+
if (parsed.type === "git")
|
|
41
|
+
return getExistingGitInstallPath(context, parsed, "user");
|
|
42
|
+
return getBaseDirsForScope(context, "user")
|
|
43
|
+
.map((baseDir) => resolvePathFromBase(parsed.path, baseDir))
|
|
44
|
+
.find((path) => existsSync(path));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The module a bare `storage.adapter` value selects from the Atomic packages in the agent directory's settings, or
|
|
48
|
+
* undefined when no installed package lists a matching adapter. `<package>` selects the package's first listed
|
|
49
|
+
* `storageAdapters` entry, and `<package>/<name>` the entry whose file name without its extension is `<name>`.
|
|
50
|
+
*/
|
|
51
|
+
export async function resolvePackageStorageAdapter(specifier, agentDir) {
|
|
52
|
+
const requested = parsePackageSpecifier(specifier);
|
|
53
|
+
if (!requested)
|
|
54
|
+
return undefined;
|
|
55
|
+
const settings = SettingsManager.create(agentDir, agentDir, { projectTrusted: false }).getGlobalSettings();
|
|
56
|
+
if (!Array.isArray(settings?.packages))
|
|
57
|
+
return undefined;
|
|
58
|
+
const context = { cwd: agentDir, agentDir };
|
|
59
|
+
for (const entry of settings.packages) {
|
|
60
|
+
const source = typeof entry === "string" ? entry : entry?.source;
|
|
61
|
+
const root = typeof source === "string" ? installedPackageRoot(context, source, requested.name) : undefined;
|
|
62
|
+
if (root === undefined)
|
|
63
|
+
continue;
|
|
64
|
+
const pkg = (await readJson(join(root, "package.json")));
|
|
65
|
+
if (pkg?.name !== requested.name)
|
|
66
|
+
continue;
|
|
67
|
+
const adapters = getManifestFromPackageJson(pkg)?.storageAdapters ?? [];
|
|
68
|
+
const selected = requested.adapter === undefined
|
|
69
|
+
? adapters[0]
|
|
70
|
+
: adapters.find((path) => basename(path, extname(path)) === requested.adapter);
|
|
71
|
+
if (selected !== undefined)
|
|
72
|
+
return resolve(root, selected);
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=package-manager-storage-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager-storage-adapters.js","sourceRoot":"","sources":["../../src/core/package-manager-storage-adapters.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename, extname, isAbsolute, join, resolve } from \"node:path\";\nimport { stripBom } from \"../utils/text.ts\";\nimport { getExistingGitInstallPath } from \"./package-manager-git.ts\";\nimport { getManifestFromPackageJson } from \"./package-manager-manifest.ts\";\nimport { getManagedNpmInstallPath } from \"./package-manager-npm.ts\";\nimport { getBaseDirsForScope, resolvePathFromBase } from \"./package-manager-paths.ts\";\nimport { parseSource } from \"./package-manager-source.ts\";\nimport type { PackageLocationContext } from \"./package-manager-types.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\n\n/** Splits a bare module specifier into its package name and the adapter name after it, if any. */\nfunction parsePackageSpecifier(specifier: string): { name: string; adapter?: string } | undefined {\n\tif (isAbsolute(specifier) || /^[.~]|[:\\\\]/.test(specifier)) return undefined;\n\tconst segments = specifier.split(\"/\");\n\tconst nameLength = specifier.startsWith(\"@\") ? 2 : 1;\n\tif (segments.length < nameLength || segments.some((segment) => segment.length === 0)) return undefined;\n\tconst adapter = segments.slice(nameLength).join(\"/\");\n\treturn { name: segments.slice(0, nameLength).join(\"/\"), ...(adapter ? { adapter } : {}) };\n}\n\nasync function readJson(path: string): Promise<object | undefined> {\n\ttry {\n\t\tconst value: object | null = JSON.parse(stripBom(await readFile(path, \"utf8\")));\n\t\treturn typeof value === \"object\" && value !== null ? value : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Where a user-scope package source is installed, without consulting the global npm root. */\nfunction installedPackageRoot(context: PackageLocationContext, source: string, name: string): string | undefined {\n\tconst parsed = parseSource(source);\n\tif (parsed.type === \"npm\") {\n\t\tif (parsed.name !== name) return undefined;\n\t\tconst path = getManagedNpmInstallPath(context, parsed, \"user\");\n\t\treturn existsSync(path) ? path : undefined;\n\t}\n\tif (parsed.type === \"git\") return getExistingGitInstallPath(context, parsed, \"user\");\n\treturn getBaseDirsForScope(context, \"user\")\n\t\t.map((baseDir) => resolvePathFromBase(parsed.path, baseDir))\n\t\t.find((path) => existsSync(path));\n}\n\n/**\n * The module a bare `storage.adapter` value selects from the Atomic packages in the agent directory's settings, or\n * undefined when no installed package lists a matching adapter. `<package>` selects the package's first listed\n * `storageAdapters` entry, and `<package>/<name>` the entry whose file name without its extension is `<name>`.\n */\nexport async function resolvePackageStorageAdapter(specifier: string, agentDir: string): Promise<string | undefined> {\n\tconst requested = parsePackageSpecifier(specifier);\n\tif (!requested) return undefined;\n\tconst settings = SettingsManager.create(agentDir, agentDir, { projectTrusted: false }).getGlobalSettings();\n\tif (!Array.isArray(settings?.packages)) return undefined;\n\tconst context: PackageLocationContext = { cwd: agentDir, agentDir };\n\tfor (const entry of settings.packages) {\n\t\tconst source = typeof entry === \"string\" ? entry : entry?.source;\n\t\tconst root = typeof source === \"string\" ? installedPackageRoot(context, source, requested.name) : undefined;\n\t\tif (root === undefined) continue;\n\t\tconst pkg = (await readJson(join(root, \"package.json\"))) as { name?: string } | undefined;\n\t\tif (pkg?.name !== requested.name) continue;\n\t\tconst adapters = getManifestFromPackageJson(pkg)?.storageAdapters ?? [];\n\t\tconst selected =\n\t\t\trequested.adapter === undefined\n\t\t\t\t? adapters[0]\n\t\t\t\t: adapters.find((path) => basename(path, extname(path)) === requested.adapter);\n\t\tif (selected !== undefined) return resolve(root, selected);\n\t}\n\treturn undefined;\n}\n"]}
|
|
@@ -121,6 +121,8 @@ export interface PackageManagerContext {
|
|
|
121
121
|
progressCallback?: ProgressCallback;
|
|
122
122
|
driver?: PackageManagerDriver;
|
|
123
123
|
}
|
|
124
|
+
/** The part of a package manager context that locates installed packages. */
|
|
125
|
+
export type PackageLocationContext = Pick<PackageManagerContext, "cwd" | "agentDir">;
|
|
124
126
|
export type SourceScope = "user" | "project" | "temporary";
|
|
125
127
|
export type NpmSource = {
|
|
126
128
|
type: "npm";
|
|
@@ -154,6 +156,8 @@ export interface PiManifest {
|
|
|
154
156
|
workflows?: string[];
|
|
155
157
|
workflow?: string[];
|
|
156
158
|
mcpServers?: string | Record<string, McpServerConfig>;
|
|
159
|
+
/** Storage adapter modules, relative to the package root, that `storage.adapter` can select by package name. */
|
|
160
|
+
storageAdapters?: string[];
|
|
157
161
|
}
|
|
158
162
|
export type ResourceType = "extensions" | "skills" | "prompts" | "themes" | "workflows";
|
|
159
163
|
export declare const RESOURCE_TYPES: ResourceType[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager-types.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"package-manager-types.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager-types.js","sourceRoot":"","sources":["../../src/core/package-manager-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package-manager-types.js","sourceRoot":"","sources":["../../src/core/package-manager-types.ts"],"names":[],"mappings":"AA+KA,MAAM,CAAC,MAAM,cAAc,GAAmB,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAEzG,MAAM,CAAC,MAAM,aAAa,GAAiC;IAC1D,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,oBAAoB;CAC/B,CAAC","sourcesContent":["import type { GitSource } from \"../utils/git.ts\";\nimport type { McpServerConfig } from \"./mcp-servers.ts\";\nimport type { PackageSource, SettingsManager } from \"./settings-manager.ts\";\n\nexport type ResourceConfigurationOrigin = \"atomic\" | \"inherited-pi\" | \"bundled\";\n\nexport interface PathMetadata {\n\tsource: string;\n\tscope: SourceScope;\n\torigin: \"package\" | \"top-level\";\n\tbaseDir?: string;\n\tpackageRoot?: string;\n\tconfigurationOrigin?: ResourceConfigurationOrigin;\n\t/** True for project-local resources borrowed from an explicit temporary extension source. */\n\tborrowedProjectLocal?: true;\n}\n\nexport interface ResolvedResource {\n\tpath: string;\n\tenabled: boolean;\n\tmetadata: PathMetadata;\n}\n\nexport interface ResolvedMcpServer {\n\tname: string;\n\tconfig: McpServerConfig;\n\tenabled: boolean;\n\t/** Manifest file that declared the server: the referenced JSON file, or package.json for inline servers. */\n\tpath: string;\n\tmetadata: PathMetadata;\n}\n\nexport interface ResolvedPaths {\n\textensions: ResolvedResource[];\n\tskills: ResolvedResource[];\n\tprompts: ResolvedResource[];\n\tthemes: ResolvedResource[];\n\tworkflows: ResolvedResource[];\n\tmcpServers: ResolvedMcpServer[];\n}\n\nexport type MissingSourceAction = \"install\" | \"skip\" | \"error\";\n\nexport interface ProgressEvent {\n\ttype: \"start\" | \"progress\" | \"complete\" | \"error\";\n\taction: \"install\" | \"remove\" | \"update\" | \"clone\" | \"pull\";\n\tsource: string;\n\tmessage?: string;\n}\n\nexport type ProgressCallback = (event: ProgressEvent) => void;\n\nexport interface PackageUpdate {\n\tsource: string;\n\tdisplayName: string;\n\ttype: \"npm\" | \"git\";\n\tscope: Exclude<SourceScope, \"temporary\">;\n}\n\nexport interface ConfiguredPackage {\n\tsource: string;\n\tscope: \"user\" | \"project\";\n\tfiltered: boolean;\n\tinstalledPath?: string;\n}\n\nexport interface PackageManager {\n\tresolve(onMissing?: (source: string) => Promise<MissingSourceAction>): Promise<ResolvedPaths>;\n\tinstall(source: string, options?: { local?: boolean }): Promise<void>;\n\tinstallAndPersist(source: string, options?: { local?: boolean }): Promise<void>;\n\tremove(source: string, options?: { local?: boolean }): Promise<void>;\n\tremoveAndPersist(source: string, options?: { local?: boolean }): Promise<boolean>;\n\tupdate(source?: string): Promise<void>;\n\tlistConfiguredPackages(): ConfiguredPackage[];\n\tresolveExtensionSources(sources: PackageSource[], options?: ResolveExtensionSourcesOptions): Promise<ResolvedPaths>;\n\taddSourceToSettings(source: string, options?: { local?: boolean }): boolean;\n\tremoveSourceFromSettings(source: string, options?: { local?: boolean }): boolean;\n\tsetProgressCallback(callback: ProgressCallback | undefined): void;\n\tgetInstalledPath(source: string, scope: \"user\" | \"project\"): string | undefined;\n}\n\nexport interface PackageManagerOptions {\n\tcwd: string;\n\tagentDir: string;\n\tsettingsManager: SettingsManager;\n\tbuiltinExtensions?: string[];\n}\n\nexport interface GitUpdateTargetInfo {\n\tref: string;\n\thead: string;\n\tfetchArgs: string[];\n}\n\nexport interface PackageManagerDriver {\n\trunCommand(command: string, args: string[], options?: { cwd?: string }): Promise<void>;\n\trunCommandCapture(\n\t\tcommand: string,\n\t\targs: string[],\n\t\toptions?: { cwd?: string; timeoutMs?: number; env?: Record<string, string> },\n\t): Promise<string>;\n\trunCommandSync(command: string, args: string[]): string;\n\tinstallParsedSource(parsed: ParsedSource, scope: SourceScope): Promise<void>;\n\tupdateGit(source: GitSource, scope: SourceScope): Promise<void>;\n\tgitHasAvailableUpdate(installedPath: string): Promise<boolean>;\n\trefreshTemporaryGitSource(source: GitSource, sourceStr: string): Promise<void>;\n\tgetLocalGitUpdateTarget(installedPath: string): Promise<GitUpdateTargetInfo>;\n\tgetGlobalNpmRoot(): string;\n\tparseSource(source: string): ParsedSource;\n\tgetPackageIdentity(source: string, scope?: SourceScope): string;\n\tgetGitInstallPath(source: GitSource, scope: SourceScope): string;\n\tgetLatestNpmVersion(packageSpec: string, range?: string): Promise<string>;\n}\n\nexport interface PackageManagerContext {\n\tcwd: string;\n\tagentDir: string;\n\tsettingsManager: SettingsManager;\n\tbuiltinExtensions?: string[];\n\tglobalNpmRoot?: string;\n\tglobalNpmRootCommandKey?: string;\n\tprogressCallback?: ProgressCallback;\n\tdriver?: PackageManagerDriver;\n}\n\n/** The part of a package manager context that locates installed packages. */\nexport type PackageLocationContext = Pick<PackageManagerContext, \"cwd\" | \"agentDir\">;\n\nexport type SourceScope = \"user\" | \"project\" | \"temporary\";\n\nexport type NpmSource = {\n\ttype: \"npm\";\n\tspec: string;\n\tname: string;\n\tversion?: string;\n\trange?: string;\n\tpinned: boolean;\n};\n\nexport type LocalSource = {\n\ttype: \"local\";\n\tpath: string;\n};\n\nexport type ParsedSource = NpmSource | GitSource | LocalSource;\n\nexport type InstalledSourceScope = Exclude<SourceScope, \"temporary\">;\n\nexport interface ConfiguredUpdateSource {\n\tsource: string;\n\tscope: InstalledSourceScope;\n}\n\nexport interface NpmUpdateTarget extends ConfiguredUpdateSource {\n\tparsed: NpmSource;\n}\n\nexport interface GitUpdateTarget extends ConfiguredUpdateSource {\n\tparsed: GitSource;\n}\n\nexport interface PiManifest {\n\textensions?: string[];\n\tskills?: string[];\n\tprompts?: string[];\n\tthemes?: string[];\n\tworkflows?: string[];\n\tworkflow?: string[];\n\tmcpServers?: string | Record<string, McpServerConfig>;\n\t/** Storage adapter modules, relative to the package root, that `storage.adapter` can select by package name. */\n\tstorageAdapters?: string[];\n}\n\nexport type ResourceType = \"extensions\" | \"skills\" | \"prompts\" | \"themes\" | \"workflows\";\n\nexport const RESOURCE_TYPES: ResourceType[] = [\"extensions\", \"skills\", \"prompts\", \"themes\", \"workflows\"];\n\nexport const FILE_PATTERNS: Record<ResourceType, RegExp> = {\n\textensions: /\\.(ts|js)$/,\n\tskills: /\\.md$/,\n\tprompts: /\\.md$/,\n\tthemes: /\\.json$/,\n\tworkflows: /\\.(ts|js|mjs|cjs)$/,\n};\n\nexport type ResourceEntry = { metadata: PathMetadata; enabled: boolean };\nexport type ResourceMap = Map<string, ResourceEntry>;\n\nexport interface ResourceAccumulator {\n\textensions: ResourceMap;\n\tskills: ResourceMap;\n\tprompts: ResourceMap;\n\tthemes: ResourceMap;\n\tworkflows: ResourceMap;\n\t/** Keyed by declaring file and server name; the first resolution of a package wins. */\n\tmcpServers: Map<string, ResolvedMcpServer>;\n}\n\nexport interface PackageFilter {\n\tautoload?: boolean;\n\textensions?: string[];\n\tskills?: string[];\n\tprompts?: string[];\n\tthemes?: string[];\n\tworkflows?: string[];\n\tmcpServers?: string[];\n}\n\nexport interface ResolveExtensionSourcesOptions {\n\tlocal?: boolean;\n\ttemporary?: boolean;\n\tincludeProjectLocalResources?: boolean;\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface ProviderRequestBudget {
|
|
2
|
+
readonly maxRequests: number;
|
|
3
|
+
readonly intervalMs: number;
|
|
4
|
+
}
|
|
5
|
+
export interface ProviderRateLimitSnapshot {
|
|
6
|
+
readonly provider: string;
|
|
7
|
+
readonly rateLimitCount: number;
|
|
8
|
+
readonly cooldownUntil: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function configureProviderRequestBudget(provider: string, budget: ProviderRequestBudget | undefined): void;
|
|
11
|
+
export declare function providerRateLimitSnapshot(provider: string): ProviderRateLimitSnapshot | undefined;
|
|
12
|
+
export declare function providerIdForModel(model: string | object | undefined): string | undefined;
|
|
13
|
+
export declare function providerCooldownMs(provider: string | undefined): number;
|
|
14
|
+
export declare function providerAdmissionDelayMs(provider: string): number;
|
|
15
|
+
export declare function tryAdmitProviderRequest(provider: string): number;
|
|
16
|
+
export declare function isProviderRateLimit(error: unknown): boolean;
|
|
17
|
+
export declare function markProviderRateLimitObserved(error: object): void;
|
|
18
|
+
export declare function recordProviderRateLimit(provider: string | undefined, error: unknown): number | undefined;
|
|
19
|
+
export declare function recordProviderSuccess(provider: string): void;
|
|
20
|
+
export declare function providerRetryHint(error: unknown): {
|
|
21
|
+
retryAfterMs?: number;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=provider-rate-limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-rate-limits.d.ts","sourceRoot":"","sources":["../../src/core/provider-rate-limits.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAC/B;AAgCD,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAchH;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS,CAGjG;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIzF;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEvE;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYjE;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOhE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE3D;AAYD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAYxG;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAG5D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAM3E"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { getProviderRetryAfterMs } from "@bastani/pi-ai/utils/retry-hints";
|
|
2
|
+
import { normalizeModelFailureSignal } from "./model-fallback-failures.js";
|
|
3
|
+
const stateKey = Symbol.for("atomic-coding-agent/provider-rate-limits@1");
|
|
4
|
+
const globals = globalThis;
|
|
5
|
+
const state = globals[stateKey] ?? {
|
|
6
|
+
providers: new Map(),
|
|
7
|
+
observedFailures: new WeakSet(),
|
|
8
|
+
};
|
|
9
|
+
globals[stateKey] = state;
|
|
10
|
+
function providerLimit(provider) {
|
|
11
|
+
let limit = state.providers.get(provider);
|
|
12
|
+
if (!limit) {
|
|
13
|
+
limit = { cooldownUntil: 0, rateLimitCount: 0, consecutiveLimits: 0, requests: [] };
|
|
14
|
+
state.providers.set(provider, limit);
|
|
15
|
+
}
|
|
16
|
+
return limit;
|
|
17
|
+
}
|
|
18
|
+
export function configureProviderRequestBudget(provider, budget) {
|
|
19
|
+
if (!provider.trim())
|
|
20
|
+
throw new Error("Provider request budget requires a provider ID");
|
|
21
|
+
if (budget &&
|
|
22
|
+
(!Number.isSafeInteger(budget.maxRequests) ||
|
|
23
|
+
budget.maxRequests <= 0 ||
|
|
24
|
+
!Number.isSafeInteger(budget.intervalMs) ||
|
|
25
|
+
budget.intervalMs <= 0)) {
|
|
26
|
+
throw new Error("Provider request budget requires positive integer maxRequests and intervalMs");
|
|
27
|
+
}
|
|
28
|
+
const limit = providerLimit(provider);
|
|
29
|
+
limit.budget = budget ? { ...budget } : undefined;
|
|
30
|
+
if (!budget)
|
|
31
|
+
limit.requests = [];
|
|
32
|
+
}
|
|
33
|
+
export function providerRateLimitSnapshot(provider) {
|
|
34
|
+
const limit = state.providers.get(provider);
|
|
35
|
+
return limit ? { provider, rateLimitCount: limit.rateLimitCount, cooldownUntil: limit.cooldownUntil } : undefined;
|
|
36
|
+
}
|
|
37
|
+
export function providerIdForModel(model) {
|
|
38
|
+
if (typeof model === "string")
|
|
39
|
+
return model.includes("/") ? model.slice(0, model.indexOf("/")) : undefined;
|
|
40
|
+
if (model && "provider" in model && typeof model.provider === "string")
|
|
41
|
+
return model.provider;
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
export function providerCooldownMs(provider) {
|
|
45
|
+
return provider === undefined ? 0 : Math.max(0, (state.providers.get(provider)?.cooldownUntil ?? 0) - Date.now());
|
|
46
|
+
}
|
|
47
|
+
export function providerAdmissionDelayMs(provider) {
|
|
48
|
+
const limit = state.providers.get(provider);
|
|
49
|
+
if (!limit)
|
|
50
|
+
return 0;
|
|
51
|
+
const now = Date.now();
|
|
52
|
+
const cooldown = Math.max(0, limit.cooldownUntil - now);
|
|
53
|
+
if (!limit.budget)
|
|
54
|
+
return cooldown;
|
|
55
|
+
limit.requests = limit.requests.filter((timestamp) => timestamp > now - limit.budget.intervalMs);
|
|
56
|
+
const budgetDelay = limit.requests.length < limit.budget.maxRequests
|
|
57
|
+
? 0
|
|
58
|
+
: limit.requests[limit.requests.length - limit.budget.maxRequests] + limit.budget.intervalMs - now;
|
|
59
|
+
return Math.max(cooldown, budgetDelay);
|
|
60
|
+
}
|
|
61
|
+
export function tryAdmitProviderRequest(provider) {
|
|
62
|
+
const delay = providerAdmissionDelayMs(provider);
|
|
63
|
+
if (delay === 0) {
|
|
64
|
+
const limit = state.providers.get(provider);
|
|
65
|
+
if (limit?.budget)
|
|
66
|
+
limit.requests.push(Date.now());
|
|
67
|
+
}
|
|
68
|
+
return delay;
|
|
69
|
+
}
|
|
70
|
+
export function isProviderRateLimit(error) {
|
|
71
|
+
return normalizeModelFailureSignal(error)?.kind === "rate_limit";
|
|
72
|
+
}
|
|
73
|
+
function failureObjects(error) {
|
|
74
|
+
const seen = new Set();
|
|
75
|
+
let current = error;
|
|
76
|
+
while (current !== null && typeof current === "object" && !seen.has(current)) {
|
|
77
|
+
seen.add(current);
|
|
78
|
+
current = "cause" in current ? current.cause : undefined;
|
|
79
|
+
}
|
|
80
|
+
return [...seen];
|
|
81
|
+
}
|
|
82
|
+
export function markProviderRateLimitObserved(error) {
|
|
83
|
+
state.observedFailures.add(error);
|
|
84
|
+
}
|
|
85
|
+
export function recordProviderRateLimit(provider, error) {
|
|
86
|
+
if (provider === undefined || !isProviderRateLimit(error))
|
|
87
|
+
return undefined;
|
|
88
|
+
for (const value of failureObjects(error)) {
|
|
89
|
+
if (state.observedFailures.delete(value))
|
|
90
|
+
return providerCooldownMs(provider);
|
|
91
|
+
}
|
|
92
|
+
const limit = providerLimit(provider);
|
|
93
|
+
limit.rateLimitCount += 1;
|
|
94
|
+
limit.consecutiveLimits += 1;
|
|
95
|
+
const backoff = Math.min(60_000, 1000 * 2 ** Math.min(limit.consecutiveLimits - 1, 6));
|
|
96
|
+
const delay = providerRetryHint(error).retryAfterMs ?? backoff * (0.5 + Math.random() * 0.5);
|
|
97
|
+
limit.cooldownUntil = Math.max(limit.cooldownUntil, Math.ceil(Date.now() + Math.max(1, delay)));
|
|
98
|
+
return providerCooldownMs(provider);
|
|
99
|
+
}
|
|
100
|
+
export function recordProviderSuccess(provider) {
|
|
101
|
+
const limit = state.providers.get(provider);
|
|
102
|
+
if (limit)
|
|
103
|
+
limit.consecutiveLimits = 0;
|
|
104
|
+
}
|
|
105
|
+
export function providerRetryHint(error) {
|
|
106
|
+
for (const value of failureObjects(error)) {
|
|
107
|
+
const retryAfterMs = getProviderRetryAfterMs(value);
|
|
108
|
+
if (retryAfterMs !== undefined)
|
|
109
|
+
return { retryAfterMs };
|
|
110
|
+
}
|
|
111
|
+
return {};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=provider-rate-limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-rate-limits.js","sourceRoot":"","sources":["../../src/core/provider-rate-limits.ts"],"names":[],"mappings":"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","sourcesContent":["import { getProviderRetryAfterMs } from \"@bastani/pi-ai/utils/retry-hints\";\nimport { normalizeModelFailureSignal } from \"./model-fallback-failures.ts\";\n\nexport interface ProviderRequestBudget {\n\treadonly maxRequests: number;\n\treadonly intervalMs: number;\n}\n\nexport interface ProviderRateLimitSnapshot {\n\treadonly provider: string;\n\treadonly rateLimitCount: number;\n\treadonly cooldownUntil: number;\n}\n\ninterface ProviderLimit {\n\tcooldownUntil: number;\n\trateLimitCount: number;\n\tconsecutiveLimits: number;\n\tbudget?: ProviderRequestBudget;\n\trequests: number[];\n}\n\ninterface ProviderLimitState {\n\treadonly providers: Map<string, ProviderLimit>;\n\treadonly observedFailures: WeakSet<object>;\n}\n\nconst stateKey = Symbol.for(\"atomic-coding-agent/provider-rate-limits@1\");\nconst globals = globalThis as typeof globalThis & { [stateKey]?: ProviderLimitState };\nconst state = globals[stateKey] ?? {\n\tproviders: new Map<string, ProviderLimit>(),\n\tobservedFailures: new WeakSet<object>(),\n};\nglobals[stateKey] = state;\n\nfunction providerLimit(provider: string): ProviderLimit {\n\tlet limit = state.providers.get(provider);\n\tif (!limit) {\n\t\tlimit = { cooldownUntil: 0, rateLimitCount: 0, consecutiveLimits: 0, requests: [] };\n\t\tstate.providers.set(provider, limit);\n\t}\n\treturn limit;\n}\n\nexport function configureProviderRequestBudget(provider: string, budget: ProviderRequestBudget | undefined): void {\n\tif (!provider.trim()) throw new Error(\"Provider request budget requires a provider ID\");\n\tif (\n\t\tbudget &&\n\t\t(!Number.isSafeInteger(budget.maxRequests) ||\n\t\t\tbudget.maxRequests <= 0 ||\n\t\t\t!Number.isSafeInteger(budget.intervalMs) ||\n\t\t\tbudget.intervalMs <= 0)\n\t) {\n\t\tthrow new Error(\"Provider request budget requires positive integer maxRequests and intervalMs\");\n\t}\n\tconst limit = providerLimit(provider);\n\tlimit.budget = budget ? { ...budget } : undefined;\n\tif (!budget) limit.requests = [];\n}\n\nexport function providerRateLimitSnapshot(provider: string): ProviderRateLimitSnapshot | undefined {\n\tconst limit = state.providers.get(provider);\n\treturn limit ? { provider, rateLimitCount: limit.rateLimitCount, cooldownUntil: limit.cooldownUntil } : undefined;\n}\n\nexport function providerIdForModel(model: string | object | undefined): string | undefined {\n\tif (typeof model === \"string\") return model.includes(\"/\") ? model.slice(0, model.indexOf(\"/\")) : undefined;\n\tif (model && \"provider\" in model && typeof model.provider === \"string\") return model.provider;\n\treturn undefined;\n}\n\nexport function providerCooldownMs(provider: string | undefined): number {\n\treturn provider === undefined ? 0 : Math.max(0, (state.providers.get(provider)?.cooldownUntil ?? 0) - Date.now());\n}\n\nexport function providerAdmissionDelayMs(provider: string): number {\n\tconst limit = state.providers.get(provider);\n\tif (!limit) return 0;\n\tconst now = Date.now();\n\tconst cooldown = Math.max(0, limit.cooldownUntil - now);\n\tif (!limit.budget) return cooldown;\n\tlimit.requests = limit.requests.filter((timestamp) => timestamp > now - limit.budget!.intervalMs);\n\tconst budgetDelay =\n\t\tlimit.requests.length < limit.budget.maxRequests\n\t\t\t? 0\n\t\t\t: limit.requests[limit.requests.length - limit.budget.maxRequests]! + limit.budget.intervalMs - now;\n\treturn Math.max(cooldown, budgetDelay);\n}\n\nexport function tryAdmitProviderRequest(provider: string): number {\n\tconst delay = providerAdmissionDelayMs(provider);\n\tif (delay === 0) {\n\t\tconst limit = state.providers.get(provider);\n\t\tif (limit?.budget) limit.requests.push(Date.now());\n\t}\n\treturn delay;\n}\n\nexport function isProviderRateLimit(error: unknown): boolean {\n\treturn normalizeModelFailureSignal(error)?.kind === \"rate_limit\";\n}\n\nfunction failureObjects(error: unknown): object[] {\n\tconst seen = new Set<object>();\n\tlet current = error;\n\twhile (current !== null && typeof current === \"object\" && !seen.has(current)) {\n\t\tseen.add(current);\n\t\tcurrent = \"cause\" in current ? current.cause : undefined;\n\t}\n\treturn [...seen];\n}\n\nexport function markProviderRateLimitObserved(error: object): void {\n\tstate.observedFailures.add(error);\n}\n\nexport function recordProviderRateLimit(provider: string | undefined, error: unknown): number | undefined {\n\tif (provider === undefined || !isProviderRateLimit(error)) return undefined;\n\tfor (const value of failureObjects(error)) {\n\t\tif (state.observedFailures.delete(value)) return providerCooldownMs(provider);\n\t}\n\tconst limit = providerLimit(provider);\n\tlimit.rateLimitCount += 1;\n\tlimit.consecutiveLimits += 1;\n\tconst backoff = Math.min(60_000, 1000 * 2 ** Math.min(limit.consecutiveLimits - 1, 6));\n\tconst delay = providerRetryHint(error).retryAfterMs ?? backoff * (0.5 + Math.random() * 0.5);\n\tlimit.cooldownUntil = Math.max(limit.cooldownUntil, Math.ceil(Date.now() + Math.max(1, delay)));\n\treturn providerCooldownMs(provider);\n}\n\nexport function recordProviderSuccess(provider: string): void {\n\tconst limit = state.providers.get(provider);\n\tif (limit) limit.consecutiveLimits = 0;\n}\n\nexport function providerRetryHint(error: unknown): { retryAfterMs?: number } {\n\tfor (const value of failureObjects(error)) {\n\t\tconst retryAfterMs = getProviderRetryAfterMs(value);\n\t\tif (retryAfterMs !== undefined) return { retryAfterMs };\n\t}\n\treturn {};\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Api, AssistantMessage, Model, StreamOptions } from "@bastani/pi-ai";
|
|
2
|
+
export declare function admitProviderStream(model: Model<Api>, options: StreamOptions, ownsTransport: boolean): Promise<{
|
|
3
|
+
options: StreamOptions;
|
|
4
|
+
run<T>(invoke: () => T): T;
|
|
5
|
+
observeFailure(error: AssistantMessage): void;
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=provider-request-admission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-request-admission.d.ts","sourceRoot":"","sources":["../../src/core/provider-request-admission.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA2ElF,wBAAsB,mBAAmB,CACxC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,OAAO,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAAE,CAAC,CAsBhH"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import { createFetchWithAdmission } from "@bastani/pi-ai/utils/request-admission";
|
|
3
|
+
import { isProviderRateLimit, markProviderRateLimitObserved, recordProviderRateLimit, recordProviderSuccess, tryAdmitProviderRequest, } from "./provider-rate-limits.js";
|
|
4
|
+
const FETCH_APIS = new Set([
|
|
5
|
+
"anthropic-messages",
|
|
6
|
+
"openai-completions",
|
|
7
|
+
"openai-responses",
|
|
8
|
+
"azure-openai-responses",
|
|
9
|
+
"mistral-conversations",
|
|
10
|
+
"pi-messages",
|
|
11
|
+
]);
|
|
12
|
+
const streamAdmission = new AsyncLocalStorage();
|
|
13
|
+
const admittedFetches = new WeakMap();
|
|
14
|
+
function providerFetch(provider, originalFetch) {
|
|
15
|
+
let providers = admittedFetches.get(originalFetch);
|
|
16
|
+
if (!providers) {
|
|
17
|
+
providers = new Map();
|
|
18
|
+
admittedFetches.set(originalFetch, providers);
|
|
19
|
+
}
|
|
20
|
+
const cached = providers.get(provider);
|
|
21
|
+
if (cached)
|
|
22
|
+
return cached;
|
|
23
|
+
const observedFetch = Object.assign(async (input, init) => {
|
|
24
|
+
const state = streamAdmission.getStore();
|
|
25
|
+
if (state)
|
|
26
|
+
state.observedRateLimit = false;
|
|
27
|
+
const response = await originalFetch(input, init);
|
|
28
|
+
if (response.status === 429) {
|
|
29
|
+
recordProviderRateLimit(provider, { status: 429, headers: response.headers });
|
|
30
|
+
if (state)
|
|
31
|
+
state.observedRateLimit = true;
|
|
32
|
+
}
|
|
33
|
+
else if (response.ok)
|
|
34
|
+
recordProviderSuccess(provider);
|
|
35
|
+
return response;
|
|
36
|
+
}, originalFetch);
|
|
37
|
+
const admitted = createFetchWithAdmission(observedFetch, (signal) => waitForAdmission(provider, signal));
|
|
38
|
+
providers.set(provider, admitted);
|
|
39
|
+
return admitted;
|
|
40
|
+
}
|
|
41
|
+
function sleepForAdmission(ms, signal) {
|
|
42
|
+
signal?.throwIfAborted();
|
|
43
|
+
return new Promise((resolve, reject) => {
|
|
44
|
+
const cleanup = () => signal?.removeEventListener("abort", abort);
|
|
45
|
+
const timer = setTimeout(() => {
|
|
46
|
+
cleanup();
|
|
47
|
+
resolve();
|
|
48
|
+
}, ms);
|
|
49
|
+
const abort = () => {
|
|
50
|
+
clearTimeout(timer);
|
|
51
|
+
cleanup();
|
|
52
|
+
reject(signal?.reason ?? new Error("Provider request aborted"));
|
|
53
|
+
};
|
|
54
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async function waitForAdmission(provider, signal) {
|
|
58
|
+
while (true) {
|
|
59
|
+
signal?.throwIfAborted();
|
|
60
|
+
const delay = tryAdmitProviderRequest(provider);
|
|
61
|
+
if (delay === 0)
|
|
62
|
+
return;
|
|
63
|
+
await sleepForAdmission(Math.min(delay, 60_000), signal);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export async function admitProviderStream(model, options, ownsTransport) {
|
|
67
|
+
const state = { observedRateLimit: false };
|
|
68
|
+
const usesFetch = !ownsTransport &&
|
|
69
|
+
(FETCH_APIS.has(model.api) || (model.api === "openai-codex-responses" && options.transport === "sse"));
|
|
70
|
+
if (usesFetch) {
|
|
71
|
+
options = { ...options, fetch: providerFetch(model.provider, options.fetch ?? globalThis.fetch) };
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
await waitForAdmission(model.provider, options.signal);
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
options,
|
|
78
|
+
run: (invoke) => streamAdmission.run(state, invoke),
|
|
79
|
+
observeFailure(error) {
|
|
80
|
+
if (state.observedRateLimit && error.stopReason === "error" && !isProviderRateLimit(error)) {
|
|
81
|
+
error.errorMessage = `429 Too Many Requests: ${error.errorMessage ?? "provider rate limited the request"}`;
|
|
82
|
+
}
|
|
83
|
+
if (!isProviderRateLimit(error))
|
|
84
|
+
return;
|
|
85
|
+
if (!state.observedRateLimit)
|
|
86
|
+
recordProviderRateLimit(model.provider, error);
|
|
87
|
+
markProviderRateLimitObserved(error);
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=provider-request-admission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-request-admission.js","sourceRoot":"","sources":["../../src/core/provider-request-admission.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { Api, AssistantMessage, Model, StreamOptions } from \"@bastani/pi-ai\";\nimport { createFetchWithAdmission } from \"@bastani/pi-ai/utils/request-admission\";\nimport {\n\tisProviderRateLimit,\n\tmarkProviderRateLimitObserved,\n\trecordProviderRateLimit,\n\trecordProviderSuccess,\n\ttryAdmitProviderRequest,\n} from \"./provider-rate-limits.js\";\n\nconst FETCH_APIS = new Set([\n\t\"anthropic-messages\",\n\t\"openai-completions\",\n\t\"openai-responses\",\n\t\"azure-openai-responses\",\n\t\"mistral-conversations\",\n\t\"pi-messages\",\n]);\n\ninterface StreamAdmissionState {\n\tobservedRateLimit: boolean;\n}\n\nconst streamAdmission = new AsyncLocalStorage<StreamAdmissionState>();\nconst admittedFetches = new WeakMap<typeof fetch, Map<string, typeof fetch>>();\n\nfunction providerFetch(provider: string, originalFetch: typeof fetch): typeof fetch {\n\tlet providers = admittedFetches.get(originalFetch);\n\tif (!providers) {\n\t\tproviders = new Map();\n\t\tadmittedFetches.set(originalFetch, providers);\n\t}\n\tconst cached = providers.get(provider);\n\tif (cached) return cached;\n\tconst observedFetch: typeof fetch = Object.assign(async (input: Parameters<typeof fetch>[0], init?: RequestInit) => {\n\t\tconst state = streamAdmission.getStore();\n\t\tif (state) state.observedRateLimit = false;\n\t\tconst response = await originalFetch(input, init);\n\t\tif (response.status === 429) {\n\t\t\trecordProviderRateLimit(provider, { status: 429, headers: response.headers });\n\t\t\tif (state) state.observedRateLimit = true;\n\t\t} else if (response.ok) recordProviderSuccess(provider);\n\t\treturn response;\n\t}, originalFetch);\n\tconst admitted = createFetchWithAdmission(observedFetch, (signal) => waitForAdmission(provider, signal));\n\tproviders.set(provider, admitted);\n\treturn admitted;\n}\n\nfunction sleepForAdmission(ms: number, signal?: AbortSignal): Promise<void> {\n\tsignal?.throwIfAborted();\n\treturn new Promise((resolve, reject) => {\n\t\tconst cleanup = () => signal?.removeEventListener(\"abort\", abort);\n\t\tconst timer = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\tresolve();\n\t\t}, ms);\n\t\tconst abort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tcleanup();\n\t\t\treject(signal?.reason ?? new Error(\"Provider request aborted\"));\n\t\t};\n\t\tsignal?.addEventListener(\"abort\", abort, { once: true });\n\t});\n}\n\nasync function waitForAdmission(provider: string, signal?: AbortSignal): Promise<void> {\n\twhile (true) {\n\t\tsignal?.throwIfAborted();\n\t\tconst delay = tryAdmitProviderRequest(provider);\n\t\tif (delay === 0) return;\n\t\tawait sleepForAdmission(Math.min(delay, 60_000), signal);\n\t}\n}\n\nexport async function admitProviderStream(\n\tmodel: Model<Api>,\n\toptions: StreamOptions,\n\townsTransport: boolean,\n): Promise<{ options: StreamOptions; run<T>(invoke: () => T): T; observeFailure(error: AssistantMessage): void }> {\n\tconst state: StreamAdmissionState = { observedRateLimit: false };\n\tconst usesFetch =\n\t\t!ownsTransport &&\n\t\t(FETCH_APIS.has(model.api) || (model.api === \"openai-codex-responses\" && options.transport === \"sse\"));\n\tif (usesFetch) {\n\t\toptions = { ...options, fetch: providerFetch(model.provider, options.fetch ?? globalThis.fetch) };\n\t} else {\n\t\tawait waitForAdmission(model.provider, options.signal);\n\t}\n\treturn {\n\t\toptions,\n\t\trun: (invoke) => streamAdmission.run(state, invoke),\n\t\tobserveFailure(error) {\n\t\t\tif (state.observedRateLimit && error.stopReason === \"error\" && !isProviderRateLimit(error)) {\n\t\t\t\terror.errorMessage = `429 Too Many Requests: ${error.errorMessage ?? \"provider rate limited the request\"}`;\n\t\t\t}\n\t\t\tif (!isProviderRateLimit(error)) return;\n\t\t\tif (!state.observedRateLimit) recordProviderRateLimit(model.provider, error);\n\t\t\tmarkProviderRateLimitObserved(error);\n\t\t},\n\t};\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ResourceAdmission } from "./sdk-types.ts";
|
|
2
|
+
export declare function withResourceAdmission<T>(admission: ResourceAdmission, callback: () => Promise<T>): Promise<T>;
|
|
3
|
+
export declare function currentResourceAdmission(): ResourceAdmission | undefined;
|
|
4
|
+
//# sourceMappingURL=resource-admission-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-admission-scope.d.ts","sourceRoot":"","sources":["../../src/core/resource-admission-scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIxD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE7G;AAED,wBAAgB,wBAAwB,IAAI,iBAAiB,GAAG,SAAS,CAExE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
const scope = new AsyncLocalStorage();
|
|
3
|
+
export function withResourceAdmission(admission, callback) {
|
|
4
|
+
return scope.run(admission, callback);
|
|
5
|
+
}
|
|
6
|
+
export function currentResourceAdmission() {
|
|
7
|
+
return scope.getStore();
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=resource-admission-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-admission-scope.js","sourceRoot":"","sources":["../../src/core/resource-admission-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAqB,CAAC;AAEzD,MAAM,UAAU,qBAAqB,CAAI,SAA4B,EAAE,QAA0B;IAChG,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,wBAAwB;IACvC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC","sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { ResourceAdmission } from \"./sdk-types.ts\";\n\nconst scope = new AsyncLocalStorage<ResourceAdmission>();\n\nexport function withResourceAdmission<T>(admission: ResourceAdmission, callback: () => Promise<T>): Promise<T> {\n\treturn scope.run(admission, callback);\n}\n\nexport function currentResourceAdmission(): ResourceAdmission | undefined {\n\treturn scope.getStore();\n}\n"]}
|
package/dist/core/sdk-types.d.ts
CHANGED
|
@@ -100,11 +100,27 @@ export interface CreateAgentSessionOptions {
|
|
|
100
100
|
* parent's child-session options, so child background shells appear in the parent's `/tasks`.
|
|
101
101
|
*/
|
|
102
102
|
parentCommandTaskOwner?: import("./tasks/child-command-owner.js").ChildCommandTaskOwner;
|
|
103
|
+
resourceAdmission?: ResourceAdmission;
|
|
104
|
+
resourceAdmissionSignal?: AbortSignal;
|
|
105
|
+
resourceAdmissionDelegated?: boolean;
|
|
103
106
|
/** Transform the fully constructed base system prompt at session construction. */
|
|
104
107
|
systemPromptTransform?: (prompt: string) => string;
|
|
105
108
|
/** Filter inherited session messages before they enter the new AgentSession. */
|
|
106
109
|
initialContextTransform?: (messages: AgentMessage[]) => AgentMessage[];
|
|
107
110
|
}
|
|
111
|
+
export interface ResourceAdmissionRequest {
|
|
112
|
+
readonly delegated?: boolean;
|
|
113
|
+
}
|
|
114
|
+
export interface ResourceProcessIdentity {
|
|
115
|
+
readonly kind: "unix-process-group";
|
|
116
|
+
readonly id: number;
|
|
117
|
+
}
|
|
118
|
+
export type ResourcePermit = (() => Promise<void>) & {
|
|
119
|
+
bindProcess?: (identity: ResourceProcessIdentity) => Promise<void>;
|
|
120
|
+
};
|
|
121
|
+
export interface ResourceAdmission {
|
|
122
|
+
acquire(kind: "session" | "process", signal?: AbortSignal, request?: ResourceAdmissionRequest): Promise<ResourcePermit>;
|
|
123
|
+
}
|
|
108
124
|
/** Result from createAgentSession */
|
|
109
125
|
export interface CreateAgentSessionResult {
|
|
110
126
|
/** The created session */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-types.d.ts","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EACX,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,KAAK,GAAG,YAAY,GAAG,UAAU,CAAC;AAE1F,MAAM,WAAW,yBAAyB;IACzC,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAE3B,oFAAoF;IACpF,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,iEAAiE;IACjE,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,+FAA+F;IAC/F,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;IACpF,gEAAgE;IAChE,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAAC,aAAa,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;IAE3E;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAC5B;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,gEAAgE;IAChE,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAE/B,oEAAoE;IACpE,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,2DAA2D;IAC3D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,8FAA8F;IAC9F,YAAY,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAAC;IAE/C,uEAAuE;IACvE,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,2FAA2F;IAC3F,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,gEAAgE;IAChE,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,gCAAgC,EAAE,qBAAqB,CAAC;IACxF,kFAAkF;IAClF,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACnD,gFAAgF;IAChF,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,CAAC;CACvE;AAED,qCAAqC;AACrC,MAAM,WAAW,wBAAwB;IACxC,0BAA0B;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,mEAAmE;IACnE,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,sEAAsE;IACtE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC1C"}
|
|
1
|
+
{"version":3,"file":"sdk-types.d.ts","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-types.js","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { ExtensionBindings } from \"./agent-session-types.js\";\nimport type {\n\tLoadExtensionsResult,\n\tOrchestrationContext,\n\tSessionStartEvent,\n\tSubagentChildPolicy,\n\tToolDefinition,\n} from \"./extensions/index.js\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { ModelRuntime } from \"./model-runtime.js\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { RunJournalOption, StorageSelection } from \"./storage/provider.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\n\nexport type AtomicBuiltin = \"workflows\" | \"subagents\" | \"mcp\" | \"web-access\" | \"intercom\";\n\nexport interface CreateAgentSessionOptions {\n\t/** Shipped packages are enabled unless explicitly false. Independent of tool selection. */\n\tbuiltins?: Partial<Record<AtomicBuiltin, boolean>>;\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.atomic/agent */\n\tagentDir?: string;\n\t/**\n\t * Workflow journal for this session's `workflow` tool: a file path, a caller-owned database, process-local\n\t * memory, a storage adapter, or a supplied journal. Overrides process-level selections (`ATOMIC_WORKFLOWS_JOURNAL`,\n\t * `ATOMIC_WORKFLOW_JOURNAL_PATH`, `ATOMIC_STORAGE`), the session's `workflows.journal` settings, and the default\n\t * journal file. The caller closes a database or journal it supplies.\n\t */\n\tjournal?: RunJournalOption;\n\n\t/** Canonical model/auth runtime. Defaults to agentDir/auth.json and models.json. */\n\tmodelRuntime?: ModelRuntime;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<Api>;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/**\n\t * Ordered fallback models as provider/model strings with optional :thinkingLevel suffix.\n\t * Used by main-chat turns and borrowed, planner-only, for compaction range planning when\n\t * the current model cannot produce a usable plan — so a configured candidate may receive\n\t * the compaction transcript. Borrowing never changes the session model or thinking level.\n\t * Default: settings.fallbackModels\n\t */\n\tfallbackModels?: string[];\n\t/** Hard eligibility gate applied before fallback inference, including compaction borrowing. */\n\tisFallbackModelAllowed?: (model: Model<Api>, effort: string | undefined) => boolean;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\n\t/**\n\t * Tool suppression mode.\n\t *\n\t * - \"all\": no active tools, even with an explicit allowlist\n\t * - \"builtin\": suppress coding-tool defaults only when tools is omitted;\n\t * extension/custom tools remain enabled\n\t */\n\tnoTools?: \"all\" | \"builtin\";\n\t/**\n\t * Optional allowlist of tool names or patterns where `*` matches any characters.\n\t *\n\t * When omitted, Atomic uses the resolved `defaultTools` setting for the initial\n\t * built-in selection when configured. Otherwise it enables the default\n\t * built-in tools (read, bash, edit, write, find, search, ask_user_question,\n\t * todo). Extension/custom tools remain enabled unless `noTools` changes\n\t * that default. MCP tools stay registered for codemode and tool search unless\n\t * an entry starts with `mcp__`; only matching tools are declared directly.\n\t * `excludedTools` applies afterwards. `noTools: \"all\"` overrides this selection.\n\t * Intercom follows the same selection and suppression rules as other extension tools.\n\t * A list of only `+name`/`-name` entries changes the resolved defaults instead\n\t * of allowlisting tools, and is reapplied on reload. Modifiers take exact names;\n\t * mixing them with plain names or patterns throws. Total suppression still wins.\n\t */\n\ttools?: string[];\n\t/**\n\t * Optional blocklist of tool names or patterns, including MCP tools.\n\t *\n\t * Matching built-in, extension, and SDK custom tools are omitted from the\n\t * final session tool registry and active tool set. Unknown names are ignored.\n\t */\n\texcludedTools?: string[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\t/** Session storage. Defaults to the resolved settings or the shared local SQLite database. */\n\tsessionStore?: SessionStore | StorageSelection;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\t/** Session start event metadata for extension runtime startup. */\n\tsessionStartEvent?: SessionStartEvent;\n\t/** Host bindings installed before extension startup. Rebinding does not replay startup. */\n\textensionBindings?: ExtensionBindings;\n\t/** Session-scoped orchestration policy exposed to extension/tool handlers. */\n\torchestrationContext?: OrchestrationContext;\n\t/** Typed capability policy for an in-process subagent child. */\n\tsubagentPolicy?: SubagentChildPolicy;\n\t/**\n\t * Internal: parent-issued shell task owner for an in-process subagent child. Supplied by the\n\t * parent's child-session options, so child background shells appear in the parent's `/tasks`.\n\t */\n\tparentCommandTaskOwner?: import(\"./tasks/child-command-owner.js\").ChildCommandTaskOwner;\n\t/** Transform the fully constructed base system prompt at session construction. */\n\tsystemPromptTransform?: (prompt: string) => string;\n\t/** Filter inherited session messages before they enter the new AgentSession. */\n\tinitialContextTransform?: (messages: AgentMessage[]) => AgentMessage[];\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning when a restored or configured model cannot be selected. */\n\tmodelFallbackMessage?: string;\n\t/** Semantic reason for modelFallbackMessage; suitable for mode control flow. */\n\tmodelFallbackReason?: ModelFallbackReason;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk-types.js","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { ExtensionBindings } from \"./agent-session-types.js\";\nimport type {\n\tLoadExtensionsResult,\n\tOrchestrationContext,\n\tSessionStartEvent,\n\tSubagentChildPolicy,\n\tToolDefinition,\n} from \"./extensions/index.js\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { ModelRuntime } from \"./model-runtime.js\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { RunJournalOption, StorageSelection } from \"./storage/provider.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\n\nexport type AtomicBuiltin = \"workflows\" | \"subagents\" | \"mcp\" | \"web-access\" | \"intercom\";\n\nexport interface CreateAgentSessionOptions {\n\t/** Shipped packages are enabled unless explicitly false. Independent of tool selection. */\n\tbuiltins?: Partial<Record<AtomicBuiltin, boolean>>;\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.atomic/agent */\n\tagentDir?: string;\n\t/**\n\t * Workflow journal for this session's `workflow` tool: a file path, a caller-owned database, process-local\n\t * memory, a storage adapter, or a supplied journal. Overrides process-level selections (`ATOMIC_WORKFLOWS_JOURNAL`,\n\t * `ATOMIC_WORKFLOW_JOURNAL_PATH`, `ATOMIC_STORAGE`), the session's `workflows.journal` settings, and the default\n\t * journal file. The caller closes a database or journal it supplies.\n\t */\n\tjournal?: RunJournalOption;\n\n\t/** Canonical model/auth runtime. Defaults to agentDir/auth.json and models.json. */\n\tmodelRuntime?: ModelRuntime;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<Api>;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/**\n\t * Ordered fallback models as provider/model strings with optional :thinkingLevel suffix.\n\t * Used by main-chat turns and borrowed, planner-only, for compaction range planning when\n\t * the current model cannot produce a usable plan — so a configured candidate may receive\n\t * the compaction transcript. Borrowing never changes the session model or thinking level.\n\t * Default: settings.fallbackModels\n\t */\n\tfallbackModels?: string[];\n\t/** Hard eligibility gate applied before fallback inference, including compaction borrowing. */\n\tisFallbackModelAllowed?: (model: Model<Api>, effort: string | undefined) => boolean;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\n\t/**\n\t * Tool suppression mode.\n\t *\n\t * - \"all\": no active tools, even with an explicit allowlist\n\t * - \"builtin\": suppress coding-tool defaults only when tools is omitted;\n\t * extension/custom tools remain enabled\n\t */\n\tnoTools?: \"all\" | \"builtin\";\n\t/**\n\t * Optional allowlist of tool names or patterns where `*` matches any characters.\n\t *\n\t * When omitted, Atomic uses the resolved `defaultTools` setting for the initial\n\t * built-in selection when configured. Otherwise it enables the default\n\t * built-in tools (read, bash, edit, write, find, search, ask_user_question,\n\t * todo). Extension/custom tools remain enabled unless `noTools` changes\n\t * that default. MCP tools stay registered for codemode and tool search unless\n\t * an entry starts with `mcp__`; only matching tools are declared directly.\n\t * `excludedTools` applies afterwards. `noTools: \"all\"` overrides this selection.\n\t * Intercom follows the same selection and suppression rules as other extension tools.\n\t * A list of only `+name`/`-name` entries changes the resolved defaults instead\n\t * of allowlisting tools, and is reapplied on reload. Modifiers take exact names;\n\t * mixing them with plain names or patterns throws. Total suppression still wins.\n\t */\n\ttools?: string[];\n\t/**\n\t * Optional blocklist of tool names or patterns, including MCP tools.\n\t *\n\t * Matching built-in, extension, and SDK custom tools are omitted from the\n\t * final session tool registry and active tool set. Unknown names are ignored.\n\t */\n\texcludedTools?: string[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\t/** Session storage. Defaults to the resolved settings or the shared local SQLite database. */\n\tsessionStore?: SessionStore | StorageSelection;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\t/** Session start event metadata for extension runtime startup. */\n\tsessionStartEvent?: SessionStartEvent;\n\t/** Host bindings installed before extension startup. Rebinding does not replay startup. */\n\textensionBindings?: ExtensionBindings;\n\t/** Session-scoped orchestration policy exposed to extension/tool handlers. */\n\torchestrationContext?: OrchestrationContext;\n\t/** Typed capability policy for an in-process subagent child. */\n\tsubagentPolicy?: SubagentChildPolicy;\n\t/**\n\t * Internal: parent-issued shell task owner for an in-process subagent child. Supplied by the\n\t * parent's child-session options, so child background shells appear in the parent's `/tasks`.\n\t */\n\tparentCommandTaskOwner?: import(\"./tasks/child-command-owner.js\").ChildCommandTaskOwner;\n\tresourceAdmission?: ResourceAdmission;\n\tresourceAdmissionSignal?: AbortSignal;\n\tresourceAdmissionDelegated?: boolean;\n\t/** Transform the fully constructed base system prompt at session construction. */\n\tsystemPromptTransform?: (prompt: string) => string;\n\t/** Filter inherited session messages before they enter the new AgentSession. */\n\tinitialContextTransform?: (messages: AgentMessage[]) => AgentMessage[];\n}\n\nexport interface ResourceAdmissionRequest {\n\treadonly delegated?: boolean;\n}\n\nexport interface ResourceProcessIdentity {\n\treadonly kind: \"unix-process-group\";\n\treadonly id: number;\n}\n\nexport type ResourcePermit = (() => Promise<void>) & {\n\tbindProcess?: (identity: ResourceProcessIdentity) => Promise<void>;\n};\n\nexport interface ResourceAdmission {\n\tacquire(\n\t\tkind: \"session\" | \"process\",\n\t\tsignal?: AbortSignal,\n\t\trequest?: ResourceAdmissionRequest,\n\t): Promise<ResourcePermit>;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning when a restored or configured model cannot be selected. */\n\tmodelFallbackMessage?: string;\n\t/** Semantic reason for modelFallbackMessage; suitable for mode control flow. */\n\tmodelFallbackReason?: ModelFallbackReason;\n}\n"]}
|
package/dist/core/sdk.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { CreateAgentSessionOptions, CreateAgentSessionResult } from "./sdk-types.ts";
|
|
2
2
|
export type { ModelFallbackReason } from "./model-resolver-types.ts";
|
|
3
|
+
export { withResourceAdmission } from "./resource-admission-scope.ts";
|
|
3
4
|
export * from "./sdk-exports.ts";
|
|
4
|
-
export type { AtomicBuiltin, CreateAgentSessionOptions, CreateAgentSessionResult } from "./sdk-types.ts";
|
|
5
|
+
export type { AtomicBuiltin, CreateAgentSessionOptions, CreateAgentSessionResult, ResourceAdmission, ResourceAdmissionRequest, ResourcePermit, ResourceProcessIdentity, } from "./sdk-types.ts";
|
|
5
6
|
/**
|
|
6
7
|
* Create an AgentSession with the specified options.
|
|
7
8
|
*
|
package/dist/core/sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAuB1F,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,cAAc,kBAAkB,CAAC;AACjC,YAAY,EACX,aAAa,EACb,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,cAAc,EACd,uBAAuB,GACvB,MAAM,gBAAgB,CAAC;AA+BxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAEnH;AAED,4EAA4E;AAC5E,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,yBAAyB,EAClC,mBAAmB,UAAO,GACxB,OAAO,CAAC,wBAAwB,CAAC,CAEnC"}
|