@wrongstack/core 0.2.0 → 0.3.1

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 (53) hide show
  1. package/dist/{agent-bridge-DmBiCipY.d.ts → agent-bridge-C3DUGjSb.d.ts} +1 -1
  2. package/dist/{compactor-DSl2FK7a.d.ts → compactor-BUU6Zm_3.d.ts} +1 -1
  3. package/dist/{config-DXrqb41m.d.ts → config-CKLYPkCi.d.ts} +1 -1
  4. package/dist/{context-u0bryklF.d.ts → context-IovtuTf8.d.ts} +2 -0
  5. package/dist/coordination/index.d.ts +11 -11
  6. package/dist/coordination/index.js +24 -1
  7. package/dist/coordination/index.js.map +1 -1
  8. package/dist/defaults/index.d.ts +30 -15
  9. package/dist/defaults/index.js +321 -2
  10. package/dist/defaults/index.js.map +1 -1
  11. package/dist/{events-B6Q03pTu.d.ts → events-CNB9PALO.d.ts} +27 -1
  12. package/dist/execution/index.d.ts +12 -12
  13. package/dist/extension/index.d.ts +9 -0
  14. package/dist/extension/index.js +234 -0
  15. package/dist/extension/index.js.map +1 -0
  16. package/dist/{plugin-CoYYZKdn.d.ts → index-BDb0cAMP.d.ts} +370 -11
  17. package/dist/index.d.ts +75 -25
  18. package/dist/index.js +1864 -1347
  19. package/dist/index.js.map +1 -1
  20. package/dist/infrastructure/index.d.ts +6 -6
  21. package/dist/kernel/index.d.ts +12 -9
  22. package/dist/kernel/index.js +73 -7
  23. package/dist/kernel/index.js.map +1 -1
  24. package/dist/{mcp-servers-BA1Ofmfj.d.ts → mcp-servers-DR35ojJZ.d.ts} +3 -3
  25. package/dist/models/index.d.ts +2 -2
  26. package/dist/models/index.js +24 -1
  27. package/dist/models/index.js.map +1 -1
  28. package/dist/{multi-agent-BDfkxL5C.d.ts → multi-agent-B9a6sflH.d.ts} +2 -2
  29. package/dist/observability/index.d.ts +2 -2
  30. package/dist/{path-resolver-Crkt8wTQ.d.ts → path-resolver-Cl_q0u-R.d.ts} +2 -2
  31. package/dist/provider-runner-BXuADQqQ.d.ts +36 -0
  32. package/dist/sdd/index.d.ts +3 -3
  33. package/dist/{secret-scrubber-3TLUkiCV.d.ts → secret-scrubber-CgG2tV2B.d.ts} +1 -1
  34. package/dist/{secret-scrubber-CwYliRWd.d.ts → secret-scrubber-Cuy5afaQ.d.ts} +1 -1
  35. package/dist/security/index.d.ts +3 -3
  36. package/dist/security/index.js +24 -1
  37. package/dist/security/index.js.map +1 -1
  38. package/dist/{selector-BRqzvugb.d.ts → selector-wT2fv9Fg.d.ts} +1 -1
  39. package/dist/{session-reader-C3x96CDR.d.ts → session-reader-CcPi4BQ8.d.ts} +1 -1
  40. package/dist/{skill-Bx8jxznf.d.ts → skill-C_7znCIC.d.ts} +2 -2
  41. package/dist/storage/index.d.ts +5 -5
  42. package/dist/storage/index.js +24 -1
  43. package/dist/storage/index.js.map +1 -1
  44. package/dist/{renderer-0A2ZEtca.d.ts → system-prompt-Dk1qm8ey.d.ts} +30 -2
  45. package/dist/{tool-executor-CYdZdtno.d.ts → tool-executor-DKu4A6nB.d.ts} +5 -5
  46. package/dist/types/index.d.ts +16 -16
  47. package/dist/types/index.js +24 -1
  48. package/dist/types/index.js.map +1 -1
  49. package/dist/utils/index.d.ts +1 -1
  50. package/dist/utils/index.js +24 -1
  51. package/dist/utils/index.js.map +1 -1
  52. package/package.json +5 -1
  53. package/dist/system-prompt-CG9jU5-5.d.ts +0 -31
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/atomic-write.ts","../../src/models/models-registry.ts","../../src/types/mode.ts","../../src/models/mode-store.ts","../../src/types/blocks.ts","../../src/models/llm-selector.ts"],"names":["path","stat","fs2","path2","fs3"],"mappings":"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","file":"index.js","sourcesContent":["import { randomBytes } from 'node:crypto';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\n\nexport interface AtomicWriteOptions {\n mode?: number;\n encoding?: BufferEncoding;\n}\n\nexport async function atomicWrite(\n targetPath: string,\n content: string | Uint8Array,\n opts: AtomicWriteOptions = {},\n): Promise<void> {\n const dir = path.dirname(targetPath);\n await fs.mkdir(dir, { recursive: true });\n const tmp = path.join(dir, `.${path.basename(targetPath)}.${randomBytes(6).toString('hex')}.tmp`);\n\n // Write content to tmp first; 'wx' ensures exclusive creation (fails if\n // tmp already exists — extremely unlikely with 6-byte random suffix).\n try {\n if (typeof content === 'string') {\n await fs.writeFile(tmp, content, { flag: 'wx', encoding: opts.encoding ?? 'utf8' });\n } else {\n await fs.writeFile(tmp, content, { flag: 'wx' });\n }\n try {\n const fh = await fs.open(tmp, 'r+');\n try {\n await fh.sync();\n } finally {\n await fh.close();\n }\n } catch {\n // fsync best-effort\n }\n // Now safely read mode from target (if it exists) and apply to tmp before rename.\n // Prefer opts.mode for new files; for existing files preserve their mode.\n let mode: number | undefined;\n try {\n const stat = await fs.stat(targetPath);\n mode = stat.mode & 0o777;\n } catch {\n mode = opts.mode;\n }\n if (mode !== undefined) {\n await fs.chmod(tmp, mode);\n }\n await fs.rename(tmp, targetPath);\n } catch (err) {\n try {\n await fs.unlink(tmp);\n } catch {\n // ignore cleanup error\n }\n throw err;\n }\n}\n\nexport async function ensureDir(dir: string): Promise<void> {\n await fs.mkdir(dir, { recursive: true });\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type {\n ModelsDevPayload,\n ModelsDevProvider,\n ModelsRegistry,\n ResolvedModel,\n ResolvedProvider,\n WireFamily,\n} from '../types/models-registry.js';\nimport { atomicWrite } from '../utils/atomic-write.js';\n\nconst DEFAULT_URL = 'https://models.dev/api.json';\nconst DEFAULT_TTL_SECONDS = 24 * 3600;\n\ninterface CacheEnvelope {\n fetchedAt: string;\n url: string;\n payload: ModelsDevPayload;\n}\n\nexport interface DefaultModelsRegistryOptions {\n cacheFile: string;\n url?: string;\n ttlSeconds?: number;\n fetchImpl?: typeof fetch;\n /** Pre-seeded payload — useful for offline scenarios and tests. */\n seed?: ModelsDevPayload;\n /**\n * Maximum age in seconds for stale cache fallback when network fails.\n * Defaults to 7 days. Set to `Infinity` for full offline resilience\n * (risk: deprecated models, wrong pricing). Set to `0` to disable\n * stale fallback entirely.\n */\n maxStaleAgeSeconds?: number;\n}\n\n/**\n * The npm package each models.dev provider declares determines which wire\n * family WrongStack speaks. Anything not listed falls into `unsupported` and\n * can be enabled by registering a custom provider factory via a plugin.\n */\nconst FAMILY_BY_NPM: Record<string, WireFamily> = {\n '@ai-sdk/anthropic': 'anthropic',\n '@ai-sdk/google-vertex/anthropic': 'anthropic',\n '@ai-sdk/openai': 'openai',\n '@ai-sdk/openai-compatible': 'openai-compatible',\n '@ai-sdk/groq': 'openai-compatible',\n '@ai-sdk/xai': 'openai-compatible',\n '@ai-sdk/cerebras': 'openai-compatible',\n '@ai-sdk/togetherai': 'openai-compatible',\n '@ai-sdk/perplexity': 'openai-compatible',\n '@ai-sdk/deepinfra': 'openai-compatible',\n '@openrouter/ai-sdk-provider': 'openai-compatible',\n 'ai-gateway-provider': 'openai-compatible',\n '@ai-sdk/vercel': 'openai-compatible',\n '@ai-sdk/gateway': 'openai-compatible',\n '@aihubmix/ai-sdk-provider': 'openai-compatible',\n 'venice-ai-sdk-provider': 'openai-compatible',\n '@ai-sdk/google': 'google',\n};\n\nexport function classifyFamily(npm: string | undefined): WireFamily {\n if (!npm) return 'unsupported';\n return FAMILY_BY_NPM[npm] ?? 'unsupported';\n}\n\nexport class DefaultModelsRegistry implements ModelsRegistry {\n private payload?: ModelsDevPayload;\n private fetchedAt?: Date;\n private readonly cacheFile: string;\n private readonly url: string;\n private readonly ttlMs: number;\n private readonly fetchImpl: typeof fetch;\n private readonly seed?: ModelsDevPayload;\n private readonly maxStaleAgeMs: number;\n\n constructor(opts: DefaultModelsRegistryOptions) {\n this.cacheFile = opts.cacheFile;\n this.url = opts.url ?? DEFAULT_URL;\n this.ttlMs = (opts.ttlSeconds ?? DEFAULT_TTL_SECONDS) * 1000;\n this.fetchImpl = opts.fetchImpl ?? fetch;\n this.seed = opts.seed;\n // Default max stale age: 7 days\n const maxStaleSeconds = opts.maxStaleAgeSeconds ?? 7 * 24 * 3600;\n this.maxStaleAgeMs = maxStaleSeconds * 1000;\n }\n\n async load(opts: { force?: boolean } = {}): Promise<ModelsDevPayload> {\n if (this.payload && !opts.force) return this.payload;\n if (this.seed) {\n this.payload = this.seed;\n this.fetchedAt = new Date();\n return this.payload;\n }\n if (!opts.force) {\n const cached = await this.readCache();\n if (cached && this.isFresh(cached.fetchedAt)) {\n this.payload = cached.payload;\n this.fetchedAt = new Date(cached.fetchedAt);\n return cached.payload;\n }\n }\n try {\n return await this.refresh();\n } catch (err) {\n // Network failed — fall back to stale cache if within maxStaleAgeMs.\n const cached = await this.readCache();\n if (cached && this.isWithinMaxStaleAge(cached.fetchedAt)) {\n this.payload = cached.payload;\n this.fetchedAt = new Date(cached.fetchedAt);\n return cached.payload;\n }\n throw err;\n }\n }\n\n async refresh(): Promise<ModelsDevPayload> {\n const res = await this.fetchImpl(this.url, {\n method: 'GET',\n headers: { accept: 'application/json' },\n });\n if (!res.ok) {\n throw new Error(`ModelsRegistry: HTTP ${res.status} fetching ${this.url}`);\n }\n const json = (await res.json()) as ModelsDevPayload;\n this.payload = json;\n this.fetchedAt = new Date();\n const envelope: CacheEnvelope = {\n fetchedAt: this.fetchedAt.toISOString(),\n url: this.url,\n payload: json,\n };\n await atomicWrite(this.cacheFile, JSON.stringify(envelope));\n return json;\n }\n\n async listProviders(): Promise<ResolvedProvider[]> {\n const payload = await this.load();\n return Object.values(payload).map((p) => this.resolveProvider(p));\n }\n\n async getProvider(id: string): Promise<ResolvedProvider | undefined> {\n const payload = await this.load();\n const p = payload[id];\n return p ? this.resolveProvider(p) : undefined;\n }\n\n async getModel(providerId: string, modelId: string): Promise<ResolvedModel | undefined> {\n const provider = await this.getProvider(providerId);\n if (!provider) return undefined;\n const model = provider.models.find((m) => m.id === modelId);\n if (!model) return undefined;\n return {\n providerId,\n modelId,\n capabilities: {\n tools: model.tool_call ?? false,\n vision: Boolean(model.modalities?.input?.includes('image')),\n reasoning: model.reasoning ?? false,\n maxContext: model.limit?.context ?? 0,\n maxOutput: model.limit?.output,\n knowledge: model.knowledge,\n },\n cost: model.cost,\n };\n }\n\n async suggestModel(providerId: string): Promise<string | undefined> {\n const provider = await this.getProvider(providerId);\n if (!provider || provider.models.length === 0) return undefined;\n const ranked = [...provider.models].sort((a, b) => {\n const at = a.release_date ?? a.last_updated ?? '';\n const bt = b.release_date ?? b.last_updated ?? '';\n return bt.localeCompare(at);\n });\n return ranked[0]?.id;\n }\n\n async ageSeconds(): Promise<number> {\n if (!this.fetchedAt) {\n const cached = await this.readCache();\n if (!cached) return Number.POSITIVE_INFINITY;\n return (Date.now() - new Date(cached.fetchedAt).getTime()) / 1000;\n }\n return (Date.now() - this.fetchedAt.getTime()) / 1000;\n }\n\n private resolveProvider(p: ModelsDevProvider): ResolvedProvider {\n return {\n id: p.id,\n name: p.name,\n family: classifyFamily(p.npm),\n apiBase: p.api,\n envVars: p.env ?? [],\n doc: p.doc,\n models: Object.values(p.models ?? {}),\n npm: p.npm,\n };\n }\n\n private isFresh(fetchedAtIso: string): boolean {\n return Date.now() - new Date(fetchedAtIso).getTime() < this.ttlMs;\n }\n\n private isWithinMaxStaleAge(fetchedAtIso: string): boolean {\n return Date.now() - new Date(fetchedAtIso).getTime() < this.maxStaleAgeMs;\n }\n\n private async readCache(): Promise<CacheEnvelope | undefined> {\n try {\n const raw = await fs.readFile(this.cacheFile, 'utf8');\n return JSON.parse(raw) as CacheEnvelope;\n } catch {\n return undefined;\n }\n }\n\n /** Used by `wstack models refresh` to expose where the cache lives. */\n cacheLocation(): string {\n return path.resolve(this.cacheFile);\n }\n}\n","export interface Mode {\n id: string;\n name: string;\n description: string;\n /** Additional prompt text injected into system prompt when mode is active */\n prompt: string;\n /** Tags for tool_search filtering */\n tags?: string[];\n /** Tools that should be prioritized/highlighted when this mode is active */\n toolPreferences?: string[];\n}\n\nexport interface ModeManifest {\n modes: Mode[];\n defaultMode?: string;\n}\n\nexport interface ModeStore {\n getActiveMode(): Promise<Mode | null>;\n setActiveMode(modeId: string | null): Promise<void>;\n listModes(): Promise<Mode[]>;\n getMode(modeId: string): Promise<Mode | null>;\n}\n\nexport interface ModeConfig {\n directory: string;\n}\n\nexport const DEFAULT_MODES: Mode[] = [\n {\n id: 'default',\n name: 'Default',\n description: 'General-purpose coding assistant',\n prompt: '',\n tags: ['general'],\n },\n {\n id: 'code-reviewer',\n name: 'Code Reviewer',\n description: 'Focus on code quality, best practices, and potential bugs',\n prompt: `## Code Reviewer Mode\n\nWhen reviewing code:\n- Look for potential bugs, race conditions, and edge cases\n- Check for security vulnerabilities (SQL injection, XSS, CSRF, etc.)\n- Evaluate error handling completeness\n- Assess code readability and maintainability\n- Check for performance anti-patterns\n- Verify test coverage for critical paths\n- Ensure naming conventions are followed`,\n tags: ['review', 'quality', 'security'],\n toolPreferences: ['read', 'grep', 'git', 'diff', 'test'],\n },\n {\n id: 'code-auditor',\n name: 'Code Auditor',\n description: 'Security-focused code analysis',\n prompt: `## Code Auditor Mode\n\nWhen auditing code for security:\n- Identify injection vulnerabilities (SQL, Command, XSS, LDAP)\n- Check authentication and authorization patterns\n- Look for sensitive data exposure (secrets, PII in logs)\n- Verify cryptographic implementations\n- Check for insecure dependencies or configurations\n- Assess input validation and output encoding\n- Look for timing attacks and information leakage`,\n tags: ['security', 'audit', 'compliance'],\n toolPreferences: ['grep', 'read', 'audit', 'bash'],\n },\n {\n id: 'architect',\n name: 'Software Architect',\n description: 'Design patterns, scalability, and system design',\n prompt: `## Architect Mode\n\nWhen designing or reviewing architecture:\n- Evaluate scalability and future growth\n- Check for appropriate design patterns\n- Assess coupling and cohesion\n- Look forSOLID principle violations\n- Evaluate data modeling decisions\n- Check for eventual consistency issues\n- Assess API design and contract stability\n- Consider operational aspects (monitoring, logging, deployment)`,\n tags: ['architecture', 'design', 'scalability'],\n toolPreferences: ['read', 'glob', 'tree', 'diff'],\n },\n {\n id: 'debugger',\n name: 'Debugger',\n description: 'Root cause analysis and error investigation',\n prompt: `## Debugger Mode\n\nWhen investigating bugs:\n- Reproduce the issue with minimal steps\n- Check error messages and stack traces thoroughly\n- Look for related logs and historical context\n- Verify assumptions about data flow\n- Check for race conditions in async code\n- Validate environment and configuration\n- Use binary search to isolate the root cause\n- Verify fixes with tests before considering done`,\n tags: ['debug', 'investigation', 'error-resolution'],\n toolPreferences: ['read', 'grep', 'bash', 'logs', 'test'],\n },\n {\n id: 'tester',\n name: 'QA Engineer',\n description: 'Test coverage, edge cases, and quality assurance',\n prompt: `## Tester Mode\n\nWhen testing or writing tests:\n- Cover happy path and error paths equally\n- Think about edge cases and boundary conditions\n- Check for missing null/undefined handling tests\n- Verify error messages are tested\n- Look for race condition tests in async code\n- Assess mutation testing opportunities\n- Check for integration test gaps\n- Verify test isolation and cleanup`,\n tags: ['testing', 'qa', 'quality'],\n toolPreferences: ['read', 'grep', 'test', 'bash'],\n },\n {\n id: 'devops',\n name: 'DevOps Engineer',\n description: 'Infrastructure, deployment, and operations',\n prompt: `## DevOps Mode\n\nWhen working on infrastructure:\n- Check for containerization and deployment readiness\n- Verify CI/CD pipeline configurations\n- Assess monitoring and alerting setup\n- Look for health check endpoints\n- Check for graceful shutdown handling\n- Verify backup and disaster recovery plans\n- Assess secrets management\n- Check for resource limits and quotas`,\n tags: ['devops', 'infrastructure', 'operations'],\n toolPreferences: ['read', 'bash', 'grep', 'logs', 'git'],\n },\n {\n id: 'refactorer',\n name: 'Refactorer',\n description: 'Code improvement and modernization',\n prompt: `## Refactorer Mode\n\nWhen refactoring code:\n- Maintain existing behavior — tests must pass before and after\n- Make one change at a time, verify after each\n- Prefer small, focused commits\n- Preserve API contracts unless explicitly changing\n- Remove dead code and comments\n- Improve naming as you go\n- Don't mix formatting changes with logic changes\n- Keep performance in mind — don't regress`,\n tags: ['refactor', 'modernization', 'improvement'],\n toolPreferences: ['read', 'edit', 'test', 'git', 'grep'],\n },\n];\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { Mode, ModeConfig, ModeManifest, ModeStore } from '../types/mode.js';\nimport { DEFAULT_MODES } from '../types/mode.js';\n\nexport class DefaultModeStore implements ModeStore {\n private activeModeId: string | null = null;\n private modes: Mode[];\n private configDir: string;\n\n constructor(config: ModeConfig) {\n this.configDir = config.directory;\n this.modes = [...DEFAULT_MODES];\n }\n\n async getActiveMode(): Promise<Mode | null> {\n if (!this.activeModeId) {\n await this.loadActiveMode();\n }\n if (!this.activeModeId) return null;\n return this.modes.find((m) => m.id === this.activeModeId) ?? null;\n }\n\n async setActiveMode(modeId: string | null): Promise<void> {\n this.activeModeId = modeId;\n await this.saveActiveMode();\n }\n\n async listModes(): Promise<Mode[]> {\n return [...this.modes];\n }\n\n async getMode(modeId: string): Promise<Mode | null> {\n return this.modes.find((m) => m.id === modeId) ?? null;\n }\n\n async addMode(mode: Mode): Promise<void> {\n const idx = this.modes.findIndex((m) => m.id === mode.id);\n if (idx >= 0) {\n this.modes[idx] = mode;\n } else {\n this.modes.push(mode);\n }\n }\n\n async removeMode(modeId: string): Promise<void> {\n const builtIn = DEFAULT_MODES.find((m) => m.id === modeId);\n if (builtIn) {\n throw new Error(`Cannot remove built-in mode \"${modeId}\"`);\n }\n this.modes = this.modes.filter((m) => m.id !== modeId);\n if (this.activeModeId === modeId) {\n this.activeModeId = null;\n await this.saveActiveMode();\n }\n }\n\n private async loadActiveMode(): Promise<void> {\n try {\n const configPath = path.join(this.configDir, 'mode.json');\n const content = await fs.readFile(configPath, 'utf8');\n const data = JSON.parse(content);\n this.activeModeId = data.activeMode ?? null;\n } catch {\n this.activeModeId = 'default';\n }\n }\n\n private async saveActiveMode(): Promise<void> {\n try {\n await fs.mkdir(this.configDir, { recursive: true });\n const configPath = path.join(this.configDir, 'mode.json');\n await fs.writeFile(\n configPath,\n JSON.stringify({ activeMode: this.activeModeId }, null, 2),\n 'utf8',\n );\n } catch {\n // ignore save errors\n }\n }\n}\n\nexport interface ModeLoaderOptions {\n projectModesDir?: string;\n userModesDir?: string;\n}\n\nexport async function loadProjectModes(modesDir: string): Promise<Mode[]> {\n const modes: Mode[] = [];\n try {\n const entries = await fs.readdir(modesDir);\n for (const entry of entries) {\n if (!entry.endsWith('.md') && !entry.endsWith('.txt')) continue;\n const filePath = path.join(modesDir, entry);\n const stat = await fs.stat(filePath);\n if (!stat.isFile()) continue;\n const content = await fs.readFile(filePath, 'utf8');\n const id = path.basename(entry, path.extname(entry));\n modes.push({\n id,\n name: id.replace(/[-_]/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase()),\n description: content.split('\\n')[0] ?? id,\n prompt: content,\n tags: ['project'],\n });\n }\n } catch {\n // no project modes\n }\n return modes;\n}\n\nexport async function loadUserModes(modesDir: string): Promise<Mode[]> {\n const modes: Mode[] = [];\n try {\n const manifestPath = path.join(modesDir, 'modes.json');\n const content = await fs.readFile(manifestPath, 'utf8');\n const manifest: ModeManifest = JSON.parse(content);\n for (const mode of manifest.modes) {\n modes.push(mode);\n }\n } catch {\n // no user modes\n }\n return modes;\n}\n","export interface TextBlock {\n type: 'text';\n text: string;\n cache_control?: { type: 'ephemeral' };\n}\n\nexport interface ToolUseBlock {\n type: 'tool_use';\n id: string;\n name: string;\n input: Record<string, unknown>;\n /**\n * Provider-specific opaque metadata captured from the wire response.\n * Echoed back verbatim in the next request so providers that bind\n * extra state to function calls keep working. Example: Gemini's\n * `thoughtSignature` — required for tool-use turns with thinking\n * models, otherwise the next request fails with 400 \"Function call\n * is missing a thought_signature in functionCall parts\".\n *\n * Keys are namespaced by intent so multiple wires can coexist:\n * - `google.thoughtSignature` — Gemini signed-thought blob\n * Other providers can add their own keys without colliding.\n */\n providerMeta?: Record<string, unknown>;\n}\n\nexport interface ToolResultBlock {\n type: 'tool_result';\n tool_use_id: string;\n /**\n * The original tool name. Useful for providers like Google Gemini that\n * need the tool name in `functionResponse.name` — the tool_use_id is\n * only a session-local identifier and is not stable across replays.\n * Always set by ToolExecutor; may be absent on manually-constructed blocks.\n */\n name?: string;\n content: string;\n is_error?: boolean;\n}\n\nexport interface ImageBlock {\n type: 'image';\n source: {\n type: 'base64' | 'url';\n media_type?: string;\n data?: string;\n url?: string;\n };\n}\n\n/**\n * Chain-of-thought / extended-thinking content emitted by the model.\n *\n * Both Anthropic extended thinking (`{type:'thinking', thinking, signature}`)\n * and DeepSeek reasoning mode (top-level `reasoning_content` on the assistant\n * message) require this content to be echoed back verbatim on the next\n * request, otherwise the provider returns 400:\n * - Anthropic: \"The `content[].thinking` in the thinking mode must be passed back\"\n * - DeepSeek: \"The `reasoning_content` in the thinking mode must be passed back\"\n *\n * `signature` is Anthropic-specific (an opaque integrity blob). DeepSeek\n * doesn't issue a signature — the field is absent for that provider.\n *\n * Per Anthropic, thinking blocks MUST appear before any text/tool_use blocks\n * in an assistant message. Stream builders preserve that order.\n */\nexport interface ThinkingBlock {\n type: 'thinking';\n thinking: string;\n signature?: string;\n providerMeta?: Record<string, unknown>;\n}\n\nexport type ContentBlock = TextBlock | ToolUseBlock | ToolResultBlock | ImageBlock | ThinkingBlock;\n\nexport function isTextBlock(b: ContentBlock): b is TextBlock {\n return b.type === 'text';\n}\nexport function isToolUseBlock(b: ContentBlock): b is ToolUseBlock {\n return b.type === 'tool_use';\n}\nexport function isToolResultBlock(b: ContentBlock): b is ToolResultBlock {\n return b.type === 'tool_result';\n}\nexport function isImageBlock(b: ContentBlock): b is ImageBlock {\n return b.type === 'image';\n}\nexport function isThinkingBlock(b: ContentBlock): b is ThinkingBlock {\n return b.type === 'thinking';\n}\n","import { isTextBlock } from '../types/blocks.js';\nimport type { Message } from '../types/messages.js';\nimport type { Provider, Request } from '../types/provider.js';\nimport type { MessageSelector, SelectorResult } from '../types/selector.js';\n\nexport interface LLMSelectorOptions {\n /** Provider used for the selector LLM call. Required. */\n provider: Provider;\n /** Model for the selector. Defaults to the provider's default model. */\n model?: string;\n /**\n * Maximum tokens to keep in context (target budget).\n * Selector will aim to keep total content below this.\n */\n maxContextTokens?: number;\n /**\n * Prompt instructing the selector how to behave.\n * Should guide the LLM on importance tiers and output format.\n */\n systemPrompt?: string;\n}\n\nconst DEFAULT_SYSTEM_PROMPT = `You are a context pruning assistant. Given a conversation history and a token budget, decide which message ranges are worth keeping verbatim and which should be collapsed into summaries.\n\nOutput a JSON object with this structure:\n{\n \"kept\": [{\"from\": 0, \"to\": 5, \"importance\": \"critical\"}],\n \"collapsed\": [{\"from\": 6, \"to\": 20, \"summary\": \"optional summary\"}],\n \"reasoning\": \"brief explanation of decisions\"\n}\n\nImportance tiers:\n- \"critical\": decisions, file edits, tool results that affect state, final answers\n- \"high\": substantive tool use, complex reasoning, non-obvious observations\n- \"medium\": routine exchanges, confirmations, straightforward Q&A\n\nRules:\n- Always keep the most recent K pairs (preserve recency)\n- Never collapse the final 2 user/assistant pairs (working memory)\n- Preserve tool results that modified files or had external effects\n- Collapse old, low-information exchanges (greetings, acknowledgements, etc.)\n- If unsure, keep rather than collapse (errors are more costly than waste)\n\nReturn ONLY the JSON object, no markdown, no explanation outside the JSON.`;\n\n/** Rough token estimation for a message array */\nfunction estimateTokens(messages: Message[]): number {\n let total = 0;\n for (const m of messages) {\n if (typeof m.content === 'string') {\n total += Math.ceil(m.content.length / 4);\n } else if (Array.isArray(m.content)) {\n for (const b of m.content) {\n if (b.type === 'text') total += Math.ceil(b.text.length / 4);\n else total += Math.ceil(JSON.stringify(b).length / 4);\n }\n }\n }\n return total;\n}\n\n/** Format messages as a compact text dump for the selector LLM */\nfunction formatMessages(messages: Message[], maxChars = 8000): string {\n const lines: string[] = [];\n let used = 0;\n for (let i = 0; i < messages.length; i++) {\n const m = messages[i]!;\n const role = m.role.padEnd(10, ' ');\n let text: string;\n if (typeof m.content === 'string') {\n text = m.content.slice(0, 500);\n } else {\n const content = m.content as import('../types/blocks.js').ContentBlock[];\n text = content\n .filter(isTextBlock)\n .map((b) => b.text)\n .join(' ');\n // Also capture tool names for context\n const toolUses = content.filter((b) => b.type === 'tool_use');\n if (toolUses.length > 0) {\n text += ` [tools: ${toolUses.map((b) => (b as { name: string }).name).join(', ')}]`;\n }\n }\n const line = `[${i}][${role}]: ${text}`;\n if (used + line.length > maxChars) break;\n lines.push(line);\n used += line.length;\n }\n return lines.join('\\n');\n}\n\n/**\n * LLM-powered message selector. Calls a sub-LLM to analyze the\n * message history and produce a keep/collapse plan — more surgical\n * than fixed-window rules.\n */\nexport class LLMSelector implements MessageSelector {\n private readonly provider: Provider;\n private readonly model: string;\n private readonly maxContextTokens: number;\n private readonly systemPrompt: string;\n\n constructor(opts: LLMSelectorOptions) {\n this.provider = opts.provider;\n this.model = opts.model ?? 'unknown';\n this.maxContextTokens = opts.maxContextTokens ?? 40_000;\n this.systemPrompt = opts.systemPrompt ?? DEFAULT_SYSTEM_PROMPT;\n }\n\n async select(messages: Message[], maxToKeep: number): Promise<SelectorResult> {\n const effectiveBudget = Math.min(maxToKeep, this.maxContextTokens);\n\n // Build a concise representation of the conversation\n const historyText = formatMessages(messages);\n const totalTokens = estimateTokens(messages);\n const systemText = `${this.systemPrompt}\\n\\nConversation (${messages.length} messages, ~${totalTokens} tokens, budget: ${effectiveBudget}):\\n`;\n\n // Add instruction to stay within budget\n const budgetInstruction =\n totalTokens > effectiveBudget\n ? `\\n\\nIMPORTANT: Total conversation (${totalTokens} tokens) exceeds budget (${effectiveBudget}). You MUST collapse enough to fit. Prefer collapsing older/lower-importance ranges.`\n : '';\n\n const req: Request = {\n model: this.model,\n system: [{ type: 'text', text: systemText + budgetInstruction }],\n messages: [{ role: 'user', content: historyText }],\n maxTokens: 1024,\n };\n\n let raw: string;\n try {\n // Wire the AbortController to the provider call so cancellation actually\n // fires — the original code passed a fresh signal that is never connected\n // to anything, leaking the controller on every selector call.\n const ac = new AbortController();\n const res = await this.provider.complete(req, { signal: ac.signal });\n const textBlocks = res.content.filter(isTextBlock);\n raw = textBlocks\n .map((b) => b.text)\n .join('\\n')\n .trim();\n } catch (err) {\n // Fallback: use simple recency-based selection\n return this.fallbackSelect(messages, effectiveBudget);\n }\n\n return this.parseSelectorOutput(raw, messages.length);\n }\n\n private fallbackSelect(messages: Message[], budget: number): SelectorResult {\n // Simple fallback: keep from the end until we hit budget\n const toKeep: SelectorResult['kept'] = [];\n const toCollapse: SelectorResult['collapsed'] = [];\n\n let tokenCount = 0;\n let startIdx = 0;\n\n // Scan from the end backwards\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i]!;\n const cost =\n typeof m.content === 'string'\n ? Math.ceil(m.content.length / 4)\n : m.content.reduce(\n (acc, b) =>\n acc +\n (b.type === 'text'\n ? Math.ceil(b.text.length / 4)\n : Math.ceil(JSON.stringify(b).length / 4)),\n 0,\n );\n\n if (tokenCount + cost <= budget) {\n tokenCount += cost;\n } else {\n startIdx = i + 1;\n break;\n }\n }\n\n if (startIdx > 0) {\n toCollapse.push({ from: 0, to: startIdx - 1 });\n }\n toKeep.push({ from: startIdx, to: messages.length - 1, importance: 'high' });\n\n return {\n kept: toKeep,\n collapsed: toCollapse,\n reasoning: `Fallback: kept last ${messages.length - startIdx} messages within ${budget} token budget`,\n };\n }\n\n private parseSelectorOutput(raw: string, messageCount: number): SelectorResult {\n // Try to extract JSON from the response\n const jsonStart = raw.indexOf('{');\n const jsonEnd = raw.lastIndexOf('}');\n if (jsonStart === -1 || jsonEnd === -1) {\n // Can't parse — use fallback\n return this.fallbackSelect(\n Array.from({ length: messageCount }, () => ({ role: 'user', content: '' }) as Message),\n this.maxContextTokens,\n );\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw.slice(jsonStart, jsonEnd + 1));\n } catch {\n return this.fallbackSelect(\n Array.from({ length: messageCount }, () => ({ role: 'user', content: '' }) as Message),\n this.maxContextTokens,\n );\n }\n\n const obj = parsed as Record<string, unknown>;\n const kept =\n (obj.kept as Array<{ from: number; to: number; importance: string }> | undefined) ?? [];\n const collapsed =\n (obj.collapsed as Array<{ from: number; to: number; summary?: string }> | undefined) ?? [];\n\n return {\n kept: kept.map((k) => ({\n from: k.from,\n to: k.to,\n importance: (k.importance ?? 'medium') as 'critical' | 'high' | 'medium',\n })),\n collapsed: collapsed.map((c) => ({ from: c.from, to: c.to, summary: c.summary })),\n reasoning: typeof obj.reasoning === 'string' ? obj.reasoning : '',\n };\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/atomic-write.ts","../../src/models/models-registry.ts","../../src/types/mode.ts","../../src/models/mode-store.ts","../../src/types/blocks.ts","../../src/models/llm-selector.ts"],"names":["path","stat","resolve","fs2","path2","fs3"],"mappings":"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","file":"index.js","sourcesContent":["import { randomBytes } from 'node:crypto';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\n\nexport interface AtomicWriteOptions {\n mode?: number;\n encoding?: BufferEncoding;\n}\n\nexport async function atomicWrite(\n targetPath: string,\n content: string | Uint8Array,\n opts: AtomicWriteOptions = {},\n): Promise<void> {\n const dir = path.dirname(targetPath);\n await fs.mkdir(dir, { recursive: true });\n const tmp = path.join(dir, `.${path.basename(targetPath)}.${randomBytes(6).toString('hex')}.tmp`);\n\n // Write content to tmp first; 'wx' ensures exclusive creation (fails if\n // tmp already exists — extremely unlikely with 6-byte random suffix).\n try {\n if (typeof content === 'string') {\n await fs.writeFile(tmp, content, { flag: 'wx', encoding: opts.encoding ?? 'utf8' });\n } else {\n await fs.writeFile(tmp, content, { flag: 'wx' });\n }\n try {\n const fh = await fs.open(tmp, 'r+');\n try {\n await fh.sync();\n } finally {\n await fh.close();\n }\n } catch {\n // fsync best-effort\n }\n // Now safely read mode from target (if it exists) and apply to tmp before rename.\n // Prefer opts.mode for new files; for existing files preserve their mode.\n let mode: number | undefined;\n try {\n const stat = await fs.stat(targetPath);\n mode = stat.mode & 0o777;\n } catch {\n mode = opts.mode;\n }\n if (mode !== undefined) {\n await fs.chmod(tmp, mode);\n }\n await renameWithRetry(tmp, targetPath);\n } catch (err) {\n try {\n await fs.unlink(tmp);\n } catch {\n // ignore cleanup error\n }\n throw err;\n }\n}\n\nexport async function ensureDir(dir: string): Promise<void> {\n await fs.mkdir(dir, { recursive: true });\n}\n\n// On Windows, fs.rename over an existing file can fail with EPERM/EBUSY/EACCES\n// when antivirus, file indexers, editor file watchers, or a concurrent writer\n// briefly hold a handle on the destination. These are transient — retry with a\n// short backoff before giving up. POSIX renames are atomic and won't hit this.\nconst TRANSIENT_RENAME_CODES = new Set(['EPERM', 'EBUSY', 'EACCES', 'ENOTEMPTY']);\n\nasync function renameWithRetry(from: string, to: string): Promise<void> {\n if (process.platform !== 'win32') {\n await fs.rename(from, to);\n return;\n }\n const delays = [10, 25, 60, 120, 250];\n let lastErr: unknown;\n for (let i = 0; i <= delays.length; i++) {\n try {\n await fs.rename(from, to);\n return;\n } catch (err) {\n lastErr = err;\n const code = (err as NodeJS.ErrnoException)?.code;\n if (!code || !TRANSIENT_RENAME_CODES.has(code) || i === delays.length) {\n throw err;\n }\n await new Promise((resolve) => setTimeout(resolve, delays[i]));\n }\n }\n throw lastErr;\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type {\n ModelsDevPayload,\n ModelsDevProvider,\n ModelsRegistry,\n ResolvedModel,\n ResolvedProvider,\n WireFamily,\n} from '../types/models-registry.js';\nimport { atomicWrite } from '../utils/atomic-write.js';\n\nconst DEFAULT_URL = 'https://models.dev/api.json';\nconst DEFAULT_TTL_SECONDS = 24 * 3600;\n\ninterface CacheEnvelope {\n fetchedAt: string;\n url: string;\n payload: ModelsDevPayload;\n}\n\nexport interface DefaultModelsRegistryOptions {\n cacheFile: string;\n url?: string;\n ttlSeconds?: number;\n fetchImpl?: typeof fetch;\n /** Pre-seeded payload — useful for offline scenarios and tests. */\n seed?: ModelsDevPayload;\n /**\n * Maximum age in seconds for stale cache fallback when network fails.\n * Defaults to 7 days. Set to `Infinity` for full offline resilience\n * (risk: deprecated models, wrong pricing). Set to `0` to disable\n * stale fallback entirely.\n */\n maxStaleAgeSeconds?: number;\n}\n\n/**\n * The npm package each models.dev provider declares determines which wire\n * family WrongStack speaks. Anything not listed falls into `unsupported` and\n * can be enabled by registering a custom provider factory via a plugin.\n */\nconst FAMILY_BY_NPM: Record<string, WireFamily> = {\n '@ai-sdk/anthropic': 'anthropic',\n '@ai-sdk/google-vertex/anthropic': 'anthropic',\n '@ai-sdk/openai': 'openai',\n '@ai-sdk/openai-compatible': 'openai-compatible',\n '@ai-sdk/groq': 'openai-compatible',\n '@ai-sdk/xai': 'openai-compatible',\n '@ai-sdk/cerebras': 'openai-compatible',\n '@ai-sdk/togetherai': 'openai-compatible',\n '@ai-sdk/perplexity': 'openai-compatible',\n '@ai-sdk/deepinfra': 'openai-compatible',\n '@openrouter/ai-sdk-provider': 'openai-compatible',\n 'ai-gateway-provider': 'openai-compatible',\n '@ai-sdk/vercel': 'openai-compatible',\n '@ai-sdk/gateway': 'openai-compatible',\n '@aihubmix/ai-sdk-provider': 'openai-compatible',\n 'venice-ai-sdk-provider': 'openai-compatible',\n '@ai-sdk/google': 'google',\n};\n\nexport function classifyFamily(npm: string | undefined): WireFamily {\n if (!npm) return 'unsupported';\n return FAMILY_BY_NPM[npm] ?? 'unsupported';\n}\n\nexport class DefaultModelsRegistry implements ModelsRegistry {\n private payload?: ModelsDevPayload;\n private fetchedAt?: Date;\n private readonly cacheFile: string;\n private readonly url: string;\n private readonly ttlMs: number;\n private readonly fetchImpl: typeof fetch;\n private readonly seed?: ModelsDevPayload;\n private readonly maxStaleAgeMs: number;\n\n constructor(opts: DefaultModelsRegistryOptions) {\n this.cacheFile = opts.cacheFile;\n this.url = opts.url ?? DEFAULT_URL;\n this.ttlMs = (opts.ttlSeconds ?? DEFAULT_TTL_SECONDS) * 1000;\n this.fetchImpl = opts.fetchImpl ?? fetch;\n this.seed = opts.seed;\n // Default max stale age: 7 days\n const maxStaleSeconds = opts.maxStaleAgeSeconds ?? 7 * 24 * 3600;\n this.maxStaleAgeMs = maxStaleSeconds * 1000;\n }\n\n async load(opts: { force?: boolean } = {}): Promise<ModelsDevPayload> {\n if (this.payload && !opts.force) return this.payload;\n if (this.seed) {\n this.payload = this.seed;\n this.fetchedAt = new Date();\n return this.payload;\n }\n if (!opts.force) {\n const cached = await this.readCache();\n if (cached && this.isFresh(cached.fetchedAt)) {\n this.payload = cached.payload;\n this.fetchedAt = new Date(cached.fetchedAt);\n return cached.payload;\n }\n }\n try {\n return await this.refresh();\n } catch (err) {\n // Network failed — fall back to stale cache if within maxStaleAgeMs.\n const cached = await this.readCache();\n if (cached && this.isWithinMaxStaleAge(cached.fetchedAt)) {\n this.payload = cached.payload;\n this.fetchedAt = new Date(cached.fetchedAt);\n return cached.payload;\n }\n throw err;\n }\n }\n\n async refresh(): Promise<ModelsDevPayload> {\n const res = await this.fetchImpl(this.url, {\n method: 'GET',\n headers: { accept: 'application/json' },\n });\n if (!res.ok) {\n throw new Error(`ModelsRegistry: HTTP ${res.status} fetching ${this.url}`);\n }\n const json = (await res.json()) as ModelsDevPayload;\n this.payload = json;\n this.fetchedAt = new Date();\n const envelope: CacheEnvelope = {\n fetchedAt: this.fetchedAt.toISOString(),\n url: this.url,\n payload: json,\n };\n await atomicWrite(this.cacheFile, JSON.stringify(envelope));\n return json;\n }\n\n async listProviders(): Promise<ResolvedProvider[]> {\n const payload = await this.load();\n return Object.values(payload).map((p) => this.resolveProvider(p));\n }\n\n async getProvider(id: string): Promise<ResolvedProvider | undefined> {\n const payload = await this.load();\n const p = payload[id];\n return p ? this.resolveProvider(p) : undefined;\n }\n\n async getModel(providerId: string, modelId: string): Promise<ResolvedModel | undefined> {\n const provider = await this.getProvider(providerId);\n if (!provider) return undefined;\n const model = provider.models.find((m) => m.id === modelId);\n if (!model) return undefined;\n return {\n providerId,\n modelId,\n capabilities: {\n tools: model.tool_call ?? false,\n vision: Boolean(model.modalities?.input?.includes('image')),\n reasoning: model.reasoning ?? false,\n maxContext: model.limit?.context ?? 0,\n maxOutput: model.limit?.output,\n knowledge: model.knowledge,\n },\n cost: model.cost,\n };\n }\n\n async suggestModel(providerId: string): Promise<string | undefined> {\n const provider = await this.getProvider(providerId);\n if (!provider || provider.models.length === 0) return undefined;\n const ranked = [...provider.models].sort((a, b) => {\n const at = a.release_date ?? a.last_updated ?? '';\n const bt = b.release_date ?? b.last_updated ?? '';\n return bt.localeCompare(at);\n });\n return ranked[0]?.id;\n }\n\n async ageSeconds(): Promise<number> {\n if (!this.fetchedAt) {\n const cached = await this.readCache();\n if (!cached) return Number.POSITIVE_INFINITY;\n return (Date.now() - new Date(cached.fetchedAt).getTime()) / 1000;\n }\n return (Date.now() - this.fetchedAt.getTime()) / 1000;\n }\n\n private resolveProvider(p: ModelsDevProvider): ResolvedProvider {\n return {\n id: p.id,\n name: p.name,\n family: classifyFamily(p.npm),\n apiBase: p.api,\n envVars: p.env ?? [],\n doc: p.doc,\n models: Object.values(p.models ?? {}),\n npm: p.npm,\n };\n }\n\n private isFresh(fetchedAtIso: string): boolean {\n return Date.now() - new Date(fetchedAtIso).getTime() < this.ttlMs;\n }\n\n private isWithinMaxStaleAge(fetchedAtIso: string): boolean {\n return Date.now() - new Date(fetchedAtIso).getTime() < this.maxStaleAgeMs;\n }\n\n private async readCache(): Promise<CacheEnvelope | undefined> {\n try {\n const raw = await fs.readFile(this.cacheFile, 'utf8');\n return JSON.parse(raw) as CacheEnvelope;\n } catch {\n return undefined;\n }\n }\n\n /** Used by `wstack models refresh` to expose where the cache lives. */\n cacheLocation(): string {\n return path.resolve(this.cacheFile);\n }\n}\n","export interface Mode {\n id: string;\n name: string;\n description: string;\n /** Additional prompt text injected into system prompt when mode is active */\n prompt: string;\n /** Tags for tool_search filtering */\n tags?: string[];\n /** Tools that should be prioritized/highlighted when this mode is active */\n toolPreferences?: string[];\n}\n\nexport interface ModeManifest {\n modes: Mode[];\n defaultMode?: string;\n}\n\nexport interface ModeStore {\n getActiveMode(): Promise<Mode | null>;\n setActiveMode(modeId: string | null): Promise<void>;\n listModes(): Promise<Mode[]>;\n getMode(modeId: string): Promise<Mode | null>;\n}\n\nexport interface ModeConfig {\n directory: string;\n}\n\nexport const DEFAULT_MODES: Mode[] = [\n {\n id: 'default',\n name: 'Default',\n description: 'General-purpose coding assistant',\n prompt: '',\n tags: ['general'],\n },\n {\n id: 'code-reviewer',\n name: 'Code Reviewer',\n description: 'Focus on code quality, best practices, and potential bugs',\n prompt: `## Code Reviewer Mode\n\nWhen reviewing code:\n- Look for potential bugs, race conditions, and edge cases\n- Check for security vulnerabilities (SQL injection, XSS, CSRF, etc.)\n- Evaluate error handling completeness\n- Assess code readability and maintainability\n- Check for performance anti-patterns\n- Verify test coverage for critical paths\n- Ensure naming conventions are followed`,\n tags: ['review', 'quality', 'security'],\n toolPreferences: ['read', 'grep', 'git', 'diff', 'test'],\n },\n {\n id: 'code-auditor',\n name: 'Code Auditor',\n description: 'Security-focused code analysis',\n prompt: `## Code Auditor Mode\n\nWhen auditing code for security:\n- Identify injection vulnerabilities (SQL, Command, XSS, LDAP)\n- Check authentication and authorization patterns\n- Look for sensitive data exposure (secrets, PII in logs)\n- Verify cryptographic implementations\n- Check for insecure dependencies or configurations\n- Assess input validation and output encoding\n- Look for timing attacks and information leakage`,\n tags: ['security', 'audit', 'compliance'],\n toolPreferences: ['grep', 'read', 'audit', 'bash'],\n },\n {\n id: 'architect',\n name: 'Software Architect',\n description: 'Design patterns, scalability, and system design',\n prompt: `## Architect Mode\n\nWhen designing or reviewing architecture:\n- Evaluate scalability and future growth\n- Check for appropriate design patterns\n- Assess coupling and cohesion\n- Look forSOLID principle violations\n- Evaluate data modeling decisions\n- Check for eventual consistency issues\n- Assess API design and contract stability\n- Consider operational aspects (monitoring, logging, deployment)`,\n tags: ['architecture', 'design', 'scalability'],\n toolPreferences: ['read', 'glob', 'tree', 'diff'],\n },\n {\n id: 'debugger',\n name: 'Debugger',\n description: 'Root cause analysis and error investigation',\n prompt: `## Debugger Mode\n\nWhen investigating bugs:\n- Reproduce the issue with minimal steps\n- Check error messages and stack traces thoroughly\n- Look for related logs and historical context\n- Verify assumptions about data flow\n- Check for race conditions in async code\n- Validate environment and configuration\n- Use binary search to isolate the root cause\n- Verify fixes with tests before considering done`,\n tags: ['debug', 'investigation', 'error-resolution'],\n toolPreferences: ['read', 'grep', 'bash', 'logs', 'test'],\n },\n {\n id: 'tester',\n name: 'QA Engineer',\n description: 'Test coverage, edge cases, and quality assurance',\n prompt: `## Tester Mode\n\nWhen testing or writing tests:\n- Cover happy path and error paths equally\n- Think about edge cases and boundary conditions\n- Check for missing null/undefined handling tests\n- Verify error messages are tested\n- Look for race condition tests in async code\n- Assess mutation testing opportunities\n- Check for integration test gaps\n- Verify test isolation and cleanup`,\n tags: ['testing', 'qa', 'quality'],\n toolPreferences: ['read', 'grep', 'test', 'bash'],\n },\n {\n id: 'devops',\n name: 'DevOps Engineer',\n description: 'Infrastructure, deployment, and operations',\n prompt: `## DevOps Mode\n\nWhen working on infrastructure:\n- Check for containerization and deployment readiness\n- Verify CI/CD pipeline configurations\n- Assess monitoring and alerting setup\n- Look for health check endpoints\n- Check for graceful shutdown handling\n- Verify backup and disaster recovery plans\n- Assess secrets management\n- Check for resource limits and quotas`,\n tags: ['devops', 'infrastructure', 'operations'],\n toolPreferences: ['read', 'bash', 'grep', 'logs', 'git'],\n },\n {\n id: 'refactorer',\n name: 'Refactorer',\n description: 'Code improvement and modernization',\n prompt: `## Refactorer Mode\n\nWhen refactoring code:\n- Maintain existing behavior — tests must pass before and after\n- Make one change at a time, verify after each\n- Prefer small, focused commits\n- Preserve API contracts unless explicitly changing\n- Remove dead code and comments\n- Improve naming as you go\n- Don't mix formatting changes with logic changes\n- Keep performance in mind — don't regress`,\n tags: ['refactor', 'modernization', 'improvement'],\n toolPreferences: ['read', 'edit', 'test', 'git', 'grep'],\n },\n];\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { Mode, ModeConfig, ModeManifest, ModeStore } from '../types/mode.js';\nimport { DEFAULT_MODES } from '../types/mode.js';\n\nexport class DefaultModeStore implements ModeStore {\n private activeModeId: string | null = null;\n private modes: Mode[];\n private configDir: string;\n\n constructor(config: ModeConfig) {\n this.configDir = config.directory;\n this.modes = [...DEFAULT_MODES];\n }\n\n async getActiveMode(): Promise<Mode | null> {\n if (!this.activeModeId) {\n await this.loadActiveMode();\n }\n if (!this.activeModeId) return null;\n return this.modes.find((m) => m.id === this.activeModeId) ?? null;\n }\n\n async setActiveMode(modeId: string | null): Promise<void> {\n this.activeModeId = modeId;\n await this.saveActiveMode();\n }\n\n async listModes(): Promise<Mode[]> {\n return [...this.modes];\n }\n\n async getMode(modeId: string): Promise<Mode | null> {\n return this.modes.find((m) => m.id === modeId) ?? null;\n }\n\n async addMode(mode: Mode): Promise<void> {\n const idx = this.modes.findIndex((m) => m.id === mode.id);\n if (idx >= 0) {\n this.modes[idx] = mode;\n } else {\n this.modes.push(mode);\n }\n }\n\n async removeMode(modeId: string): Promise<void> {\n const builtIn = DEFAULT_MODES.find((m) => m.id === modeId);\n if (builtIn) {\n throw new Error(`Cannot remove built-in mode \"${modeId}\"`);\n }\n this.modes = this.modes.filter((m) => m.id !== modeId);\n if (this.activeModeId === modeId) {\n this.activeModeId = null;\n await this.saveActiveMode();\n }\n }\n\n private async loadActiveMode(): Promise<void> {\n try {\n const configPath = path.join(this.configDir, 'mode.json');\n const content = await fs.readFile(configPath, 'utf8');\n const data = JSON.parse(content);\n this.activeModeId = data.activeMode ?? null;\n } catch {\n this.activeModeId = 'default';\n }\n }\n\n private async saveActiveMode(): Promise<void> {\n try {\n await fs.mkdir(this.configDir, { recursive: true });\n const configPath = path.join(this.configDir, 'mode.json');\n await fs.writeFile(\n configPath,\n JSON.stringify({ activeMode: this.activeModeId }, null, 2),\n 'utf8',\n );\n } catch {\n // ignore save errors\n }\n }\n}\n\nexport interface ModeLoaderOptions {\n projectModesDir?: string;\n userModesDir?: string;\n}\n\nexport async function loadProjectModes(modesDir: string): Promise<Mode[]> {\n const modes: Mode[] = [];\n try {\n const entries = await fs.readdir(modesDir);\n for (const entry of entries) {\n if (!entry.endsWith('.md') && !entry.endsWith('.txt')) continue;\n const filePath = path.join(modesDir, entry);\n const stat = await fs.stat(filePath);\n if (!stat.isFile()) continue;\n const content = await fs.readFile(filePath, 'utf8');\n const id = path.basename(entry, path.extname(entry));\n modes.push({\n id,\n name: id.replace(/[-_]/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase()),\n description: content.split('\\n')[0] ?? id,\n prompt: content,\n tags: ['project'],\n });\n }\n } catch {\n // no project modes\n }\n return modes;\n}\n\nexport async function loadUserModes(modesDir: string): Promise<Mode[]> {\n const modes: Mode[] = [];\n try {\n const manifestPath = path.join(modesDir, 'modes.json');\n const content = await fs.readFile(manifestPath, 'utf8');\n const manifest: ModeManifest = JSON.parse(content);\n for (const mode of manifest.modes) {\n modes.push(mode);\n }\n } catch {\n // no user modes\n }\n return modes;\n}\n","export interface TextBlock {\n type: 'text';\n text: string;\n cache_control?: { type: 'ephemeral' };\n}\n\nexport interface ToolUseBlock {\n type: 'tool_use';\n id: string;\n name: string;\n input: Record<string, unknown>;\n /**\n * Provider-specific opaque metadata captured from the wire response.\n * Echoed back verbatim in the next request so providers that bind\n * extra state to function calls keep working. Example: Gemini's\n * `thoughtSignature` — required for tool-use turns with thinking\n * models, otherwise the next request fails with 400 \"Function call\n * is missing a thought_signature in functionCall parts\".\n *\n * Keys are namespaced by intent so multiple wires can coexist:\n * - `google.thoughtSignature` — Gemini signed-thought blob\n * Other providers can add their own keys without colliding.\n */\n providerMeta?: Record<string, unknown>;\n}\n\nexport interface ToolResultBlock {\n type: 'tool_result';\n tool_use_id: string;\n /**\n * The original tool name. Useful for providers like Google Gemini that\n * need the tool name in `functionResponse.name` — the tool_use_id is\n * only a session-local identifier and is not stable across replays.\n * Always set by ToolExecutor; may be absent on manually-constructed blocks.\n */\n name?: string;\n content: string;\n is_error?: boolean;\n}\n\nexport interface ImageBlock {\n type: 'image';\n source: {\n type: 'base64' | 'url';\n media_type?: string;\n data?: string;\n url?: string;\n };\n}\n\n/**\n * Chain-of-thought / extended-thinking content emitted by the model.\n *\n * Both Anthropic extended thinking (`{type:'thinking', thinking, signature}`)\n * and DeepSeek reasoning mode (top-level `reasoning_content` on the assistant\n * message) require this content to be echoed back verbatim on the next\n * request, otherwise the provider returns 400:\n * - Anthropic: \"The `content[].thinking` in the thinking mode must be passed back\"\n * - DeepSeek: \"The `reasoning_content` in the thinking mode must be passed back\"\n *\n * `signature` is Anthropic-specific (an opaque integrity blob). DeepSeek\n * doesn't issue a signature — the field is absent for that provider.\n *\n * Per Anthropic, thinking blocks MUST appear before any text/tool_use blocks\n * in an assistant message. Stream builders preserve that order.\n */\nexport interface ThinkingBlock {\n type: 'thinking';\n thinking: string;\n signature?: string;\n providerMeta?: Record<string, unknown>;\n}\n\nexport type ContentBlock = TextBlock | ToolUseBlock | ToolResultBlock | ImageBlock | ThinkingBlock;\n\nexport function isTextBlock(b: ContentBlock): b is TextBlock {\n return b.type === 'text';\n}\nexport function isToolUseBlock(b: ContentBlock): b is ToolUseBlock {\n return b.type === 'tool_use';\n}\nexport function isToolResultBlock(b: ContentBlock): b is ToolResultBlock {\n return b.type === 'tool_result';\n}\nexport function isImageBlock(b: ContentBlock): b is ImageBlock {\n return b.type === 'image';\n}\nexport function isThinkingBlock(b: ContentBlock): b is ThinkingBlock {\n return b.type === 'thinking';\n}\n","import { isTextBlock } from '../types/blocks.js';\nimport type { Message } from '../types/messages.js';\nimport type { Provider, Request } from '../types/provider.js';\nimport type { MessageSelector, SelectorResult } from '../types/selector.js';\n\nexport interface LLMSelectorOptions {\n /** Provider used for the selector LLM call. Required. */\n provider: Provider;\n /** Model for the selector. Defaults to the provider's default model. */\n model?: string;\n /**\n * Maximum tokens to keep in context (target budget).\n * Selector will aim to keep total content below this.\n */\n maxContextTokens?: number;\n /**\n * Prompt instructing the selector how to behave.\n * Should guide the LLM on importance tiers and output format.\n */\n systemPrompt?: string;\n}\n\nconst DEFAULT_SYSTEM_PROMPT = `You are a context pruning assistant. Given a conversation history and a token budget, decide which message ranges are worth keeping verbatim and which should be collapsed into summaries.\n\nOutput a JSON object with this structure:\n{\n \"kept\": [{\"from\": 0, \"to\": 5, \"importance\": \"critical\"}],\n \"collapsed\": [{\"from\": 6, \"to\": 20, \"summary\": \"optional summary\"}],\n \"reasoning\": \"brief explanation of decisions\"\n}\n\nImportance tiers:\n- \"critical\": decisions, file edits, tool results that affect state, final answers\n- \"high\": substantive tool use, complex reasoning, non-obvious observations\n- \"medium\": routine exchanges, confirmations, straightforward Q&A\n\nRules:\n- Always keep the most recent K pairs (preserve recency)\n- Never collapse the final 2 user/assistant pairs (working memory)\n- Preserve tool results that modified files or had external effects\n- Collapse old, low-information exchanges (greetings, acknowledgements, etc.)\n- If unsure, keep rather than collapse (errors are more costly than waste)\n\nReturn ONLY the JSON object, no markdown, no explanation outside the JSON.`;\n\n/** Rough token estimation for a message array */\nfunction estimateTokens(messages: Message[]): number {\n let total = 0;\n for (const m of messages) {\n if (typeof m.content === 'string') {\n total += Math.ceil(m.content.length / 4);\n } else if (Array.isArray(m.content)) {\n for (const b of m.content) {\n if (b.type === 'text') total += Math.ceil(b.text.length / 4);\n else total += Math.ceil(JSON.stringify(b).length / 4);\n }\n }\n }\n return total;\n}\n\n/** Format messages as a compact text dump for the selector LLM */\nfunction formatMessages(messages: Message[], maxChars = 8000): string {\n const lines: string[] = [];\n let used = 0;\n for (let i = 0; i < messages.length; i++) {\n const m = messages[i]!;\n const role = m.role.padEnd(10, ' ');\n let text: string;\n if (typeof m.content === 'string') {\n text = m.content.slice(0, 500);\n } else {\n const content = m.content as import('../types/blocks.js').ContentBlock[];\n text = content\n .filter(isTextBlock)\n .map((b) => b.text)\n .join(' ');\n // Also capture tool names for context\n const toolUses = content.filter((b) => b.type === 'tool_use');\n if (toolUses.length > 0) {\n text += ` [tools: ${toolUses.map((b) => (b as { name: string }).name).join(', ')}]`;\n }\n }\n const line = `[${i}][${role}]: ${text}`;\n if (used + line.length > maxChars) break;\n lines.push(line);\n used += line.length;\n }\n return lines.join('\\n');\n}\n\n/**\n * LLM-powered message selector. Calls a sub-LLM to analyze the\n * message history and produce a keep/collapse plan — more surgical\n * than fixed-window rules.\n */\nexport class LLMSelector implements MessageSelector {\n private readonly provider: Provider;\n private readonly model: string;\n private readonly maxContextTokens: number;\n private readonly systemPrompt: string;\n\n constructor(opts: LLMSelectorOptions) {\n this.provider = opts.provider;\n this.model = opts.model ?? 'unknown';\n this.maxContextTokens = opts.maxContextTokens ?? 40_000;\n this.systemPrompt = opts.systemPrompt ?? DEFAULT_SYSTEM_PROMPT;\n }\n\n async select(messages: Message[], maxToKeep: number): Promise<SelectorResult> {\n const effectiveBudget = Math.min(maxToKeep, this.maxContextTokens);\n\n // Build a concise representation of the conversation\n const historyText = formatMessages(messages);\n const totalTokens = estimateTokens(messages);\n const systemText = `${this.systemPrompt}\\n\\nConversation (${messages.length} messages, ~${totalTokens} tokens, budget: ${effectiveBudget}):\\n`;\n\n // Add instruction to stay within budget\n const budgetInstruction =\n totalTokens > effectiveBudget\n ? `\\n\\nIMPORTANT: Total conversation (${totalTokens} tokens) exceeds budget (${effectiveBudget}). You MUST collapse enough to fit. Prefer collapsing older/lower-importance ranges.`\n : '';\n\n const req: Request = {\n model: this.model,\n system: [{ type: 'text', text: systemText + budgetInstruction }],\n messages: [{ role: 'user', content: historyText }],\n maxTokens: 1024,\n };\n\n let raw: string;\n try {\n // Wire the AbortController to the provider call so cancellation actually\n // fires — the original code passed a fresh signal that is never connected\n // to anything, leaking the controller on every selector call.\n const ac = new AbortController();\n const res = await this.provider.complete(req, { signal: ac.signal });\n const textBlocks = res.content.filter(isTextBlock);\n raw = textBlocks\n .map((b) => b.text)\n .join('\\n')\n .trim();\n } catch (err) {\n // Fallback: use simple recency-based selection\n return this.fallbackSelect(messages, effectiveBudget);\n }\n\n return this.parseSelectorOutput(raw, messages.length);\n }\n\n private fallbackSelect(messages: Message[], budget: number): SelectorResult {\n // Simple fallback: keep from the end until we hit budget\n const toKeep: SelectorResult['kept'] = [];\n const toCollapse: SelectorResult['collapsed'] = [];\n\n let tokenCount = 0;\n let startIdx = 0;\n\n // Scan from the end backwards\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i]!;\n const cost =\n typeof m.content === 'string'\n ? Math.ceil(m.content.length / 4)\n : m.content.reduce(\n (acc, b) =>\n acc +\n (b.type === 'text'\n ? Math.ceil(b.text.length / 4)\n : Math.ceil(JSON.stringify(b).length / 4)),\n 0,\n );\n\n if (tokenCount + cost <= budget) {\n tokenCount += cost;\n } else {\n startIdx = i + 1;\n break;\n }\n }\n\n if (startIdx > 0) {\n toCollapse.push({ from: 0, to: startIdx - 1 });\n }\n toKeep.push({ from: startIdx, to: messages.length - 1, importance: 'high' });\n\n return {\n kept: toKeep,\n collapsed: toCollapse,\n reasoning: `Fallback: kept last ${messages.length - startIdx} messages within ${budget} token budget`,\n };\n }\n\n private parseSelectorOutput(raw: string, messageCount: number): SelectorResult {\n // Try to extract JSON from the response\n const jsonStart = raw.indexOf('{');\n const jsonEnd = raw.lastIndexOf('}');\n if (jsonStart === -1 || jsonEnd === -1) {\n // Can't parse — use fallback\n return this.fallbackSelect(\n Array.from({ length: messageCount }, () => ({ role: 'user', content: '' }) as Message),\n this.maxContextTokens,\n );\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw.slice(jsonStart, jsonEnd + 1));\n } catch {\n return this.fallbackSelect(\n Array.from({ length: messageCount }, () => ({ role: 'user', content: '' }) as Message),\n this.maxContextTokens,\n );\n }\n\n const obj = parsed as Record<string, unknown>;\n const kept =\n (obj.kept as Array<{ from: number; to: number; importance: string }> | undefined) ?? [];\n const collapsed =\n (obj.collapsed as Array<{ from: number; to: number; summary?: string }> | undefined) ?? [];\n\n return {\n kept: kept.map((k) => ({\n from: k.from,\n to: k.to,\n importance: (k.importance ?? 'medium') as 'critical' | 'high' | 'medium',\n })),\n collapsed: collapsed.map((c) => ({ from: c.from, to: c.to, summary: c.summary })),\n reasoning: typeof obj.reasoning === 'string' ? obj.reasoning : '',\n };\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { U as Usage } from './context-u0bryklF.js';
1
+ import { U as Usage } from './context-IovtuTf8.js';
2
2
 
3
3
  type BridgeMessageType = 'task' | 'result' | 'progress' | 'error' | 'heartbeat' | 'stop' | 'delegate';
4
4
  interface BridgeMessage<T = unknown> {
@@ -348,4 +348,4 @@ interface SubagentContext {
348
348
  maxConcurrent: number;
349
349
  }
350
350
 
351
- export { type AgentBridge as A, BudgetExceededError as B, type CoordinatorEvents as C, type DoneCondition as D, type MultiAgentConfig as M, SubagentBudget as S, type TaskDelegation as T, type BudgetKind as a, type BudgetLimits as b, type BudgetUsage as c, type CoordinatorStatus as d, type MultiAgentCoordinator as e, type SpawnResult as f, type SubagentConfig as g, type SubagentContext as h, type SubagentError as i, type SubagentErrorKind as j, type SubagentRunContext as k, type SubagentRunOutcome as l, type SubagentRunner as m, type TaskResult as n, type TaskSpec as o, type BridgeTransport as p, type BridgeMessage as q, type AgentBridgeConfig as r };
351
+ export { type AgentBridge as A, type BridgeTransport as B, type CoordinatorEvents as C, type DoneCondition as D, type MultiAgentConfig as M, type SpawnResult as S, type TaskDelegation as T, type CoordinatorStatus as a, type MultiAgentCoordinator as b, type SubagentConfig as c, type SubagentContext as d, type SubagentError as e, type SubagentErrorKind as f, type SubagentRunContext as g, type SubagentRunOutcome as h, type SubagentRunner as i, type TaskResult as j, type TaskSpec as k, type BridgeMessage as l, type AgentBridgeConfig as m, BudgetExceededError as n, type BudgetKind as o, type BudgetLimits as p, type BudgetUsage as q, SubagentBudget as r };
@@ -1,6 +1,6 @@
1
1
  import { e as MetricsSink, M as MetricLabels, f as MetricsSnapshot, b as HealthRegistry, H as HealthCheck, A as AggregateHealth, T as Tracer, S as Span } from '../observability-BhnVLBLS.js';
2
- import { E as EventBus } from '../events-B6Q03pTu.js';
3
- import '../context-u0bryklF.js';
2
+ import { E as EventBus } from '../events-CNB9PALO.js';
3
+ import '../context-IovtuTf8.js';
4
4
 
5
5
  /**
6
6
  * In-memory metrics sink. Suitable for embedded use, tests, and /metrics
@@ -1,6 +1,6 @@
1
- import { E as EventBus } from './events-B6Q03pTu.js';
1
+ import { E as EventBus } from './events-CNB9PALO.js';
2
2
  import { M as ModelsRegistry, b as ResolvedModel } from './models-registry-Y2xbog0E.js';
3
- import { a1 as TokenCounter, U as Usage, a2 as CacheStats } from './context-u0bryklF.js';
3
+ import { a1 as TokenCounter, U as Usage, a2 as CacheStats } from './context-IovtuTf8.js';
4
4
  import { P as PathResolver } from './path-resolver-CPRj4bFY.js';
5
5
 
6
6
  /**
@@ -0,0 +1,36 @@
1
+ import { E as EventBus } from './events-CNB9PALO.js';
2
+ import { L as Logger } from './logger-BMQgxvdy.js';
3
+ import { T as Tracer } from './observability-BhnVLBLS.js';
4
+ import { g as Provider, R as Request, a0 as Context, j as Response } from './context-IovtuTf8.js';
5
+ import { R as RetryPolicy } from './skill-C_7znCIC.js';
6
+
7
+ /**
8
+ * Options passed to a ProviderRunner when calling the provider.
9
+ * Shape intentionally mirrors runProviderWithRetry's parameters
10
+ * so the default implementation is a thin wrapper.
11
+ */
12
+ interface RunProviderOptions {
13
+ provider: Provider;
14
+ request: Request;
15
+ signal: AbortSignal;
16
+ ctx: Context;
17
+ events: EventBus;
18
+ retry: RetryPolicy;
19
+ logger: Logger;
20
+ tracer?: Tracer;
21
+ }
22
+ /**
23
+ * A replaceable service for calling a provider with retry logic,
24
+ * streaming, and tracing. Bind a custom implementation to
25
+ * `TOKENS.ProviderRunner` to completely replace the built-in
26
+ * behavior — e.g. for caching, fallback chains, or custom
27
+ * rate limiting.
28
+ *
29
+ * For lighter-weight wrapping (add middleware without replacing),
30
+ * use `AgentExtension.wrapProviderRunner` via the ExtensionRegistry.
31
+ */
32
+ interface ProviderRunner {
33
+ run(opts: RunProviderOptions): Promise<Response>;
34
+ }
35
+
36
+ export type { ProviderRunner as P, RunProviderOptions as R };
@@ -1,7 +1,7 @@
1
1
  import { h as Specification, S as SpecAnalysis, g as SpecValidationResult, l as TaskGraph, m as TaskNode, k as TaskFilter, p as TaskSort, o as TaskProgress, r as TaskType, n as TaskPriority } from '../task-graph-BITvWt4t.js';
2
- import { E as EventBus } from '../events-B6Q03pTu.js';
3
- import { D as DoneCondition } from '../multi-agent-BDfkxL5C.js';
4
- import '../context-u0bryklF.js';
2
+ import { E as EventBus } from '../events-CNB9PALO.js';
3
+ import { D as DoneCondition } from '../multi-agent-B9a6sflH.js';
4
+ import '../context-IovtuTf8.js';
5
5
 
6
6
  declare class SpecParser {
7
7
  parse(content: string): Specification;
@@ -1,4 +1,4 @@
1
- import { u as Tool, a0 as Context, P as Permission } from './context-u0bryklF.js';
1
+ import { u as Tool, a0 as Context, P as Permission } from './context-IovtuTf8.js';
2
2
 
3
3
  interface TrustPolicy {
4
4
  [toolNameOrPattern: string]: {
@@ -1,5 +1,5 @@
1
1
  import { S as SecretVault } from './secret-vault-DoISxaKO.js';
2
- import { S as SecretScrubber } from './secret-scrubber-3TLUkiCV.js';
2
+ import { S as SecretScrubber } from './secret-scrubber-CgG2tV2B.js';
3
3
 
4
4
  interface SecretVaultOptions {
5
5
  /** Absolute path to the key file. Created with mode 0o600 if missing. */
@@ -1,7 +1,7 @@
1
- export { D as DefaultSecretScrubber, a as DefaultSecretVault, S as SecretVaultOptions, d as decryptConfigSecrets, e as encryptConfigSecrets, m as migratePlaintextSecrets, r as rewriteConfigEncrypted } from '../secret-scrubber-CwYliRWd.js';
2
- import { u as Tool, a0 as Context } from '../context-u0bryklF.js';
1
+ export { D as DefaultSecretScrubber, a as DefaultSecretVault, S as SecretVaultOptions, d as decryptConfigSecrets, e as encryptConfigSecrets, m as migratePlaintextSecrets, r as rewriteConfigEncrypted } from '../secret-scrubber-Cuy5afaQ.js';
2
+ import { u as Tool, a0 as Context } from '../context-IovtuTf8.js';
3
3
  import { I as InputReader } from '../input-reader-E-ffP2ee.js';
4
- import { a as PermissionPolicy, P as PermissionDecision } from '../secret-scrubber-3TLUkiCV.js';
4
+ import { a as PermissionPolicy, P as PermissionDecision } from '../secret-scrubber-CgG2tV2B.js';
5
5
  import '../secret-vault-DoISxaKO.js';
6
6
 
7
7
  interface PermissionPolicyOptions {
@@ -312,7 +312,7 @@ async function atomicWrite(targetPath, content, opts = {}) {
312
312
  if (mode !== void 0) {
313
313
  await fs2.chmod(tmp, mode);
314
314
  }
315
- await fs2.rename(tmp, targetPath);
315
+ await renameWithRetry(tmp, targetPath);
316
316
  } catch (err) {
317
317
  try {
318
318
  await fs2.unlink(tmp);
@@ -321,6 +321,29 @@ async function atomicWrite(targetPath, content, opts = {}) {
321
321
  throw err;
322
322
  }
323
323
  }
324
+ var TRANSIENT_RENAME_CODES = /* @__PURE__ */ new Set(["EPERM", "EBUSY", "EACCES", "ENOTEMPTY"]);
325
+ async function renameWithRetry(from, to) {
326
+ if (process.platform !== "win32") {
327
+ await fs2.rename(from, to);
328
+ return;
329
+ }
330
+ const delays = [10, 25, 60, 120, 250];
331
+ let lastErr;
332
+ for (let i = 0; i <= delays.length; i++) {
333
+ try {
334
+ await fs2.rename(from, to);
335
+ return;
336
+ } catch (err) {
337
+ lastErr = err;
338
+ const code = err?.code;
339
+ if (!code || !TRANSIENT_RENAME_CODES.has(code) || i === delays.length) {
340
+ throw err;
341
+ }
342
+ await new Promise((resolve) => setTimeout(resolve, delays[i]));
343
+ }
344
+ }
345
+ throw lastErr;
346
+ }
324
347
 
325
348
  // src/utils/glob-match.ts
326
349
  function escapeRegex(s) {