@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.
- package/CHANGELOG.md +2032 -1920
- package/README.md +1228 -1219
- package/README_CN.md +647 -638
- package/dist/chunks/agent-QQCRBU4C.js +2 -0
- package/dist/chunks/argument-completer-7Q2T4YWA.js +2 -0
- package/dist/chunks/{chunk-LZKGOR2C.js → chunk-2UUOFT3Z.js} +1 -1
- package/dist/chunks/chunk-5GPJ6MB5.js +405 -0
- package/dist/chunks/chunk-BEXLPFFB.js +7 -0
- package/dist/chunks/chunk-D6QVXQNI.js +1 -0
- package/dist/chunks/chunk-D7RENPQQ.js +322 -0
- package/dist/chunks/chunk-PRIBJN5E.js +683 -0
- package/dist/chunks/chunk-S4GVQO3W.js +31 -0
- package/dist/chunks/chunk-SDSLWDAZ.js +17 -0
- package/dist/chunks/chunk-SVEJFERZ.js +326 -0
- package/dist/chunks/chunk-TBXP7FEG.js +52 -0
- package/dist/chunks/chunk-UA744TZM.js +2 -0
- package/dist/chunks/{chunk-YSVPF6SN.js → chunk-UXQILGRX.js} +262 -259
- package/dist/chunks/{chunk-4SHP3M67.js → chunk-YADBB5GN.js} +1 -1
- package/dist/chunks/chunk-Z23LK3IV.js +310 -0
- package/dist/chunks/chunk-Z3ZXV3DZ.js +18 -0
- package/dist/chunks/compaction-config-GQIPCVFD.js +2 -0
- package/dist/chunks/{construction-bootstrap-55B7Q5RX.js → construction-bootstrap-YON4ZEMO.js} +1 -1
- package/dist/chunks/dist-73L4OYPD.js +2 -0
- package/dist/chunks/dist-EZXBR6NW.js +2 -0
- package/dist/chunks/host-LO6ZNTMV.js +2 -0
- package/dist/chunks/paste-4THGP5XW.js +2 -0
- package/dist/chunks/run-manager-HTLXKU66.js +2 -0
- package/dist/chunks/utils-5XVW33SY.js +2 -0
- package/dist/index.d.ts +15 -14
- package/dist/index.js +2 -2
- package/dist/kodax_cli.js +1222 -1047
- package/dist/provider-capabilities.json +971 -986
- package/dist/sdk-agent.d.ts +156 -14
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +253 -188
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-llm.d.ts +66 -43
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +18 -2
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +21 -22
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-session.d.ts +8 -7
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.d.ts +4 -231
- package/dist/sdk-skills.js +1 -1
- package/dist/types-chunks/{base.d-BnjQrSVf.d.ts → base.d-BA9Doaj_.d.ts} +3 -3
- package/dist/types-chunks/{bash-prefix-extractor.d-BgvMbfq6.d.ts → bash-prefix-extractor.d-BNdpV4Cf.d.ts} +515 -69
- package/dist/types-chunks/capability-learning.d-DRV80ISB.d.ts +29 -0
- package/dist/types-chunks/{cost-tracker.d-wRtyEW9d.d.ts → cost-tracker.d-CBLk1fiD.d.ts} +24 -2
- package/dist/types-chunks/{guardrail.d-C1DhxnvC.d.ts → guardrail.d-CNdKuSD_.d.ts} +4 -4
- package/dist/types-chunks/{process.d-BZncyzEj.d.ts → process.d-BOrAxjvM.d.ts} +188 -15
- package/dist/types-chunks/{resolver.d-ZvKQgl0X.d.ts → resolver.d-DFAKKUvt.d.ts} +87 -4
- package/dist/types-chunks/{capsule.d-DwJp5r63.d.ts → run-manager.d-CsJC9zYf.d.ts} +113 -5
- package/dist/types-chunks/{sdk-session-DAScB0rW.d.ts → sdk-session-ByZlwgdM.d.ts} +83 -9
- package/dist/types-chunks/{storage.d-CPvn9qI0.d.ts → storage.d-DHL3XpAL.d.ts} +2 -2
- package/dist/types-chunks/{guardrail.d-BP3yyr6u.d.ts → types.d-CE_Ter29.d.ts} +125 -3
- package/dist/types-chunks/{types.d-6VOXvF88.d.ts → types.d-Ci5YPFEh.d.ts} +39 -5
- package/dist/types-chunks/types.d-vJExiRje.d.ts +232 -0
- package/dist/types-chunks/{utils.d-CpgVIjYZ.d.ts → utils.d-D9FHU4wB.d.ts} +84 -6
- package/package.json +2 -2
- package/dist/chunks/agent-EHWQZA4C.js +0 -2
- package/dist/chunks/argument-completer-AYDAYGKL.js +0 -2
- package/dist/chunks/chunk-3WWPJGPQ.js +0 -2
- package/dist/chunks/chunk-KN6IJMTB.js +0 -636
- package/dist/chunks/chunk-MJFPFRGK.js +0 -423
- package/dist/chunks/chunk-N2N2W3AQ.js +0 -584
- package/dist/chunks/chunk-PCPFLPS4.js +0 -5
- package/dist/chunks/chunk-TCLSPUTR.js +0 -31
- package/dist/chunks/chunk-VACH6QWN.js +0 -315
- package/dist/chunks/compaction-config-TLDMFMZO.js +0 -2
- package/dist/chunks/dist-IE4HVWP7.js +0 -2
- package/dist/chunks/dist-IKOK2MJQ.js +0 -2
- package/dist/chunks/paste-WTL2XN7P.js +0 -2
- package/dist/chunks/utils-EJ2VCRTC.js +0 -2
- 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 {
|
|
2
|
-
import { c as SessionStorage$1, b as PermissionMode } from './storage.d-
|
|
3
|
-
import {
|
|
4
|
-
import { j as KodaXMessage, E as KodaXReasoningMode, o as KodaXProviderCapabilityProfile, d as KodaXCustomProviderConfig } from './types.d-
|
|
5
|
-
import { A as AgentsFile, f as AutoModeStats, l as KodaXMcpServersConfig } from './guardrail.d-
|
|
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,
|
|
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.
|
|
4
|
-
"description": "
|
|
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};
|