@kodax-ai/kodax 0.7.57 → 0.7.59

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.
Files changed (77) hide show
  1. package/CHANGELOG.md +2032 -1920
  2. package/README.md +1228 -1219
  3. package/README_CN.md +647 -638
  4. package/dist/chunks/agent-QQCRBU4C.js +2 -0
  5. package/dist/chunks/argument-completer-7Q2T4YWA.js +2 -0
  6. package/dist/chunks/{chunk-LZKGOR2C.js → chunk-2UUOFT3Z.js} +1 -1
  7. package/dist/chunks/chunk-5GPJ6MB5.js +405 -0
  8. package/dist/chunks/chunk-BEXLPFFB.js +7 -0
  9. package/dist/chunks/chunk-D6QVXQNI.js +1 -0
  10. package/dist/chunks/chunk-D7RENPQQ.js +322 -0
  11. package/dist/chunks/chunk-PRIBJN5E.js +683 -0
  12. package/dist/chunks/chunk-S4GVQO3W.js +31 -0
  13. package/dist/chunks/chunk-SDSLWDAZ.js +17 -0
  14. package/dist/chunks/chunk-SVEJFERZ.js +326 -0
  15. package/dist/chunks/chunk-TBXP7FEG.js +52 -0
  16. package/dist/chunks/chunk-UA744TZM.js +2 -0
  17. package/dist/chunks/{chunk-YSVPF6SN.js → chunk-UXQILGRX.js} +262 -259
  18. package/dist/chunks/{chunk-4SHP3M67.js → chunk-YADBB5GN.js} +1 -1
  19. package/dist/chunks/chunk-Z23LK3IV.js +310 -0
  20. package/dist/chunks/chunk-Z3ZXV3DZ.js +18 -0
  21. package/dist/chunks/compaction-config-GQIPCVFD.js +2 -0
  22. package/dist/chunks/{construction-bootstrap-55B7Q5RX.js → construction-bootstrap-YON4ZEMO.js} +1 -1
  23. package/dist/chunks/dist-73L4OYPD.js +2 -0
  24. package/dist/chunks/dist-EZXBR6NW.js +2 -0
  25. package/dist/chunks/host-LO6ZNTMV.js +2 -0
  26. package/dist/chunks/paste-4THGP5XW.js +2 -0
  27. package/dist/chunks/run-manager-HTLXKU66.js +2 -0
  28. package/dist/chunks/utils-5XVW33SY.js +2 -0
  29. package/dist/index.d.ts +15 -14
  30. package/dist/index.js +2 -2
  31. package/dist/kodax_cli.js +1222 -1047
  32. package/dist/provider-capabilities.json +971 -986
  33. package/dist/sdk-agent.d.ts +156 -14
  34. package/dist/sdk-agent.js +1 -1
  35. package/dist/sdk-coding.d.ts +253 -188
  36. package/dist/sdk-coding.js +1 -1
  37. package/dist/sdk-llm.d.ts +66 -43
  38. package/dist/sdk-llm.js +1 -1
  39. package/dist/sdk-mcp.js +1 -1
  40. package/dist/sdk-media.d.ts +18 -2
  41. package/dist/sdk-media.js +1 -1
  42. package/dist/sdk-repl.d.ts +21 -22
  43. package/dist/sdk-repl.js +2 -2
  44. package/dist/sdk-session.d.ts +8 -7
  45. package/dist/sdk-session.js +1 -1
  46. package/dist/sdk-skills.d.ts +4 -231
  47. package/dist/sdk-skills.js +1 -1
  48. package/dist/types-chunks/{base.d-BnjQrSVf.d.ts → base.d-BA9Doaj_.d.ts} +3 -3
  49. package/dist/types-chunks/{bash-prefix-extractor.d-BgvMbfq6.d.ts → bash-prefix-extractor.d-BNdpV4Cf.d.ts} +515 -69
  50. package/dist/types-chunks/capability-learning.d-DRV80ISB.d.ts +29 -0
  51. package/dist/types-chunks/{cost-tracker.d-wRtyEW9d.d.ts → cost-tracker.d-CBLk1fiD.d.ts} +24 -2
  52. package/dist/types-chunks/{guardrail.d-C1DhxnvC.d.ts → guardrail.d-CNdKuSD_.d.ts} +4 -4
  53. package/dist/types-chunks/{process.d-BZncyzEj.d.ts → process.d-BOrAxjvM.d.ts} +188 -15
  54. package/dist/types-chunks/{resolver.d-ZvKQgl0X.d.ts → resolver.d-DFAKKUvt.d.ts} +87 -4
  55. package/dist/types-chunks/{capsule.d-DwJp5r63.d.ts → run-manager.d-CsJC9zYf.d.ts} +113 -5
  56. package/dist/types-chunks/{sdk-session-DAScB0rW.d.ts → sdk-session-ByZlwgdM.d.ts} +83 -9
  57. package/dist/types-chunks/{storage.d-CPvn9qI0.d.ts → storage.d-DHL3XpAL.d.ts} +2 -2
  58. package/dist/types-chunks/{guardrail.d-BP3yyr6u.d.ts → types.d-CE_Ter29.d.ts} +125 -3
  59. package/dist/types-chunks/{types.d-6VOXvF88.d.ts → types.d-Ci5YPFEh.d.ts} +39 -5
  60. package/dist/types-chunks/types.d-vJExiRje.d.ts +232 -0
  61. package/dist/types-chunks/{utils.d-CpgVIjYZ.d.ts → utils.d-D9FHU4wB.d.ts} +84 -6
  62. package/package.json +2 -2
  63. package/dist/chunks/agent-EHWQZA4C.js +0 -2
  64. package/dist/chunks/argument-completer-AYDAYGKL.js +0 -2
  65. package/dist/chunks/chunk-3WWPJGPQ.js +0 -2
  66. package/dist/chunks/chunk-KN6IJMTB.js +0 -636
  67. package/dist/chunks/chunk-MJFPFRGK.js +0 -423
  68. package/dist/chunks/chunk-N2N2W3AQ.js +0 -584
  69. package/dist/chunks/chunk-PCPFLPS4.js +0 -5
  70. package/dist/chunks/chunk-TCLSPUTR.js +0 -31
  71. package/dist/chunks/chunk-VACH6QWN.js +0 -315
  72. package/dist/chunks/compaction-config-TLDMFMZO.js +0 -2
  73. package/dist/chunks/dist-IE4HVWP7.js +0 -2
  74. package/dist/chunks/dist-IKOK2MJQ.js +0 -2
  75. package/dist/chunks/paste-WTL2XN7P.js +0 -2
  76. package/dist/chunks/utils-EJ2VCRTC.js +0 -2
  77. package/dist/types-chunks/types.d-D8WcfrOD.d.ts +0 -143
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Agent Skills Standard Type Definitions
3
+ * Compliant with https://agentskills.io/ specification
4
+ *
5
+ * Also supports Claude Code extension fields for compatibility
6
+ */
7
+ /**
8
+ * Skill frontmatter as defined in SKILL.md YAML header
9
+ */
10
+ interface SkillFrontmatter {
11
+ /** Skill name in kebab-case, max 64 characters */
12
+ name: string;
13
+ /** Skill description, max 1024 characters, should include trigger conditions */
14
+ description: string;
15
+ /** Whether to disable automatic model invocation (default: false) */
16
+ disableModelInvocation?: boolean;
17
+ /** Whether skill appears in / menu (default: true) */
18
+ userInvocable?: boolean;
19
+ /** Tool restrictions, e.g., "Read, Grep, Bash(python:*)" */
20
+ allowedTools?: string;
21
+ /** Execution context - 'fork' for sub-agent execution */
22
+ context?: 'fork';
23
+ /** Sub-agent type: Explore, Plan, general-purpose, etc. */
24
+ agent?: string;
25
+ /** Argument hint for UI, e.g., "[file] [format]" */
26
+ argumentHint?: string;
27
+ /** Model preference: haiku, sonnet, opus, or a provider-specific model id */
28
+ model?: string;
29
+ /** Hooks scoped to this skill's lifecycle */
30
+ hooks?: SkillHooks;
31
+ license?: string;
32
+ compatibility?: string;
33
+ metadata?: Record<string, unknown>;
34
+ }
35
+ interface SkillHook {
36
+ matcher?: string;
37
+ command: string;
38
+ }
39
+ interface SkillHooks {
40
+ SessionStart?: SkillHook[];
41
+ UserPromptSubmit?: SkillHook[];
42
+ PreToolUse?: SkillHook[];
43
+ PostToolUse?: SkillHook[];
44
+ Stop?: SkillHook[];
45
+ SubagentStop?: SkillHook[];
46
+ Notification?: SkillHook[];
47
+ }
48
+ /**
49
+ * Lightweight skill metadata for system prompt injection
50
+ * Loaded at startup for progressive disclosure
51
+ */
52
+ interface SkillMetadata {
53
+ name: string;
54
+ description: string;
55
+ userInvocable: boolean;
56
+ argumentHint?: string;
57
+ path: string;
58
+ source: SkillSource;
59
+ /** If true, exclude from system prompt; still invokable by explicit slash forms. */
60
+ disableModelInvocation: boolean;
61
+ }
62
+ /**
63
+ * Complete skill definition with all content loaded
64
+ */
65
+ interface Skill extends SkillFrontmatter {
66
+ /** Skill directory absolute path */
67
+ path: string;
68
+ /** SKILL.md absolute path */
69
+ skillFilePath: string;
70
+ /** Markdown content (with variables resolved) */
71
+ content: string;
72
+ /** Raw markdown content (before variable resolution) */
73
+ rawContent: string;
74
+ /** Support files */
75
+ scripts?: SkillFile[];
76
+ references?: SkillFile[];
77
+ assets?: SkillFile[];
78
+ templates?: SkillFile[];
79
+ resources?: SkillFile[];
80
+ /** Runtime state */
81
+ loaded: boolean;
82
+ source: SkillSource;
83
+ }
84
+ /**
85
+ * File within a skill directory
86
+ */
87
+ interface SkillFile {
88
+ name: string;
89
+ path: string;
90
+ relativePath: string;
91
+ content?: string;
92
+ }
93
+ type SkillSource = 'project' | 'user' | 'plugin' | 'builtin';
94
+ /**
95
+ * Skill registry interface for managing discovered skills
96
+ */
97
+ interface ISkillRegistry {
98
+ /** Read-only view of discovered skill metadata */
99
+ readonly skills: ReadonlyMap<string, SkillMetadata>;
100
+ /** Discover skills from all configured paths */
101
+ discover(): Promise<void>;
102
+ /** Get skill metadata by name */
103
+ get(name: string): SkillMetadata | undefined;
104
+ /** Load full skill content */
105
+ loadFull(name: string): Promise<Skill>;
106
+ /** Invoke a skill with arguments */
107
+ invoke(name: string, args: string, context: SkillContext): Promise<SkillResult>;
108
+ /** Reload skills from disk */
109
+ reload(): Promise<void>;
110
+ /** List all discovered skills */
111
+ list(): ReadonlyArray<SkillMetadata>;
112
+ /** List skills that can be invoked directly by users */
113
+ listUserInvocable(): ReadonlyArray<SkillMetadata>;
114
+ /** Check whether a skill exists */
115
+ has(name: string): boolean;
116
+ /** Number of discovered skills */
117
+ readonly size: number;
118
+ }
119
+ /**
120
+ * v0.7.42 — SDK-embedder hook for `!`cmd`` dynamic context resolution.
121
+ *
122
+ * Receives the literal command string and the working directory the resolver
123
+ * would have used. Must return the command's text output (which the resolver
124
+ * splices into the skill markdown in place of the `!`cmd`` token), or throw
125
+ * to deny.
126
+ *
127
+ * **Trust boundary**: when the KodaX SDK is embedded inside a host app
128
+ * (e.g. KodaX Space, IDE extensions), the host typically mediates shell
129
+ * execution through a permission broker so the end user can approve / deny
130
+ * each command. Without this hook, `VariableResolver` directly `execSync`s
131
+ * commands using its own built-in whitelist — bypassing the host's broker
132
+ * and producing OS side-effects the user never saw.
133
+ *
134
+ * Embedders should route here to:
135
+ * - prompt the user via their own UI,
136
+ * - log execution to their audit trail,
137
+ * - apply policy (e.g. block network commands),
138
+ * - or refuse outright (throw).
139
+ *
140
+ * @example
141
+ * ```ts
142
+ * const context: SkillContext = {
143
+ * workingDirectory: '/repo',
144
+ * executeDynamicContext: async (cmd, cwd) => {
145
+ * const approved = await brokerAskUser({ kind: 'skill-cmd', command: cmd, cwd });
146
+ * if (!approved) throw new Error('user denied');
147
+ * return await brokerExecute(cmd, cwd);
148
+ * },
149
+ * };
150
+ * ```
151
+ */
152
+ type SkillDynamicContextExecutor = (command: string, cwd: string) => Promise<string>;
153
+ interface SkillContext {
154
+ workingDirectory: string;
155
+ projectRoot?: string;
156
+ /**
157
+ * Optional. Used to substitute `${CLAUDE_SESSION_ID}` / `${KODAX_SESSION_ID}`
158
+ * template variables in skill markdown. Tool-invocation callers (e.g. the
159
+ * `skill` tool) may not have a session bound — in that case the resolver
160
+ * falls back to an empty replacement so the substitution doesn't leak the
161
+ * literal `${...}` to the LLM.
162
+ */
163
+ sessionId?: string;
164
+ environment?: Record<string, string>;
165
+ messages?: unknown[];
166
+ /**
167
+ * v0.7.42 — SDK-embedder hook for `!`cmd`` dynamic-context resolution.
168
+ * See {@link SkillDynamicContextExecutor} for the trust-boundary rationale.
169
+ * When present, completely replaces the built-in `execSync`-based path
170
+ * (whitelist + 5s timeout). When absent, the legacy whitelist path runs.
171
+ */
172
+ executeDynamicContext?: SkillDynamicContextExecutor;
173
+ /**
174
+ * v0.7.42 — hard-disable `!`cmd`` resolution.
175
+ * When `true`, encountering a `!`cmd`` token throws
176
+ * `[Dynamic context disabled by host]` regardless of any hook. Useful for
177
+ * embedders that want a single-flag kill switch without writing a hook.
178
+ * `executeDynamicContext` is ignored when this is `true`.
179
+ */
180
+ disableDynamicContext?: boolean;
181
+ }
182
+ interface SkillResult {
183
+ success: boolean;
184
+ /** Processed prompt content */
185
+ content: string;
186
+ /** Generated artifacts */
187
+ artifacts?: SkillArtifact[];
188
+ error?: string;
189
+ }
190
+ interface SkillArtifact {
191
+ type: 'file' | 'code' | 'text';
192
+ name: string;
193
+ content: string;
194
+ path?: string;
195
+ }
196
+ interface IVariableResolver {
197
+ /** Resolve all variables in content */
198
+ resolve(content: string, args: string, context: SkillContext): Promise<string>;
199
+ }
200
+ interface SkillPathsConfig {
201
+ projectPaths: string[];
202
+ userPaths: string[];
203
+ pluginPaths: string[];
204
+ builtinPath: string;
205
+ }
206
+ /**
207
+ * Get default skill discovery paths
208
+ *
209
+ * Priority order (highest first):
210
+ * 1. Project - <projectRoot>/.kodax/skills/
211
+ * 2. User - ~/.kodax/skills/
212
+ * 3. User - ~/.agents/skills/ (AgentSkills standard)
213
+ * 4. Plugin - (dynamic)
214
+ * 5. Builtin - packages/skills/src/builtin/
215
+ */
216
+ declare function getDefaultSkillPaths(projectRoot?: string): SkillPathsConfig;
217
+ /**
218
+ * All skill paths in priority order (highest to lowest)
219
+ *
220
+ * Priority: Project > User > Plugin > Builtin
221
+ * - Project: Project-specific skills override everything else
222
+ * - User: User preferences (~/.kodax/ and ~/.agents/)
223
+ * - Plugin: Third-party plugins
224
+ * - Builtin: Default skills shipped with KodaX
225
+ */
226
+ declare function getSkillPathsFlat(config: SkillPathsConfig): Array<{
227
+ path: string;
228
+ source: SkillSource;
229
+ }>;
230
+
231
+ export { getDefaultSkillPaths as m, getSkillPathsFlat as n };
232
+ export type { ISkillRegistry as I, Skill as S, IVariableResolver as a, SkillArtifact as b, SkillContext as c, SkillDynamicContextExecutor as d, SkillFile as e, SkillFrontmatter as f, SkillHook as g, SkillHooks as h, SkillMetadata as i, SkillPathsConfig as j, SkillResult as k, SkillSource as l };
@@ -1,8 +1,8 @@
1
- import { R as KodaXOptions, u as KodaXContextTokenSnapshot, m as KodaXAgentMode, W as KodaXRepoIntelligenceMode, a7 as KodaXSkillInvocationContext } from './bash-prefix-extractor.d-BgvMbfq6.js';
2
- import { c as SessionStorage$1, b as PermissionMode } from './storage.d-CPvn9qI0.js';
3
- import { ac as KodaXSessionUiHistoryItem, a4 as KodaXSessionLineage, Y as KodaXSessionArtifactLedgerEntry, Q as KodaXExtensionSessionState, P as KodaXExtensionSessionRecord, a8 as KodaXSessionRuntimeInfo, aa as KodaXSessionStorage, $ as KodaXSessionData, bD as WorkflowProcessSource } from './process.d-BZncyzEj.js';
4
- import { j as KodaXMessage, E as KodaXReasoningMode, o as KodaXProviderCapabilityProfile, d as KodaXCustomProviderConfig } from './types.d-6VOXvF88.js';
5
- import { A as AgentsFile, f as AutoModeStats, l as KodaXMcpServersConfig } from './guardrail.d-C1DhxnvC.js';
1
+ import { P as KodaXOptions, v as KodaXContextTokenSnapshot, a5 as KodaXSkillDynamicContextPolicy, m as KodaXAgentMode, U as KodaXRepoIntelligenceMode, a6 as KodaXSkillInvocationContext } from './bash-prefix-extractor.d-BNdpV4Cf.js';
2
+ import { c as SessionStorage$1, b as PermissionMode } from './storage.d-DHL3XpAL.js';
3
+ import { ai as KodaXSessionUiHistoryItem, aa as KodaXSessionLineage, a2 as KodaXSessionArtifactLedgerEntry, R as KodaXExtensionSessionState, Q as KodaXExtensionSessionRecord, ae as KodaXSessionRuntimeInfo, ag as KodaXSessionStorage, a5 as KodaXSessionData, bM as WorkflowProcessSource } from './process.d-BOrAxjvM.js';
4
+ import { j as KodaXMessage, E as KodaXReasoningMode, o as KodaXProviderCapabilityProfile, d as KodaXCustomProviderConfig } from './types.d-Ci5YPFEh.js';
5
+ import { A as AgentsFile, f as AutoModeStats, l as KodaXMcpServersConfig } from './guardrail.d-CNdKuSD_.js';
6
6
  import * as readline from 'readline';
