@ordewell/core 0.10.1 → 0.10.3
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/{IFileSystem-Bj6fy1cG.d.mts → IFileSystem-B8Nkgg4e.d.mts} +1 -1
- package/dist/{IFileSystem-BCJBHFwB.d.ts → IFileSystem-DCd-rkeH.d.ts} +1 -1
- package/dist/{IRunner-hWAJC4hg.d.mts → IRunner-CXdYyIZo.d.mts} +213 -202
- package/dist/{IRunner-C7_SSpzG.d.ts → IRunner-QBdYcatb.d.ts} +213 -202
- package/dist/{ModeResolver-m1d8Cb-j.d.mts → ModeResolver-BOU90Nn-.d.ts} +1 -1
- package/dist/{ModeResolver-u5ZhRC8x.d.ts → ModeResolver-geqjKkLY.d.mts} +1 -1
- package/dist/{Task-CxwnCJLi.d.mts → Task-CRVIqSfy.d.mts} +58 -11
- package/dist/{Task-CxwnCJLi.d.ts → Task-CRVIqSfy.d.ts} +58 -11
- package/dist/{chunk-DNFT4SQG.mjs → chunk-645FALZX.mjs} +5 -5
- package/dist/chunk-645FALZX.mjs.map +1 -0
- package/dist/{chunk-DJAPDO6E.mjs → chunk-A57ITQE7.mjs} +41 -21
- package/dist/chunk-A57ITQE7.mjs.map +1 -0
- package/dist/{chunk-CH5IGWFS.mjs → chunk-FH6M5QZG.mjs} +168 -122
- package/dist/chunk-FH6M5QZG.mjs.map +1 -0
- package/dist/{chunk-2IIRSBEQ.mjs → chunk-SM6BV6XS.mjs} +20 -4
- package/dist/chunk-SM6BV6XS.mjs.map +1 -0
- package/dist/index.d.mts +454 -63
- package/dist/index.d.ts +454 -63
- package/dist/index.js +19575 -18631
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17991 -17137
- package/dist/index.mjs.map +1 -1
- package/dist/parsing.d.mts +2 -2
- package/dist/parsing.d.ts +2 -2
- package/dist/parsing.js +15 -14
- package/dist/parsing.js.map +1 -1
- package/dist/parsing.mjs +3 -3
- package/dist/{plan-utils-CKXdD1AD.d.mts → plan-utils-KU1Rse82.d.mts} +1322 -1146
- package/dist/{plan-utils-B6yJdpgi.d.ts → plan-utils-oC8bO4pN.d.ts} +1322 -1146
- package/dist/plan-utils.d.mts +4 -4
- package/dist/plan-utils.d.ts +4 -4
- package/dist/plan-utils.js +60 -0
- package/dist/plan-utils.js.map +1 -1
- package/dist/plan-utils.mjs +11 -3
- package/dist/testing.d.mts +3 -3
- package/dist/testing.d.ts +3 -3
- package/dist/testing.js +3 -1
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +4 -2
- package/dist/testing.mjs.map +1 -1
- package/package.json +5 -1
- package/dist/chunk-2IIRSBEQ.mjs.map +0 -1
- package/dist/chunk-CH5IGWFS.mjs.map +0 -1
- package/dist/chunk-DJAPDO6E.mjs.map +0 -1
- package/dist/chunk-DNFT4SQG.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChildProcess } from 'child_process';
|
|
2
|
-
import {
|
|
2
|
+
import { a2 as RunnerId, ar as UsageRecord, ad as SubagentOutcome, d as DiscoveredModel, am as TaskSkillSnapshot } from './Task-CRVIqSfy.mjs';
|
|
3
3
|
import { z } from 'zod/v4';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -463,6 +463,198 @@ interface IApproval {
|
|
|
463
463
|
/** Denies everything. The safe default when a surface wires no approval channel. */
|
|
464
464
|
declare const DENY_ALL: IApproval;
|
|
465
465
|
|
|
466
|
+
interface CatalogModel {
|
|
467
|
+
id: string;
|
|
468
|
+
name: string;
|
|
469
|
+
description: string;
|
|
470
|
+
pricing: {
|
|
471
|
+
prompt: string;
|
|
472
|
+
completion: string;
|
|
473
|
+
};
|
|
474
|
+
contextLength: number;
|
|
475
|
+
}
|
|
476
|
+
declare class ModelCatalog {
|
|
477
|
+
static fetchModels(apiKey: string, baseUrl?: string, fetchImpl?: typeof fetch): Promise<CatalogModel[]>;
|
|
478
|
+
/**
|
|
479
|
+
* Delete the on-disk catalog cache for a base URL so the next fetch re-runs.
|
|
480
|
+
* Used by the resolver's `invalidate()` in production (no injected fetch);
|
|
481
|
+
* best-effort — a missing file or unreadable dir is a no-op.
|
|
482
|
+
*/
|
|
483
|
+
static clearCache(baseUrl?: string): void;
|
|
484
|
+
private static readCache;
|
|
485
|
+
private static writeCache;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
interface ModelShortcut {
|
|
489
|
+
label: string;
|
|
490
|
+
id: string;
|
|
491
|
+
provider: string;
|
|
492
|
+
description: string;
|
|
493
|
+
pricing?: string;
|
|
494
|
+
}
|
|
495
|
+
declare const ORCHESTRATOR_SHORTCUTS: ModelShortcut[];
|
|
496
|
+
declare function resolveModelShortcut(input: string, shortcuts: ModelShortcut[]): string | null;
|
|
497
|
+
/**
|
|
498
|
+
* Resolves a value to a model id ONLY when it is in the supplied catalog
|
|
499
|
+
* option list — either directly or via a shortcut label. Free-typed, unknown,
|
|
500
|
+
* or not-currently-available values return null, so callers never store an id
|
|
501
|
+
* the user couldn't have selected from the list. Keeps model-setting list-only.
|
|
502
|
+
*/
|
|
503
|
+
declare function knownModelId(value: string, optionIds: string[], shortcuts: ModelShortcut[]): string | null;
|
|
504
|
+
|
|
505
|
+
type ProviderModelLists = Record<string, string[]>;
|
|
506
|
+
interface OrchestratorOption {
|
|
507
|
+
id: string;
|
|
508
|
+
label: string;
|
|
509
|
+
provider: string;
|
|
510
|
+
apiProvider: AiProvider;
|
|
511
|
+
description?: string;
|
|
512
|
+
pricing?: string;
|
|
513
|
+
/** The model's context window when the catalog reports one (#49). */
|
|
514
|
+
contextWindow?: number;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
interface FetchAllProviderModelsOptions {
|
|
518
|
+
apiKeys: Record<string, string>;
|
|
519
|
+
baseUrls: Record<string, string>;
|
|
520
|
+
fetchImpl?: typeof fetch;
|
|
521
|
+
}
|
|
522
|
+
type AllProviderModels = Record<string, CatalogModel[]>;
|
|
523
|
+
/**
|
|
524
|
+
* Result of a picker-catalog fetch fan-out: the per-provider model lists plus
|
|
525
|
+
* the per-provider failures. `errors` is keyed by provider id and holds the
|
|
526
|
+
* failure message for any provider whose catalog fetch rejected — the seam the
|
|
527
|
+
* surfaces (CLI, VS Code) use to flag "this configured provider didn't work"
|
|
528
|
+
* rather than silently showing a short list.
|
|
529
|
+
*/
|
|
530
|
+
interface ProviderModelsResult {
|
|
531
|
+
models: AllProviderModels;
|
|
532
|
+
errors: Record<string, string>;
|
|
533
|
+
}
|
|
534
|
+
/** The provider config fields the discovery fan-out needs. */
|
|
535
|
+
interface ProviderCredentialSource {
|
|
536
|
+
getProviderApiKey(provider: AiProvider): string;
|
|
537
|
+
getProviderBaseUrl(provider: AiProvider): string;
|
|
538
|
+
openaiCompatibleBaseUrl: string;
|
|
539
|
+
}
|
|
540
|
+
/**
|
|
541
|
+
* Collect the API keys and base URLs the picker fan-out should probe, applying
|
|
542
|
+
* the single "configured" policy shared by every surface (CLI + VS Code):
|
|
543
|
+
* - a preset is discovered only when it has an API key (OpenRouter included —
|
|
544
|
+
* its public catalog is not probed keyless, matching the product rule that
|
|
545
|
+
* only key-configured providers appear);
|
|
546
|
+
* - `openai_compatible` is discovered only when an explicit endpoint is set
|
|
547
|
+
* (keyless local servers like ollama / LM Studio).
|
|
548
|
+
* Base URLs are handed through only for providers that pass the gate, so the
|
|
549
|
+
* fan-out never touches an unconfigured third-party endpoint.
|
|
550
|
+
*/
|
|
551
|
+
declare function collectProviderCredentials(config: ProviderCredentialSource): {
|
|
552
|
+
apiKeys: Record<string, string>;
|
|
553
|
+
baseUrls: Record<string, string>;
|
|
554
|
+
};
|
|
555
|
+
declare function fetchAllProviderModels(opts: FetchAllProviderModelsOptions): Promise<ProviderModelsResult>;
|
|
556
|
+
declare function resolveProvider(modelId: string, providerModelLists: Record<string, string[]>): AiProvider | null;
|
|
557
|
+
declare function toOrchestratorOptions(providerModels: AllProviderModels, shortcuts: ModelShortcut[]): OrchestratorOption[];
|
|
558
|
+
|
|
559
|
+
/** An LLM vendor reached over HTTP. A closed set: each one has its own registration in `ProviderRegistry`. */
|
|
560
|
+
type AiProvider = 'google' | 'openrouter' | 'openai_compatible' | 'openai' | 'xai' | 'groq' | 'deepseek' | 'together' | 'mistral' | 'anthropic' | 'fireworks' | 'perplexity' | 'zhipu' | 'kimi' | 'cerebras' | 'deepinfra' | 'doubao' | 'qwen' | 'hunyuan' | 'baichuan' | 'minimax' | 'yi' | 'stepfun' | 'siliconflow' | 'cohere' | 'novita';
|
|
561
|
+
/**
|
|
562
|
+
* Who plans: an API vendor, or the id of a runner serving as a *harness
|
|
563
|
+
* planner* (ADR-0009) — a coding agent CLI already installed on the machine,
|
|
564
|
+
* driven as the planner over its own programmatic transport and authenticated
|
|
565
|
+
* by the subscription the user already holds. Runners sit in the provider axis
|
|
566
|
+
* deliberately: "what plans for me?" is one question, and it belongs in one
|
|
567
|
+
* setting. The runner half is open — any built-in runner with a connector can
|
|
568
|
+
* plan — so it is checked against the registry, not by the type:
|
|
569
|
+
* `isApiProvider` narrows to a vendor, `isCliProvider` tells a harness planner.
|
|
570
|
+
*/
|
|
571
|
+
type PlannerBackendId = AiProvider | RunnerId;
|
|
572
|
+
interface IConfig {
|
|
573
|
+
aiProvider: PlannerBackendId;
|
|
574
|
+
apiKey: string;
|
|
575
|
+
planningModel: string;
|
|
576
|
+
enabledRunners: string[];
|
|
577
|
+
maxParallelSessions: number;
|
|
578
|
+
researchEnabled: boolean;
|
|
579
|
+
researchMaxSteps: number;
|
|
580
|
+
researchMaxFileSize: number;
|
|
581
|
+
openAiBaseUrl: string;
|
|
582
|
+
openAiApiKey: string;
|
|
583
|
+
/** Provider keys + base URL the ModelResolver uses to fetch the picker catalogs. */
|
|
584
|
+
openrouterKey: string;
|
|
585
|
+
geminiKey: string;
|
|
586
|
+
geminiBaseUrl?: string;
|
|
587
|
+
/** Base URL + API key for a user-provided OpenAI-compatible endpoint (ollama, vLLM, LM Studio, etc.). */
|
|
588
|
+
openaiCompatibleBaseUrl: string;
|
|
589
|
+
openaiCompatibleApiKey: string;
|
|
590
|
+
orchestratorModel: string;
|
|
591
|
+
geminiModel: string;
|
|
592
|
+
/** Model for research subagents (issue #34); defaults to the (cheap) planner model. */
|
|
593
|
+
researchSubagentModel: string;
|
|
594
|
+
/**
|
|
595
|
+
* Thinking effort / model variant for a harness planner (ADR-0009), chosen
|
|
596
|
+
* from the agent's own discovered variants. Separate from the per-task
|
|
597
|
+
* efforts the plan carries — this one is the planner's own dial.
|
|
598
|
+
*/
|
|
599
|
+
plannerThinkingEffort?: string;
|
|
600
|
+
planMapEnabled: boolean;
|
|
601
|
+
autonomousMode: boolean;
|
|
602
|
+
/**
|
|
603
|
+
* Run each AI task in its own git worktree and integrate the results on a
|
|
604
|
+
* per-run branch (ADR-0013). Non-git workspaces fall back to the shared
|
|
605
|
+
* workspace root regardless of this flag.
|
|
606
|
+
*/
|
|
607
|
+
worktreeIsolation: boolean;
|
|
608
|
+
/**
|
|
609
|
+
* Shell command run in a fresh task worktree instead of symlinking ignored
|
|
610
|
+
* artifacts from the main worktree — for repos where sharing `node_modules`
|
|
611
|
+
* or a virtualenv is wrong.
|
|
612
|
+
*/
|
|
613
|
+
worktreeSetupCommand?: string;
|
|
614
|
+
/**
|
|
615
|
+
* Repositories of the repo group listed by hand, relative to the workspace
|
|
616
|
+
* (ADR-0014). When non-empty the group is exactly these, replacing the
|
|
617
|
+
* repositories auto-detected directly inside the folder; needed for ones
|
|
618
|
+
* deeper than that, which are never auto-detected.
|
|
619
|
+
*/
|
|
620
|
+
workspaceRepos: string[];
|
|
621
|
+
/**
|
|
622
|
+
* Extra paths or globs, relative to each repo root, linked from the real repo
|
|
623
|
+
* into its task worktree where they exist — gitignored local state such as
|
|
624
|
+
* `*.tfstate` that a task must use, not a copy of.
|
|
625
|
+
*/
|
|
626
|
+
worktreeLinks: string[];
|
|
627
|
+
/**
|
|
628
|
+
* How many conflict repairs one task may go through before its conflict is
|
|
629
|
+
* left for a person (ADR-0015); 0 turns repair off.
|
|
630
|
+
*/
|
|
631
|
+
conflictRepairAttempts: number;
|
|
632
|
+
/**
|
|
633
|
+
* What to do when planner research reaches outside its default envelope — an
|
|
634
|
+
* out-of-workspace path, a shell command beyond the auto-allowed read-only
|
|
635
|
+
* set, an MCP tool. `ask` prompts the user (and denies where no surface can
|
|
636
|
+
* prompt, such as headless runs); `allow` and `deny` skip the prompt
|
|
637
|
+
* entirely; `auto` follows {@link autonomousMode} (ADR-0026).
|
|
638
|
+
*/
|
|
639
|
+
approvalMode: ApprovalModeSetting;
|
|
640
|
+
/** Allowlist entries granted up front, beside the defaults (ADR-0026, `plannerAllowlist.ts`). */
|
|
641
|
+
approvalPreApproved: string[];
|
|
642
|
+
/** Whether the built-in allowlist of read-only command families and MCP tools applies. */
|
|
643
|
+
approvalDefaults: boolean;
|
|
644
|
+
/** How many fetches and searches one planner turn may make (ADR-0027). User-only, like the approval settings. */
|
|
645
|
+
webReadBudget: number;
|
|
646
|
+
/** Get the base URL for an OpenAI-compatible provider. */
|
|
647
|
+
getProviderBaseUrl(provider: AiProvider): string;
|
|
648
|
+
/** Get the API key for a provider. */
|
|
649
|
+
getProviderApiKey(provider: AiProvider): string;
|
|
650
|
+
/**
|
|
651
|
+
* Push the canonical provider routing lists in (sole producer: ModelResolver).
|
|
652
|
+
* Config consumes them when resolving a chosen model id to its serving API.
|
|
653
|
+
*/
|
|
654
|
+
setProviderModelLists(lists: ProviderModelLists): void;
|
|
655
|
+
}
|
|
656
|
+
declare function enabledRunners(cfg: IConfig): RunnerId[];
|
|
657
|
+
|
|
466
658
|
/**
|
|
467
659
|
* The tools of the Ordewell MCP server, per token role (ADR-0022), and the
|
|
468
660
|
* handler interfaces the session side implements to answer them.
|
|
@@ -588,24 +780,24 @@ declare const taskOutputInput: z.ZodObject<{
|
|
|
588
780
|
error: "error";
|
|
589
781
|
command: "command";
|
|
590
782
|
thinking: "thinking";
|
|
591
|
-
task_skills: "task_skills";
|
|
592
|
-
turn_start: "turn_start";
|
|
593
|
-
command_output: "command_output";
|
|
594
|
-
compaction: "compaction";
|
|
595
|
-
runner_loaded: "runner_loaded";
|
|
596
|
-
turn_end: "turn_end";
|
|
597
|
-
text_delta: "text_delta";
|
|
598
783
|
thinking_delta: "thinking_delta";
|
|
599
784
|
tool_call: "tool_call";
|
|
600
785
|
tool_result: "tool_result";
|
|
786
|
+
usage: "usage";
|
|
601
787
|
subagent_started: "subagent_started";
|
|
602
788
|
subagent_finished: "subagent_finished";
|
|
603
|
-
|
|
789
|
+
turn_end: "turn_end";
|
|
790
|
+
message_delivered: "message_delivered";
|
|
791
|
+
runner_loaded: "runner_loaded";
|
|
792
|
+
compaction: "compaction";
|
|
793
|
+
command_output: "command_output";
|
|
794
|
+
text_delta: "text_delta";
|
|
795
|
+
turn_start: "turn_start";
|
|
604
796
|
message_queued: "message_queued";
|
|
605
797
|
message_removed: "message_removed";
|
|
606
798
|
message_undelivered: "message_undelivered";
|
|
607
799
|
message_handed_over: "message_handed_over";
|
|
608
|
-
|
|
800
|
+
task_skills: "task_skills";
|
|
609
801
|
approval_requested: "approval_requested";
|
|
610
802
|
approval_decided: "approval_decided";
|
|
611
803
|
approval_withdrawn: "approval_withdrawn";
|
|
@@ -1314,7 +1506,10 @@ interface RunnerFeatures {
|
|
|
1314
1506
|
permissionModeValues?: Record<string, string>;
|
|
1315
1507
|
modeSettings?: Record<string, Record<string, string>>;
|
|
1316
1508
|
}
|
|
1317
|
-
|
|
1509
|
+
/** A runner's own reader for its catalog's output, kept beside its manifest. */
|
|
1510
|
+
type ModelOutputParser = (output: string, manifest: RunnerManifest) => DiscoveredModel[];
|
|
1511
|
+
/** How discovery output becomes models: one `id label` per line, or the runner's own reader. Absent means per line. */
|
|
1512
|
+
type ModelDiscoveryParser = 'line-by-line' | ModelOutputParser;
|
|
1318
1513
|
interface DiscoveryCommand {
|
|
1319
1514
|
command: string;
|
|
1320
1515
|
args: string[];
|
|
@@ -1343,7 +1538,6 @@ interface RunnerModelDiscovery {
|
|
|
1343
1538
|
command?: string;
|
|
1344
1539
|
args?: string[];
|
|
1345
1540
|
parser?: ModelDiscoveryParser;
|
|
1346
|
-
jsonPath?: string;
|
|
1347
1541
|
/**
|
|
1348
1542
|
* Stdio JSON-RPC discovery (Codex `app-server`): spawn the command, send
|
|
1349
1543
|
* `initialize` then `model/list`, and read the catalog from the response.
|
|
@@ -1378,6 +1572,12 @@ interface RunnerModelDiscovery {
|
|
|
1378
1572
|
modelId: string;
|
|
1379
1573
|
modelLabel: string;
|
|
1380
1574
|
}[];
|
|
1575
|
+
/**
|
|
1576
|
+
* The runner names its models `provider/model` (OpenCode), so an id of that
|
|
1577
|
+
* shape can be its own rather than an OpenRouter slug left from a vendor
|
|
1578
|
+
* planner.
|
|
1579
|
+
*/
|
|
1580
|
+
providerQualifiedIds?: boolean;
|
|
1381
1581
|
/**
|
|
1382
1582
|
* HTTP API discovery — tried BEFORE command discovery. When the runner's CLI
|
|
1383
1583
|
* has no model-listing subcommand (Claude Code), an API endpoint can serve as
|
|
@@ -1421,195 +1621,6 @@ interface RunnerEntry {
|
|
|
1421
1621
|
manifest: RunnerManifest;
|
|
1422
1622
|
}
|
|
1423
1623
|
|
|
1424
|
-
interface CatalogModel {
|
|
1425
|
-
id: string;
|
|
1426
|
-
name: string;
|
|
1427
|
-
description: string;
|
|
1428
|
-
pricing: {
|
|
1429
|
-
prompt: string;
|
|
1430
|
-
completion: string;
|
|
1431
|
-
};
|
|
1432
|
-
contextLength: number;
|
|
1433
|
-
}
|
|
1434
|
-
declare class ModelCatalog {
|
|
1435
|
-
static fetchModels(apiKey: string, baseUrl?: string, fetchImpl?: typeof fetch): Promise<CatalogModel[]>;
|
|
1436
|
-
/**
|
|
1437
|
-
* Delete the on-disk catalog cache for a base URL so the next fetch re-runs.
|
|
1438
|
-
* Used by the resolver's `invalidate()` in production (no injected fetch);
|
|
1439
|
-
* best-effort — a missing file or unreadable dir is a no-op.
|
|
1440
|
-
*/
|
|
1441
|
-
static clearCache(baseUrl?: string): void;
|
|
1442
|
-
private static readCache;
|
|
1443
|
-
private static writeCache;
|
|
1444
|
-
}
|
|
1445
|
-
|
|
1446
|
-
interface ModelShortcut {
|
|
1447
|
-
label: string;
|
|
1448
|
-
id: string;
|
|
1449
|
-
provider: string;
|
|
1450
|
-
description: string;
|
|
1451
|
-
pricing?: string;
|
|
1452
|
-
}
|
|
1453
|
-
declare const ORCHESTRATOR_SHORTCUTS: ModelShortcut[];
|
|
1454
|
-
declare function resolveModelShortcut(input: string, shortcuts: ModelShortcut[]): string | null;
|
|
1455
|
-
/**
|
|
1456
|
-
* Resolves a value to a model id ONLY when it is in the supplied catalog
|
|
1457
|
-
* option list — either directly or via a shortcut label. Free-typed, unknown,
|
|
1458
|
-
* or not-currently-available values return null, so callers never store an id
|
|
1459
|
-
* the user couldn't have selected from the list. Keeps model-setting list-only.
|
|
1460
|
-
*/
|
|
1461
|
-
declare function knownModelId(value: string, optionIds: string[], shortcuts: ModelShortcut[]): string | null;
|
|
1462
|
-
|
|
1463
|
-
type ProviderModelLists = Record<string, string[]>;
|
|
1464
|
-
interface OrchestratorOption {
|
|
1465
|
-
id: string;
|
|
1466
|
-
label: string;
|
|
1467
|
-
provider: string;
|
|
1468
|
-
apiProvider: AiProvider;
|
|
1469
|
-
description?: string;
|
|
1470
|
-
pricing?: string;
|
|
1471
|
-
/** The model's context window when the catalog reports one (#49). */
|
|
1472
|
-
contextWindow?: number;
|
|
1473
|
-
}
|
|
1474
|
-
|
|
1475
|
-
interface FetchAllProviderModelsOptions {
|
|
1476
|
-
apiKeys: Record<string, string>;
|
|
1477
|
-
baseUrls: Record<string, string>;
|
|
1478
|
-
fetchImpl?: typeof fetch;
|
|
1479
|
-
}
|
|
1480
|
-
type AllProviderModels = Record<string, CatalogModel[]>;
|
|
1481
|
-
/**
|
|
1482
|
-
* Result of a picker-catalog fetch fan-out: the per-provider model lists plus
|
|
1483
|
-
* the per-provider failures. `errors` is keyed by provider id and holds the
|
|
1484
|
-
* failure message for any provider whose catalog fetch rejected — the seam the
|
|
1485
|
-
* surfaces (CLI, VS Code) use to flag "this configured provider didn't work"
|
|
1486
|
-
* rather than silently showing a short list.
|
|
1487
|
-
*/
|
|
1488
|
-
interface ProviderModelsResult {
|
|
1489
|
-
models: AllProviderModels;
|
|
1490
|
-
errors: Record<string, string>;
|
|
1491
|
-
}
|
|
1492
|
-
/** The provider config fields the discovery fan-out needs. */
|
|
1493
|
-
interface ProviderCredentialSource {
|
|
1494
|
-
getProviderApiKey(provider: AiProvider): string;
|
|
1495
|
-
getProviderBaseUrl(provider: AiProvider): string;
|
|
1496
|
-
openaiCompatibleBaseUrl: string;
|
|
1497
|
-
}
|
|
1498
|
-
/**
|
|
1499
|
-
* Collect the API keys and base URLs the picker fan-out should probe, applying
|
|
1500
|
-
* the single "configured" policy shared by every surface (CLI + VS Code):
|
|
1501
|
-
* - a preset is discovered only when it has an API key (OpenRouter included —
|
|
1502
|
-
* its public catalog is not probed keyless, matching the product rule that
|
|
1503
|
-
* only key-configured providers appear);
|
|
1504
|
-
* - `openai_compatible` is discovered only when an explicit endpoint is set
|
|
1505
|
-
* (keyless local servers like ollama / LM Studio).
|
|
1506
|
-
* Base URLs are handed through only for providers that pass the gate, so the
|
|
1507
|
-
* fan-out never touches an unconfigured third-party endpoint.
|
|
1508
|
-
*/
|
|
1509
|
-
declare function collectProviderCredentials(config: ProviderCredentialSource): {
|
|
1510
|
-
apiKeys: Record<string, string>;
|
|
1511
|
-
baseUrls: Record<string, string>;
|
|
1512
|
-
};
|
|
1513
|
-
declare function fetchAllProviderModels(opts: FetchAllProviderModelsOptions): Promise<ProviderModelsResult>;
|
|
1514
|
-
declare function resolveProvider(modelId: string, providerModelLists: Record<string, string[]>): AiProvider | null;
|
|
1515
|
-
declare function toOrchestratorOptions(providerModels: AllProviderModels, shortcuts: ModelShortcut[]): OrchestratorOption[];
|
|
1516
|
-
|
|
1517
|
-
/**
|
|
1518
|
-
* Who plans. Mostly LLM vendors reached over HTTP; the last three are *harness
|
|
1519
|
-
* planners* (ADR-0009) — a coding agent CLI already installed on the machine,
|
|
1520
|
-
* driven as the planner over its own programmatic transport and authenticated
|
|
1521
|
-
* by the subscription the user already holds. They are runners in the provider
|
|
1522
|
-
* axis, deliberately: "what plans for me?" is one question, and it belongs in
|
|
1523
|
-
* one setting. `isCliProvider` is the single guard that tells the two kinds
|
|
1524
|
-
* apart.
|
|
1525
|
-
*/
|
|
1526
|
-
type AiProvider = 'google' | 'openrouter' | 'openai_compatible' | 'openai' | 'xai' | 'groq' | 'deepseek' | 'together' | 'mistral' | 'anthropic' | 'fireworks' | 'perplexity' | 'zhipu' | 'kimi' | 'cerebras' | 'deepinfra' | 'doubao' | 'qwen' | 'hunyuan' | 'baichuan' | 'minimax' | 'yi' | 'stepfun' | 'siliconflow' | 'cohere' | 'novita' | 'claude-code' | 'codex' | 'opencode';
|
|
1527
|
-
interface IConfig {
|
|
1528
|
-
aiProvider: AiProvider;
|
|
1529
|
-
apiKey: string;
|
|
1530
|
-
planningModel: string;
|
|
1531
|
-
enabledRunners: string[];
|
|
1532
|
-
maxParallelSessions: number;
|
|
1533
|
-
researchEnabled: boolean;
|
|
1534
|
-
researchMaxSteps: number;
|
|
1535
|
-
researchMaxFileSize: number;
|
|
1536
|
-
openAiBaseUrl: string;
|
|
1537
|
-
openAiApiKey: string;
|
|
1538
|
-
/** Provider keys + base URL the ModelResolver uses to fetch the picker catalogs. */
|
|
1539
|
-
openrouterKey: string;
|
|
1540
|
-
geminiKey: string;
|
|
1541
|
-
geminiBaseUrl?: string;
|
|
1542
|
-
/** Base URL + API key for a user-provided OpenAI-compatible endpoint (ollama, vLLM, LM Studio, etc.). */
|
|
1543
|
-
openaiCompatibleBaseUrl: string;
|
|
1544
|
-
openaiCompatibleApiKey: string;
|
|
1545
|
-
orchestratorModel: string;
|
|
1546
|
-
geminiModel: string;
|
|
1547
|
-
/** Model for research subagents (issue #34); defaults to the (cheap) planner model. */
|
|
1548
|
-
researchSubagentModel: string;
|
|
1549
|
-
/**
|
|
1550
|
-
* Thinking effort / model variant for a harness planner (ADR-0009), chosen
|
|
1551
|
-
* from the agent's own discovered variants. Separate from the per-task
|
|
1552
|
-
* efforts the plan carries — this one is the planner's own dial.
|
|
1553
|
-
*/
|
|
1554
|
-
plannerThinkingEffort?: string;
|
|
1555
|
-
planMapEnabled: boolean;
|
|
1556
|
-
autonomousMode: boolean;
|
|
1557
|
-
/**
|
|
1558
|
-
* Run each AI task in its own git worktree and integrate the results on a
|
|
1559
|
-
* per-run branch (ADR-0013). Non-git workspaces fall back to the shared
|
|
1560
|
-
* workspace root regardless of this flag.
|
|
1561
|
-
*/
|
|
1562
|
-
worktreeIsolation: boolean;
|
|
1563
|
-
/**
|
|
1564
|
-
* Shell command run in a fresh task worktree instead of symlinking ignored
|
|
1565
|
-
* artifacts from the main worktree — for repos where sharing `node_modules`
|
|
1566
|
-
* or a virtualenv is wrong.
|
|
1567
|
-
*/
|
|
1568
|
-
worktreeSetupCommand?: string;
|
|
1569
|
-
/**
|
|
1570
|
-
* Repositories of the repo group listed by hand, relative to the workspace
|
|
1571
|
-
* (ADR-0014). When non-empty the group is exactly these, replacing the
|
|
1572
|
-
* repositories auto-detected directly inside the folder; needed for ones
|
|
1573
|
-
* deeper than that, which are never auto-detected.
|
|
1574
|
-
*/
|
|
1575
|
-
workspaceRepos: string[];
|
|
1576
|
-
/**
|
|
1577
|
-
* Extra paths or globs, relative to each repo root, linked from the real repo
|
|
1578
|
-
* into its task worktree where they exist — gitignored local state such as
|
|
1579
|
-
* `*.tfstate` that a task must use, not a copy of.
|
|
1580
|
-
*/
|
|
1581
|
-
worktreeLinks: string[];
|
|
1582
|
-
/**
|
|
1583
|
-
* How many conflict repairs one task may go through before its conflict is
|
|
1584
|
-
* left for a person (ADR-0015); 0 turns repair off.
|
|
1585
|
-
*/
|
|
1586
|
-
conflictRepairAttempts: number;
|
|
1587
|
-
/**
|
|
1588
|
-
* What to do when planner research reaches outside its default envelope — an
|
|
1589
|
-
* out-of-workspace path, a shell command beyond the auto-allowed read-only
|
|
1590
|
-
* set, an MCP tool. `ask` prompts the user (and denies where no surface can
|
|
1591
|
-
* prompt, such as headless runs); `allow` and `deny` skip the prompt
|
|
1592
|
-
* entirely; `auto` follows {@link autonomousMode} (ADR-0026).
|
|
1593
|
-
*/
|
|
1594
|
-
approvalMode: ApprovalModeSetting;
|
|
1595
|
-
/** Allowlist entries granted up front, beside the defaults (ADR-0026, `plannerAllowlist.ts`). */
|
|
1596
|
-
approvalPreApproved: string[];
|
|
1597
|
-
/** Whether the built-in allowlist of read-only command families and MCP tools applies. */
|
|
1598
|
-
approvalDefaults: boolean;
|
|
1599
|
-
/** How many fetches and searches one planner turn may make (ADR-0027). User-only, like the approval settings. */
|
|
1600
|
-
webReadBudget: number;
|
|
1601
|
-
/** Get the base URL for an OpenAI-compatible provider. */
|
|
1602
|
-
getProviderBaseUrl(provider: AiProvider): string;
|
|
1603
|
-
/** Get the API key for a provider. */
|
|
1604
|
-
getProviderApiKey(provider: AiProvider): string;
|
|
1605
|
-
/**
|
|
1606
|
-
* Push the canonical provider routing lists in (sole producer: ModelResolver).
|
|
1607
|
-
* Config consumes them when resolving a chosen model id to its serving API.
|
|
1608
|
-
*/
|
|
1609
|
-
setProviderModelLists(lists: ProviderModelLists): void;
|
|
1610
|
-
}
|
|
1611
|
-
declare function enabledRunners(cfg: IConfig): RunnerId[];
|
|
1612
|
-
|
|
1613
1624
|
declare class RunnerRegistry {
|
|
1614
1625
|
private readonly runners;
|
|
1615
1626
|
private readonly unavailableModes;
|
|
@@ -1833,4 +1844,4 @@ interface IRunner {
|
|
|
1833
1844
|
activeCount: number;
|
|
1834
1845
|
}
|
|
1835
1846
|
|
|
1836
|
-
export { type OwnerOnlyFile as $, AUTO_COMMANDS as A, type IRunnerSession as B, type CatalogModel as C, DEFAULT_PLANNER_ALLOWLIST as D, type EditPlanArgs as E, type FetchAllProviderModelsOptions as F, GIT_READONLY_SUBCOMMANDS as G, type InvokedCommand as H, type IApproval as I, type ListModelsArgs as J, type ListRunnersArgs as K, LineBuffer as L, type LoadSkillArgs as M, type McpClientConfig as N, type McpCredential as O, type McpTool as P, type McpToolContext as Q, type McpToolReply as R, type MessageTaskArgs as S, ModelCatalog as T, type ModelShortcut as U, ORCHESTRATOR_SHORTCUTS as V, ORDEWELL_MCP_PATH as W, ORDEWELL_MCP_SERVER_NAME as X, type OneTaskArgs as Y, type OrchestratorOption as Z, OrdewellMcpServer as _, type AgentAdapter as a,
|
|
1847
|
+
export { type OwnerOnlyFile as $, AUTO_COMMANDS as A, type IRunnerSession as B, type CatalogModel as C, DEFAULT_PLANNER_ALLOWLIST as D, type EditPlanArgs as E, type FetchAllProviderModelsOptions as F, GIT_READONLY_SUBCOMMANDS as G, type InvokedCommand as H, type IApproval as I, type ListModelsArgs as J, type ListRunnersArgs as K, LineBuffer as L, type LoadSkillArgs as M, type McpClientConfig as N, type McpCredential as O, type McpTool as P, type McpToolContext as Q, type McpToolReply as R, type MessageTaskArgs as S, ModelCatalog as T, type ModelShortcut as U, ORCHESTRATOR_SHORTCUTS as V, ORDEWELL_MCP_PATH as W, ORDEWELL_MCP_SERVER_NAME as X, type OneTaskArgs as Y, type OrchestratorOption as Z, OrdewellMcpServer as _, type AgentAdapter as a, researchShellWarning as a$, PLANNER_EXECUTION_TOOLS as a0, PLANNER_TOOLS as a1, type PlannerAllowlist as a2, type PlannerBackendId as a3, type PlannerStartOptions as a4, type PlannerTokenScope as a5, type PlannerToolHandler as a6, type ProjectMcpServer as a7, type ProviderCredentialSource as a8, type ProviderModelLists as a9, type TaskCompleteArgs as aA, type TaskDiffArgs as aB, type TaskMessageFrom as aC, type TaskModeAgentAdapter as aD, TaskModeUnsupportedError as aE, type TaskOutputArgs as aF, type TaskQueryArgs as aG, type TaskRunnerFlags as aH, type TaskStartOptions as aI, type TaskTokenScope as aJ, type TaskToolHandler as aK, approvalScopes as aL, classifyCommand as aM, clearResearchShellCache as aN, collectProviderCredentials as aO, commandAllowedBy as aP, effectiveApprovalMode as aQ, enabledRunners as aR, fetchAllProviderModels as aS, findRunnerCommand as aT, isGranted as aU, isRunnerApproval as aV, knownModelId as aW, mcpClientConfig as aX, ownerOnlyConfigFile as aY, parseAllowlist as aZ, parseApprovalModeSetting as a_, type ProviderModelsResult as aa, type QueuedTaskMessage as ab, REFUSED_COMMANDS as ac, type ResearchShell as ad, type ResearchShellDeps as ae, type RetryTaskArgs as af, type RunCommandArgs as ag, type RunPlanArgs as ah, type RunnerCommand as ai, type RunnerCommandKind as aj, type RunnerEntry as ak, type RunnerFeatures as al, type RunnerManifest as am, type RunnerMcpServer as an, type RunnerMode as ao, type RunnerModelDiscovery as ap, RunnerRegistry as aq, type ShellDialect as ar, type SpawnFn as as, type StandingDecision as at, type StructuredEvent as au, type StructuredTurnEnd as av, type SubmitPlanArgs as aw, TASK_COMPLETE_TOOL as ax, TASK_COMPLETION_CONTRACT as ay, TASK_TOOLS as az, type AgentAdapterFactory as b, researchToolsPath as b0, resolveModelShortcut as b1, resolveProvider as b2, resolveResearchShell as b3, scopeAllowed as b4, sharedMcpServer as b5, toApprovalDecision as b6, toOrchestratorOptions as b7, toolAllowed as b8, type AgentEvent as c, type AgentProcessDeps as d, type AgentStartOptions as e, type AiProvider as f, type AllProviderModels as g, type AnswerApprovalArgs as h, type ApprovalAnswer as i, type ApprovalDecision as j, type ApprovalKind as k, type ApprovalMode as l, type ApprovalModeSetting as m, ApprovalPolicy as n, type ApprovalPolicyOptions as o, type ApprovalRequest as p, type ApprovalSource as q, type CheckpointAnswer as r, type CheckpointArgs as s, type CommandClassification as t, type CommandTier as u, type CommandWords as v, DENY_ALL as w, type DiscoveryCommand as x, type IConfig as y, type IRunner as z };
|