@ordewell/core 0.4.6 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { h as RunnerId, c as PlanStatus, L as LegacyPlanState, d as ResearchProgress, a as DiscoveredModel, T as Task, R as ResearchLogEntry, C as ConversationMessage, n as TaskSnapshot, Q as QueuedMessage, A as ActiveTaskSession, g as ResearchToolType, u as Verdict, e as ResearchStep, b as PlanState } from './Task-1NwmUImI.js';
2
2
  export { D as DiscoveredMode, M as Message, P as PlanModificationWarnings, f as ResearchStepOutcome, S as StreamEvent, i as StreamStepEvent, j as StreamThinkingEvent, k as TaskMode, l as TaskModelAssignment, m as TaskOutputSummary, o as TaskStatus, p as TaskType, q as ThinkingBlock, U as UserPromptEntry, r as UserStep, V as ValidationCheck, s as ValidationContext, t as ValidationResult, v as VerificationCheck, w as addTaskToPlan, x as createEmptyPlan, y as createTask, z as emptyWarnings, B as flattenTasks, E as migrateLegacyPlan, F as migratePlanState, G as migrateTask, H as removeTaskFromPlan, I as renumberTasks, J as updateTaskInPlan, K as validateModifiedPlan, N as warningsText } from './Task-1NwmUImI.js';
3
- import { n as IFileSystem, I as IApproval, R as ReadFileOpts, T as ToolOutcome, k as GrepOptions, j as GlobOptions, i as FindSymbolOptions, f as ApprovalRequest, m as IConfig, A as AiProvider, y as ProviderModelLists, c as ApprovalMode, q as ITerminalSession, p as ITerminalRunner, J as RunnerRegistry, s as OrchestratorOption, b as ApprovalKind, g as ApprovalSource, E as RunnerInvocation, o as IPluginStore, H as RunnerPluginManifest, B as ResolveContext } from './ITerminalRunner-Cpyzyrnl.js';
4
- export { a as AllProviderModels, d as ApprovalPolicy, e as ApprovalPolicyOptions, C as CatalogModel, D as DENY_ALL, h as DiscoveryCommand, F as FetchAllProviderModelsOptions, G as GREP_DEFAULT_HEAD_LIMIT, l as GrepOutputMode, M as ModelCatalog, r as ModelShortcut, O as ORCHESTRATOR_SHORTCUTS, P as PluginEntry, t as PluginFeatures, u as PluginMode, v as PluginModelDiscovery, w as PluginRunnerDef, x as ProviderCredentialSource, z as ProviderModelsResult, S as SEARCH_EXCLUSIONS, K as collectProviderCredentials, L as enabledRunners, N as fetchAllProviderModels, Q as knownModelId, U as resolveModelShortcut, V as resolveProvider, W as toOrchestratorOptions } from './ITerminalRunner-Cpyzyrnl.js';
3
+ import { n as IFileSystem, I as IApproval, R as ReadFileOpts, T as ToolOutcome, k as GrepOptions, j as GlobOptions, i as FindSymbolOptions, f as ApprovalRequest, m as IConfig, A as AiProvider, z as ProviderModelLists, c as ApprovalMode, q as ITerminalSession, p as ITerminalRunner, K as RunnerRegistry, s as OrchestratorOption, b as ApprovalKind, g as ApprovalSource, H as RunnerInvocation, o as IPluginStore, J as RunnerPluginManifest, E as ResolveContext } from './ITerminalRunner-CbE6gKLI.js';
4
+ export { a as AllProviderModels, d as ApprovalPolicy, e as ApprovalPolicyOptions, C as CatalogModel, D as DENY_ALL, h as DiscoveryCommand, F as FetchAllProviderModelsOptions, G as GREP_DEFAULT_HEAD_LIMIT, l as GrepOutputMode, M as ModelCatalog, r as ModelShortcut, O as ORCHESTRATOR_SHORTCUTS, P as PluginCloneFn, t as PluginEntry, u as PluginFeatures, v as PluginMode, w as PluginModelDiscovery, x as PluginRunnerDef, y as ProviderCredentialSource, B as ProviderModelsResult, S as SEARCH_EXCLUSIONS, L as collectProviderCredentials, N as enabledRunners, Q as fetchAllProviderModels, U as isReservedRunnerName, V as knownModelId, W as resolveModelShortcut, X as resolveProvider, Y as toOrchestratorOptions } from './ITerminalRunner-CbE6gKLI.js';
5
5
  import { R as RunnerModeInfo, b as PlanParseError } from './parsing-RjN9JbyG.js';