7
7
  import { SpawnSyncReturns } from 'child_process';
8
8
 
@@ -48,6 +48,7 @@ interface InteractiveContext {
48
48
  runtimeInfo?: KodaXSessionRuntimeInfo;
49
49
  createdAt: string;
50
50
  lastAccessed: string;
51
+ skillDynamicContext?: KodaXSkillDynamicContextPolicy;
51
52
  }
52
53
  declare function createInteractiveContext(options: {
53
54
  sessionId?: string;
@@ -277,6 +278,14 @@ interface CommandInvocationRequest extends CommandExecutionMetadata {
277
278
  displayName: string;
278
279
  path?: string;
279
280
  skillInvocation?: KodaXSkillInvocationContext;
281
+ /**
282
+ * FEATURE_246: per-turn agent-mode elevation for this invocation only.
283
+ * The `/workflow` command in AMA sets this to `'amaw'` so its authoring turn
284
+ * gets `run_workflow` (scout-then-author) — matching AMAW's capability without
285
+ * making plain AMA self-activate workflows from natural language. The session
286
+ * mode is unchanged; only this one turn runs elevated.
287
+ */
288
+ agentModeOverride?: KodaXAgentMode;
280
289
  }
281
290
  interface CommandWorkflowInvocationRequest {
282
291
  request: string;
@@ -458,7 +467,55 @@ declare function loadConfig(): {
458
467
  * layer, which has no config access. Set via the `/fallback` command.
459
468
  */
460
469
  fallbackProviders?: string[];
470
+ /**
471
+ * Per-agent model TIERS for the workflow / dispatch `model_hint` (M2 config
472
+ * surface). Operators point a tier at a concrete provider+model; a workflow
473
+ * script / dispatch then expresses intent via `modelHint: 'fast' | 'deep'`.
474
+ * 'fast' routes read-only children only (write/codegen stays on the parent —
475
+ * a quality guard); 'deep' routes any child. Mirrored to
476
+ * KODAX_FAST/DEEP_PROVIDER/MODEL for the coding layer (which has no config
477
+ * access); env wins if pre-set. An unset tier inherits the parent model.
478
+ */
479
+ fastProvider?: string;
480
+ fastModel?: string;
481
+ deepProvider?: string;
482
+ deepModel?: string;
483
+ /**
484
+ * Config surface for settings the coding/llm layer reads only via env (it has
485
+ * no config access). Bridged to their KODAX_* env vars in prepareRuntimeConfig
486
+ * (env-wins). See CONFIG_ENV_BRIDGES for the mapping.
487
+ */
488
+ maxOutputTokens?: number;
489
+ disablePromptCache?: boolean;
490
+ lsp?: boolean;
491
+ lspAutoDownload?: boolean;
492
+ acpLogLevel?: string;
493
+ sessionRetentionDays?: number;
494
+ repoIntelligence?: {
495
+ toolWaitMs?: number;
496
+ workerTimeoutMs?: number;
497
+ workerOldSpaceMb?: number;
498
+ storageDir?: string;
499
+ };
500
+ workflow?: {
501
+ maxConcurrency?: number;
502
+ };
461
503
  };
504
+ /**
505
+ * F1 — first-launch onboarding. config.json must be STRICT JSON (no comments), so we
506
+ * cannot ship a self-documenting config.json. Instead, on first launch (no config.json
507
+ * yet) we write a heavily-commented `config.example.jsonc` REFERENCE file next to it.
508
+ * It is never loaded by KodaX — it exists purely so a new user can see the minimal
509
+ * fields and the inline guidance (especially custom-provider thinking/reasoning) and
510
+ * copy what they need into config.json.
511
+ *
512
+ * Returns the example path only when it was just created (so the caller can print a
513
+ * one-time pointer); returns undefined if config.json already exists, the example
514
+ * already exists, or the write failed. Never throws — a template-write failure must
515
+ * not block startup.
516
+ */
517
+ declare const KODAX_EXAMPLE_CONFIG_FILE: string;
518
+ declare function ensureExampleConfigFile(): string | undefined;
462
519
  declare function prepareRuntimeConfig(): ReturnType<typeof loadConfig>;
463
520
  declare function saveConfig(config: {
464
521
  provider?: string;
@@ -482,6 +539,27 @@ declare function saveConfig(config: {
482
539
  stallLog?: boolean;
483
540
  /** FEATURE_102 Phase 3 — cross-provider child fallback chain. */
484
541
  fallbackProviders?: string[];
542
+ /** M2 — per-agent model tiers (workflow / dispatch model_hint). */
543
+ fastProvider?: string;
544
+ fastModel?: string;
545
+ deepProvider?: string;
546
+ deepModel?: string;
547
+ /** Config surface bridged to KODAX_* env for the coding/llm layer. */
548
+ maxOutputTokens?: number;
549
+ disablePromptCache?: boolean;
550
+ lsp?: boolean;
551
+ lspAutoDownload?: boolean;
552
+ acpLogLevel?: string;
553
+ sessionRetentionDays?: number;
554
+ repoIntelligence?: {
555
+ toolWaitMs?: number;
556
+ workerTimeoutMs?: number;
557
+ workerOldSpaceMb?: number;
558
+ storageDir?: string;
559
+ };
560
+ workflow?: {
561
+ maxConcurrency?: number;
562
+ };
485
563
  }): void;
486
564
  /**
487
565
  * Get git root directory.
@@ -500,5 +578,5 @@ declare function saveConfig(config: {
500
578
  declare function getGitRoot(cwd?: string): Promise<string | null>;
501
579
  declare function rateLimitedCall<T>(fn: () => Promise<T>): Promise<T>;
502
580
 
503
- export { BUILTIN_COMMANDS as B, KODAX_CONFIG_FILE as K, PREVIEW_MAX_LENGTH as P, KODAX_DIR as e, KODAX_SESSIONS_DIR as f, KODAX_VERSION as g, createInteractiveContext as h, executeCommand as i, getGitRoot as j, getProviderList as k, getProviderModel as l, getVersion as m, hydrateProcessEnvFromShell as n, isProviderConfigured as o, loadConfig as p, parseCommand as q, prepareRuntimeConfig as r, processSpecialSyntax as s, rateLimitedCall as t, registerConfiguredCustomProviders as u, runInkInteractiveMode as v, runInteractiveMode as w, saveConfig as x, touchContext as y };
581
+ export { touchContext as A, BUILTIN_COMMANDS as B, KODAX_CONFIG_FILE as K, PREVIEW_MAX_LENGTH as P, KODAX_DIR as e, KODAX_EXAMPLE_CONFIG_FILE as f, KODAX_SESSIONS_DIR as g, KODAX_VERSION as h, createInteractiveContext as i, ensureExampleConfigFile as j, executeCommand as k, getGitRoot as l, getProviderList as m, getProviderModel as n, getVersion as o, hydrateProcessEnvFromShell as p, isProviderConfigured as q, loadConfig as r, parseCommand as s, prepareRuntimeConfig as t, processSpecialSyntax as u, rateLimitedCall as v, registerConfiguredCustomProviders as w, runInkInteractiveMode as x, runInteractiveMode as y, saveConfig as z };
504
582
  export type { Command as C, InkREPLOptions as I, RepLOptions as R, CommandCallbacks as a, CurrentConfig as b, InteractiveContext as c, InteractiveMode as d };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kodax-ai/kodax",
3
- "version": "0.7.57",
4
- "description": "极致轻量化 Coding Agent - TypeScript 实现,支持 12 LLM 提供商,可发布为免 Node 单文件二进制",
3
+ "version": "0.7.59",
4
+ "description": "KodaX lightweight coding agent - TypeScript implementation with 15 built-in LLM provider aliases, published as a Node-free single-file CLI and SDK",
5
5
  "type": "module",
6
6
  "private": false,
7
7
  "publishConfig": {
@@ -1,2 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{Ab as f,ac as g,ec as h,ld as i,qd as j,xb as c,yb as d,zb as e}from"./chunk-KN6IJMTB.js";import"./chunk-PCPFLPS4.js";import"./chunk-TCLSPUTR.js";import{kb as a,lb as b}from"./chunk-N2N2W3AQ.js";import"./chunk-V4WSBIXB.js";export{d as bucketProviderPayloadSize,g as buildAutoRepoIntelligenceContext,e as checkPromiseSignal,b as cleanupIncompleteToolCalls,h as describeTransientProviderRetry,f as emitResilienceDebug,c as estimateProviderPayloadBytes,j as runKodaX,i as saveSessionSnapshot,a as validateAndFixToolHistory};
@@ -1,2 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{wa as a,xa as b}from"./chunk-YSVPF6SN.js";import"./chunk-3WWPJGPQ.js";import"./chunk-LZKGOR2C.js";import"./chunk-MJFPFRGK.js";import"./chunk-KN6IJMTB.js";import"./chunk-PCPFLPS4.js";import"./chunk-TCLSPUTR.js";import"./chunk-N2N2W3AQ.js";import"./chunk-V4WSBIXB.js";export{a as ArgumentCompleter,b as createArgumentCompleter};
@@ -1,2 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{lb as G,nb as H}from"./chunk-KN6IJMTB.js";import{V as T,W as j,X as N,Y as F,Z as K,_ as w,fa as $,ga as y,ja as x,ta as X,u as D,v as P,xa as V}from"./chunk-TCLSPUTR.js";import{va as v}from"./chunk-N2N2W3AQ.js";import{a as r}from"./chunk-V4WSBIXB.js";import u from"fs";import d from"path";import{exec as ue,spawnSync as fe}from"child_process";import{promisify as de}from"util";import{fileURLToPath as pe}from"url";var R="en";function ie(){return(process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||"").toLowerCase().startsWith("zh")?"zh":"en"}r(ie,"detectSystemLocale");function z(e){if(!e||e==="auto"){R=ie();return}R=e.toLowerCase().replace(/[-_].*/,"")==="zh"?"zh":"en"}r(z,"setLocale");var U={en:{"dialog.confirm":"[Confirm]","dialog.select":"[Select]","dialog.input":"[Input]","confirm.instruction.basic":"Press (y) yes, (n) no","confirm.instruction.always":"Press (y) yes, (a) always yes for this tool, (n) no","confirm.instruction.protected":"Press (y) to confirm, (n) to cancel (protected path)","confirm.result.approved":"Approved","confirm.result.approved_always":"Approved (always)","confirm.result.denied":"Denied","tool.bash.title":"Execute bash command?","tool.shell.title":"Execute shell command?","tool.write.title":"Write to file?","tool.edit.title":"Edit file?","tool.generic.title":"Execute {tool}?","field.reason":"Reason","field.intent":"Intent","field.target":"Target","field.scope":"Scope","field.risk":"Risk","field.summary":"Summary","intent.read":"Read project files","intent.delete":"Delete files","intent.deps":"Modify dependencies or environment","intent.modify":"Modify files","intent.execute":"Execute command","intent.write_file":"Write file","intent.edit_file":"Edit file","intent.use_tool":"Use {tool}","risk.destructive":"Destructive change","risk.deps":"May change dependencies or local tools","risk.modify":"May modify files","risk.unknown":"Command effects depend on its arguments","risk.network":"May access network","scope.outside":"Outside project","scope.protected":"Protected path","waiting.confirm":"Waiting: approval required","waiting.select":"Waiting: choose an option","waiting.input":"Waiting: answer the prompt","placeholder.confirm":"Respond to the approval prompt above...","placeholder.select":"Choose an option above...","placeholder.input":"Answer the prompt above...","placeholder.busy":"Agent is busy...","placeholder.queue":"Queue a follow-up for the next round...","placeholder.idle":"Type a message...","select.choice":"Choice:","select.type_number":"(type a number)","select.more":"{count} more choices...","select.more_above":"\u2191 {count} more above","select.more_below":"\u2193 {count} more below","select.confirm_hint":"Press Enter to confirm, Esc to cancel","select.navigate_hint":"Use \u2191\u2193 to navigate, Enter to confirm, Esc to cancel","select.multiselect_hint":"Use \u2191\u2193 to navigate, Space to toggle, Enter to confirm, Esc to cancel","select.multiselect_empty":"Select at least one option with Space before confirming.","select.back_prev":"\u2190 Back to previous question","input.default":"Default:","input.value":"Value:","input.type_response":"(type your response)","managed.completed":"Task completed","managed.completed.blocked":"Task blocked","managed.completed.continuation":"Task needs continuation",cancelled:"[Cancelled] Operation cancelled by user"},zh:{"dialog.confirm":"[\u786E\u8BA4]","dialog.select":"[\u9009\u62E9]","dialog.input":"[\u8F93\u5165]","confirm.instruction.basic":"\u6309 (y) \u786E\u8BA4, (n) \u62D2\u7EDD","confirm.instruction.always":"\u6309 (y) \u786E\u8BA4, (a) \u59CB\u7EC8\u5141\u8BB8\u6B64\u5DE5\u5177, (n) \u62D2\u7EDD","confirm.instruction.protected":"\u6309 (y) \u786E\u8BA4, (n) \u53D6\u6D88 (\u53D7\u4FDD\u62A4\u8DEF\u5F84)","confirm.result.approved":"\u5DF2\u6279\u51C6","confirm.result.approved_always":"\u5DF2\u6279\u51C6 (\u59CB\u7EC8\u5141\u8BB8)","confirm.result.denied":"\u5DF2\u62D2\u7EDD","tool.bash.title":"\u6267\u884C bash \u547D\u4EE4\uFF1F","tool.shell.title":"\u6267\u884C shell \u547D\u4EE4\uFF1F","tool.write.title":"\u5199\u5165\u6587\u4EF6\uFF1F","tool.edit.title":"\u7F16\u8F91\u6587\u4EF6\uFF1F","tool.generic.title":"\u6267\u884C {tool}\uFF1F","field.reason":"\u539F\u56E0","field.intent":"\u610F\u56FE","field.target":"\u76EE\u6807","field.scope":"\u8303\u56F4","field.risk":"\u98CE\u9669","field.summary":"\u6458\u8981","intent.read":"\u8BFB\u53D6\u9879\u76EE\u6587\u4EF6","intent.delete":"\u5220\u9664\u6587\u4EF6","intent.deps":"\u4FEE\u6539\u4F9D\u8D56\u6216\u73AF\u5883","intent.modify":"\u4FEE\u6539\u6587\u4EF6","intent.execute":"\u6267\u884C\u547D\u4EE4","intent.write_file":"\u5199\u5165\u6587\u4EF6","intent.edit_file":"\u7F16\u8F91\u6587\u4EF6","intent.use_tool":"\u4F7F\u7528 {tool}","risk.destructive":"\u7834\u574F\u6027\u53D8\u66F4","risk.deps":"\u53EF\u80FD\u4FEE\u6539\u4F9D\u8D56\u6216\u672C\u5730\u5DE5\u5177","risk.modify":"\u53EF\u80FD\u4FEE\u6539\u6587\u4EF6","risk.unknown":"\u547D\u4EE4\u6548\u679C\u53D6\u51B3\u4E8E\u53C2\u6570","risk.network":"\u53EF\u80FD\u8BBF\u95EE\u7F51\u7EDC","scope.outside":"\u9879\u76EE\u5916\u90E8","scope.protected":"\u53D7\u4FDD\u62A4\u8DEF\u5F84","waiting.confirm":"\u7B49\u5F85\u4E2D\uFF1A\u9700\u8981\u5BA1\u6279","waiting.select":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u9009\u62E9","waiting.input":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u56DE\u7B54","placeholder.confirm":"\u8BF7\u56DE\u5E94\u4E0A\u65B9\u7684\u5BA1\u6279\u63D0\u793A...","placeholder.select":"\u8BF7\u5728\u4E0A\u65B9\u9009\u62E9\u4E00\u4E2A\u9009\u9879...","placeholder.input":"\u8BF7\u56DE\u7B54\u4E0A\u65B9\u7684\u63D0\u793A...","placeholder.busy":"\u667A\u80FD\u4F53\u6B63\u5728\u5DE5\u4F5C\u4E2D...","placeholder.queue":"\u6392\u961F\u7B49\u5F85\u4E0B\u4E00\u8F6E\u8DDF\u8FDB...","placeholder.idle":"\u8F93\u5165\u6D88\u606F...","select.choice":"\u9009\u9879\uFF1A","select.type_number":"(\u8F93\u5165\u7F16\u53F7)","select.more":"\u8FD8\u6709 {count} \u4E2A\u9009\u9879...","select.more_above":"\u2191 \u4E0A\u65B9\u8FD8\u6709 {count} \u4E2A","select.more_below":"\u2193 \u4E0B\u65B9\u8FD8\u6709 {count} \u4E2A","select.confirm_hint":"\u6309 Enter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.navigate_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0C\u7A7A\u683C \u5207\u6362\u9009\u4E2D\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_empty":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u9009\u62E9\u81F3\u5C11\u4E00\u4E2A\u9009\u9879\u3002","select.back_prev":"\u2190 \u8FD4\u56DE\u4E0A\u4E00\u9898","input.default":"\u9ED8\u8BA4\u503C\uFF1A","input.value":"\u503C\uFF1A","input.type_response":"(\u8F93\u5165\u4F60\u7684\u56DE\u7B54)","managed.completed":"\u4EFB\u52A1\u5B8C\u6210","managed.completed.blocked":"\u4EFB\u52A1\u53D7\u963B","managed.completed.continuation":"\u4EFB\u52A1\u9700\u8981\u7EE7\u7EED",cancelled:"[\u5DF2\u53D6\u6D88] \u64CD\u4F5C\u5DF2\u88AB\u7528\u6237\u53D6\u6D88"}};function Fe(e,t){let o=U[R][e]??U.en[e]??e;if(t)for(let[i,s]of Object.entries(t))o=o.replace(`{${i}}`,String(s));return o}r(Fe,"t");import b from"fs";import L from"path";var He=L.join(v(),"capability-cache.json");function B(){return L.join(v(),"capability-cache.json")}r(B,"getCapabilityCacheFile");function A(e,t){return`${e}/${t??""}`}r(A,"capabilityCacheKey");function q(e,t){if(t.length===0)return e;let n=new Set(t);return{...e,supportedEfforts:e.supportedEfforts?.filter(o=>!n.has(o.value)),localRejectEfforts:Array.from(new Set([...e.localRejectEfforts??[],...t]))}}r(q,"narrowReasoningProfile");function se(e,t,n){return e[A(t,n)]?.rejected??[]}r(se,"getRejectedEfforts");function ce(e,t,n,o,i,s){let c=A(t,n),l=e[c],a=l?.rejected.includes(o)?l.rejected:[...l?.rejected??[],o];return{...e,[c]:{rejected:a,source:i,updatedAt:s}}}r(ce,"addRejectedEffort");function ae(e,t,n){if(!t)return{};let o={...e};return delete o[A(t,n)],o}r(ae,"removeCacheEntry");function le(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let i=o,s=Array.isArray(i.rejected)?i.rejected.filter(a=>typeof a=="string"):[],c=i.source==="probed"?"probed":"observed",l=typeof i.updatedAt=="string"?i.updatedAt:"";t[n]={rejected:s,source:c,updatedAt:l}}return t}r(le,"sanitizeCache");var m=null;function k(){if(m)return m;let e=B();try{m=b.existsSync(e)?le(JSON.parse(b.readFileSync(e,"utf-8"))):{}}catch{m={}}return m}r(k,"loadCapabilityCache");function J(e){m=e;let t=B();b.mkdirSync(L.dirname(t),{recursive:!0}),b.writeFileSync(t,JSON.stringify(e,null,2))}r(J,"persistCapabilityCache");function W(e,t){return se(k(),e,t)}r(W,"getCachedRejectedEfforts");function Ue(e,t,n,o,i){J(ce(k(),e,t,n,o,i))}r(Ue,"recordRejectedEffort");function ze(e,t){J(ae(k(),e,t))}r(ze,"clearCapabilityCache");var me=de(ue),Z=v(),rt=d.join(Z,"sessions"),p=d.join(Z,"config.json"),it=60,f=null,I=!1,ge="dumb";function ye(e){let t=d.basename(e).toLowerCase(),n="__KODAX_SHELL_ENV_START__",o=`printf '%s\\0' '${n}'; env -0`;return t==="fish"?{args:["-i","-c",o],sentinel:n}:{args:t==="bash"||t==="zsh"?["-ic",o]:["-lc",o],sentinel:n}}r(ye,"buildShellEnvCommand");function ve(e,t){let n=`${t}\0`,o=e.lastIndexOf(n);if(o===-1)return{};let i=e.slice(o+n.length),s={};for(let c of i.split("\0")){if(!c)continue;let l=c.indexOf("=");l<=0||(s[c.slice(0,l)]=c.slice(l+1))}return s}r(ve,"parseNullDelimitedShellEnv");function he(e={}){let t=e.env??process.env;if((e.platform??process.platform)==="win32"||t.KODAX_DISABLE_SHELL_ENV_HYDRATION==="1")return!1;let o=e.shell??t.SHELL;if(!o||!d.isAbsolute(o))return!1;let{args:i,sentinel:s}=ye(o),c=e.run??fe,l={...t,TERM:ge},a=c(o,i,{encoding:"utf8",env:l,maxBuffer:1024*1024,timeout:5e3,windowsHide:!0,detached:!0,stdio:["ignore","pipe","pipe"]});if(a.status!==0||!a.stdout)return!1;let ne=typeof a.stdout=="string"?a.stdout:a.stdout.toString("utf8"),oe=ve(ne,s),M=!1;for(let[_,re]of Object.entries(oe))_!=="TERM"&&t[_]===void 0&&(t[_]=re,M=!0);return M}r(he,"hydrateProcessEnvFromShell");function be(){if(!I){I=!0;try{he()}catch{}}}r(be,"ensureShellEnvironmentHydrated");function st(){I=!1}r(st,"resetShellEnvironmentHydrationForTesting");function Ee(e){$(e.customProviders??[])}r(Ee,"registerConfiguredCustomProviders");function ee(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string").map(n=>n.trim()).filter(n=>n.length>0);return t.length>0?t:[]}r(ee,"normalizeConfiguredExtensions");function Ce(e){if(e.permissionMode!=="default")return e;let t={...e,permissionMode:"accept-edits"};try{u.mkdirSync(d.dirname(p),{recursive:!0}),u.writeFileSync(p,JSON.stringify(t,null,2))}catch{}return t}r(Ce,"migrateLegacyPermissionModeInConfig");function Se(e){if(e.permissionMode!=="auto-in-project")return e;try{let t=u.readFileSync(p,"utf-8"),n=t.replace(/("permissionMode"\s*:\s*)"auto-in-project"/,'$1"auto"');n!==t&&u.writeFileSync(p,n)}catch{}return{...e,permissionMode:"auto"}}r(Se,"migrateAutoInProjectAliasInConfig");function _e(){if(f)return f;let e="0.7.57";if(e)return f=e,f;let t=d.join(d.dirname(pe(import.meta.url)),"../../package.json");if(u.existsSync(t))try{return f=JSON.parse(u.readFileSync(t,"utf-8")).version??"0.0.0",f??"0.0.0"}catch{}return f="0.0.0",f}r(_e,"getVersion");var ct=_e();function Pe(e){return j(e)}r(Pe,"getProviderModel");function O(e,t){let n=new Set(e.map(i=>i.toLowerCase())),o=[...e];for(let i of t)n.has(i.toLowerCase())||o.push(i);return o}r(O,"mergeModels");function we(e,t){t||(t=S().providerModels);let n=t?.[e];if(n&&n.length>0){try{let o=w(e);if(o.length>0)return O(n,o)}catch{}try{let o=y(e);if(o)return O(n,o.getAvailableModels())}catch{}return n}try{let o=w(e);if(o.length>0)return o}catch{}try{let o=y(e);if(o)return o.getAvailableModels()}catch{}return[]}r(we,"getProviderAvailableModels");function xe(e,t){let n=N(e,t);if(n!=="unknown")return n;try{let o=y(e);if(o)return o.getReasoningCapability(t)}catch{}return"unknown"}r(xe,"getProviderReasoningCapability");function Re(e){let t=F(e);if(t)return t;try{return x().find(o=>o.name===e)?.capabilityProfile??null}catch{return null}}r(Re,"getProviderCapabilityProfile");function te(e,t){let n=Re(e),o=xe(e,t);if(n)return{capabilityProfile:n,reasoningCapability:o};try{let i=X(e);return{capabilityProfile:i.getCapabilityProfile(),reasoningCapability:i.getReasoningCapability(t)}}catch{return null}}r(te,"getProviderCapabilityMetadata");function at(e,t){let n=te(e,t);return n?G({providerName:e,model:t,capabilityProfile:n.capabilityProfile,reasoningCapability:n.reasoningCapability==="unknown"?void 0:n.reasoningCapability}):null}r(at,"getProviderCapabilitySnapshot");function Le(e,t,n,o){let i=te(e,t);return i?H({providerName:e,model:t,capabilityProfile:i.capabilityProfile,reasoningCapability:i.reasoningCapability==="unknown"?void 0:i.reasoningCapability,reasoningMode:n,hints:o}):null}r(Le,"getProviderPolicyDecision");function lt(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"forwards only the latest user message":"preserves full conversation history",o=e.mcpSupport==="native"?"MCP available":"MCP unavailable";return`${t}; ${n}; ${o}`}r(lt,"describeProviderCapabilitySummary");function ut(e){switch(e){case"native-budget":return"B";case"native-effort":return"E";case"native-toggle":return"T";case"native-adaptive":return"A";default:return"-"}}r(ut,"formatReasoningCapabilityShort");function g(e){if(e)return e==="none"?"off":e}r(g,"formatReasoningEffortForDisplay");function E(e,t){let n=g(t);n&&!e.includes(n)&&e.push(n)}r(E,"pushUniqueEffortDisplay");function ft(e,t){let n=["auto"],i=C(e,t)?.supportedEfforts?.filter(s=>s.isUserVisible!==!1);if(!i||i.length===0){for(let s of["off","low","medium","high"])E(n,s);return n}for(let s of i)E(n,s.value);return n}r(ft,"getProviderReasoningEffortOptions");function dt(e,t){let n=C(e,t),o=new Set(n?.disabledEfforts??[]),i=n?.supportedEfforts?.filter(a=>a.isUserVisible!==!1),s=[],c=n?.supportsDisabledThinking===!0;if(!i||i.length===0){for(let a of["low","medium","high"])E(s,a);c=!0}else for(let a of i){if(a.value==="none"){c=!0;continue}if(o.has(a.value)){c=!0;continue}E(s,a.value)}let l=[];return c&&l.push("off"),l.push(...s),l.push("auto"),l}r(dt,"getProviderReasoningEffortCycle");function Ae(e,t){if(t===!1)return"off";switch(e){case"off":return"off";case"quick":return"low";case"balanced":return"medium";case"deep":return"high";default:return"auto"}}r(Ae,"legacyReasoningModeToEffortDisplay");function C(e,t){let n=t??Pe(e);if(!n)return;let o=V(e,n)?.reasoningProfile;if(o)return q(o,W(e,n))}r(C,"resolveReasoningProfileForDisplay");function pt(e){let t=g(e.effort)??Ae(e.reasoningMode,e.thinking),n=C(e.provider,e.model);if(!n)return t;try{let o=D({capability:n,explicitEffort:e.effortOverride?e.effort:void 0,sessionEffort:e.effortOverride?void 0:e.effort,legacyReasoningMode:e.reasoningMode,thinking:e.thinking}),i=g(o.configuredEffort)??t,c=o.configuredEffort!==void 0&&n.disabledEfforts?.includes(o.configuredEffort)===!0?"off":g(o.effectiveEffort);return c&&c!==i?`${i}->${c}`:i}catch{if(e.effort)try{let o=P({currentEffort:e.effort,capability:n}),i=g(e.effort)??t,s=g(o.effectiveEffort);return s&&s!==i?`${i}->${s}`:i}catch{return t}return t}}r(pt,"formatReasoningEffortStatusLabel");function mt(e){let t=je(e);if(!t)return{preserved:!0};let n=C(e.provider,e.model);if(!n)return{configuredEffort:t,runtimeEffort:t,preserved:!0};let o=P({currentEffort:t,capability:n});return{configuredEffort:t,runtimeEffort:o.effectiveEffort,preserved:o.preserved,diagnostic:o.diagnostic}}r(mt,"resolveProviderReasoningRuntimeEffort");function ke(e){switch(e){case"native-budget":return"budget";case"native-effort":return"effort";case"native-toggle":return"toggle";case"native-adaptive":return"adaptive";default:return"none"}}r(ke,"describeReasoningCapabilityControl");function gt(e,t){if(e==="off")return"Reasoning disabled";switch(t){case"native-budget":return"Uses native thinking budget control";case"native-effort":return"Uses native reasoning effort control";case"native-toggle":return"Uses provider-native thinking toggle only";case"native-adaptive":return"Model adaptively decides thinking depth (Opus 4.7+)";case"none":return"Runs without native reasoning parameters";case"prompt-only":return"Uses prompt overlays only; no native reasoning parameter";default:return"Runs without native reasoning parameters"}}r(gt,"describeReasoningExecution");function yt(e){let t=[];e||(e=S().providerModels);for(let n of K())t.push({name:n.name,model:n.model,models:we(n.name,e),configured:n.capabilityProfile.transport==="cli-bridge"?!0:n.configured,reasoningCapability:n.reasoningCapability,capabilityProfile:n.capabilityProfile});try{let n=x().map(o=>({...o,models:(()=>{let i=e?.[o.name];return i&&i.length>0?O(i,o.models):o.models})()}));t.push(...n)}catch{}return t}r(yt,"getProviderList");function vt(e){if(T(e))return!0;try{return y(e)?.isConfigured()??!1}catch{return!1}}r(vt,"isProviderConfigured");function S(){try{if(u.existsSync(p)){let e=JSON.parse(u.readFileSync(p,"utf-8")),t=e.reasoningCeiling??e.reasoningMode;return Se(Ce({...e,reasoningMode:t,extensions:ee(e.extensions)}))}}catch{}return{}}r(S,"loadConfig");function Ie(e){e.streamIdleTimeoutMs&&!process.env.KODAX_STREAM_IDLE_TIMEOUT_MS&&(process.env.KODAX_STREAM_IDLE_TIMEOUT_MS=String(e.streamIdleTimeoutMs))}r(Ie,"applyResilienceRuntimeEnv");function Oe(e){e.repoIntelligenceMode&&!process.env.KODAX_REPO_INTELLIGENCE&&(process.env.KODAX_REPO_INTELLIGENCE=e.repoIntelligenceMode),e.repoIntelligenceTrace===!0&&!process.env.KODAX_REPO_INTELLIGENCE_TRACE&&(process.env.KODAX_REPO_INTELLIGENCE_TRACE="1")}r(Oe,"applyRepoIntelligenceRuntimeEnv");function Me(e){e.verifierLog===!0&&!process.env.KODAX_VERIFIER_LOG&&(process.env.KODAX_VERIFIER_LOG="1")}r(Me,"applyVerifierRuntimeEnv");function De(e){e.stallLog===!0&&!process.env.KODAX_STALL_LOG&&(process.env.KODAX_STALL_LOG="1")}r(De,"applyStallSidecarRuntimeEnv");function Te(e){let t=e.fallbackProviders?.filter(n=>n.trim().length>0)??[];t.length>0&&!process.env.KODAX_FALLBACK_PROVIDERS&&(process.env.KODAX_FALLBACK_PROVIDERS=t.join(","))}r(Te,"applyFallbackRuntimeEnv");function ht(){be();let e=S();return Ie(e),Oe(e),Me(e),De(e),Te(e),Ee(e),z(e.locale),e}r(ht,"prepareRuntimeConfig");function bt(e){let n={...S(),...e},o=ee(n.extensions);o!==void 0&&(n.extensions=o);for(let i of Object.keys(e))e[i]===void 0&&delete n[i];u.mkdirSync(d.dirname(p),{recursive:!0}),u.writeFileSync(p,JSON.stringify(n,null,2))}r(bt,"saveConfig");function Et(e,t){return e.effort!==void 0||t.effort!==void 0}r(Et,"resolveInitialEffortOverride");function je(e){return e.permissionMode==="plan"&&e.effortOverride!==!0&&e.planModeEffort!==void 0?e.planModeEffort:e.effort}r(je,"resolvePermissionModeEffort");async function Ct(e){try{let{stdout:t}=await me("git rev-parse --show-toplevel",{cwd:e});return t.trim()}catch{return null}}r(Ct,"getGitRoot");function Ne(e){switch(e){case"builtin":return"Built-in";case"runtime":return"Runtime extension";case"custom":return"Custom config";default:return"Unknown"}}r(Ne,"formatProviderSourceKind");function St(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"latest-user-message only":"full conversation history";return[`Source: ${Ne(e.sourceKind)}`,`Transport: ${t}`,`Conversation semantics: ${n}`,`Context fidelity: ${e.contextFidelity}`,`Tool calling: ${e.toolCallingFidelity}`,`Session behavior: ${e.sessionSupport}`,`Long-running support: ${e.longRunningSupport}`,`Evidence-heavy flows: ${e.evidenceSupport}`,`Multimodal support: ${e.multimodalSupport}`,`MCP support: ${e.mcpSupport}`,`Reasoning control: ${ke(e.reasoningCapability)}`]}r(St,"formatProviderCapabilityDetailLines");function _t(e,t,n){return[{label:"General coding",hints:{}},{label:"Evidence-heavy review",hints:{evidenceHeavy:!0}},{label:"Long-running task",hints:{longRunning:!0}}].map(i=>({label:i.label,decision:Le(e,t,n,i.hints)})).filter(i=>i.decision!==null)}r(_t,"getProviderCommonPolicyScenarios");var Y=.5,Q=0,h={locked:!1,queue:[]};async function Pt(e){for(;h.locked;)await new Promise(t=>h.queue.push(t));h.locked=!0;try{let t=(Date.now()-Q)/1e3;t<Y&&await new Promise(o=>setTimeout(o,(Y-t)*1e3));let n=await e();return Q=Date.now(),n}finally{h.locked=!1;let t=h.queue.shift();t&&t()}}r(Pt,"rateLimitedCall");export{Fe as a,W as b,Ue as c,ze as d,Z as e,rt as f,p as g,it as h,he as i,st as j,Ee as k,_e as l,ct as m,Pe as n,we as o,xe as p,Re as q,at as r,Le as s,lt as t,ut as u,g as v,ft as w,dt as x,pt as y,mt as z,ke as A,gt as B,yt as C,vt as D,S as E,ht as F,bt as G,Et as H,je as I,Ct as J,Ne as K,St as L,_t as M,Pt as N};