@bastani/atomic 0.9.0-alpha.1 → 0.9.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/builtin/cursor/CHANGELOG.md +6 -0
- package/dist/builtin/cursor/package.json +2 -2
- package/dist/builtin/intercom/CHANGELOG.md +6 -0
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +6 -0
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/subagents/CHANGELOG.md +6 -0
- package/dist/builtin/subagents/package.json +4 -4
- package/dist/builtin/web-access/CHANGELOG.md +6 -0
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +12 -0
- package/dist/builtin/workflows/README.md +189 -122
- package/dist/builtin/workflows/builtin/deep-research-codebase.ts +30 -27
- package/dist/builtin/workflows/builtin/goal-runner.ts +10 -17
- package/dist/builtin/workflows/builtin/goal.ts +39 -44
- package/dist/builtin/workflows/builtin/index.d.ts +1 -0
- package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +16 -17
- package/dist/builtin/workflows/builtin/open-claude-design.d.ts +1 -0
- package/dist/builtin/workflows/builtin/open-claude-design.ts +42 -50
- package/dist/builtin/workflows/builtin/ralph.ts +44 -41
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +41 -0
- package/dist/builtin/workflows/src/authoring/typebox-defaults.ts +217 -0
- package/dist/builtin/workflows/src/authoring/workflow.ts +184 -0
- package/dist/builtin/workflows/src/authoring.d.ts +14 -66
- package/dist/builtin/workflows/src/engine/graph-inference.ts +100 -0
- package/dist/builtin/workflows/src/engine/options.ts +40 -0
- package/dist/builtin/workflows/src/engine/primitives/chain.ts +29 -0
- package/dist/builtin/workflows/src/engine/primitives/exit.ts +2 -0
- package/dist/builtin/workflows/src/engine/primitives/parallel.ts +47 -0
- package/dist/builtin/workflows/src/engine/primitives/task.ts +108 -0
- package/dist/builtin/workflows/src/engine/primitives/ui.ts +41 -0
- package/dist/builtin/workflows/src/engine/primitives/workflow.ts +159 -0
- package/dist/builtin/workflows/src/engine/replay.ts +8 -0
- package/dist/builtin/workflows/src/engine/run.ts +356 -0
- package/dist/builtin/workflows/src/engine/runtime.ts +160 -0
- package/dist/builtin/workflows/src/extension/workflow-module-loader.ts +9 -3
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +0 -18
- package/dist/builtin/workflows/src/index.ts +0 -2
- package/dist/builtin/workflows/src/runs/background/runner.ts +6 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +3 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-child-helpers.ts +4 -4
- package/dist/builtin/workflows/src/runs/foreground/executor-child-workflow.ts +1 -158
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-outputs.ts +2 -2
- package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-run.ts +1 -359
- package/dist/builtin/workflows/src/runs/foreground/executor-scheduler.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +2 -5
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +12 -4
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +4 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +9 -2
- package/dist/builtin/workflows/src/runs/foreground/executor-task-context.ts +2 -132
- package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +2 -2
- package/dist/builtin/workflows/src/runs/shared/graph-inference.ts +2 -100
- package/dist/builtin/workflows/src/sdk-surface.ts +6 -9
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +9 -3
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +17 -3
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +3 -33
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +9 -81
- package/dist/builtin/workflows/src/shared/types.ts +25 -8
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +49 -0
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +84 -0
- package/dist/builtin/workflows/src/workflows/registry.ts +7 -3
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +6 -1
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-bash.d.ts.map +1 -1
- package/dist/core/agent-session-bash.js +0 -5
- package/dist/core/agent-session-bash.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +0 -2
- 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-services.d.ts +0 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +0 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +0 -2
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +0 -2
- 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 +0 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +0 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/atomic-guide-command.d.ts.map +1 -1
- package/dist/core/atomic-guide-command.js +1 -1
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/extensions/loader-core.d.ts +1 -3
- package/dist/core/extensions/loader-core.d.ts.map +1 -1
- package/dist/core/extensions/loader-core.js +13 -6
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts +7 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +34 -2
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +2 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +2 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/model-registry-builtins.d.ts.map +1 -1
- package/dist/core/model-registry-builtins.js +6 -0
- package/dist/core/model-registry-builtins.js.map +1 -1
- package/dist/core/model-registry-schemas.d.ts +65 -13
- package/dist/core/model-registry-schemas.d.ts.map +1 -1
- package/dist/core/model-registry-schemas.js +10 -0
- package/dist/core/model-registry-schemas.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts +1 -0
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js +2 -0
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-extensions.d.ts.map +1 -1
- package/dist/core/resource-loader-extensions.js +3 -3
- package/dist/core/resource-loader-extensions.js.map +1 -1
- package/dist/core/resource-loader-internals.d.ts +1 -0
- package/dist/core/resource-loader-internals.d.ts.map +1 -1
- package/dist/core/resource-loader-internals.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +6 -2
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/sdk-exports.d.ts +1 -1
- package/dist/core/sdk-exports.d.ts.map +1 -1
- package/dist/core/sdk-exports.js.map +1 -1
- package/dist/core/sdk-types.d.ts +0 -3
- 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.map +1 -1
- package/dist/core/sdk.js +0 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-history.d.ts.map +1 -1
- package/dist/core/session-manager-history.js +2 -1
- package/dist/core/session-manager-history.js.map +1 -1
- package/dist/core/tools/bash.d.ts +0 -5
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +10 -11
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff-preserve.d.ts +18 -0
- package/dist/core/tools/edit-diff-preserve.d.ts.map +1 -0
- package/dist/core/tools/edit-diff-preserve.js +85 -0
- package/dist/core/tools/edit-diff-preserve.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +3 -2
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +15 -18
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/index.d.ts +0 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +0 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/model-search.d.ts +5 -0
- package/dist/modes/interactive/model-search.d.ts.map +1 -1
- package/dist/modes/interactive/model-search.js +9 -0
- package/dist/modes/interactive/model-search.js.map +1 -1
- package/dist/utils/shell.d.ts +1 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +12 -5
- package/dist/utils/shell.js.map +1 -1
- package/docs/custom-provider.md +4 -3
- package/docs/models.md +3 -2
- package/docs/packages.md +2 -2
- package/docs/quickstart.md +1 -1
- package/docs/sdk.md +2 -40
- package/docs/security.md +1 -1
- package/docs/workflows.md +238 -173
- package/package.json +5 -5
- package/dist/builtin/workflows/src/workflows/define-workflow.ts +0 -277
- package/dist/core/tools/bash-policy-compile.d.ts +0 -5
- package/dist/core/tools/bash-policy-compile.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-compile.js +0 -241
- package/dist/core/tools/bash-policy-compile.js.map +0 -1
- package/dist/core/tools/bash-policy-evaluate.d.ts +0 -3
- package/dist/core/tools/bash-policy-evaluate.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-evaluate.js +0 -92
- package/dist/core/tools/bash-policy-evaluate.js.map +0 -1
- package/dist/core/tools/bash-policy-format.d.ts +0 -5
- package/dist/core/tools/bash-policy-format.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-format.js +0 -49
- package/dist/core/tools/bash-policy-format.js.map +0 -1
- package/dist/core/tools/bash-policy-parser.d.ts +0 -4
- package/dist/core/tools/bash-policy-parser.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-parser.js +0 -155
- package/dist/core/tools/bash-policy-parser.js.map +0 -1
- package/dist/core/tools/bash-policy-segment.d.ts +0 -3
- package/dist/core/tools/bash-policy-segment.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-segment.js +0 -275
- package/dist/core/tools/bash-policy-segment.js.map +0 -1
- package/dist/core/tools/bash-policy-shell.d.ts +0 -11
- package/dist/core/tools/bash-policy-shell.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-shell.js +0 -267
- package/dist/core/tools/bash-policy-shell.js.map +0 -1
- package/dist/core/tools/bash-policy-types.d.ts +0 -146
- package/dist/core/tools/bash-policy-types.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-types.js +0 -2
- package/dist/core/tools/bash-policy-types.js.map +0 -1
- package/dist/core/tools/bash-policy.d.ts +0 -6
- package/dist/core/tools/bash-policy.d.ts.map +0 -1
- package/dist/core/tools/bash-policy.js +0 -5
- package/dist/core/tools/bash-policy.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync, statSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { isLocalPath } from "../utils/paths.js";
|
|
4
|
-
import {
|
|
4
|
+
import { clearExtensionCache, loadExtensionsCached } from "./extensions/loader.js";
|
|
5
5
|
import { startTimingSpan, endTimingSpan } from "./timings.js";
|
|
6
6
|
import { loadProjectContextFiles, resolvePromptInput } from "./resource-loader-context-files.js";
|
|
7
7
|
import { discoverAppendSystemPromptFile, discoverSystemPromptFile } from "./resource-loader-discovery.js";
|
|
@@ -76,7 +76,7 @@ export async function loadProjectTrustExtensions(loader) {
|
|
|
76
76
|
const extensionPaths = state.noExtensions
|
|
77
77
|
? cliEnabledExtensions
|
|
78
78
|
: mergeResourcePaths(state.cwd, cliEnabledExtensions, [...enabledExtensions, ...builtinEnabledExtensions]);
|
|
79
|
-
const extensionsResult = await
|
|
79
|
+
const extensionsResult = await loadExtensionsCached(extensionPaths, state.cwd, state.eventBus, workflowResourceProvider, undefined, inheritanceSnapshotProvider);
|
|
80
80
|
const inlineExtensions = await loadExtensionFactories(loader, extensionsResult.runtime, workflowResourceProvider, inheritanceSnapshotProvider);
|
|
81
81
|
extensionsResult.extensions.push(...inlineExtensions.extensions);
|
|
82
82
|
extensionsResult.errors.push(...inlineExtensions.errors);
|
|
@@ -85,6 +85,9 @@ export async function loadProjectTrustExtensions(loader) {
|
|
|
85
85
|
}
|
|
86
86
|
export async function reloadDefaultResourceLoader(loader, options) {
|
|
87
87
|
const state = resourceInternals(loader);
|
|
88
|
+
if (state.loaded) {
|
|
89
|
+
clearExtensionCache();
|
|
90
|
+
}
|
|
88
91
|
let preTrustExtensions;
|
|
89
92
|
const initialProjectTrusted = state.settingsManager.isProjectTrusted();
|
|
90
93
|
if (options?.resolveProjectTrust || options?.resolveBorrowedProjectTrust) {
|
|
@@ -221,6 +224,7 @@ export async function reloadDefaultResourceLoader(loader, options) {
|
|
|
221
224
|
state.appendSystemPrompt = state.appendSystemPromptOverride
|
|
222
225
|
? state.appendSystemPromptOverride(baseAppend)
|
|
223
226
|
: baseAppend;
|
|
227
|
+
state.loaded = true;
|
|
224
228
|
endTimingSpan(promptFilesSpan);
|
|
225
229
|
}
|
|
226
230
|
//# sourceMappingURL=resource-loader-reload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-loader-reload.js","sourceRoot":"","sources":["../../src/core/resource-loader-reload.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { isLocalPath } from \"../utils/paths.ts\";\nimport { loadExtensions } from \"./extensions/loader.ts\";\nimport type { LoadExtensionsResult } from \"./extensions/types.ts\";\nimport type { PathMetadata, ResolvedPaths } from \"./package-manager.ts\";\nimport { startTimingSpan, endTimingSpan } from \"./timings.ts\";\nimport { loadProjectContextFiles, resolvePromptInput } from \"./resource-loader-context-files.ts\";\nimport { discoverAppendSystemPromptFile, discoverSystemPromptFile } from \"./resource-loader-discovery.ts\";\nimport { loadExtensionFactories, loadFinalExtensionSet } from \"./resource-loader-extensions.ts\";\nimport { resourceInternals } from \"./resource-loader-internals.ts\";\nimport type { DefaultResourceLoader } from \"./resource-loader-core.ts\";\nimport {\n\tcollectWorkflowResources,\n\tcreateInheritanceSnapshotProvider,\n\tcreateWorkflowResourceProvider,\n\tresolvePackageResourcePaths,\n\tresolveTrustedBorrowedProjectLocalSources,\n} from \"./resource-loader-package-resources.ts\";\nimport { applyExtensionSourceInfo } from \"./resource-loader-source-info.ts\";\nimport { updatePromptsFromPaths, updateSkillsFromPaths, updateThemesFromPaths } from \"./resource-loader-assets.ts\";\nimport { mergeResourcePaths, resolveResourcePath } from \"./resource-loader-paths.ts\";\nimport type { ResourceLoaderReloadOptions } from \"./resource-loader-types.ts\";\n\nfunction getEnabledResources(\n\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\tmetadataByPath: Map<string, PathMetadata>,\n): Array<{ path: string; enabled: boolean; metadata: PathMetadata }> {\n\tfor (const r of resources) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n\treturn resources.filter((r) => r.enabled);\n}\n\nfunction getEnabledPaths(\n\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\tmetadataByPath: Map<string, PathMetadata>,\n): string[] {\n\treturn getEnabledResources(resources, metadataByPath).map((r) => r.path);\n}\n\nfunction mapSkillPath(\n\tresource: { path: string; metadata: PathMetadata },\n\tmetadataByPath: Map<string, PathMetadata>,\n): string {\n\tif (resource.metadata.source !== \"auto\" && resource.metadata.origin !== \"package\") {\n\t\treturn resource.path;\n\t}\n\ttry {\n\t\tconst stats = statSync(resource.path);\n\t\tif (!stats.isDirectory()) {\n\t\t\treturn resource.path;\n\t\t}\n\t} catch {\n\t\treturn resource.path;\n\t}\n\tconst skillFile = join(resource.path, \"SKILL.md\");\n\tif (existsSync(skillFile)) {\n\t\tif (!metadataByPath.has(skillFile)) {\n\t\t\tmetadataByPath.set(skillFile, resource.metadata);\n\t\t}\n\t\treturn skillFile;\n\t}\n\treturn resource.path;\n}\n\nfunction addCliMetadata(cliExtensionPaths: ResolvedPaths, metadataByPath: Map<string, PathMetadata>): void {\n\tfor (const r of cliExtensionPaths.extensions) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n\tfor (const r of cliExtensionPaths.skills) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n}\n\nexport async function loadProjectTrustExtensions(loader: DefaultResourceLoader): Promise<LoadExtensionsResult> {\n\tconst state = resourceInternals(loader);\n\tstate.settingsManager.setProjectTrusted(false);\n\tawait state.settingsManager.reload();\n\tconst { resolvedPaths, cliExtensionPaths, builtinPackagePaths } = await resolvePackageResourcePaths(loader, {\n\t\tincludeCliProjectLocalResources: false,\n\t});\n\tconst metadataByPath = new Map<string, PathMetadata>();\n\tconst cliEnabledExtensions = getEnabledPaths(cliExtensionPaths.extensions, metadataByPath);\n\tconst enabledExtensions = getEnabledPaths(resolvedPaths.extensions, metadataByPath);\n\tconst builtinEnabledExtensions = state.noExtensions\n\t\t? []\n\t\t: getEnabledPaths(builtinPackagePaths.extensions, metadataByPath);\n\tconst workflowResources = collectWorkflowResources(resolvedPaths, cliExtensionPaths, builtinPackagePaths);\n\tstate.workflowResources = workflowResources;\n\tconst workflowResourceProvider = createWorkflowResourceProvider(loader);\n\tconst inheritanceSnapshotProvider = createInheritanceSnapshotProvider(loader);\n\tconst extensionPaths = state.noExtensions\n\t\t? cliEnabledExtensions\n\t\t: mergeResourcePaths(state.cwd, cliEnabledExtensions, [...enabledExtensions, ...builtinEnabledExtensions]);\n\tconst extensionsResult = await loadExtensions(\n\t\textensionPaths,\n\t\tstate.cwd,\n\t\tstate.eventBus,\n\t\tworkflowResourceProvider,\n\t\tundefined,\n\t\tinheritanceSnapshotProvider,\n\t);\n\tconst inlineExtensions = await loadExtensionFactories(\n\t\tloader,\n\t\textensionsResult.runtime,\n\t\tworkflowResourceProvider,\n\t\tinheritanceSnapshotProvider,\n\t);\n\textensionsResult.extensions.push(...inlineExtensions.extensions);\n\textensionsResult.errors.push(...inlineExtensions.errors);\n\tapplyExtensionSourceInfo(loader, extensionsResult.extensions, metadataByPath);\n\treturn extensionsResult;\n}\n\nexport async function reloadDefaultResourceLoader(\n\tloader: DefaultResourceLoader,\n\toptions?: ResourceLoaderReloadOptions,\n): Promise<void> {\n\tconst state = resourceInternals(loader);\n\tlet preTrustExtensions: LoadExtensionsResult | undefined;\n\tconst initialProjectTrusted = state.settingsManager.isProjectTrusted();\n\tif (options?.resolveProjectTrust || options?.resolveBorrowedProjectTrust) {\n\t\tpreTrustExtensions = await loadProjectTrustExtensions(loader);\n\t}\n\tif (options?.resolveProjectTrust && preTrustExtensions) {\n\t\tconst projectTrusted = await options.resolveProjectTrust({ extensionsResult: preTrustExtensions });\n\t\tstate.settingsManager.setProjectTrusted(projectTrusted);\n\t} else if (preTrustExtensions) {\n\t\tstate.settingsManager.setProjectTrusted(initialProjectTrusted);\n\t}\n\tif (options?.resolveBorrowedProjectTrust) {\n\t\tstate.trustedBorrowedProjectLocalSources = await resolveTrustedBorrowedProjectLocalSources(\n\t\t\tloader,\n\t\t\toptions.resolveBorrowedProjectTrust,\n\t\t\tpreTrustExtensions,\n\t\t);\n\t}\n\tconst resolveSpan = startTimingSpan(\"DefaultResourceLoader.reload.resolvePackageResourcePaths\");\n\tconst { resolvedPaths, cliExtensionPaths, builtinPackagePaths } = await resolvePackageResourcePaths(loader, {\n\t\ttrustedBorrowedProjectLocalSources: state.trustedBorrowedProjectLocalSources,\n\t});\n\tendTimingSpan(resolveSpan);\n\tconst metadataByPath = new Map<string, PathMetadata>();\n\n\tstate.extensionSkillSourceInfos = new Map();\n\tstate.extensionPromptSourceInfos = new Map();\n\tstate.extensionThemeSourceInfos = new Map();\n\n\tconst enabledExtensions = getEnabledPaths(resolvedPaths.extensions, metadataByPath);\n\tconst enabledSkillResources = getEnabledResources(resolvedPaths.skills, metadataByPath);\n\tconst enabledPrompts = getEnabledPaths(resolvedPaths.prompts, metadataByPath);\n\tconst enabledThemes = getEnabledPaths(resolvedPaths.themes, metadataByPath);\n\n\tconst builtinEnabledExtensions = state.noExtensions\n\t\t? []\n\t\t: getEnabledPaths(builtinPackagePaths.extensions, metadataByPath);\n\tconst builtinEnabledSkillResources = state.noSkills\n\t\t? []\n\t\t: getEnabledResources(builtinPackagePaths.skills, metadataByPath);\n\tconst builtinEnabledPrompts = state.noPromptTemplates\n\t\t? []\n\t\t: getEnabledPaths(builtinPackagePaths.prompts, metadataByPath);\n\tconst builtinEnabledThemes = state.noThemes\n\t\t? []\n\t\t: getEnabledPaths(builtinPackagePaths.themes, metadataByPath);\n\n\tconst enabledSkills = enabledSkillResources.map((resource) => mapSkillPath(resource, metadataByPath));\n\tconst builtinEnabledSkills = builtinEnabledSkillResources.map((resource) => mapSkillPath(resource, metadataByPath));\n\n\taddCliMetadata(cliExtensionPaths, metadataByPath);\n\n\tconst cliEnabledExtensions = getEnabledPaths(cliExtensionPaths.extensions, metadataByPath);\n\tconst cliEnabledSkills = getEnabledPaths(cliExtensionPaths.skills, metadataByPath);\n\tconst cliEnabledPrompts = getEnabledPaths(cliExtensionPaths.prompts, metadataByPath);\n\tconst cliEnabledThemes = getEnabledPaths(cliExtensionPaths.themes, metadataByPath);\n\tconst workflowResources = collectWorkflowResources(resolvedPaths, cliExtensionPaths, builtinPackagePaths);\n\tstate.workflowResources = workflowResources;\n\tconst workflowResourceProvider = createWorkflowResourceProvider(loader);\n\n\tconst extensionPaths = state.noExtensions\n\t\t? cliEnabledExtensions\n\t\t: mergeResourcePaths(state.cwd, cliEnabledExtensions, [...enabledExtensions, ...builtinEnabledExtensions]);\n\n\tconst inheritanceSnapshotProvider = createInheritanceSnapshotProvider(loader);\n\tconst extensionsResult = await loadFinalExtensionSet(\n\t\tloader,\n\t\textensionPaths,\n\t\tpreTrustExtensions,\n\t\tworkflowResourceProvider,\n\t\tinheritanceSnapshotProvider,\n\t);\n\n\tfor (const p of state.additionalExtensionPaths) {\n\t\tif (isLocalPath(p)) {\n\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\tif (!existsSync(resolved)) {\n\t\t\t\textensionsResult.errors.push({ path: resolved, error: `Extension path does not exist: ${resolved}` });\n\t\t\t}\n\t\t}\n\t}\n\tstate.extensionsResult = state.extensionsOverride ? state.extensionsOverride(extensionsResult) : extensionsResult;\n\tapplyExtensionSourceInfo(loader, state.extensionsResult.extensions, metadataByPath);\n\n\tconst skillPaths = state.noSkills\n\t\t? mergeResourcePaths(state.cwd, cliEnabledSkills, state.additionalSkillPaths)\n\t\t: mergeResourcePaths(state.cwd, [...cliEnabledSkills, ...enabledSkills, ...builtinEnabledSkills], state.additionalSkillPaths);\n\n\tstate.lastSkillPaths = skillPaths;\n\tconst skillsSpan = startTimingSpan(\"DefaultResourceLoader.reload.updateSkillsFromPaths\");\n\tupdateSkillsFromPaths(loader, skillPaths, metadataByPath);\n\tendTimingSpan(skillsSpan);\n\tfor (const p of state.additionalSkillPaths) {\n\t\tif (isLocalPath(p)) {\n\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\tif (!existsSync(resolved) && !state.skillDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\tstate.skillDiagnostics.push({ type: \"error\", message: \"Skill path does not exist\", path: resolved });\n\t\t\t}\n\t\t}\n\t}\n\n\tconst promptPaths = state.noPromptTemplates\n\t\t? mergeResourcePaths(state.cwd, cliEnabledPrompts, state.additionalPromptTemplatePaths)\n\t\t: mergeResourcePaths(state.cwd, [...cliEnabledPrompts, ...enabledPrompts, ...builtinEnabledPrompts], state.additionalPromptTemplatePaths);\n\n\tstate.lastPromptPaths = promptPaths;\n\tconst promptsSpan = startTimingSpan(\"DefaultResourceLoader.reload.updatePromptsFromPaths\");\n\tupdatePromptsFromPaths(loader, promptPaths, metadataByPath);\n\tendTimingSpan(promptsSpan);\n\tfor (const p of state.additionalPromptTemplatePaths) {\n\t\tif (isLocalPath(p)) {\n\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\tif (!existsSync(resolved) && !state.promptDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\tstate.promptDiagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: \"Prompt template path does not exist\",\n\t\t\t\t\tpath: resolved,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst themePaths = state.noThemes\n\t\t? mergeResourcePaths(state.cwd, cliEnabledThemes, state.additionalThemePaths)\n\t\t: mergeResourcePaths(state.cwd, [...cliEnabledThemes, ...enabledThemes, ...builtinEnabledThemes], state.additionalThemePaths);\n\n\tstate.lastThemePaths = themePaths;\n\tconst themesSpan = startTimingSpan(\"DefaultResourceLoader.reload.updateThemesFromPaths\");\n\tupdateThemesFromPaths(loader, themePaths, metadataByPath);\n\tendTimingSpan(themesSpan);\n\tfor (const p of state.additionalThemePaths) {\n\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\tif (!existsSync(resolved) && !state.themeDiagnostics.some((d) => d.path === resolved)) {\n\t\t\tstate.themeDiagnostics.push({ type: \"error\", message: \"Theme path does not exist\", path: resolved });\n\t\t}\n\t}\n\n\tconst contextFilesSpan = startTimingSpan(\"DefaultResourceLoader.reload.loadProjectContextFiles\");\n\tconst agentsFiles = {\n\t\tagentsFiles: state.noContextFiles\n\t\t\t? []\n\t\t\t: loadProjectContextFiles({\n\t\t\t\t\tcwd: state.cwd,\n\t\t\t\t\tagentDir: state.agentDir,\n\t\t\t\t\tprojectTrusted: state.settingsManager.isProjectTrusted(),\n\t\t\t\t}),\n\t};\n\tendTimingSpan(contextFilesSpan);\n\tconst resolvedAgentsFiles = state.agentsFilesOverride ? state.agentsFilesOverride(agentsFiles) : agentsFiles;\n\tstate.agentsFiles = resolvedAgentsFiles.agentsFiles;\n\n\tconst promptFilesSpan = startTimingSpan(\"DefaultResourceLoader.reload.resolvePromptFiles\");\n\tconst baseSystemPrompt = resolvePromptInput(\n\t\tstate.systemPromptSource ?? discoverSystemPromptFile(loader),\n\t\t\"system prompt\",\n\t);\n\tstate.systemPrompt = state.systemPromptOverride ? state.systemPromptOverride(baseSystemPrompt) : baseSystemPrompt;\n\n\tconst discoveredAppend = discoverAppendSystemPromptFile(loader);\n\tconst appendSources = state.appendSystemPromptSource ?? (discoveredAppend ? [discoveredAppend] : []);\n\tconst baseAppend = appendSources\n\t\t.map((s) => resolvePromptInput(s, \"append system prompt\"))\n\t\t.filter((s): s is string => s !== undefined);\n\tstate.appendSystemPrompt = state.appendSystemPromptOverride\n\t\t? state.appendSystemPromptOverride(baseAppend)\n\t\t: baseAppend;\n\tendTimingSpan(promptFilesSpan);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"resource-loader-reload.js","sourceRoot":"","sources":["../../src/core/resource-loader-reload.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { isLocalPath } from \"../utils/paths.ts\";\nimport { clearExtensionCache, loadExtensionsCached } from \"./extensions/loader.ts\";\nimport type { LoadExtensionsResult } from \"./extensions/types.ts\";\nimport type { PathMetadata, ResolvedPaths } from \"./package-manager.ts\";\nimport { startTimingSpan, endTimingSpan } from \"./timings.ts\";\nimport { loadProjectContextFiles, resolvePromptInput } from \"./resource-loader-context-files.ts\";\nimport { discoverAppendSystemPromptFile, discoverSystemPromptFile } from \"./resource-loader-discovery.ts\";\nimport { loadExtensionFactories, loadFinalExtensionSet } from \"./resource-loader-extensions.ts\";\nimport { resourceInternals } from \"./resource-loader-internals.ts\";\nimport type { DefaultResourceLoader } from \"./resource-loader-core.ts\";\nimport {\n\tcollectWorkflowResources,\n\tcreateInheritanceSnapshotProvider,\n\tcreateWorkflowResourceProvider,\n\tresolvePackageResourcePaths,\n\tresolveTrustedBorrowedProjectLocalSources,\n} from \"./resource-loader-package-resources.ts\";\nimport { applyExtensionSourceInfo } from \"./resource-loader-source-info.ts\";\nimport { updatePromptsFromPaths, updateSkillsFromPaths, updateThemesFromPaths } from \"./resource-loader-assets.ts\";\nimport { mergeResourcePaths, resolveResourcePath } from \"./resource-loader-paths.ts\";\nimport type { ResourceLoaderReloadOptions } from \"./resource-loader-types.ts\";\n\nfunction getEnabledResources(\n\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\tmetadataByPath: Map<string, PathMetadata>,\n): Array<{ path: string; enabled: boolean; metadata: PathMetadata }> {\n\tfor (const r of resources) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n\treturn resources.filter((r) => r.enabled);\n}\n\nfunction getEnabledPaths(\n\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\tmetadataByPath: Map<string, PathMetadata>,\n): string[] {\n\treturn getEnabledResources(resources, metadataByPath).map((r) => r.path);\n}\n\nfunction mapSkillPath(\n\tresource: { path: string; metadata: PathMetadata },\n\tmetadataByPath: Map<string, PathMetadata>,\n): string {\n\tif (resource.metadata.source !== \"auto\" && resource.metadata.origin !== \"package\") {\n\t\treturn resource.path;\n\t}\n\ttry {\n\t\tconst stats = statSync(resource.path);\n\t\tif (!stats.isDirectory()) {\n\t\t\treturn resource.path;\n\t\t}\n\t} catch {\n\t\treturn resource.path;\n\t}\n\tconst skillFile = join(resource.path, \"SKILL.md\");\n\tif (existsSync(skillFile)) {\n\t\tif (!metadataByPath.has(skillFile)) {\n\t\t\tmetadataByPath.set(skillFile, resource.metadata);\n\t\t}\n\t\treturn skillFile;\n\t}\n\treturn resource.path;\n}\n\nfunction addCliMetadata(cliExtensionPaths: ResolvedPaths, metadataByPath: Map<string, PathMetadata>): void {\n\tfor (const r of cliExtensionPaths.extensions) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n\tfor (const r of cliExtensionPaths.skills) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n}\n\nexport async function loadProjectTrustExtensions(loader: DefaultResourceLoader): Promise<LoadExtensionsResult> {\n\tconst state = resourceInternals(loader);\n\tstate.settingsManager.setProjectTrusted(false);\n\tawait state.settingsManager.reload();\n\tconst { resolvedPaths, cliExtensionPaths, builtinPackagePaths } = await resolvePackageResourcePaths(loader, {\n\t\tincludeCliProjectLocalResources: false,\n\t});\n\tconst metadataByPath = new Map<string, PathMetadata>();\n\tconst cliEnabledExtensions = getEnabledPaths(cliExtensionPaths.extensions, metadataByPath);\n\tconst enabledExtensions = getEnabledPaths(resolvedPaths.extensions, metadataByPath);\n\tconst builtinEnabledExtensions = state.noExtensions\n\t\t? []\n\t\t: getEnabledPaths(builtinPackagePaths.extensions, metadataByPath);\n\tconst workflowResources = collectWorkflowResources(resolvedPaths, cliExtensionPaths, builtinPackagePaths);\n\tstate.workflowResources = workflowResources;\n\tconst workflowResourceProvider = createWorkflowResourceProvider(loader);\n\tconst inheritanceSnapshotProvider = createInheritanceSnapshotProvider(loader);\n\tconst extensionPaths = state.noExtensions\n\t\t? cliEnabledExtensions\n\t\t: mergeResourcePaths(state.cwd, cliEnabledExtensions, [...enabledExtensions, ...builtinEnabledExtensions]);\n\tconst extensionsResult = await loadExtensionsCached(\n\t\textensionPaths,\n\t\tstate.cwd,\n\t\tstate.eventBus,\n\t\tworkflowResourceProvider,\n\t\tundefined,\n\t\tinheritanceSnapshotProvider,\n\t);\n\tconst inlineExtensions = await loadExtensionFactories(\n\t\tloader,\n\t\textensionsResult.runtime,\n\t\tworkflowResourceProvider,\n\t\tinheritanceSnapshotProvider,\n\t);\n\textensionsResult.extensions.push(...inlineExtensions.extensions);\n\textensionsResult.errors.push(...inlineExtensions.errors);\n\tapplyExtensionSourceInfo(loader, extensionsResult.extensions, metadataByPath);\n\treturn extensionsResult;\n}\n\nexport async function reloadDefaultResourceLoader(\n\tloader: DefaultResourceLoader,\n\toptions?: ResourceLoaderReloadOptions,\n): Promise<void> {\n\tconst state = resourceInternals(loader);\n\tif (state.loaded) {\n\t\tclearExtensionCache();\n\t}\n\tlet preTrustExtensions: LoadExtensionsResult | undefined;\n\tconst initialProjectTrusted = state.settingsManager.isProjectTrusted();\n\tif (options?.resolveProjectTrust || options?.resolveBorrowedProjectTrust) {\n\t\tpreTrustExtensions = await loadProjectTrustExtensions(loader);\n\t}\n\tif (options?.resolveProjectTrust && preTrustExtensions) {\n\t\tconst projectTrusted = await options.resolveProjectTrust({ extensionsResult: preTrustExtensions });\n\t\tstate.settingsManager.setProjectTrusted(projectTrusted);\n\t} else if (preTrustExtensions) {\n\t\tstate.settingsManager.setProjectTrusted(initialProjectTrusted);\n\t}\n\tif (options?.resolveBorrowedProjectTrust) {\n\t\tstate.trustedBorrowedProjectLocalSources = await resolveTrustedBorrowedProjectLocalSources(\n\t\t\tloader,\n\t\t\toptions.resolveBorrowedProjectTrust,\n\t\t\tpreTrustExtensions,\n\t\t);\n\t}\n\tconst resolveSpan = startTimingSpan(\"DefaultResourceLoader.reload.resolvePackageResourcePaths\");\n\tconst { resolvedPaths, cliExtensionPaths, builtinPackagePaths } = await resolvePackageResourcePaths(loader, {\n\t\ttrustedBorrowedProjectLocalSources: state.trustedBorrowedProjectLocalSources,\n\t});\n\tendTimingSpan(resolveSpan);\n\tconst metadataByPath = new Map<string, PathMetadata>();\n\n\tstate.extensionSkillSourceInfos = new Map();\n\tstate.extensionPromptSourceInfos = new Map();\n\tstate.extensionThemeSourceInfos = new Map();\n\n\tconst enabledExtensions = getEnabledPaths(resolvedPaths.extensions, metadataByPath);\n\tconst enabledSkillResources = getEnabledResources(resolvedPaths.skills, metadataByPath);\n\tconst enabledPrompts = getEnabledPaths(resolvedPaths.prompts, metadataByPath);\n\tconst enabledThemes = getEnabledPaths(resolvedPaths.themes, metadataByPath);\n\n\tconst builtinEnabledExtensions = state.noExtensions\n\t\t? []\n\t\t: getEnabledPaths(builtinPackagePaths.extensions, metadataByPath);\n\tconst builtinEnabledSkillResources = state.noSkills\n\t\t? []\n\t\t: getEnabledResources(builtinPackagePaths.skills, metadataByPath);\n\tconst builtinEnabledPrompts = state.noPromptTemplates\n\t\t? []\n\t\t: getEnabledPaths(builtinPackagePaths.prompts, metadataByPath);\n\tconst builtinEnabledThemes = state.noThemes\n\t\t? []\n\t\t: getEnabledPaths(builtinPackagePaths.themes, metadataByPath);\n\n\tconst enabledSkills = enabledSkillResources.map((resource) => mapSkillPath(resource, metadataByPath));\n\tconst builtinEnabledSkills = builtinEnabledSkillResources.map((resource) => mapSkillPath(resource, metadataByPath));\n\n\taddCliMetadata(cliExtensionPaths, metadataByPath);\n\n\tconst cliEnabledExtensions = getEnabledPaths(cliExtensionPaths.extensions, metadataByPath);\n\tconst cliEnabledSkills = getEnabledPaths(cliExtensionPaths.skills, metadataByPath);\n\tconst cliEnabledPrompts = getEnabledPaths(cliExtensionPaths.prompts, metadataByPath);\n\tconst cliEnabledThemes = getEnabledPaths(cliExtensionPaths.themes, metadataByPath);\n\tconst workflowResources = collectWorkflowResources(resolvedPaths, cliExtensionPaths, builtinPackagePaths);\n\tstate.workflowResources = workflowResources;\n\tconst workflowResourceProvider = createWorkflowResourceProvider(loader);\n\n\tconst extensionPaths = state.noExtensions\n\t\t? cliEnabledExtensions\n\t\t: mergeResourcePaths(state.cwd, cliEnabledExtensions, [...enabledExtensions, ...builtinEnabledExtensions]);\n\n\tconst inheritanceSnapshotProvider = createInheritanceSnapshotProvider(loader);\n\tconst extensionsResult = await loadFinalExtensionSet(\n\t\tloader,\n\t\textensionPaths,\n\t\tpreTrustExtensions,\n\t\tworkflowResourceProvider,\n\t\tinheritanceSnapshotProvider,\n\t);\n\n\tfor (const p of state.additionalExtensionPaths) {\n\t\tif (isLocalPath(p)) {\n\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\tif (!existsSync(resolved)) {\n\t\t\t\textensionsResult.errors.push({ path: resolved, error: `Extension path does not exist: ${resolved}` });\n\t\t\t}\n\t\t}\n\t}\n\tstate.extensionsResult = state.extensionsOverride ? state.extensionsOverride(extensionsResult) : extensionsResult;\n\tapplyExtensionSourceInfo(loader, state.extensionsResult.extensions, metadataByPath);\n\n\tconst skillPaths = state.noSkills\n\t\t? mergeResourcePaths(state.cwd, cliEnabledSkills, state.additionalSkillPaths)\n\t\t: mergeResourcePaths(state.cwd, [...cliEnabledSkills, ...enabledSkills, ...builtinEnabledSkills], state.additionalSkillPaths);\n\n\tstate.lastSkillPaths = skillPaths;\n\tconst skillsSpan = startTimingSpan(\"DefaultResourceLoader.reload.updateSkillsFromPaths\");\n\tupdateSkillsFromPaths(loader, skillPaths, metadataByPath);\n\tendTimingSpan(skillsSpan);\n\tfor (const p of state.additionalSkillPaths) {\n\t\tif (isLocalPath(p)) {\n\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\tif (!existsSync(resolved) && !state.skillDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\tstate.skillDiagnostics.push({ type: \"error\", message: \"Skill path does not exist\", path: resolved });\n\t\t\t}\n\t\t}\n\t}\n\n\tconst promptPaths = state.noPromptTemplates\n\t\t? mergeResourcePaths(state.cwd, cliEnabledPrompts, state.additionalPromptTemplatePaths)\n\t\t: mergeResourcePaths(state.cwd, [...cliEnabledPrompts, ...enabledPrompts, ...builtinEnabledPrompts], state.additionalPromptTemplatePaths);\n\n\tstate.lastPromptPaths = promptPaths;\n\tconst promptsSpan = startTimingSpan(\"DefaultResourceLoader.reload.updatePromptsFromPaths\");\n\tupdatePromptsFromPaths(loader, promptPaths, metadataByPath);\n\tendTimingSpan(promptsSpan);\n\tfor (const p of state.additionalPromptTemplatePaths) {\n\t\tif (isLocalPath(p)) {\n\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\tif (!existsSync(resolved) && !state.promptDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\tstate.promptDiagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: \"Prompt template path does not exist\",\n\t\t\t\t\tpath: resolved,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst themePaths = state.noThemes\n\t\t? mergeResourcePaths(state.cwd, cliEnabledThemes, state.additionalThemePaths)\n\t\t: mergeResourcePaths(state.cwd, [...cliEnabledThemes, ...enabledThemes, ...builtinEnabledThemes], state.additionalThemePaths);\n\n\tstate.lastThemePaths = themePaths;\n\tconst themesSpan = startTimingSpan(\"DefaultResourceLoader.reload.updateThemesFromPaths\");\n\tupdateThemesFromPaths(loader, themePaths, metadataByPath);\n\tendTimingSpan(themesSpan);\n\tfor (const p of state.additionalThemePaths) {\n\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\tif (!existsSync(resolved) && !state.themeDiagnostics.some((d) => d.path === resolved)) {\n\t\t\tstate.themeDiagnostics.push({ type: \"error\", message: \"Theme path does not exist\", path: resolved });\n\t\t}\n\t}\n\n\tconst contextFilesSpan = startTimingSpan(\"DefaultResourceLoader.reload.loadProjectContextFiles\");\n\tconst agentsFiles = {\n\t\tagentsFiles: state.noContextFiles\n\t\t\t? []\n\t\t\t: loadProjectContextFiles({\n\t\t\t\t\tcwd: state.cwd,\n\t\t\t\t\tagentDir: state.agentDir,\n\t\t\t\t\tprojectTrusted: state.settingsManager.isProjectTrusted(),\n\t\t\t\t}),\n\t};\n\tendTimingSpan(contextFilesSpan);\n\tconst resolvedAgentsFiles = state.agentsFilesOverride ? state.agentsFilesOverride(agentsFiles) : agentsFiles;\n\tstate.agentsFiles = resolvedAgentsFiles.agentsFiles;\n\n\tconst promptFilesSpan = startTimingSpan(\"DefaultResourceLoader.reload.resolvePromptFiles\");\n\tconst baseSystemPrompt = resolvePromptInput(\n\t\tstate.systemPromptSource ?? discoverSystemPromptFile(loader),\n\t\t\"system prompt\",\n\t);\n\tstate.systemPrompt = state.systemPromptOverride ? state.systemPromptOverride(baseSystemPrompt) : baseSystemPrompt;\n\n\tconst discoveredAppend = discoverAppendSystemPromptFile(loader);\n\tconst appendSources = state.appendSystemPromptSource ?? (discoveredAppend ? [discoveredAppend] : []);\n\tconst baseAppend = appendSources\n\t\t.map((s) => resolvePromptInput(s, \"append system prompt\"))\n\t\t.filter((s): s is string => s !== undefined);\n\tstate.appendSystemPrompt = state.appendSystemPromptOverride\n\t\t? state.appendSystemPromptOverride(baseAppend)\n\t\t: baseAppend;\n\tstate.loaded = true;\n\tendTimingSpan(promptFilesSpan);\n}\n"]}
|
|
@@ -2,6 +2,6 @@ export * from "./agent-session-runtime.ts";
|
|
|
2
2
|
export type { ExtensionAPI, ExtensionCommandContext, ExtensionContext, ExtensionFactory, SlashCommandInfo, SlashCommandSource, ToolDefinition, } from "./extensions/index.ts";
|
|
3
3
|
export type { PromptTemplate } from "./prompt-templates.ts";
|
|
4
4
|
export type { Skill } from "./skills.ts";
|
|
5
|
-
export type {
|
|
5
|
+
export type { JsonObject, JsonPrimitive, JsonValue, StructuredOutputCapture, StructuredOutputFileCapture, StructuredOutputToolOptions, Tool, } from "./tools/index.ts";
|
|
6
6
|
export { withFileMutationQueue, STRUCTURED_OUTPUT_TOOL_NAME, createCodingTools, createReadOnlyTools, createReadTool, createBashTool, createEditTool, createWriteTool, createGrepTool, createFindTool, createLsTool, createStructuredOutputCapture, createStructuredOutputTool, } from "./tools/index.ts";
|
|
7
7
|
//# sourceMappingURL=sdk-exports.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-exports.d.ts","sourceRoot":"","sources":["../../src/core/sdk-exports.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"sdk-exports.d.ts","sourceRoot":"","sources":["../../src/core/sdk-exports.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,EAC3B,IAAI,GACL,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAE3B,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC","sourcesContent":["export * from \"./agent-session-runtime.ts\";\nexport type {\n ExtensionAPI,\n ExtensionCommandContext,\n ExtensionContext,\n ExtensionFactory,\n SlashCommandInfo,\n SlashCommandSource,\n ToolDefinition,\n} from \"./extensions/index.ts\";\nexport type { PromptTemplate } from \"./prompt-templates.ts\";\nexport type { Skill } from \"./skills.ts\";\nexport type {\n JsonObject,\n JsonPrimitive,\n JsonValue,\n StructuredOutputCapture,\n StructuredOutputFileCapture,\n StructuredOutputToolOptions,\n Tool,\n} from \"./tools/index.ts\";\n\nexport {\n withFileMutationQueue,\n STRUCTURED_OUTPUT_TOOL_NAME,\n // Tool factories (for custom cwd)\n createCodingTools,\n createReadOnlyTools,\n createReadTool,\n createBashTool,\n createEditTool,\n createWriteTool,\n createGrepTool,\n createFindTool,\n createLsTool,\n createStructuredOutputCapture,\n createStructuredOutputTool,\n} from \"./tools/index.ts\";\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-exports.js","sourceRoot":"","sources":["../../src/core/sdk-exports.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"sdk-exports.js","sourceRoot":"","sources":["../../src/core/sdk-exports.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAsB3C,OAAO,EACL,qBAAqB,EACrB,2BAA2B;AAC3B,kCAAkC;AAClC,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC","sourcesContent":["export * from \"./agent-session-runtime.ts\";\nexport type {\n ExtensionAPI,\n ExtensionCommandContext,\n ExtensionContext,\n ExtensionFactory,\n SlashCommandInfo,\n SlashCommandSource,\n ToolDefinition,\n} from \"./extensions/index.ts\";\nexport type { PromptTemplate } from \"./prompt-templates.ts\";\nexport type { Skill } from \"./skills.ts\";\nexport type {\n JsonObject,\n JsonPrimitive,\n JsonValue,\n StructuredOutputCapture,\n StructuredOutputFileCapture,\n StructuredOutputToolOptions,\n Tool,\n} from \"./tools/index.ts\";\n\nexport {\n withFileMutationQueue,\n STRUCTURED_OUTPUT_TOOL_NAME,\n // Tool factories (for custom cwd)\n createCodingTools,\n createReadOnlyTools,\n createReadTool,\n createBashTool,\n createEditTool,\n createWriteTool,\n createGrepTool,\n createFindTool,\n createLsTool,\n createStructuredOutputCapture,\n createStructuredOutputTool,\n} from \"./tools/index.ts\";\n\n"]}
|
package/dist/core/sdk-types.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ import type { SessionManager } from "./session-manager.ts";
|
|
|
7
7
|
import type { SettingsManager } from "./settings-manager.ts";
|
|
8
8
|
import type { AgentSession } from "./agent-session.ts";
|
|
9
9
|
import type { LoadExtensionsResult, OrchestrationContext, SessionStartEvent, ToolDefinition } from "./extensions/index.ts";
|
|
10
|
-
import type { BashCommandPolicy } from "./tools/index.ts";
|
|
11
10
|
export interface CreateAgentSessionOptions {
|
|
12
11
|
/** Working directory for project-local discovery. Default: process.cwd() */
|
|
13
12
|
cwd?: string;
|
|
@@ -57,8 +56,6 @@ export interface CreateAgentSessionOptions {
|
|
|
57
56
|
excludedTools?: string[];
|
|
58
57
|
/** Custom tools to register (in addition to built-in tools). */
|
|
59
58
|
customTools?: ToolDefinition[];
|
|
60
|
-
/** Optional command-level policy for the built-in bash tool. Does not expose bash by itself. */
|
|
61
|
-
bashPolicy?: BashCommandPolicy;
|
|
62
59
|
/** Resource loader. When omitted, DefaultResourceLoader is used. */
|
|
63
60
|
resourceLoader?: ResourceLoader;
|
|
64
61
|
/** Session manager. Default: SessionManager.create(cwd) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-types.d.ts","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,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,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sdk-types.d.ts","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,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,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE3H,MAAM,WAAW,yBAAyB;IACxC,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,oFAAoF;IACpF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uFAAuF;IACvF,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B,iEAAiE;IACjE,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,oHAAoH;IACpH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,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;;;;;;;;OAQG;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;IAEhC,uEAAuE;IACvE,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,qCAAqC;AACrC,MAAM,WAAW,wBAAwB;IACvC,0BAA0B;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,mEAAmE;IACnE,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,wEAAwE;IACxE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Model } from \"@earendil-works/pi-ai\";\nimport type { AuthStorage } from \"./auth-storage.ts\";\nimport type { ModelRegistry } from \"./model-registry.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { AgentSession } from \"./agent-session.ts\";\nimport type { LoadExtensionsResult, OrchestrationContext, SessionStartEvent, ToolDefinition } from \"./extensions/index.ts\";\n\nexport interface CreateAgentSessionOptions {\n /** Working directory for project-local discovery. Default: process.cwd() */\n cwd?: string;\n /** Global config directory. Default: ~/.atomic/agent */\n agentDir?: string;\n\n /** Auth storage for credentials. Default: AuthStorage.create(agentDir/auth.json) */\n authStorage?: AuthStorage;\n /** Model registry. Default: ModelRegistry.create(authStorage, agentDir/models.json) */\n modelRegistry?: ModelRegistry;\n\n /** Model to use. Default: from settings, else first available */\n model?: Model<Api>;\n /** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n thinkingLevel?: ThinkingLevel;\n /** Context window token count. Default: model scalar contextWindow, or settings/session override when supported. */\n contextWindow?: number;\n /** Treat unsupported contextWindow as an error instead of a warning/fallback. */\n contextWindowStrict?: boolean;\n /** Models available for cycling (Ctrl+P in interactive mode) */\n scopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\n /**\n * Optional default tool suppression mode when no explicit allowlist is provided.\n *\n * - \"all\": start with no tools enabled\n * - \"builtin\": disable the default built-in tools (read, bash, edit, write,\n * ask_user_question, todo) but keep extension/custom tools enabled\n */\n noTools?: \"all\" | \"builtin\";\n /**\n * Optional allowlist of tool names.\n *\n * When omitted, pi enables the default built-in tools (read, bash, edit, write,\n * ask_user_question, todo) and leaves extension/custom tools enabled unless\n * `noTools` changes that default.\n * When provided, only the listed tool names are enabled, minus any names in\n * `excludedTools`.\n */\n tools?: string[];\n /**\n * Optional blocklist of tool names.\n *\n * Matching built-in, extension, and SDK custom tools are omitted from the\n * final session tool registry and active tool set. Unknown names are ignored.\n */\n excludedTools?: string[];\n /** Custom tools to register (in addition to built-in tools). */\n customTools?: ToolDefinition[];\n\n /** Resource loader. When omitted, DefaultResourceLoader is used. */\n resourceLoader?: ResourceLoader;\n\n /** Session manager. Default: SessionManager.create(cwd) */\n sessionManager?: SessionManager;\n\n /** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n settingsManager?: SettingsManager;\n /** Session start event metadata for extension runtime startup. */\n sessionStartEvent?: SessionStartEvent;\n /** Session-scoped orchestration policy exposed to extension/tool handlers. */\n orchestrationContext?: OrchestrationContext;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n /** The created session */\n session: AgentSession;\n /** Extensions result (for UI context setup in interactive mode) */\n extensionsResult: LoadExtensionsResult;\n /** Warning if session was restored with a different model than saved */\n modelFallbackMessage?: string;\n /** Warning if a saved/default context window could not be applied to the selected model. */\n contextWindowWarning?: string;\n /** Error if an explicit strict context-window selection is unsupported. */\n contextWindowError?: string;\n}\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-types.js","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Model } from \"@earendil-works/pi-ai\";\nimport type { AuthStorage } from \"./auth-storage.ts\";\nimport type { ModelRegistry } from \"./model-registry.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { AgentSession } from \"./agent-session.ts\";\nimport type { LoadExtensionsResult, OrchestrationContext, SessionStartEvent, ToolDefinition } from \"./extensions/index.ts\";\
|
|
1
|
+
{"version":3,"file":"sdk-types.js","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Model } from \"@earendil-works/pi-ai\";\nimport type { AuthStorage } from \"./auth-storage.ts\";\nimport type { ModelRegistry } from \"./model-registry.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { AgentSession } from \"./agent-session.ts\";\nimport type { LoadExtensionsResult, OrchestrationContext, SessionStartEvent, ToolDefinition } from \"./extensions/index.ts\";\n\nexport interface CreateAgentSessionOptions {\n /** Working directory for project-local discovery. Default: process.cwd() */\n cwd?: string;\n /** Global config directory. Default: ~/.atomic/agent */\n agentDir?: string;\n\n /** Auth storage for credentials. Default: AuthStorage.create(agentDir/auth.json) */\n authStorage?: AuthStorage;\n /** Model registry. Default: ModelRegistry.create(authStorage, agentDir/models.json) */\n modelRegistry?: ModelRegistry;\n\n /** Model to use. Default: from settings, else first available */\n model?: Model<Api>;\n /** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n thinkingLevel?: ThinkingLevel;\n /** Context window token count. Default: model scalar contextWindow, or settings/session override when supported. */\n contextWindow?: number;\n /** Treat unsupported contextWindow as an error instead of a warning/fallback. */\n contextWindowStrict?: boolean;\n /** Models available for cycling (Ctrl+P in interactive mode) */\n scopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\n /**\n * Optional default tool suppression mode when no explicit allowlist is provided.\n *\n * - \"all\": start with no tools enabled\n * - \"builtin\": disable the default built-in tools (read, bash, edit, write,\n * ask_user_question, todo) but keep extension/custom tools enabled\n */\n noTools?: \"all\" | \"builtin\";\n /**\n * Optional allowlist of tool names.\n *\n * When omitted, pi enables the default built-in tools (read, bash, edit, write,\n * ask_user_question, todo) and leaves extension/custom tools enabled unless\n * `noTools` changes that default.\n * When provided, only the listed tool names are enabled, minus any names in\n * `excludedTools`.\n */\n tools?: string[];\n /**\n * Optional blocklist of tool names.\n *\n * Matching built-in, extension, and SDK custom tools are omitted from the\n * final session tool registry and active tool set. Unknown names are ignored.\n */\n excludedTools?: string[];\n /** Custom tools to register (in addition to built-in tools). */\n customTools?: ToolDefinition[];\n\n /** Resource loader. When omitted, DefaultResourceLoader is used. */\n resourceLoader?: ResourceLoader;\n\n /** Session manager. Default: SessionManager.create(cwd) */\n sessionManager?: SessionManager;\n\n /** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n settingsManager?: SettingsManager;\n /** Session start event metadata for extension runtime startup. */\n sessionStartEvent?: SessionStartEvent;\n /** Session-scoped orchestration policy exposed to extension/tool handlers. */\n orchestrationContext?: OrchestrationContext;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n /** The created session */\n session: AgentSession;\n /** Extensions result (for UI context setup in interactive mode) */\n extensionsResult: LoadExtensionsResult;\n /** Warning if session was restored with a different model than saved */\n modelFallbackMessage?: string;\n /** Warning if a saved/default context window could not be applied to the selected model. */\n contextWindowWarning?: string;\n /** Error if an explicit strict context-window selection is unsupported. */\n contextWindowError?: string;\n}\n\n"]}
|
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":"AA2CA,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1F,YAAY,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1F,cAAc,kBAAkB,CAAC;AAuBjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAoXnC","sourcesContent":["import { join } from \"node:path\";\nimport {\n Agent,\n type AgentMessage,\n type ThinkingLevel,\n} from \"@earendil-works/pi-agent-core\";\nimport {\n clampThinkingLevel,\n type Api,\n type Message,\n type Model,\n streamSimple,\n} from \"@earendil-works/pi-ai\";\nimport { getAgentDir } from \"../config.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { AuthStorage } from \"./auth-storage.ts\";\nimport {\n shouldApplyCodexFastMode,\n streamWithCodexFastMode,\n withCodexFastModePayload,\n withCodexFastModeStreamOptions,\n} from \"./codex-fast-mode.ts\";\nimport { restoreAnthropicReplayThinkingBlocks } from \"./anthropic-thinking-guard.ts\";\nimport { sanitizeCopilotGeminiPayload } from \"./copilot-gemini-payload-sanitizer.ts\";\nimport { restoreCopilotGeminiReasoningOpaque } from \"./copilot-gemini-reasoning.ts\";\nimport { normalizeCopilotGeminiReplayToolArguments } from \"./copilot-gemini-tool-arguments.ts\";\nimport { getModelDefaultContextWindow, getSupportedContextWindows, selectContextWindow } from \"./context-window.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type {\n ExtensionRunner,\n} from \"./extensions/index.ts\";\nimport { convertToLlm } from \"./messages.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\nimport { findInitialModel, resolveSavedModelReference } from \"./model-resolver.ts\";\nimport { DefaultResourceLoader } from \"./resource-loader.ts\";\nimport { getDefaultSessionDir, SessionManager } from \"./session-manager.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport { time } from \"./timings.ts\";\nimport { defaultToolNames } from \"./tools/index.ts\";\n\nimport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\nexport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\n\nexport * from \"./sdk-exports.ts\";\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n return getAgentDir();\n}\n\ntype ContextWindowRequestSource = \"explicit\" | \"incoming-model\" | \"session\" | \"model-settings\" | \"global-settings\";\n\nconst COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS = { allowCopilotLongContextFallback: true } as const;\n\nfunction getAlreadyAppliedContextWindow(model: Model<Api>): number | undefined {\n const defaultContextWindow = getModelDefaultContextWindow(model);\n if (model.contextWindow === defaultContextWindow) {\n return undefined;\n }\n\n return getSupportedContextWindows(model).includes(model.contextWindow)\n ? model.contextWindow\n : undefined;\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@earendil-works/pi-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(\n options: CreateAgentSessionOptions = {},\n): Promise<CreateAgentSessionResult> {\n const cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n const agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n let resourceLoader = options.resourceLoader;\n\n // Use provided or create AuthStorage and ModelRegistry. When a modelRegistry\n // is supplied (e.g. a workflow stage reusing one registry across model\n // fallback candidates), do NOT also build a fresh AuthStorage: its\n // constructor eagerly calls reload(), which acquires the auth.json file lock\n // and, under contention, can fail and leave an empty credential set. Reusing\n // the supplied registry's already-loaded auth avoids that race (issue #1431).\n const authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n const modelsPath = options.agentDir\n ? join(agentDir, \"models.json\")\n : undefined;\n const modelRegistry =\n options.modelRegistry ??\n ModelRegistry.create(options.authStorage ?? AuthStorage.create(authPath), modelsPath);\n\n const settingsManager =\n options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n const sessionManager =\n options.sessionManager ??\n SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));\n\n if (!resourceLoader) {\n resourceLoader = new DefaultResourceLoader({\n cwd,\n agentDir,\n settingsManager,\n });\n await resourceLoader.reload();\n time(\"resourceLoader.reload\");\n }\n\n // Check if session has existing data to restore\n const existingSession = sessionManager.buildSessionContext();\n const hasExistingSession = existingSession.messages.length > 0;\n const hasThinkingEntry = sessionManager\n .getBranch()\n .some((entry) => entry.type === \"thinking_level_change\");\n\n let model = options.model;\n let modelFallbackMessage: string | undefined;\n\n // If session has data, try to restore model from it\n if (!model && hasExistingSession && existingSession.model) {\n const restoredModel = await resolveSavedModelReference(\n existingSession.model.provider,\n existingSession.model.modelId,\n modelRegistry,\n );\n if (restoredModel && modelRegistry.hasConfiguredAuth(restoredModel)) {\n model = restoredModel;\n }\n if (!model) {\n modelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n }\n }\n\n // If still no model, use findInitialModel (checks settings default, then provider defaults)\n if (!model) {\n const result = await findInitialModel({\n scopedModels: [],\n isContinuing: hasExistingSession,\n defaultProvider: settingsManager.getDefaultProvider(),\n defaultModelId: settingsManager.getDefaultModel(),\n defaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n modelRegistry,\n });\n model = result.model;\n if (!model) {\n modelFallbackMessage = formatNoModelsAvailableMessage();\n } else if (modelFallbackMessage) {\n modelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n }\n }\n\n let thinkingLevel = options.thinkingLevel;\n\n // If session has data, restore thinking level from it\n if (thinkingLevel === undefined && hasExistingSession) {\n thinkingLevel = hasThinkingEntry\n ? (existingSession.thinkingLevel as ThinkingLevel)\n : (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n }\n\n // Fall back to settings default\n if (thinkingLevel === undefined) {\n thinkingLevel =\n settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n }\n\n // Clamp to model capabilities\n if (!model) {\n thinkingLevel = \"off\";\n } else {\n thinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n }\n\n let selectedContextWindow: number | undefined;\n let contextWindowWarning: string | undefined;\n let contextWindowError: string | undefined;\n const explicitContextWindowSelection = options.contextWindow !== undefined;\n const incomingModelContextWindow =\n model && options.model ? getAlreadyAppliedContextWindow(model) : undefined;\n const sessionContextWindow = hasExistingSession ? existingSession.contextWindow : undefined;\n const modelSettingsContextWindow = model ? settingsManager.getDefaultContextWindowForModel(model.provider, model.id) : undefined;\n const globalSettingsContextWindow = settingsManager.getDefaultContextWindow();\n const contextWindowRequest:\n | { contextWindow: number; source: ContextWindowRequestSource }\n | undefined =\n options.contextWindow !== undefined\n ? { contextWindow: options.contextWindow, source: \"explicit\" }\n : incomingModelContextWindow !== undefined\n ? { contextWindow: incomingModelContextWindow, source: \"incoming-model\" }\n : sessionContextWindow !== undefined\n ? { contextWindow: sessionContextWindow, source: \"session\" }\n : modelSettingsContextWindow !== undefined\n ? { contextWindow: modelSettingsContextWindow, source: \"model-settings\" }\n : globalSettingsContextWindow !== undefined\n ? { contextWindow: globalSettingsContextWindow, source: \"global-settings\" }\n : undefined;\n if (model && contextWindowRequest !== undefined) {\n const selected = selectContextWindow(\n model,\n contextWindowRequest.contextWindow,\n COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS,\n );\n if (\"error\" in selected) {\n if (options.contextWindowStrict) {\n contextWindowError = selected.error;\n } else if (contextWindowRequest.source !== \"global-settings\") {\n contextWindowWarning = selected.error;\n }\n } else {\n model = selected.model;\n selectedContextWindow = selected.contextWindow;\n }\n }\n\n const allowedToolNames =\n options.tools ?? (options.noTools === \"all\" ? [] : undefined);\n const initialActiveToolNames: string[] = options.tools\n ? [...options.tools]\n : options.noTools\n ? []\n : [...defaultToolNames];\n\n let agent: Agent;\n\n let lastConvertedLlmMessages: Message[] | undefined;\n\n // Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n const convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n const converted = convertToLlm(messages);\n // Check setting dynamically so mid-session changes take effect\n if (!settingsManager.getBlockImages()) {\n lastConvertedLlmMessages = converted;\n return converted;\n }\n // Filter out ImageContent from all messages, replacing with text placeholder\n const filtered = converted.map((msg) => {\n if (msg.role === \"user\" || msg.role === \"toolResult\") {\n const content = msg.content;\n if (Array.isArray(content)) {\n const hasImages = content.some((c) => c.type === \"image\");\n if (hasImages) {\n const filteredContent = content\n .map((c) =>\n c.type === \"image\"\n ? {\n type: \"text\" as const,\n text: \"Image reading is disabled.\",\n }\n : c,\n )\n .filter(\n (c, i, arr) =>\n // Dedupe consecutive \"Image reading is disabled.\" texts\n !(\n c.type === \"text\" &&\n c.text === \"Image reading is disabled.\" &&\n i > 0 &&\n arr[i - 1].type === \"text\" &&\n (arr[i - 1] as { type: \"text\"; text: string }).text ===\n \"Image reading is disabled.\"\n ),\n );\n return { ...msg, content: filteredContent };\n }\n }\n }\n return msg;\n });\n lastConvertedLlmMessages = filtered;\n return filtered;\n };\n\n const extensionRunnerRef: { current?: ExtensionRunner } = {};\n const isCodexFastModeEnabled = (requestModel: Model<Api>): boolean =>\n shouldApplyCodexFastMode(\n requestModel,\n settingsManager.getCodexFastModeSettings(),\n options.orchestrationContext,\n );\n\n agent = new Agent({\n initialState: {\n systemPrompt: \"\",\n model,\n thinkingLevel,\n tools: [],\n },\n convertToLlm: convertToLlmWithBlockImages,\n streamFn: async (model, context, streamOptions) => {\n const auth = await modelRegistry.getApiKeyAndHeaders(model);\n if (!auth.ok) {\n throw new Error(auth.error);\n }\n const providerRetrySettings = settingsManager.getProviderRetrySettings();\n const httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n // SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n // Use max int32 to effectively disable the timeout.\n const effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n const timeoutMs = streamOptions?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n const websocketConnectTimeoutMs =\n streamOptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n const attributionHeaders = mergeProviderAttributionHeaders(\n model,\n settingsManager,\n streamOptions?.sessionId,\n auth.headers,\n streamOptions?.headers,\n );\n const fastModeEnabled = isCodexFastModeEnabled(model);\n const codexFastModeStreamOptions = withCodexFastModeStreamOptions(\n {\n ...streamOptions,\n apiKey: auth.apiKey,\n timeoutMs,\n websocketConnectTimeoutMs,\n maxRetries: streamOptions?.maxRetries ?? providerRetrySettings.maxRetries,\n maxRetryDelayMs:\n streamOptions?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n headers: attributionHeaders,\n },\n fastModeEnabled,\n );\n if (modelRegistry.hasRegisteredStreamSimpleForApi(model.api)) {\n return streamSimple(model, context, codexFastModeStreamOptions);\n }\n return streamWithCodexFastMode(model, context, codexFastModeStreamOptions);\n },\n onPayload: async (payload, model) => {\n const fastModeEnabled = isCodexFastModeEnabled(model);\n const guardedPayload = withCodexFastModePayload(payload, fastModeEnabled);\n const sourceMessages = lastConvertedLlmMessages;\n const replayGuardedPayload = sourceMessages\n ? restoreAnthropicReplayThinkingBlocks(guardedPayload, sourceMessages, model)\n : guardedPayload;\n const runner = extensionRunnerRef.current;\n let finalPayload: unknown;\n if (!runner?.hasHandlers(\"before_provider_request\")) {\n finalPayload = replayGuardedPayload;\n } else {\n const extensionPayload = await runner.emitBeforeProviderRequest(\n replayGuardedPayload,\n );\n finalPayload = sourceMessages\n ? restoreAnthropicReplayThinkingBlocks(extensionPayload, sourceMessages, model)\n : extensionPayload;\n }\n // GitHub Copilot Gemini models are served through CAPI, which translates\n // the OpenAI request into Google GenAI and rejects tool schemas whose\n // `anyOf`/`oneOf` wraps a complex object (HTTP 400 invalid request body).\n // Sanitize tool JSON Schemas into Gemini's supported subset. No-op for\n // every other provider/model, and runs last so it also covers tools\n // injected by `before_provider_request` extensions.\n const schemaSanitized = sanitizeCopilotGeminiPayload(finalPayload, model);\n // Reconstruct flattened tool-call arguments on replayed assistant\n // messages (for example `edits[0].newText` -> `edits: [{ newText }]`).\n // CAPI parses replayed arguments straight into Gemini's FunctionCall,\n // and a flattened/malformed prior call ends the next turn with\n // `finish_reason: \"error\"`. No-op for well-formed args / other models.\n const replayArgsNormalized = normalizeCopilotGeminiReplayToolArguments(schemaSanitized, model);\n // CAPI carries Gemini thought signatures in a `reasoning_opaque` field it\n // reads back off the assistant message on replay. Convert the\n // `reasoning_details` the client re-emits (captured inbound by the SSE\n // interceptor) into that field so multi-turn tool use keeps its thought\n // signature instead of dying on an empty completion. No-op otherwise.\n return restoreCopilotGeminiReasoningOpaque(replayArgsNormalized, model);\n },\n onResponse: async (response, _model) => {\n const runner = extensionRunnerRef.current;\n if (!runner?.hasHandlers(\"after_provider_response\")) {\n return;\n }\n await runner.emit({\n type: \"after_provider_response\",\n status: response.status,\n headers: response.headers,\n });\n },\n sessionId: sessionManager.getSessionId(),\n transformContext: async (messages) => {\n const runner = extensionRunnerRef.current;\n if (!runner) return messages;\n return runner.emitContext(messages);\n },\n steeringMode: settingsManager.getSteeringMode(),\n followUpMode: settingsManager.getFollowUpMode(),\n transport: settingsManager.getTransport(),\n thinkingBudgets: settingsManager.getThinkingBudgets(),\n maxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n });\n\n // Restore messages if session has existing data\n if (hasExistingSession) {\n agent.state.messages = existingSession.messages;\n const transcriptContextWindow = model\n ? (existingSession.contextWindow ?? getModelDefaultContextWindow(model))\n : undefined;\n if (\n selectedContextWindow !== undefined &&\n (explicitContextWindowSelection || selectedContextWindow !== transcriptContextWindow)\n ) {\n sessionManager.appendContextWindowChange(selectedContextWindow);\n }\n if (!hasThinkingEntry) {\n sessionManager.appendThinkingLevelChange(thinkingLevel);\n }\n } else {\n // Save initial model and thinking level for new sessions so they can be restored on resume\n if (model) {\n sessionManager.appendModelChange(model.provider, model.id);\n if (\n selectedContextWindow !== undefined &&\n (explicitContextWindowSelection || selectedContextWindow !== getModelDefaultContextWindow(model))\n ) {\n sessionManager.appendContextWindowChange(selectedContextWindow);\n }\n }\n sessionManager.appendThinkingLevelChange(thinkingLevel);\n }\n\n const session = new AgentSession({\n agent,\n sessionManager,\n settingsManager,\n cwd,\n scopedModels: options.scopedModels,\n resourceLoader,\n customTools: options.customTools,\n bashPolicy: options.bashPolicy,\n modelRegistry,\n initialActiveToolNames,\n allowedToolNames,\n excludedToolNames: options.excludedTools,\n extensionRunnerRef,\n sessionStartEvent: options.sessionStartEvent,\n orchestrationContext: options.orchestrationContext,\n });\n const extensionsResult = resourceLoader.getExtensions();\n\n return {\n session,\n extensionsResult,\n modelFallbackMessage,\n contextWindowWarning,\n contextWindowError,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1F,YAAY,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1F,cAAc,kBAAkB,CAAC;AAuBjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAmXnC","sourcesContent":["import { join } from \"node:path\";\nimport {\n Agent,\n type AgentMessage,\n type ThinkingLevel,\n} from \"@earendil-works/pi-agent-core\";\nimport {\n clampThinkingLevel,\n type Api,\n type Message,\n type Model,\n streamSimple,\n} from \"@earendil-works/pi-ai\";\nimport { getAgentDir } from \"../config.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { AuthStorage } from \"./auth-storage.ts\";\nimport {\n shouldApplyCodexFastMode,\n streamWithCodexFastMode,\n withCodexFastModePayload,\n withCodexFastModeStreamOptions,\n} from \"./codex-fast-mode.ts\";\nimport { restoreAnthropicReplayThinkingBlocks } from \"./anthropic-thinking-guard.ts\";\nimport { sanitizeCopilotGeminiPayload } from \"./copilot-gemini-payload-sanitizer.ts\";\nimport { restoreCopilotGeminiReasoningOpaque } from \"./copilot-gemini-reasoning.ts\";\nimport { normalizeCopilotGeminiReplayToolArguments } from \"./copilot-gemini-tool-arguments.ts\";\nimport { getModelDefaultContextWindow, getSupportedContextWindows, selectContextWindow } from \"./context-window.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type {\n ExtensionRunner,\n} from \"./extensions/index.ts\";\nimport { convertToLlm } from \"./messages.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\nimport { findInitialModel, resolveSavedModelReference } from \"./model-resolver.ts\";\nimport { DefaultResourceLoader } from \"./resource-loader.ts\";\nimport { getDefaultSessionDir, SessionManager } from \"./session-manager.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport { time } from \"./timings.ts\";\nimport { defaultToolNames } from \"./tools/index.ts\";\n\nimport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\nexport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\n\nexport * from \"./sdk-exports.ts\";\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n return getAgentDir();\n}\n\ntype ContextWindowRequestSource = \"explicit\" | \"incoming-model\" | \"session\" | \"model-settings\" | \"global-settings\";\n\nconst COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS = { allowCopilotLongContextFallback: true } as const;\n\nfunction getAlreadyAppliedContextWindow(model: Model<Api>): number | undefined {\n const defaultContextWindow = getModelDefaultContextWindow(model);\n if (model.contextWindow === defaultContextWindow) {\n return undefined;\n }\n\n return getSupportedContextWindows(model).includes(model.contextWindow)\n ? model.contextWindow\n : undefined;\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@earendil-works/pi-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(\n options: CreateAgentSessionOptions = {},\n): Promise<CreateAgentSessionResult> {\n const cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n const agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n let resourceLoader = options.resourceLoader;\n\n // Use provided or create AuthStorage and ModelRegistry. When a modelRegistry\n // is supplied (e.g. a workflow stage reusing one registry across model\n // fallback candidates), do NOT also build a fresh AuthStorage: its\n // constructor eagerly calls reload(), which acquires the auth.json file lock\n // and, under contention, can fail and leave an empty credential set. Reusing\n // the supplied registry's already-loaded auth avoids that race (issue #1431).\n const authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n const modelsPath = options.agentDir\n ? join(agentDir, \"models.json\")\n : undefined;\n const modelRegistry =\n options.modelRegistry ??\n ModelRegistry.create(options.authStorage ?? AuthStorage.create(authPath), modelsPath);\n\n const settingsManager =\n options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n const sessionManager =\n options.sessionManager ??\n SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));\n\n if (!resourceLoader) {\n resourceLoader = new DefaultResourceLoader({\n cwd,\n agentDir,\n settingsManager,\n });\n await resourceLoader.reload();\n time(\"resourceLoader.reload\");\n }\n\n // Check if session has existing data to restore\n const existingSession = sessionManager.buildSessionContext();\n const hasExistingSession = existingSession.messages.length > 0;\n const hasThinkingEntry = sessionManager\n .getBranch()\n .some((entry) => entry.type === \"thinking_level_change\");\n\n let model = options.model;\n let modelFallbackMessage: string | undefined;\n\n // If session has data, try to restore model from it\n if (!model && hasExistingSession && existingSession.model) {\n const restoredModel = await resolveSavedModelReference(\n existingSession.model.provider,\n existingSession.model.modelId,\n modelRegistry,\n );\n if (restoredModel && modelRegistry.hasConfiguredAuth(restoredModel)) {\n model = restoredModel;\n }\n if (!model) {\n modelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n }\n }\n\n // If still no model, use findInitialModel (checks settings default, then provider defaults)\n if (!model) {\n const result = await findInitialModel({\n scopedModels: [],\n isContinuing: hasExistingSession,\n defaultProvider: settingsManager.getDefaultProvider(),\n defaultModelId: settingsManager.getDefaultModel(),\n defaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n modelRegistry,\n });\n model = result.model;\n if (!model) {\n modelFallbackMessage = formatNoModelsAvailableMessage();\n } else if (modelFallbackMessage) {\n modelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n }\n }\n\n let thinkingLevel = options.thinkingLevel;\n\n // If session has data, restore thinking level from it\n if (thinkingLevel === undefined && hasExistingSession) {\n thinkingLevel = hasThinkingEntry\n ? (existingSession.thinkingLevel as ThinkingLevel)\n : (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n }\n\n // Fall back to settings default\n if (thinkingLevel === undefined) {\n thinkingLevel =\n settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n }\n\n // Clamp to model capabilities\n if (!model) {\n thinkingLevel = \"off\";\n } else {\n thinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n }\n\n let selectedContextWindow: number | undefined;\n let contextWindowWarning: string | undefined;\n let contextWindowError: string | undefined;\n const explicitContextWindowSelection = options.contextWindow !== undefined;\n const incomingModelContextWindow =\n model && options.model ? getAlreadyAppliedContextWindow(model) : undefined;\n const sessionContextWindow = hasExistingSession ? existingSession.contextWindow : undefined;\n const modelSettingsContextWindow = model ? settingsManager.getDefaultContextWindowForModel(model.provider, model.id) : undefined;\n const globalSettingsContextWindow = settingsManager.getDefaultContextWindow();\n const contextWindowRequest:\n | { contextWindow: number; source: ContextWindowRequestSource }\n | undefined =\n options.contextWindow !== undefined\n ? { contextWindow: options.contextWindow, source: \"explicit\" }\n : incomingModelContextWindow !== undefined\n ? { contextWindow: incomingModelContextWindow, source: \"incoming-model\" }\n : sessionContextWindow !== undefined\n ? { contextWindow: sessionContextWindow, source: \"session\" }\n : modelSettingsContextWindow !== undefined\n ? { contextWindow: modelSettingsContextWindow, source: \"model-settings\" }\n : globalSettingsContextWindow !== undefined\n ? { contextWindow: globalSettingsContextWindow, source: \"global-settings\" }\n : undefined;\n if (model && contextWindowRequest !== undefined) {\n const selected = selectContextWindow(\n model,\n contextWindowRequest.contextWindow,\n COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS,\n );\n if (\"error\" in selected) {\n if (options.contextWindowStrict) {\n contextWindowError = selected.error;\n } else if (contextWindowRequest.source !== \"global-settings\") {\n contextWindowWarning = selected.error;\n }\n } else {\n model = selected.model;\n selectedContextWindow = selected.contextWindow;\n }\n }\n\n const allowedToolNames =\n options.tools ?? (options.noTools === \"all\" ? [] : undefined);\n const initialActiveToolNames: string[] = options.tools\n ? [...options.tools]\n : options.noTools\n ? []\n : [...defaultToolNames];\n\n let agent: Agent;\n\n let lastConvertedLlmMessages: Message[] | undefined;\n\n // Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n const convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n const converted = convertToLlm(messages);\n // Check setting dynamically so mid-session changes take effect\n if (!settingsManager.getBlockImages()) {\n lastConvertedLlmMessages = converted;\n return converted;\n }\n // Filter out ImageContent from all messages, replacing with text placeholder\n const filtered = converted.map((msg) => {\n if (msg.role === \"user\" || msg.role === \"toolResult\") {\n const content = msg.content;\n if (Array.isArray(content)) {\n const hasImages = content.some((c) => c.type === \"image\");\n if (hasImages) {\n const filteredContent = content\n .map((c) =>\n c.type === \"image\"\n ? {\n type: \"text\" as const,\n text: \"Image reading is disabled.\",\n }\n : c,\n )\n .filter(\n (c, i, arr) =>\n // Dedupe consecutive \"Image reading is disabled.\" texts\n !(\n c.type === \"text\" &&\n c.text === \"Image reading is disabled.\" &&\n i > 0 &&\n arr[i - 1].type === \"text\" &&\n (arr[i - 1] as { type: \"text\"; text: string }).text ===\n \"Image reading is disabled.\"\n ),\n );\n return { ...msg, content: filteredContent };\n }\n }\n }\n return msg;\n });\n lastConvertedLlmMessages = filtered;\n return filtered;\n };\n\n const extensionRunnerRef: { current?: ExtensionRunner } = {};\n const isCodexFastModeEnabled = (requestModel: Model<Api>): boolean =>\n shouldApplyCodexFastMode(\n requestModel,\n settingsManager.getCodexFastModeSettings(),\n options.orchestrationContext,\n );\n\n agent = new Agent({\n initialState: {\n systemPrompt: \"\",\n model,\n thinkingLevel,\n tools: [],\n },\n convertToLlm: convertToLlmWithBlockImages,\n streamFn: async (model, context, streamOptions) => {\n const auth = await modelRegistry.getApiKeyAndHeaders(model);\n if (!auth.ok) {\n throw new Error(auth.error);\n }\n const providerRetrySettings = settingsManager.getProviderRetrySettings();\n const httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n // SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n // Use max int32 to effectively disable the timeout.\n const effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n const timeoutMs = streamOptions?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n const websocketConnectTimeoutMs =\n streamOptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n const attributionHeaders = mergeProviderAttributionHeaders(\n model,\n settingsManager,\n streamOptions?.sessionId,\n auth.headers,\n streamOptions?.headers,\n );\n const fastModeEnabled = isCodexFastModeEnabled(model);\n const codexFastModeStreamOptions = withCodexFastModeStreamOptions(\n {\n ...streamOptions,\n apiKey: auth.apiKey,\n timeoutMs,\n websocketConnectTimeoutMs,\n maxRetries: streamOptions?.maxRetries ?? providerRetrySettings.maxRetries,\n maxRetryDelayMs:\n streamOptions?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n headers: attributionHeaders,\n },\n fastModeEnabled,\n );\n if (modelRegistry.hasRegisteredStreamSimpleForApi(model.api)) {\n return streamSimple(model, context, codexFastModeStreamOptions);\n }\n return streamWithCodexFastMode(model, context, codexFastModeStreamOptions);\n },\n onPayload: async (payload, model) => {\n const fastModeEnabled = isCodexFastModeEnabled(model);\n const guardedPayload = withCodexFastModePayload(payload, fastModeEnabled);\n const sourceMessages = lastConvertedLlmMessages;\n const replayGuardedPayload = sourceMessages\n ? restoreAnthropicReplayThinkingBlocks(guardedPayload, sourceMessages, model)\n : guardedPayload;\n const runner = extensionRunnerRef.current;\n let finalPayload: unknown;\n if (!runner?.hasHandlers(\"before_provider_request\")) {\n finalPayload = replayGuardedPayload;\n } else {\n const extensionPayload = await runner.emitBeforeProviderRequest(\n replayGuardedPayload,\n );\n finalPayload = sourceMessages\n ? restoreAnthropicReplayThinkingBlocks(extensionPayload, sourceMessages, model)\n : extensionPayload;\n }\n // GitHub Copilot Gemini models are served through CAPI, which translates\n // the OpenAI request into Google GenAI and rejects tool schemas whose\n // `anyOf`/`oneOf` wraps a complex object (HTTP 400 invalid request body).\n // Sanitize tool JSON Schemas into Gemini's supported subset. No-op for\n // every other provider/model, and runs last so it also covers tools\n // injected by `before_provider_request` extensions.\n const schemaSanitized = sanitizeCopilotGeminiPayload(finalPayload, model);\n // Reconstruct flattened tool-call arguments on replayed assistant\n // messages (for example `edits[0].newText` -> `edits: [{ newText }]`).\n // CAPI parses replayed arguments straight into Gemini's FunctionCall,\n // and a flattened/malformed prior call ends the next turn with\n // `finish_reason: \"error\"`. No-op for well-formed args / other models.\n const replayArgsNormalized = normalizeCopilotGeminiReplayToolArguments(schemaSanitized, model);\n // CAPI carries Gemini thought signatures in a `reasoning_opaque` field it\n // reads back off the assistant message on replay. Convert the\n // `reasoning_details` the client re-emits (captured inbound by the SSE\n // interceptor) into that field so multi-turn tool use keeps its thought\n // signature instead of dying on an empty completion. No-op otherwise.\n return restoreCopilotGeminiReasoningOpaque(replayArgsNormalized, model);\n },\n onResponse: async (response, _model) => {\n const runner = extensionRunnerRef.current;\n if (!runner?.hasHandlers(\"after_provider_response\")) {\n return;\n }\n await runner.emit({\n type: \"after_provider_response\",\n status: response.status,\n headers: response.headers,\n });\n },\n sessionId: sessionManager.getSessionId(),\n transformContext: async (messages) => {\n const runner = extensionRunnerRef.current;\n if (!runner) return messages;\n return runner.emitContext(messages);\n },\n steeringMode: settingsManager.getSteeringMode(),\n followUpMode: settingsManager.getFollowUpMode(),\n transport: settingsManager.getTransport(),\n thinkingBudgets: settingsManager.getThinkingBudgets(),\n maxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n });\n\n // Restore messages if session has existing data\n if (hasExistingSession) {\n agent.state.messages = existingSession.messages;\n const transcriptContextWindow = model\n ? (existingSession.contextWindow ?? getModelDefaultContextWindow(model))\n : undefined;\n if (\n selectedContextWindow !== undefined &&\n (explicitContextWindowSelection || selectedContextWindow !== transcriptContextWindow)\n ) {\n sessionManager.appendContextWindowChange(selectedContextWindow);\n }\n if (!hasThinkingEntry) {\n sessionManager.appendThinkingLevelChange(thinkingLevel);\n }\n } else {\n // Save initial model and thinking level for new sessions so they can be restored on resume\n if (model) {\n sessionManager.appendModelChange(model.provider, model.id);\n if (\n selectedContextWindow !== undefined &&\n (explicitContextWindowSelection || selectedContextWindow !== getModelDefaultContextWindow(model))\n ) {\n sessionManager.appendContextWindowChange(selectedContextWindow);\n }\n }\n sessionManager.appendThinkingLevelChange(thinkingLevel);\n }\n\n const session = new AgentSession({\n agent,\n sessionManager,\n settingsManager,\n cwd,\n scopedModels: options.scopedModels,\n resourceLoader,\n customTools: options.customTools,\n modelRegistry,\n initialActiveToolNames,\n allowedToolNames,\n excludedToolNames: options.excludedTools,\n extensionRunnerRef,\n sessionStartEvent: options.sessionStartEvent,\n orchestrationContext: options.orchestrationContext,\n });\n const extensionsResult = resourceLoader.getExtensions();\n\n return {\n session,\n extensionsResult,\n modelFallbackMessage,\n contextWindowWarning,\n contextWindowError,\n };\n}\n"]}
|
package/dist/core/sdk.js
CHANGED
|
@@ -369,7 +369,6 @@ export async function createAgentSession(options = {}) {
|
|
|
369
369
|
scopedModels: options.scopedModels,
|
|
370
370
|
resourceLoader,
|
|
371
371
|
customTools: options.customTools,
|
|
372
|
-
bashPolicy: options.bashPolicy,
|
|
373
372
|
modelRegistry,
|
|
374
373
|
initialActiveToolNames,
|
|
375
374
|
allowedToolNames,
|
package/dist/core/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport {\n Agent,\n type AgentMessage,\n type ThinkingLevel,\n} from \"@earendil-works/pi-agent-core\";\nimport {\n clampThinkingLevel,\n type Api,\n type Message,\n type Model,\n streamSimple,\n} from \"@earendil-works/pi-ai\";\nimport { getAgentDir } from \"../config.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { AuthStorage } from \"./auth-storage.ts\";\nimport {\n shouldApplyCodexFastMode,\n streamWithCodexFastMode,\n withCodexFastModePayload,\n withCodexFastModeStreamOptions,\n} from \"./codex-fast-mode.ts\";\nimport { restoreAnthropicReplayThinkingBlocks } from \"./anthropic-thinking-guard.ts\";\nimport { sanitizeCopilotGeminiPayload } from \"./copilot-gemini-payload-sanitizer.ts\";\nimport { restoreCopilotGeminiReasoningOpaque } from \"./copilot-gemini-reasoning.ts\";\nimport { normalizeCopilotGeminiReplayToolArguments } from \"./copilot-gemini-tool-arguments.ts\";\nimport { getModelDefaultContextWindow, getSupportedContextWindows, selectContextWindow } from \"./context-window.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type {\n ExtensionRunner,\n} from \"./extensions/index.ts\";\nimport { convertToLlm } from \"./messages.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\nimport { findInitialModel, resolveSavedModelReference } from \"./model-resolver.ts\";\nimport { DefaultResourceLoader } from \"./resource-loader.ts\";\nimport { getDefaultSessionDir, SessionManager } from \"./session-manager.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport { time } from \"./timings.ts\";\nimport { defaultToolNames } from \"./tools/index.ts\";\n\nimport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\nexport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\n\nexport * from \"./sdk-exports.ts\";\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n return getAgentDir();\n}\n\ntype ContextWindowRequestSource = \"explicit\" | \"incoming-model\" | \"session\" | \"model-settings\" | \"global-settings\";\n\nconst COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS = { allowCopilotLongContextFallback: true } as const;\n\nfunction getAlreadyAppliedContextWindow(model: Model<Api>): number | undefined {\n const defaultContextWindow = getModelDefaultContextWindow(model);\n if (model.contextWindow === defaultContextWindow) {\n return undefined;\n }\n\n return getSupportedContextWindows(model).includes(model.contextWindow)\n ? model.contextWindow\n : undefined;\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@earendil-works/pi-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(\n options: CreateAgentSessionOptions = {},\n): Promise<CreateAgentSessionResult> {\n const cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n const agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n let resourceLoader = options.resourceLoader;\n\n // Use provided or create AuthStorage and ModelRegistry. When a modelRegistry\n // is supplied (e.g. a workflow stage reusing one registry across model\n // fallback candidates), do NOT also build a fresh AuthStorage: its\n // constructor eagerly calls reload(), which acquires the auth.json file lock\n // and, under contention, can fail and leave an empty credential set. Reusing\n // the supplied registry's already-loaded auth avoids that race (issue #1431).\n const authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n const modelsPath = options.agentDir\n ? join(agentDir, \"models.json\")\n : undefined;\n const modelRegistry =\n options.modelRegistry ??\n ModelRegistry.create(options.authStorage ?? AuthStorage.create(authPath), modelsPath);\n\n const settingsManager =\n options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n const sessionManager =\n options.sessionManager ??\n SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));\n\n if (!resourceLoader) {\n resourceLoader = new DefaultResourceLoader({\n cwd,\n agentDir,\n settingsManager,\n });\n await resourceLoader.reload();\n time(\"resourceLoader.reload\");\n }\n\n // Check if session has existing data to restore\n const existingSession = sessionManager.buildSessionContext();\n const hasExistingSession = existingSession.messages.length > 0;\n const hasThinkingEntry = sessionManager\n .getBranch()\n .some((entry) => entry.type === \"thinking_level_change\");\n\n let model = options.model;\n let modelFallbackMessage: string | undefined;\n\n // If session has data, try to restore model from it\n if (!model && hasExistingSession && existingSession.model) {\n const restoredModel = await resolveSavedModelReference(\n existingSession.model.provider,\n existingSession.model.modelId,\n modelRegistry,\n );\n if (restoredModel && modelRegistry.hasConfiguredAuth(restoredModel)) {\n model = restoredModel;\n }\n if (!model) {\n modelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n }\n }\n\n // If still no model, use findInitialModel (checks settings default, then provider defaults)\n if (!model) {\n const result = await findInitialModel({\n scopedModels: [],\n isContinuing: hasExistingSession,\n defaultProvider: settingsManager.getDefaultProvider(),\n defaultModelId: settingsManager.getDefaultModel(),\n defaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n modelRegistry,\n });\n model = result.model;\n if (!model) {\n modelFallbackMessage = formatNoModelsAvailableMessage();\n } else if (modelFallbackMessage) {\n modelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n }\n }\n\n let thinkingLevel = options.thinkingLevel;\n\n // If session has data, restore thinking level from it\n if (thinkingLevel === undefined && hasExistingSession) {\n thinkingLevel = hasThinkingEntry\n ? (existingSession.thinkingLevel as ThinkingLevel)\n : (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n }\n\n // Fall back to settings default\n if (thinkingLevel === undefined) {\n thinkingLevel =\n settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n }\n\n // Clamp to model capabilities\n if (!model) {\n thinkingLevel = \"off\";\n } else {\n thinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n }\n\n let selectedContextWindow: number | undefined;\n let contextWindowWarning: string | undefined;\n let contextWindowError: string | undefined;\n const explicitContextWindowSelection = options.contextWindow !== undefined;\n const incomingModelContextWindow =\n model && options.model ? getAlreadyAppliedContextWindow(model) : undefined;\n const sessionContextWindow = hasExistingSession ? existingSession.contextWindow : undefined;\n const modelSettingsContextWindow = model ? settingsManager.getDefaultContextWindowForModel(model.provider, model.id) : undefined;\n const globalSettingsContextWindow = settingsManager.getDefaultContextWindow();\n const contextWindowRequest:\n | { contextWindow: number; source: ContextWindowRequestSource }\n | undefined =\n options.contextWindow !== undefined\n ? { contextWindow: options.contextWindow, source: \"explicit\" }\n : incomingModelContextWindow !== undefined\n ? { contextWindow: incomingModelContextWindow, source: \"incoming-model\" }\n : sessionContextWindow !== undefined\n ? { contextWindow: sessionContextWindow, source: \"session\" }\n : modelSettingsContextWindow !== undefined\n ? { contextWindow: modelSettingsContextWindow, source: \"model-settings\" }\n : globalSettingsContextWindow !== undefined\n ? { contextWindow: globalSettingsContextWindow, source: \"global-settings\" }\n : undefined;\n if (model && contextWindowRequest !== undefined) {\n const selected = selectContextWindow(\n model,\n contextWindowRequest.contextWindow,\n COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS,\n );\n if (\"error\" in selected) {\n if (options.contextWindowStrict) {\n contextWindowError = selected.error;\n } else if (contextWindowRequest.source !== \"global-settings\") {\n contextWindowWarning = selected.error;\n }\n } else {\n model = selected.model;\n selectedContextWindow = selected.contextWindow;\n }\n }\n\n const allowedToolNames =\n options.tools ?? (options.noTools === \"all\" ? [] : undefined);\n const initialActiveToolNames: string[] = options.tools\n ? [...options.tools]\n : options.noTools\n ? []\n : [...defaultToolNames];\n\n let agent: Agent;\n\n let lastConvertedLlmMessages: Message[] | undefined;\n\n // Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n const convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n const converted = convertToLlm(messages);\n // Check setting dynamically so mid-session changes take effect\n if (!settingsManager.getBlockImages()) {\n lastConvertedLlmMessages = converted;\n return converted;\n }\n // Filter out ImageContent from all messages, replacing with text placeholder\n const filtered = converted.map((msg) => {\n if (msg.role === \"user\" || msg.role === \"toolResult\") {\n const content = msg.content;\n if (Array.isArray(content)) {\n const hasImages = content.some((c) => c.type === \"image\");\n if (hasImages) {\n const filteredContent = content\n .map((c) =>\n c.type === \"image\"\n ? {\n type: \"text\" as const,\n text: \"Image reading is disabled.\",\n }\n : c,\n )\n .filter(\n (c, i, arr) =>\n // Dedupe consecutive \"Image reading is disabled.\" texts\n !(\n c.type === \"text\" &&\n c.text === \"Image reading is disabled.\" &&\n i > 0 &&\n arr[i - 1].type === \"text\" &&\n (arr[i - 1] as { type: \"text\"; text: string }).text ===\n \"Image reading is disabled.\"\n ),\n );\n return { ...msg, content: filteredContent };\n }\n }\n }\n return msg;\n });\n lastConvertedLlmMessages = filtered;\n return filtered;\n };\n\n const extensionRunnerRef: { current?: ExtensionRunner } = {};\n const isCodexFastModeEnabled = (requestModel: Model<Api>): boolean =>\n shouldApplyCodexFastMode(\n requestModel,\n settingsManager.getCodexFastModeSettings(),\n options.orchestrationContext,\n );\n\n agent = new Agent({\n initialState: {\n systemPrompt: \"\",\n model,\n thinkingLevel,\n tools: [],\n },\n convertToLlm: convertToLlmWithBlockImages,\n streamFn: async (model, context, streamOptions) => {\n const auth = await modelRegistry.getApiKeyAndHeaders(model);\n if (!auth.ok) {\n throw new Error(auth.error);\n }\n const providerRetrySettings = settingsManager.getProviderRetrySettings();\n const httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n // SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n // Use max int32 to effectively disable the timeout.\n const effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n const timeoutMs = streamOptions?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n const websocketConnectTimeoutMs =\n streamOptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n const attributionHeaders = mergeProviderAttributionHeaders(\n model,\n settingsManager,\n streamOptions?.sessionId,\n auth.headers,\n streamOptions?.headers,\n );\n const fastModeEnabled = isCodexFastModeEnabled(model);\n const codexFastModeStreamOptions = withCodexFastModeStreamOptions(\n {\n ...streamOptions,\n apiKey: auth.apiKey,\n timeoutMs,\n websocketConnectTimeoutMs,\n maxRetries: streamOptions?.maxRetries ?? providerRetrySettings.maxRetries,\n maxRetryDelayMs:\n streamOptions?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n headers: attributionHeaders,\n },\n fastModeEnabled,\n );\n if (modelRegistry.hasRegisteredStreamSimpleForApi(model.api)) {\n return streamSimple(model, context, codexFastModeStreamOptions);\n }\n return streamWithCodexFastMode(model, context, codexFastModeStreamOptions);\n },\n onPayload: async (payload, model) => {\n const fastModeEnabled = isCodexFastModeEnabled(model);\n const guardedPayload = withCodexFastModePayload(payload, fastModeEnabled);\n const sourceMessages = lastConvertedLlmMessages;\n const replayGuardedPayload = sourceMessages\n ? restoreAnthropicReplayThinkingBlocks(guardedPayload, sourceMessages, model)\n : guardedPayload;\n const runner = extensionRunnerRef.current;\n let finalPayload: unknown;\n if (!runner?.hasHandlers(\"before_provider_request\")) {\n finalPayload = replayGuardedPayload;\n } else {\n const extensionPayload = await runner.emitBeforeProviderRequest(\n replayGuardedPayload,\n );\n finalPayload = sourceMessages\n ? restoreAnthropicReplayThinkingBlocks(extensionPayload, sourceMessages, model)\n : extensionPayload;\n }\n // GitHub Copilot Gemini models are served through CAPI, which translates\n // the OpenAI request into Google GenAI and rejects tool schemas whose\n // `anyOf`/`oneOf` wraps a complex object (HTTP 400 invalid request body).\n // Sanitize tool JSON Schemas into Gemini's supported subset. No-op for\n // every other provider/model, and runs last so it also covers tools\n // injected by `before_provider_request` extensions.\n const schemaSanitized = sanitizeCopilotGeminiPayload(finalPayload, model);\n // Reconstruct flattened tool-call arguments on replayed assistant\n // messages (for example `edits[0].newText` -> `edits: [{ newText }]`).\n // CAPI parses replayed arguments straight into Gemini's FunctionCall,\n // and a flattened/malformed prior call ends the next turn with\n // `finish_reason: \"error\"`. No-op for well-formed args / other models.\n const replayArgsNormalized = normalizeCopilotGeminiReplayToolArguments(schemaSanitized, model);\n // CAPI carries Gemini thought signatures in a `reasoning_opaque` field it\n // reads back off the assistant message on replay. Convert the\n // `reasoning_details` the client re-emits (captured inbound by the SSE\n // interceptor) into that field so multi-turn tool use keeps its thought\n // signature instead of dying on an empty completion. No-op otherwise.\n return restoreCopilotGeminiReasoningOpaque(replayArgsNormalized, model);\n },\n onResponse: async (response, _model) => {\n const runner = extensionRunnerRef.current;\n if (!runner?.hasHandlers(\"after_provider_response\")) {\n return;\n }\n await runner.emit({\n type: \"after_provider_response\",\n status: response.status,\n headers: response.headers,\n });\n },\n sessionId: sessionManager.getSessionId(),\n transformContext: async (messages) => {\n const runner = extensionRunnerRef.current;\n if (!runner) return messages;\n return runner.emitContext(messages);\n },\n steeringMode: settingsManager.getSteeringMode(),\n followUpMode: settingsManager.getFollowUpMode(),\n transport: settingsManager.getTransport(),\n thinkingBudgets: settingsManager.getThinkingBudgets(),\n maxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n });\n\n // Restore messages if session has existing data\n if (hasExistingSession) {\n agent.state.messages = existingSession.messages;\n const transcriptContextWindow = model\n ? (existingSession.contextWindow ?? getModelDefaultContextWindow(model))\n : undefined;\n if (\n selectedContextWindow !== undefined &&\n (explicitContextWindowSelection || selectedContextWindow !== transcriptContextWindow)\n ) {\n sessionManager.appendContextWindowChange(selectedContextWindow);\n }\n if (!hasThinkingEntry) {\n sessionManager.appendThinkingLevelChange(thinkingLevel);\n }\n } else {\n // Save initial model and thinking level for new sessions so they can be restored on resume\n if (model) {\n sessionManager.appendModelChange(model.provider, model.id);\n if (\n selectedContextWindow !== undefined &&\n (explicitContextWindowSelection || selectedContextWindow !== getModelDefaultContextWindow(model))\n ) {\n sessionManager.appendContextWindowChange(selectedContextWindow);\n }\n }\n sessionManager.appendThinkingLevelChange(thinkingLevel);\n }\n\n const session = new AgentSession({\n agent,\n sessionManager,\n settingsManager,\n cwd,\n scopedModels: options.scopedModels,\n resourceLoader,\n customTools: options.customTools,\n bashPolicy: options.bashPolicy,\n modelRegistry,\n initialActiveToolNames,\n allowedToolNames,\n excludedToolNames: options.excludedTools,\n extensionRunnerRef,\n sessionStartEvent: options.sessionStartEvent,\n orchestrationContext: options.orchestrationContext,\n });\n const extensionsResult = resourceLoader.getExtensions();\n\n return {\n session,\n extensionsResult,\n modelFallbackMessage,\n contextWindowWarning,\n contextWindowError,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport {\n Agent,\n type AgentMessage,\n type ThinkingLevel,\n} from \"@earendil-works/pi-agent-core\";\nimport {\n clampThinkingLevel,\n type Api,\n type Message,\n type Model,\n streamSimple,\n} from \"@earendil-works/pi-ai\";\nimport { getAgentDir } from \"../config.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { AuthStorage } from \"./auth-storage.ts\";\nimport {\n shouldApplyCodexFastMode,\n streamWithCodexFastMode,\n withCodexFastModePayload,\n withCodexFastModeStreamOptions,\n} from \"./codex-fast-mode.ts\";\nimport { restoreAnthropicReplayThinkingBlocks } from \"./anthropic-thinking-guard.ts\";\nimport { sanitizeCopilotGeminiPayload } from \"./copilot-gemini-payload-sanitizer.ts\";\nimport { restoreCopilotGeminiReasoningOpaque } from \"./copilot-gemini-reasoning.ts\";\nimport { normalizeCopilotGeminiReplayToolArguments } from \"./copilot-gemini-tool-arguments.ts\";\nimport { getModelDefaultContextWindow, getSupportedContextWindows, selectContextWindow } from \"./context-window.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type {\n ExtensionRunner,\n} from \"./extensions/index.ts\";\nimport { convertToLlm } from \"./messages.ts\";\nimport { ModelRegistry } from \"./model-registry.ts\";\nimport { findInitialModel, resolveSavedModelReference } from \"./model-resolver.ts\";\nimport { DefaultResourceLoader } from \"./resource-loader.ts\";\nimport { getDefaultSessionDir, SessionManager } from \"./session-manager.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport { time } from \"./timings.ts\";\nimport { defaultToolNames } from \"./tools/index.ts\";\n\nimport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\nexport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\n\nexport * from \"./sdk-exports.ts\";\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n return getAgentDir();\n}\n\ntype ContextWindowRequestSource = \"explicit\" | \"incoming-model\" | \"session\" | \"model-settings\" | \"global-settings\";\n\nconst COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS = { allowCopilotLongContextFallback: true } as const;\n\nfunction getAlreadyAppliedContextWindow(model: Model<Api>): number | undefined {\n const defaultContextWindow = getModelDefaultContextWindow(model);\n if (model.contextWindow === defaultContextWindow) {\n return undefined;\n }\n\n return getSupportedContextWindows(model).includes(model.contextWindow)\n ? model.contextWindow\n : undefined;\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@earendil-works/pi-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(\n options: CreateAgentSessionOptions = {},\n): Promise<CreateAgentSessionResult> {\n const cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n const agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n let resourceLoader = options.resourceLoader;\n\n // Use provided or create AuthStorage and ModelRegistry. When a modelRegistry\n // is supplied (e.g. a workflow stage reusing one registry across model\n // fallback candidates), do NOT also build a fresh AuthStorage: its\n // constructor eagerly calls reload(), which acquires the auth.json file lock\n // and, under contention, can fail and leave an empty credential set. Reusing\n // the supplied registry's already-loaded auth avoids that race (issue #1431).\n const authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n const modelsPath = options.agentDir\n ? join(agentDir, \"models.json\")\n : undefined;\n const modelRegistry =\n options.modelRegistry ??\n ModelRegistry.create(options.authStorage ?? AuthStorage.create(authPath), modelsPath);\n\n const settingsManager =\n options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n const sessionManager =\n options.sessionManager ??\n SessionManager.create(cwd, getDefaultSessionDir(cwd, agentDir));\n\n if (!resourceLoader) {\n resourceLoader = new DefaultResourceLoader({\n cwd,\n agentDir,\n settingsManager,\n });\n await resourceLoader.reload();\n time(\"resourceLoader.reload\");\n }\n\n // Check if session has existing data to restore\n const existingSession = sessionManager.buildSessionContext();\n const hasExistingSession = existingSession.messages.length > 0;\n const hasThinkingEntry = sessionManager\n .getBranch()\n .some((entry) => entry.type === \"thinking_level_change\");\n\n let model = options.model;\n let modelFallbackMessage: string | undefined;\n\n // If session has data, try to restore model from it\n if (!model && hasExistingSession && existingSession.model) {\n const restoredModel = await resolveSavedModelReference(\n existingSession.model.provider,\n existingSession.model.modelId,\n modelRegistry,\n );\n if (restoredModel && modelRegistry.hasConfiguredAuth(restoredModel)) {\n model = restoredModel;\n }\n if (!model) {\n modelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n }\n }\n\n // If still no model, use findInitialModel (checks settings default, then provider defaults)\n if (!model) {\n const result = await findInitialModel({\n scopedModels: [],\n isContinuing: hasExistingSession,\n defaultProvider: settingsManager.getDefaultProvider(),\n defaultModelId: settingsManager.getDefaultModel(),\n defaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n modelRegistry,\n });\n model = result.model;\n if (!model) {\n modelFallbackMessage = formatNoModelsAvailableMessage();\n } else if (modelFallbackMessage) {\n modelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n }\n }\n\n let thinkingLevel = options.thinkingLevel;\n\n // If session has data, restore thinking level from it\n if (thinkingLevel === undefined && hasExistingSession) {\n thinkingLevel = hasThinkingEntry\n ? (existingSession.thinkingLevel as ThinkingLevel)\n : (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n }\n\n // Fall back to settings default\n if (thinkingLevel === undefined) {\n thinkingLevel =\n settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n }\n\n // Clamp to model capabilities\n if (!model) {\n thinkingLevel = \"off\";\n } else {\n thinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n }\n\n let selectedContextWindow: number | undefined;\n let contextWindowWarning: string | undefined;\n let contextWindowError: string | undefined;\n const explicitContextWindowSelection = options.contextWindow !== undefined;\n const incomingModelContextWindow =\n model && options.model ? getAlreadyAppliedContextWindow(model) : undefined;\n const sessionContextWindow = hasExistingSession ? existingSession.contextWindow : undefined;\n const modelSettingsContextWindow = model ? settingsManager.getDefaultContextWindowForModel(model.provider, model.id) : undefined;\n const globalSettingsContextWindow = settingsManager.getDefaultContextWindow();\n const contextWindowRequest:\n | { contextWindow: number; source: ContextWindowRequestSource }\n | undefined =\n options.contextWindow !== undefined\n ? { contextWindow: options.contextWindow, source: \"explicit\" }\n : incomingModelContextWindow !== undefined\n ? { contextWindow: incomingModelContextWindow, source: \"incoming-model\" }\n : sessionContextWindow !== undefined\n ? { contextWindow: sessionContextWindow, source: \"session\" }\n : modelSettingsContextWindow !== undefined\n ? { contextWindow: modelSettingsContextWindow, source: \"model-settings\" }\n : globalSettingsContextWindow !== undefined\n ? { contextWindow: globalSettingsContextWindow, source: \"global-settings\" }\n : undefined;\n if (model && contextWindowRequest !== undefined) {\n const selected = selectContextWindow(\n model,\n contextWindowRequest.contextWindow,\n COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS,\n );\n if (\"error\" in selected) {\n if (options.contextWindowStrict) {\n contextWindowError = selected.error;\n } else if (contextWindowRequest.source !== \"global-settings\") {\n contextWindowWarning = selected.error;\n }\n } else {\n model = selected.model;\n selectedContextWindow = selected.contextWindow;\n }\n }\n\n const allowedToolNames =\n options.tools ?? (options.noTools === \"all\" ? [] : undefined);\n const initialActiveToolNames: string[] = options.tools\n ? [...options.tools]\n : options.noTools\n ? []\n : [...defaultToolNames];\n\n let agent: Agent;\n\n let lastConvertedLlmMessages: Message[] | undefined;\n\n // Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n const convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n const converted = convertToLlm(messages);\n // Check setting dynamically so mid-session changes take effect\n if (!settingsManager.getBlockImages()) {\n lastConvertedLlmMessages = converted;\n return converted;\n }\n // Filter out ImageContent from all messages, replacing with text placeholder\n const filtered = converted.map((msg) => {\n if (msg.role === \"user\" || msg.role === \"toolResult\") {\n const content = msg.content;\n if (Array.isArray(content)) {\n const hasImages = content.some((c) => c.type === \"image\");\n if (hasImages) {\n const filteredContent = content\n .map((c) =>\n c.type === \"image\"\n ? {\n type: \"text\" as const,\n text: \"Image reading is disabled.\",\n }\n : c,\n )\n .filter(\n (c, i, arr) =>\n // Dedupe consecutive \"Image reading is disabled.\" texts\n !(\n c.type === \"text\" &&\n c.text === \"Image reading is disabled.\" &&\n i > 0 &&\n arr[i - 1].type === \"text\" &&\n (arr[i - 1] as { type: \"text\"; text: string }).text ===\n \"Image reading is disabled.\"\n ),\n );\n return { ...msg, content: filteredContent };\n }\n }\n }\n return msg;\n });\n lastConvertedLlmMessages = filtered;\n return filtered;\n };\n\n const extensionRunnerRef: { current?: ExtensionRunner } = {};\n const isCodexFastModeEnabled = (requestModel: Model<Api>): boolean =>\n shouldApplyCodexFastMode(\n requestModel,\n settingsManager.getCodexFastModeSettings(),\n options.orchestrationContext,\n );\n\n agent = new Agent({\n initialState: {\n systemPrompt: \"\",\n model,\n thinkingLevel,\n tools: [],\n },\n convertToLlm: convertToLlmWithBlockImages,\n streamFn: async (model, context, streamOptions) => {\n const auth = await modelRegistry.getApiKeyAndHeaders(model);\n if (!auth.ok) {\n throw new Error(auth.error);\n }\n const providerRetrySettings = settingsManager.getProviderRetrySettings();\n const httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n // SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n // Use max int32 to effectively disable the timeout.\n const effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n const timeoutMs = streamOptions?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n const websocketConnectTimeoutMs =\n streamOptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n const attributionHeaders = mergeProviderAttributionHeaders(\n model,\n settingsManager,\n streamOptions?.sessionId,\n auth.headers,\n streamOptions?.headers,\n );\n const fastModeEnabled = isCodexFastModeEnabled(model);\n const codexFastModeStreamOptions = withCodexFastModeStreamOptions(\n {\n ...streamOptions,\n apiKey: auth.apiKey,\n timeoutMs,\n websocketConnectTimeoutMs,\n maxRetries: streamOptions?.maxRetries ?? providerRetrySettings.maxRetries,\n maxRetryDelayMs:\n streamOptions?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n headers: attributionHeaders,\n },\n fastModeEnabled,\n );\n if (modelRegistry.hasRegisteredStreamSimpleForApi(model.api)) {\n return streamSimple(model, context, codexFastModeStreamOptions);\n }\n return streamWithCodexFastMode(model, context, codexFastModeStreamOptions);\n },\n onPayload: async (payload, model) => {\n const fastModeEnabled = isCodexFastModeEnabled(model);\n const guardedPayload = withCodexFastModePayload(payload, fastModeEnabled);\n const sourceMessages = lastConvertedLlmMessages;\n const replayGuardedPayload = sourceMessages\n ? restoreAnthropicReplayThinkingBlocks(guardedPayload, sourceMessages, model)\n : guardedPayload;\n const runner = extensionRunnerRef.current;\n let finalPayload: unknown;\n if (!runner?.hasHandlers(\"before_provider_request\")) {\n finalPayload = replayGuardedPayload;\n } else {\n const extensionPayload = await runner.emitBeforeProviderRequest(\n replayGuardedPayload,\n );\n finalPayload = sourceMessages\n ? restoreAnthropicReplayThinkingBlocks(extensionPayload, sourceMessages, model)\n : extensionPayload;\n }\n // GitHub Copilot Gemini models are served through CAPI, which translates\n // the OpenAI request into Google GenAI and rejects tool schemas whose\n // `anyOf`/`oneOf` wraps a complex object (HTTP 400 invalid request body).\n // Sanitize tool JSON Schemas into Gemini's supported subset. No-op for\n // every other provider/model, and runs last so it also covers tools\n // injected by `before_provider_request` extensions.\n const schemaSanitized = sanitizeCopilotGeminiPayload(finalPayload, model);\n // Reconstruct flattened tool-call arguments on replayed assistant\n // messages (for example `edits[0].newText` -> `edits: [{ newText }]`).\n // CAPI parses replayed arguments straight into Gemini's FunctionCall,\n // and a flattened/malformed prior call ends the next turn with\n // `finish_reason: \"error\"`. No-op for well-formed args / other models.\n const replayArgsNormalized = normalizeCopilotGeminiReplayToolArguments(schemaSanitized, model);\n // CAPI carries Gemini thought signatures in a `reasoning_opaque` field it\n // reads back off the assistant message on replay. Convert the\n // `reasoning_details` the client re-emits (captured inbound by the SSE\n // interceptor) into that field so multi-turn tool use keeps its thought\n // signature instead of dying on an empty completion. No-op otherwise.\n return restoreCopilotGeminiReasoningOpaque(replayArgsNormalized, model);\n },\n onResponse: async (response, _model) => {\n const runner = extensionRunnerRef.current;\n if (!runner?.hasHandlers(\"after_provider_response\")) {\n return;\n }\n await runner.emit({\n type: \"after_provider_response\",\n status: response.status,\n headers: response.headers,\n });\n },\n sessionId: sessionManager.getSessionId(),\n transformContext: async (messages) => {\n const runner = extensionRunnerRef.current;\n if (!runner) return messages;\n return runner.emitContext(messages);\n },\n steeringMode: settingsManager.getSteeringMode(),\n followUpMode: settingsManager.getFollowUpMode(),\n transport: settingsManager.getTransport(),\n thinkingBudgets: settingsManager.getThinkingBudgets(),\n maxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n });\n\n // Restore messages if session has existing data\n if (hasExistingSession) {\n agent.state.messages = existingSession.messages;\n const transcriptContextWindow = model\n ? (existingSession.contextWindow ?? getModelDefaultContextWindow(model))\n : undefined;\n if (\n selectedContextWindow !== undefined &&\n (explicitContextWindowSelection || selectedContextWindow !== transcriptContextWindow)\n ) {\n sessionManager.appendContextWindowChange(selectedContextWindow);\n }\n if (!hasThinkingEntry) {\n sessionManager.appendThinkingLevelChange(thinkingLevel);\n }\n } else {\n // Save initial model and thinking level for new sessions so they can be restored on resume\n if (model) {\n sessionManager.appendModelChange(model.provider, model.id);\n if (\n selectedContextWindow !== undefined &&\n (explicitContextWindowSelection || selectedContextWindow !== getModelDefaultContextWindow(model))\n ) {\n sessionManager.appendContextWindowChange(selectedContextWindow);\n }\n }\n sessionManager.appendThinkingLevelChange(thinkingLevel);\n }\n\n const session = new AgentSession({\n agent,\n sessionManager,\n settingsManager,\n cwd,\n scopedModels: options.scopedModels,\n resourceLoader,\n customTools: options.customTools,\n modelRegistry,\n initialActiveToolNames,\n allowedToolNames,\n excludedToolNames: options.excludedTools,\n extensionRunnerRef,\n sessionStartEvent: options.sessionStartEvent,\n orchestrationContext: options.orchestrationContext,\n });\n const extensionsResult = resourceLoader.getExtensions();\n\n return {\n session,\n extensionsResult,\n modelFallbackMessage,\n contextWindowWarning,\n contextWindowError,\n };\n}\n"]}
|