6
6
  export { M as ManifestLookup, P as PLAN_ENVELOPE_KEY, a as PartialPlanTask, T as TASK_OPS_ENVELOPE_KEY, c as buildModeGuide, d as checkDepsResolve, e as checkImmutableLog, f as checkInProgress, g as checkNoCycles, h as checkUniqueIds, i as escapeControlCharsInStrings, j as extractJsonObject, k as extractObjectWithBalance, l as extractObjectsWithKey, m as filteredBuildModes, n as looksLikePlanAttempt, p as parsePartialPlan, o as parsePlanJson, r as resolveDefaultMode, q as resolveTaskMode, s as runnerModesFrom, t as stripModelNoise, u as stripTrailingCommas, v as validatePlanModification } from './parsing-RjN9JbyG.js';
7
7
  import { T as TaskOp } from './plan-utils-Cgc0cCH1.js';
@@ -121,12 +121,22 @@ declare function researchShellWarning(shell: ResearchShell): string | null;
121
121
  * The old substring denylist both over-matched (`ls docs/removed` tripped `rm`)
122
122
  * and under-matched (`$(rm -rf /)` was invisible once chaining was allowed).
123
123
  *
124
+ * A segment is classified by the command that will actually execute, not by the
125
+ * name at the front of it: wrappers are unwrapped first, recursively, so
126
+ * `timeout 10 env nice rm -rf x` is an `rm`. See {@link WRAPPER_FAMILY}.
127
+ *
124
128
  * The lexer is dialect-aware, because the interpreter that will actually run
125
129
  * the command decides what the tokens are, and getting that wrong is not a
126
130
  * cosmetic error here — it is the difference between classifying what runs and
127
131
  * classifying something else. See {@link Dialect}.
128
132
  */
129
133
 
134
+ /**
135
+ * `env` is deliberately absent. Given a command it is a wrapper, classified by
136
+ * what it actually runs (see {@link WRAPPER_FAMILY}); given none it prints the
137
+ * whole process environment — provider credentials included — into the research
138
+ * log, which is a disclosure the developer should get to see coming.
139
+ */
130
140
  declare const AUTO_COMMANDS: string[];
131
141
  declare const GIT_READONLY_SUBCOMMANDS: string[];
132
142
  /**
@@ -1866,6 +1876,72 @@ declare function configuredProviders(config: {
1866
1876
  openaiCompatibleBaseUrl: string;
1867
1877
  }): AiProvider[];
1868
1878
 
1879
+ /**
1880
+ * Which environment variables a settings update may write.
1881
+ *
1882
+ * The daemon's settings update sets `process.env` on the daemon itself, and
1883
+ * every runner it spawns inherits that environment. The admission rule used to
1884
+ * be "any upper-case key", which admitted the variables that make the runtime
1885
+ * load arbitrary modules, preload libraries into every child, redirect the
1886
+ * executable search path, move where settings are persisted, and turn approval
1887
+ * prompting off — so a single settings write was arbitrary code execution.
1888
+ *
1889
+ * The rule is now an allowlist: the provider credential and base-URL families,
1890
+ * derived from the provider registry so a new provider needs no second edit,
1891
+ * plus a small set of Ordewell's own configuration variables. Everything else
1892
+ * is refused and named back to the caller.
1893
+ */
1894
+ /**
1895
+ * Ordewell's own settable configuration. Deliberately short: a variable earns a
1896
+ * place here only when a surface has a reason to change it on a live daemon.
1897
+ *
1898
+ * `ORDEWELL_AUTONOMOUS_MODE` is conspicuously absent and is in
1899
+ * `SETTINGS_ENV_REFUSED` instead — see that list.
1900
+ */
1901
+ declare const ORDEWELL_SETTABLE_ENV: readonly string[];
1902
+ /**
1903
+ * Refused by name, not merely left out of the allowlist.
1904
+ *
1905
+ * Omission alone would already refuse these, so this list buys no admission
1906
+ * behaviour — it buys a place where the reason is written down, and a failing
1907
+ * test the moment someone widens the allowlist over one of them. Each entry is
1908
+ * a known escalation from "can change a setting" to "can run code as the user":
1909
+ *
1910
+ * - The approval-mode and pre-approved-scope variables switch the consent gate
1911
+ * off, so every later command runs unprompted.
1912
+ * - The settings-path override is honoured by the settings service, which
1913
+ * creates directories recursively when persisting — admitting it turns the
1914
+ * same write into an arbitrary-path file write.
1915
+ * - The runtime-option and dynamic-loader variables load attacker-chosen
1916
+ * modules or shared objects into the daemon and into every process it spawns.
1917
+ * - The executable-path variables redirect which binary a runner's command name
1918
+ * resolves to.
1919
+ */
1920
+ declare const SETTINGS_ENV_REFUSED: readonly string[];
1921
+ /**
1922
+ * The credential and endpoint keys alone. A write to one of these is what
1923
+ * invalidates a model catalog — picking a planner, a model or an effort level
1924
+ * changes nothing a catalog contains.
1925
+ */
1926
+ declare const PROVIDER_CREDENTIAL_ENV: ReadonlySet<string>;
1927
+ /**
1928
+ * Every key a settings update may write. Built once at module load; the refused
1929
+ * names are subtracted last so a provider registration can never smuggle one in.
1930
+ */
1931
+ declare const SETTINGS_ENV_ALLOWLIST: ReadonlySet<string>;
1932
+ interface EnvAdmission {
1933
+ /** Keys that may be written, with their string values. */
1934
+ accepted: Record<string, string>;
1935
+ /** Keys the caller sent that were refused, in the order they arrived. */
1936
+ rejected: string[];
1937
+ }
1938
+ /**
1939
+ * Splits a settings update's `env` object into what may be written and what was
1940
+ * refused. A non-string value for an allowlisted key is refused rather than
1941
+ * dropped, so the caller never sees silence for a write that did not happen.
1942
+ */
1943
+ declare function admitSettingsEnv(env: Record<string, unknown>): EnvAdmission;
1944
+
1869
1945
  interface SpawnSpec {
1870
1946
  command: string;
1871
1947
  args: string[];
@@ -3037,6 +3113,93 @@ interface WorkspaceCheckDeps {
3037
3113
  }
3038
3114
  /** Throws {@link WorkspaceNotFoundError} unless `workspace` names an existing directory. */
3039
3115
  declare function assertWorkspaceExists(workspace: string, deps?: WorkspaceCheckDeps): void;
3116
+ /**
3117
+ * A workspace whose resolved path carries none of the markers below. Thrown
3118
+ * instead of admitting the directory as-is: without this, a request pointed
3119
+ * at the filesystem root or an arbitrary system directory becomes the
3120
+ * confinement boundary for every read, search and permitted command the
3121
+ * planner runs, by definition. A denylist of "dangerous" roots was rejected
3122
+ * for the same reason as the other denylists in this project's remediation —
3123
+ * it would still admit unlisted system directories.
3124
+ */
3125
+ declare class WorkspaceNotAProjectError extends Error {
3126
+ readonly workspace: string;
3127
+ constructor(workspace: string);
3128
+ }
3129
+ interface WorkspaceProjectCheckDeps {
3130
+ /** Resolves symlinks/`..` segments to a canonical absolute path. Defaults to `fs.realpathSync`. */
3131
+ realpath?: (candidate: string) => string;
3132
+ /** True when `candidate` names an existing filesystem entry. Defaults to `fs.existsSync`. */
3133
+ exists?: (candidate: string) => boolean;
3134
+ }
3135
+ /**
3136
+ * Throws {@link WorkspaceNotAProjectError} unless `workspace` resolves to a
3137
+ * directory carrying at least one project marker. Resolves the path first —
3138
+ * via `realpath`, not string inspection — so a request that traverses
3139
+ * through symlinks or `..` segments is judged on where it actually lands,
3140
+ * not on the path as written.
3141
+ */
3142
+ declare function assertWorkspaceIsProject(workspace: string, deps?: WorkspaceProjectCheckDeps): void;
3143
+
3144
+ /**
3145
+ * The daemon's bearer token: minted at startup, written beside the per-port
3146
+ * process-id file, read by the CLI.
3147
+ *
3148
+ * Header validation defends against browsers and nothing else. This is what
3149
+ * stops another process running as the same user — an install script in the
3150
+ * very repository the planner was pointed at, say — from driving the daemon
3151
+ * just because it can see the port.
3152
+ *
3153
+ * Both ends of the wire live here so the carrier encodings cannot drift: the
3154
+ * daemon extracts with the same functions the CLI attaches with.
3155
+ */
3156
+ /**
3157
+ * The subprotocol the token rides on during the WebSocket upgrade. A query
3158
+ * parameter would land in access logs and in `ps`; a subprotocol travels in a
3159
+ * request header like the HTTP `Authorization` it stands in for.
3160
+ */
3161
+ declare const DAEMON_TOKEN_SUBPROTOCOL_PREFIX = "ordewell.token.";
3162
+ /**
3163
+ * Offered alongside the token subprotocol, and the one the server selects, so
3164
+ * the 101 response never echoes the secret back.
3165
+ */
3166
+ declare const DAEMON_SUBPROTOCOL = "ordewell.v1";
3167
+ /**
3168
+ * One token file per port, with no default-port special case: unlike the
3169
+ * process-id file there is no legacy name to preserve, and naming every file
3170
+ * after its port is what stops a second daemon clobbering the first's token.
3171
+ */
3172
+ declare function daemonTokenPath(port: number): string;
3173
+ /**
3174
+ * Mint this daemon's token and hand it off through the filesystem.
3175
+ *
3176
+ * Unlink-then-create-exclusively rather than a plain write: `mode` is ignored
3177
+ * when the file already exists, so writing over a pre-created file would leave
3178
+ * the token at whatever permissions that file already had, and an existing
3179
+ * symlink would carry the write somewhere else entirely.
3180
+ */
3181
+ declare function mintDaemonToken(port: number): {
3182
+ token: string;
3183
+ file: string;
3184
+ };
3185
+ /** The token a client should present to the daemon on `port`, if one has been minted. */
3186
+ declare function readDaemonToken(port: number): string | undefined;
3187
+ /** Best-effort cleanup on shutdown, so a dead daemon leaves no usable-looking token behind. */
3188
+ declare function clearDaemonToken(port: number): void;
3189
+ /** The `Authorization` header value for HTTP requests. */
3190
+ declare function bearerHeaderValue(token: string): string;
3191
+ /** What a client offers on the upgrade: the real subprotocol first, the token second. */
3192
+ declare function tokenSubprotocols(token: string): string[];
3193
+ interface TokenCarriers {
3194
+ /** `Authorization: Bearer <token>` — the HTTP carrier. */
3195
+ authorization?: string | null;
3196
+ /** `Sec-WebSocket-Protocol` — the upgrade carrier. */
3197
+ secWebSocketProtocol?: string | null;
3198
+ }
3199
+ /** Pull the token out of whichever carrier it arrived on. */
3200
+ declare function extractPresentedToken(carriers: TokenCarriers): string | undefined;
3201
+ /** Constant-time comparison, so a wrong token leaks no information about the right one. */
3202
+ declare function tokensMatch(presented: string | undefined, expected: string): boolean;
3040
3203
 
3041
3204
  interface KillTreeDeps {
3042
3205
  platform?: NodeJS.Platform;
@@ -3137,6 +3300,7 @@ declare function clipboardCopyCommand(hasBin?: HasBinFn, platform?: NodeJS.Platf
3137
3300
  declare class FsPluginStore implements IPluginStore {
3138
3301
  getUserPluginsDir(): string;
3139
3302
  listUserPluginDirs(): string[];
3303
+ listDir(dir: string): string[];
3140
3304
  loadManifest(pluginDir: string): RunnerPluginManifest | null;
3141
3305
  copyDir(sourceDir: string, destDir: string): void;
3142
3306
  removeDir(dir: string): void;
@@ -3147,6 +3311,56 @@ declare class FsPluginStore implements IPluginStore {
3147
3311
  exists(path: string): boolean;
3148
3312
  }
3149
3313
 
3314
+ /**
3315
+ * Shape check for a manifest read off disk or out of a cloned repository. The
3316
+ * name is constrained here rather than at each install route, so every store
3317
+ * implementation gets the same guarantee that a manifest name is a plain
3318
+ * segment and never a traversal sequence.
3319
+ */
3320
+ declare function isValidManifest(obj: unknown): obj is RunnerPluginManifest;
3321
+
3322
+ /**
3323
+ * A plugin name is a single plain path segment: alphanumeric at both ends,
3324
+ * dots/dashes/underscores in between. This is what keeps a manifest name from
3325
+ * being a traversal sequence (`..`, `../../etc`), an absolute path, or a
3326
+ * dash-prefixed string that a downstream tool reads as a flag.
3327
+ */
3328
+ declare const PLUGIN_NAME_PATTERN: RegExp;
3329
+ declare function isPlainPluginName(name: unknown): name is string;
3330
+ declare function assertPlainPluginName(name: unknown): asserts name is string;
3331
+ /**
3332
+ * Resolve where a plugin of this name installs, and assert the result is still
3333
+ * a direct child of the plugins directory. Validation and use share this one
3334
+ * call so they cannot disagree about the path being checked.
3335
+ */
3336
+ declare function resolvePluginInstallDir(pluginsDir: string, name: unknown): string;
3337
+
3338
+ /** Hosts a plugin may be cloned from. Exact hostname match, case-insensitive. */
3339
+ declare const ALLOWED_PLUGIN_HOSTS: readonly string[];
3340
+ type PluginSource = {
3341
+ kind: 'git';
3342
+ url: string;
3343
+ } | {
3344
+ kind: 'path';
3345
+ path: string;
3346
+ };
3347
+ /**
3348
+ * Validate a plugin repository URL. Requires an ordinary HTTPS repository on an
3349
+ * allowed host, which is also what rejects git's transport helpers (`ext::`,
3350
+ * `git://`, `ssh://`, `file://`) — they never reach the clone because they are
3351
+ * not the https scheme.
3352
+ *
3353
+ * Returns the parsed URL so callers clone the normalised form they validated.
3354
+ */
3355
+ declare function assertInstallablePluginUrl(url: unknown): URL;
3356
+ /**
3357
+ * Decide whether an install source names a remote repository or a local
3358
+ * directory. Anything that carries a scheme or looks like an scp-style remote
3359
+ * goes down the URL route so it is rejected as a bad URL rather than silently
3360
+ * retried as a (nonexistent) directory.
3361
+ */
3362
+ declare function classifyPluginSource(source: string): PluginSource;
3363
+
3150
3364
  declare function resolveArgs(manifest: RunnerPluginManifest, ctx: ResolveContext): RunnerInvocation;
3151
3365
 
3152
3366
  declare const CLAUDE_CODE_MANIFEST: RunnerPluginManifest;
@@ -3178,6 +3392,8 @@ declare function getLatestSession(baseDir?: string, logger?: ILogger): {
3178
3392
  } | null;
3179
3393
  declare function deleteSession(sessionId: string, baseDir?: string, logger?: ILogger): boolean;
3180
3394
 
3395
+ declare function mintSessionId(): string;
3396
+
3181
3397
  interface PrdBlock {
3182
3398
  slug: string;
3183
3399
  markdown: string;
@@ -3244,4 +3460,4 @@ declare class PlannerModelMemory {
3244
3460
  recall(provider: string, catalog: PlannerModelCandidate[]): PlannerModelRecall;
3245
3461
  }
3246
3462
 
3247
- export { ALL_PROVIDERS, AUTO_COMMANDS, AbstractRunner, AbstractTerminalSession, ActiveTaskSession, type AgentAdapter, type AgentAdapterFactory, type AgentEvent, type AgentProcessDeps, type AgentStartOptions, AiProvider, ApprovalKind, ApprovalMode, ApprovalRequest, ApprovalSource, BaseAiService, BaseConfig, BaseFileSystem, CLAUDE_CODE_MANIFEST, CLI_PROVIDERS, CMD_EXE_MAX_COMMAND_LINE, CORE_PLANNER_PROMPT, type CappedRows, type CheckpointListener, ClaudeCodeAdapter, CliAgentAiService, type CliAgentAiServiceDeps, CodexAdapter, type CommandClassification, CommandLineTooLongError, type CommandTier, type ComposeOptions, ConsoleLogger, ContextCollector, ConversationMessage, type ConversationRequest, type ConversationTurn, DiscoveredModel, EmbeddedNewlineError, EnvConfig, type ExecFileFn, type ExecImpl, ExecutableNotFoundError, FindSymbolOptions, FsPluginStore, GIT_READONLY_SUBCOMMANDS, GeminiService, GlobOptions, type GrepInvocation, GrepOptions, type HasBinFn, HeadlessRunner, type HeadlessRunnerDeps, HeadlessSession, type IAiService, IApproval, IConfig, IFileSystem, type ILogger, type INotification, IPluginStore, ITerminalRunner, ITerminalSession, JSON_REPAIR_INSTRUCTION, type KillTreeDeps, type LaunchDeps, type LaunchPlan, LegacyPlanState, LineBuffer, type MappedTool, ModelResolver, type ModelResolverDeps, type ModifyPlanRequest, type NotificationAction, OPENCODE_MANIFEST, OpenAiService, OpenCodeAdapter, type OrchestratorObserver, OrchestratorOption, PROVIDER_DETECT_PRIORITY, PROVIDER_LABEL, PROVIDER_PRIORITY, PROVIDER_SHORT_LABEL, type PendingApproval, PendingApprovals, type PendingApprovalsOptions, PlanEditError, PlanParseError, type PlanRequest, PlanState, PlanStatus, PlanStore, Planner, type PlannerModelCandidate, type PlannerModelChoice, PlannerModelMemory, type PlannerModelRecall, type PlannerModelStore, type PlannerReplyClassification, type PlannerRuntimeToggles, type PrdBlock, type PreparedLaunch, type PriorOutput, type ProbeFn, ProviderModelLists, type ProviderRegistration, QueuedMessage, REFUSED_COMMANDS, ReadFileOpts, type RepairLoopOpts, type RepairVerdict, type ResearchChat, ResearchLogEntry, ResearchProgress, type ResearchShell, type ResearchShellDeps, ResearchStep, ResearchToolType, type ResearchTurn, ResolveContext, type RunnerCatalog, RunnerId, RunnerInstallation, RunnerInvocation, type RunnerMode, RunnerModeInfo, RunnerPluginManifest, RunnerRegistry, type RunnerSpawnOptions, STATE_DIR, STOPPED_TOOL_RESULT, SYMBOL_LANGUAGES, type SerializedPlan, type SerializedTask, type SerializedTaskStatus, Session, type SessionBroadcaster, type SessionData, type SessionDeps, type SessionMessage, type SessionMeta, type SessionPlanner, type SessionRuntimeSettings, SettingsService, type ShellDialect, type SpawnSpec, StdioAgentAdapter, TRUNCATED_PLAN_REPAIR_INSTRUCTION, Task, TaskOp, TaskOrchestrator, TaskSnapshot, TmuxRunner, type TmuxRunnerDeps, type ToolCall, ToolOutcome, type ToolResult, type UserSettings, Verdict, VerdictEngine, type VerdictListener, WINDOWS_MAX_COMMAND_LINE, type WorkspaceCheckDeps, WorkspaceNotFoundError, applyHeadLimit, assertWorkspaceExists, augmentPromptWithPriorOutputs, augmentedPath, buildConversationSystemPrompt, buildFallbackGrepArgs, buildGlobArgs, buildGrepArgs, buildMergePrompt, buildModifyDuringExecutionPrompt, buildModifyPlanPrompt, buildPlanWithResults, buildResearchPrompt, buildResearchToolsPrompt, buildRunnerInvocation, buildShellInvocation, buildSplitPrompt, buildSubagentSystemPrompt, clampThinkingEffort, classifyCommand, classifyPlannerReply, clearAugmentedPathCache, clearResearchShellCache, clearState, clipboardCopyCommand, coerceAssignments, collectDirectDependencyOutputs, composeAugmentedPrompt, configuredProviders, createAiService, defaultLogger, definitionPattern, deleteSession, discoverGeminiModels, effectiveAllowlist, ensureDir, executionLogBlock, executionSummary, extractPrdBlock, filterFallbackByAnchoredInclude, filterModelsForPrompt, formatSearchOutput, generatePlanWithRepair, getLatestSession, getProviderMeta, getSettingsPath, getStateDir, grantScopeFor, hasTmux, includeGlobFor, isCliProvider, isExecutableResolved, isOpenAiProvider, killTree, languageForId, listSessions, loadSession, loadSessionPlanState, loadState, mapAgentTool, modelContextBlock, modifyValidationFeedback, normalizeAgentArgs, normalizeGeminiModel, pendingEditRulesBlock, planDirectLaunch, planShellLaunch, posixShellQuote, prefixModelId, providerForRunner, reEmitPlanPrompt, reEmitTaskOpsPrompt, referencePattern, renderPlanMap, renderPriorOutputs, repairLoop, researchShellWarning, researchToolsPath, resolveArgs, resolveProviderFromPrefix, resolveResearchShell, resolveWithin, retargetTaskRunner, runnerAssignment, runnerForProvider, sanitizeSlug, savePrdMarkdown, saveSession, saveState, serializePlan, serializeTask, serializeTaskStatus, sessionRuntimeSettings, stateExists, stripAnsi, stripModelPrefix, summarizeOutput, taskOpsRejectedPrompt, tmuxSessionName, tmuxSocketName, tmuxWindowName, truncatedPlanReEmitPrompt, wellKnownBinDirs, windowsCommandLine, withPath, wrapWithPty };
3463
+ export { ALLOWED_PLUGIN_HOSTS, ALL_PROVIDERS, AUTO_COMMANDS, AbstractRunner, AbstractTerminalSession, ActiveTaskSession, type AgentAdapter, type AgentAdapterFactory, type AgentEvent, type AgentProcessDeps, type AgentStartOptions, AiProvider, ApprovalKind, ApprovalMode, ApprovalRequest, ApprovalSource, BaseAiService, BaseConfig, BaseFileSystem, CLAUDE_CODE_MANIFEST, CLI_PROVIDERS, CMD_EXE_MAX_COMMAND_LINE, CORE_PLANNER_PROMPT, type CappedRows, type CheckpointListener, ClaudeCodeAdapter, CliAgentAiService, type CliAgentAiServiceDeps, CodexAdapter, type CommandClassification, CommandLineTooLongError, type CommandTier, type ComposeOptions, ConsoleLogger, ContextCollector, ConversationMessage, type ConversationRequest, type ConversationTurn, DAEMON_SUBPROTOCOL, DAEMON_TOKEN_SUBPROTOCOL_PREFIX, DiscoveredModel, EmbeddedNewlineError, type EnvAdmission, EnvConfig, type ExecFileFn, type ExecImpl, ExecutableNotFoundError, FindSymbolOptions, FsPluginStore, GIT_READONLY_SUBCOMMANDS, GeminiService, GlobOptions, type GrepInvocation, GrepOptions, type HasBinFn, HeadlessRunner, type HeadlessRunnerDeps, HeadlessSession, type IAiService, IApproval, IConfig, IFileSystem, type ILogger, type INotification, IPluginStore, ITerminalRunner, ITerminalSession, JSON_REPAIR_INSTRUCTION, type KillTreeDeps, type LaunchDeps, type LaunchPlan, LegacyPlanState, LineBuffer, type MappedTool, ModelResolver, type ModelResolverDeps, type ModifyPlanRequest, type NotificationAction, OPENCODE_MANIFEST, ORDEWELL_SETTABLE_ENV, OpenAiService, OpenCodeAdapter, type OrchestratorObserver, OrchestratorOption, PLUGIN_NAME_PATTERN, PROVIDER_CREDENTIAL_ENV, PROVIDER_DETECT_PRIORITY, PROVIDER_LABEL, PROVIDER_PRIORITY, PROVIDER_SHORT_LABEL, type PendingApproval, PendingApprovals, type PendingApprovalsOptions, PlanEditError, PlanParseError, type PlanRequest, PlanState, PlanStatus, PlanStore, Planner, type PlannerModelCandidate, type PlannerModelChoice, PlannerModelMemory, type PlannerModelRecall, type PlannerModelStore, type PlannerReplyClassification, type PlannerRuntimeToggles, type PluginSource, type PrdBlock, type PreparedLaunch, type PriorOutput, type ProbeFn, ProviderModelLists, type ProviderRegistration, QueuedMessage, REFUSED_COMMANDS, ReadFileOpts, type RepairLoopOpts, type RepairVerdict, type ResearchChat, ResearchLogEntry, ResearchProgress, type ResearchShell, type ResearchShellDeps, ResearchStep, ResearchToolType, type ResearchTurn, ResolveContext, type RunnerCatalog, RunnerId, RunnerInstallation, RunnerInvocation, type RunnerMode, RunnerModeInfo, RunnerPluginManifest, RunnerRegistry, type RunnerSpawnOptions, SETTINGS_ENV_ALLOWLIST, SETTINGS_ENV_REFUSED, STATE_DIR, STOPPED_TOOL_RESULT, SYMBOL_LANGUAGES, type SerializedPlan, type SerializedTask, type SerializedTaskStatus, Session, type SessionBroadcaster, type SessionData, type SessionDeps, type SessionMessage, type SessionMeta, type SessionPlanner, type SessionRuntimeSettings, SettingsService, type ShellDialect, type SpawnSpec, StdioAgentAdapter, TRUNCATED_PLAN_REPAIR_INSTRUCTION, Task, TaskOp, TaskOrchestrator, TaskSnapshot, TmuxRunner, type TmuxRunnerDeps, type TokenCarriers, type ToolCall, ToolOutcome, type ToolResult, type UserSettings, Verdict, VerdictEngine, type VerdictListener, WINDOWS_MAX_COMMAND_LINE, type WorkspaceCheckDeps, WorkspaceNotAProjectError, WorkspaceNotFoundError, type WorkspaceProjectCheckDeps, admitSettingsEnv, applyHeadLimit, assertInstallablePluginUrl, assertPlainPluginName, assertWorkspaceExists, assertWorkspaceIsProject, augmentPromptWithPriorOutputs, augmentedPath, bearerHeaderValue, buildConversationSystemPrompt, buildFallbackGrepArgs, buildGlobArgs, buildGrepArgs, buildMergePrompt, buildModifyDuringExecutionPrompt, buildModifyPlanPrompt, buildPlanWithResults, buildResearchPrompt, buildResearchToolsPrompt, buildRunnerInvocation, buildShellInvocation, buildSplitPrompt, buildSubagentSystemPrompt, clampThinkingEffort, classifyCommand, classifyPlannerReply, classifyPluginSource, clearAugmentedPathCache, clearDaemonToken, clearResearchShellCache, clearState, clipboardCopyCommand, coerceAssignments, collectDirectDependencyOutputs, composeAugmentedPrompt, configuredProviders, createAiService, daemonTokenPath, defaultLogger, definitionPattern, deleteSession, discoverGeminiModels, effectiveAllowlist, ensureDir, executionLogBlock, executionSummary, extractPrdBlock, extractPresentedToken, filterFallbackByAnchoredInclude, filterModelsForPrompt, formatSearchOutput, generatePlanWithRepair, getLatestSession, getProviderMeta, getSettingsPath, getStateDir, grantScopeFor, hasTmux, includeGlobFor, isCliProvider, isExecutableResolved, isOpenAiProvider, isPlainPluginName, isValidManifest, killTree, languageForId, listSessions, loadSession, loadSessionPlanState, loadState, mapAgentTool, mintDaemonToken, mintSessionId, modelContextBlock, modifyValidationFeedback, normalizeAgentArgs, normalizeGeminiModel, pendingEditRulesBlock, planDirectLaunch, planShellLaunch, posixShellQuote, prefixModelId, providerForRunner, reEmitPlanPrompt, reEmitTaskOpsPrompt, readDaemonToken, referencePattern, renderPlanMap, renderPriorOutputs, repairLoop, researchShellWarning, researchToolsPath, resolveArgs, resolvePluginInstallDir, resolveProviderFromPrefix, resolveResearchShell, resolveWithin, retargetTaskRunner, runnerAssignment, runnerForProvider, sanitizeSlug, savePrdMarkdown, saveSession, saveState, serializePlan, serializeTask, serializeTaskStatus, sessionRuntimeSettings, stateExists, stripAnsi, stripModelPrefix, summarizeOutput, taskOpsRejectedPrompt, tmuxSessionName, tmuxSocketName, tmuxWindowName, tokenSubprotocols, tokensMatch, truncatedPlanReEmitPrompt, wellKnownBinDirs, windowsCommandLine, withPath, wrapWithPty };