sneakoscope 1.18.13 → 1.19.0

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 (49) hide show
  1. package/README.md +36 -10
  2. package/crates/sks-core/Cargo.lock +1 -1
  3. package/crates/sks-core/Cargo.toml +1 -1
  4. package/crates/sks-core/src/main.rs +1 -1
  5. package/dist/.sks-build-stamp.json +4 -4
  6. package/dist/bin/sks.js +1 -1
  7. package/dist/build-manifest.json +11 -9
  8. package/dist/cli/command-registry.d.ts +3 -0
  9. package/dist/cli/command-registry.js +3 -1
  10. package/dist/cli/install-helpers.d.ts +148 -3
  11. package/dist/cli/install-helpers.js +311 -121
  12. package/dist/commands/codex-lb.js +77 -1
  13. package/dist/commands/doctor.js +24 -0
  14. package/dist/commands/mad-sks.d.ts +1 -0
  15. package/dist/commands/mad-sks.js +3 -3
  16. package/dist/commands/versioning.js +2 -1
  17. package/dist/core/agents/agent-effort-policy.d.ts +6 -0
  18. package/dist/core/agents/agent-effort-policy.js +42 -0
  19. package/dist/core/agents/agent-orchestrator.js +9 -5
  20. package/dist/core/agents/agent-roster.d.ts +52 -4
  21. package/dist/core/agents/agent-roster.js +121 -11
  22. package/dist/core/agents/agent-scheduler.d.ts +2 -1
  23. package/dist/core/agents/agent-scheduler.js +7 -5
  24. package/dist/core/agents/agent-schema.d.ts +5 -0
  25. package/dist/core/agents/agent-schema.js +5 -0
  26. package/dist/core/codex/codex-config-eperm-repair.d.ts +1 -0
  27. package/dist/core/codex/codex-config-eperm-repair.js +20 -2
  28. package/dist/core/codex/codex-config-readability.js +31 -1
  29. package/dist/core/codex/codex-project-config-policy.d.ts +23 -0
  30. package/dist/core/codex/codex-project-config-policy.js +191 -8
  31. package/dist/core/commands/basic-cli.js +22 -5
  32. package/dist/core/commands/mad-sks-command.d.ts +1 -0
  33. package/dist/core/commands/mad-sks-command.js +17 -1
  34. package/dist/core/commands/naruto-command.d.ts +2 -0
  35. package/dist/core/commands/naruto-command.js +189 -0
  36. package/dist/core/feature-fixtures.js +3 -0
  37. package/dist/core/fsx.d.ts +1 -1
  38. package/dist/core/fsx.js +1 -1
  39. package/dist/core/init.js +1 -1
  40. package/dist/core/preflight/parallel-preflight-engine.d.ts +1 -0
  41. package/dist/core/routes.js +17 -1
  42. package/dist/core/version-manager.js +1 -1
  43. package/dist/core/version.d.ts +1 -1
  44. package/dist/core/version.js +1 -1
  45. package/dist/core/zellij/zellij-launcher.js +4 -7
  46. package/dist/core/zellij/zellij-layout-builder.js +1 -1
  47. package/dist/scripts/release-parallel-check.js +5 -0
  48. package/package.json +8 -2
  49. package/scripts/codex-config-load-probe.mjs +245 -0
package/README.md CHANGED
@@ -16,7 +16,7 @@ Set up this agent project with Sneakoscope Codex. Use [[mandarange/Sneakoscope-C
16
16
 
17
17
  ## Current Release
18
18
 
19
- SKS **1.18.13** is the Zellij-only interactive runtime release: actual Codex CLI config-load truth, fake Codex EPERM fixtures, doctor readiness matrix proof, `sks mad repair-config`, safer project-local config splitting, Codex 0.135 compatibility gates, and official Fast mode CLI override proof are wired into release checks. Doctor now refuses Ready yes without Codex config-load evidence, MAD blocks launch before unreadable config can crash Codex, and interactive MAD/lane UI requires Zellij with no removed-runtime fallback.
19
+ SKS **1.19.0** is the MAD Zellij dependency repair release: bootstrap/deps repair and `sks --mad --yes` now install or repair required CLI tooling, including Zellij on macOS/Homebrew, before opening the interactive runtime. npm postinstall still bootstraps and reports missing tools, but it does not silently mutate Homebrew/npm global tools unless `SKS_POSTINSTALL_AUTO_INSTALL_CLI_TOOLS=1` is set. MAD and Team layouts now use Zellij's documented background-layout launch form, and launch failures surface labeled Zellij stderr/stdout tails instead of only `zellij_command_failed`.
20
20
 
21
21
  ```bash
22
22
  sks mad-sks plan --target-root <path> --json
@@ -243,7 +243,7 @@ Install Zellij from [zellij.dev](https://zellij.dev/documentation/installation.h
243
243
  brew install zellij
244
244
  ```
245
245
 
246
- The default `sks` runtime checks npm for newer `sneakoscope` and `@openai/codex` versions before opening the interactive runtime. `sks --mad` also checks dependencies, requires Zellij for interactive MAD/lane UI, and prints only the session, gate, attach, and blocker details needed to act.
246
+ The default `sks` runtime checks npm for newer `sneakoscope` and `@openai/codex` versions before opening the interactive runtime. `npm i -g sneakoscope` runs a safe bootstrap/readiness pass; use `sks bootstrap --yes`, `sks deps check --yes`, or `sks --mad --yes` to install or repair Codex CLI/Zellij when Homebrew is available. `sks --mad` requires Zellij for interactive MAD/lane UI and prints the session, gate, attach command, blockers, and labeled Zellij stderr/stdout details needed to act.
247
247
 
248
248
  ## Installation
249
249
 
@@ -314,7 +314,7 @@ sks --version
314
314
 
315
315
  ```sh
316
316
  sks bootstrap
317
- sks deps check
317
+ sks deps check --yes
318
318
  sks codex-app check
319
319
  sks doctor --fix
320
320
  sks fix-path
@@ -344,17 +344,24 @@ sks
344
344
 
345
345
  Bare `sks` can also prompt for codex-lb auth; SKS stores the base URL/key in `~/.codex/sks-codex-lb.env`, writes the codex-lb Codex CLI / IDE Extension provider block into `~/.codex/config.toml` for Codex App routing, loads the provider env key for interactive launches, and syncs the macOS user launch environment so the Codex App can see `CODEX_LB_API_KEY` after restart. If the provider block disappears but the stored env file is still recoverable, bare `sks`, npm postinstall upgrades, `sks doctor --fix`, and `sks codex-lb repair` restore it with `env_key = "CODEX_LB_API_KEY"`, `supports_websockets = true`, and `requires_openai_auth = false`; imagegen checks may record this provider as configured codex-lb routing, but it is not accepted as official Codex App `$imagegen` evidence. If an older SKS release left the codex-lb dashboard key only in the shared Codex `auth.json` login cache, SKS migrates that key back into `~/.codex/sks-codex-lb.env` when a codex-lb provider or env base URL is already recoverable. It does not rewrite the shared Codex `auth.json` login cache by default; set `SKS_CODEX_LB_SYNC_CODEX_LOGIN=1` only if you intentionally want the old API-key login-cache behavior. When codex-lb is active, SKS opens a fresh `sks-codex-lb-*` Zellij session and sweeps older detached codex-lb sessions for the same repo before launch so stale Responses API chains are not reused. Configured launch paths run a response-chain health check. `previous_response_not_found` is treated as a stateless-LB warning and keeps codex-lb active. Hard failures are surfaced to the user; SKS only bypasses codex-lb when the user chooses OAuth fallback or `SKS_CODEX_LB_AUTOBYPASS=1` is set.
346
346
 
347
- If codex-lb provider auth drifts after launch/reinstall, run `sks doctor --fix` or `sks codex-lb repair`; to replace it, run `sks codex-lb reconfigure --host <domain> --api-key <key>`.
347
+ If codex-lb provider auth drifts after launch/reinstall, run `sks doctor --fix` or `sks codex-lb repair`. To **swap only the API key** at any time (without re-typing the host it reuses the stored base URL), run:
348
+
349
+ ```sh
350
+ sks codex-lb set-key --api-key-stdin # or: sks codex-lb set-key --api-key "sk-clb-..."
351
+ ```
348
352
 
349
- ### Switching back to ChatGPT OAuth (releasing codex-lb)
353
+ (To also change the host, use `sks codex-lb reconfigure --host <domain> --api-key <key>`.)
350
354
 
351
- If you want to hand control back to your official ChatGPT account login after codex-lb has been reconciled, use `sks codex-lb release`:
355
+ ### Switching auth mode: codex-lb ChatGPT OAuth
356
+
357
+ Switch between the codex-lb API key and your ChatGPT OAuth login at any time with intent-named commands:
352
358
 
353
359
  ```sh
354
- sks codex-lb release
360
+ sks codex-lb use-oauth # hand control back to ChatGPT OAuth
361
+ sks codex-lb use-codex-lb # switch back to the codex-lb API key
355
362
  ```
356
363
 
357
- This restores `~/.codex/auth.chatgpt-backup.json` (written by the 0.9.3 auto-reconcile) to `~/.codex/auth.json` and unsets `model_provider = "codex-lb"` so Codex CLI/App falls back to ChatGPT OAuth. To re-engage codex-lb afterward, run `sks codex-lb repair`.
364
+ `use-oauth` restores `~/.codex/auth.chatgpt-backup.json` (written by auto-reconcile) to `~/.codex/auth.json` and unsets `model_provider = "codex-lb"` so Codex CLI/App falls back to ChatGPT OAuth; if no saved OAuth login exists it points you to `codex login`. `use-codex-lb` re-selects and re-syncs codex-lb. (The older verbs `sks codex-lb release` / `repair` remain as aliases.)
358
365
 
359
366
  Flags:
360
367
 
@@ -423,6 +430,25 @@ Manual fan-out syntax:
423
430
 
424
431
  Effort is assigned per agent. Simple read-only/docs slices can run low, ordinary tooling and lease mapping use medium, safety/DB/schema/release lanes use high, and frontier/forensic research can escalate to xhigh. If a lease conflict, schema failure, proof blocker, DB risk, or release risk appears, the parent can escalate that lane while keeping unrelated lanes cheaper and faster.
425
432
 
433
+ ### Naruto Shadow Clone Swarm (`$Naruto`)
434
+
435
+ `$Naruto` (影分身 / Kage Bunshin no Jutsu) is a high-scale mode of the native agent kernel for broad fan-out work — codebase-wide sweeps, parallel drafting, large audits. It lifts the standard 20-agent ceiling to **up to 100 clone sessions** (only for this route; every other route keeps the 20 cap).
436
+
437
+ ```sh
438
+ sks naruto run "sweep the codebase for TODO comments and summarize"
439
+ sks naruto run "draft a unit test for every module" --clones 100
440
+ sks naruto run "demo" --clones 24 --backend fake --json # fast, no Codex calls
441
+ sks naruto status
442
+ ```
443
+
444
+ Aliases: `$ShadowClone`, `$Kagebunshin`, and the CLI flag `sks --naruto`.
445
+
446
+ - **System-aware concurrency:** `--clones N` is the total work fan-out, but `$Naruto` never spawns the whole count at once. Live concurrency is throttled to a host-safe number derived from CPU cores and free memory (heavier cap for real `codex-exec` workers, tighter packing for in-process `fake`). So `--clones 100` on a small host still processes all 100 work units while only running a safe handful at a time; the run reports when it throttles. Override with `SKS_NARUTO_MAX_CONCURRENCY=<n>`.
447
+ - **Dynamic per-clone effort (like Team):** truly simple / no-tool work runs at `low`, any tool use lifts a clone to `medium` (never high/xhigh), and every clone runs in fast service tier.
448
+ - **Safe parallel writes:** clones coordinate through the same lease-based patch-swarm (merge coordinator + conflict rebase + transaction journal) as Team.
449
+
450
+ See [docs/naruto.md](docs/naruto.md) for the full reference.
451
+
426
452
  ### QA, Computer Use, Goal, Research, DB, Wiki, GX
427
453
 
428
454
  ```sh
@@ -584,7 +610,7 @@ First install:
584
610
  ```sh
585
611
  npm i -g sneakoscope
586
612
  sks bootstrap
587
- sks deps check
613
+ sks deps check --yes
588
614
  sks codex-app check
589
615
  sks selftest --mock
590
616
  ```
@@ -699,7 +725,7 @@ npm run release:check
699
725
  npm run publish:dry
700
726
  ```
701
727
 
702
- `release:check` runs the 1.18.13 Zellij-only closure DAG, writes a source digest stamp under `.sneakoscope/reports/`, then refreshes release readiness so publish commands can verify the same stamp. The DAG preserves the 1.18 baseline gates and adds patch swarm runtime truth, transaction journaling, serial conflict rebase, strict strategy-to-patch proof, rollback command proof, Native CLI Session Swarm 5/10/20-process proof, Real Worker Backend Router proof, Codex child overlap proof, model-authored patch-envelope separation, Zellij layout/pane/screen proof, no-subagent-scaling proof, Fast mode default/worker/Codex/MAD propagation proof, Appshots attachment provenance, MCP runtime overlap evidence, Codex 0.134/0.135 runner truth, task graph expansion, schema-bound follow-up work, actual Agent/Team/Research/QA route blackboxes, scheduler proof hardening, Source Intelligence propagation, and Goal mode propagation checks. Broader live gates remain explicit scripts such as `release:real-check`; real Codex patch smoke, real Codex parallel worker proof, and real Zellij proof are optional unless their `SKS_REQUIRE_REAL_*` or `SKS_REQUIRE_ZELLIJ=1` environment variables are set. Generate the human-readable registry with `sks features inventory --write-docs`. Plain `npm publish` uses the `latest` dist-tag. npm's `prepublishOnly` verifies the fresh release stamp instead of rerunning the full gate, and `prepack` only rebuilds `dist`; publish no longer repeats the expensive release suite during packaging. `npm run publish:dry` remains the explicit dry-run helper.
728
+ `release:check` runs the 1.19.0 Zellij dependency-repair closure DAG, writes a source digest stamp under `.sneakoscope/reports/`, then refreshes release readiness so publish commands can verify the same stamp. The DAG preserves the 1.18 baseline gates and adds patch swarm runtime truth, transaction journaling, serial conflict rebase, strict strategy-to-patch proof, rollback command proof, Native CLI Session Swarm 5/10/20-process proof, Real Worker Backend Router proof, Codex child overlap proof, model-authored patch-envelope separation, Zellij layout/pane/screen proof, no-subagent-scaling proof, Fast mode default/worker/Codex/MAD propagation proof, Appshots attachment provenance, MCP runtime overlap evidence, Codex 0.134/0.135 runner truth, task graph expansion, schema-bound follow-up work, actual Agent/Team/Research/QA route blackboxes, scheduler proof hardening, Source Intelligence propagation, and Goal mode propagation checks. Broader live gates remain explicit scripts such as `release:real-check`; real Codex patch smoke, real Codex parallel worker proof, and real Zellij proof are optional unless their `SKS_REQUIRE_REAL_*` or `SKS_REQUIRE_ZELLIJ=1` environment variables are set. Generate the human-readable registry with `sks features inventory --write-docs`. Plain `npm publish` uses the `latest` dist-tag. npm's `prepublishOnly` verifies the fresh release stamp instead of rerunning the full gate, and `prepack` only rebuilds `dist`; publish no longer repeats the expensive release suite during packaging. `npm run publish:dry` remains the explicit dry-run helper.
703
729
 
704
730
  Version bumps are manual. Run `sks versioning bump` only when preparing release metadata; SKS will not create `.git/hooks/pre-commit` or auto-bump during ordinary commits.
705
731
 
@@ -76,7 +76,7 @@ dependencies = [
76
76
 
77
77
  [[package]]
78
78
  name = "sks-core"
79
- version = "1.18.13"
79
+ version = "1.19.0"
80
80
  dependencies = [
81
81
  "serde_json",
82
82
  ]
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "sks-core"
3
- version = "1.18.13"
3
+ version = "1.19.0"
4
4
  edition = "2021"
5
5
 
6
6
  [dependencies]
@@ -4,7 +4,7 @@ use std::io::{self, Read, Seek, SeekFrom};
4
4
  fn main() {
5
5
  let mut args = std::env::args().skip(1);
6
6
  match args.next().as_deref() {
7
- Some("--version") => println!("sks-rs 1.18.13"),
7
+ Some("--version") => println!("sks-rs 1.19.0"),
8
8
  Some("compact-info") => {
9
9
  let mut input = String::new();
10
10
  let _ = io::stdin().read_to_string(&mut input);
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schema": "sks.dist-build-stamp.v1",
3
3
  "package_name": "sneakoscope",
4
- "package_version": "1.18.13",
5
- "source_digest": "6474b08fceec48bfd4915e09945f17e3ac1ccb4c9e01918d6a533f1a3d6bb30e",
6
- "source_file_count": 1677,
7
- "built_at_source_time": 1780041475580
4
+ "package_version": "1.19.0",
5
+ "source_digest": "5eecdb85fa4e3cd359035b49803cd3e9ea0174810596807caf55b2507fb33d18",
6
+ "source_file_count": 1690,
7
+ "built_at_source_time": 1780116105711
8
8
  }
package/dist/bin/sks.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const FAST_PACKAGE_VERSION = '1.18.13';
2
+ const FAST_PACKAGE_VERSION = '1.19.0';
3
3
  const args = process.argv.slice(2);
4
4
  try {
5
5
  if (args[0] === '--agent' && args[1] === 'worker') {
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "schema": "sks.dist-build.v2",
3
- "version": "1.18.13",
4
- "package_version": "1.18.13",
3
+ "version": "1.19.0",
4
+ "package_version": "1.19.0",
5
5
  "typescript": true,
6
6
  "mjs_runtime_files": 0,
7
- "compiled_file_count": 972,
8
- "compiled_js_count": 486,
9
- "compiled_dts_count": 486,
10
- "source_digest": "6474b08fceec48bfd4915e09945f17e3ac1ccb4c9e01918d6a533f1a3d6bb30e",
11
- "source_file_count": 1677,
12
- "source_files_hash": "fb8f5ab51d8a8c9809fa26ee6688932a083f83741916a19c2b331dad0d4b69e7",
13
- "source_list_hash": "fb8f5ab51d8a8c9809fa26ee6688932a083f83741916a19c2b331dad0d4b69e7",
7
+ "compiled_file_count": 974,
8
+ "compiled_js_count": 487,
9
+ "compiled_dts_count": 487,
10
+ "source_digest": "5eecdb85fa4e3cd359035b49803cd3e9ea0174810596807caf55b2507fb33d18",
11
+ "source_file_count": 1690,
12
+ "source_files_hash": "c2267339884b83e1bfed20e6979b80f8a7abc07a05860d74c249d7684cb1c92d",
13
+ "source_list_hash": "c2267339884b83e1bfed20e6979b80f8a7abc07a05860d74c249d7684cb1c92d",
14
14
  "src_mjs_runtime_files": 0,
15
15
  "dist_stamp_schema": "sks.dist-build-stamp.v1",
16
16
  "files": [
@@ -456,6 +456,8 @@
456
456
  "core/commands/image-ux-review-command.js",
457
457
  "core/commands/mad-sks-command.d.ts",
458
458
  "core/commands/mad-sks-command.js",
459
+ "core/commands/naruto-command.d.ts",
460
+ "core/commands/naruto-command.js",
459
461
  "core/commands/paths-command.d.ts",
460
462
  "core/commands/paths-command.js",
461
463
  "core/commands/perf-command.d.ts",
@@ -62,6 +62,7 @@ export declare const COMMANDS: {
62
62
  dfix: CommandEntry;
63
63
  team: CommandEntry;
64
64
  agent: CommandEntry;
65
+ naruto: CommandEntry;
65
66
  'qa-loop': CommandEntry;
66
67
  research: CommandEntry;
67
68
  autoresearch: CommandEntry;
@@ -148,6 +149,7 @@ export declare const TYPED_COMMANDS: {
148
149
  dfix: CommandEntry;
149
150
  team: CommandEntry;
150
151
  agent: CommandEntry;
152
+ naruto: CommandEntry;
151
153
  'qa-loop': CommandEntry;
152
154
  research: CommandEntry;
153
155
  autoresearch: CommandEntry;
@@ -201,6 +203,7 @@ export declare const COMMAND_ALIASES: {
201
203
  readonly '--MAD': "mad";
202
204
  readonly '--mad-sks': "mad-sks";
203
205
  readonly '--agent': "agent";
206
+ readonly '--naruto': "naruto";
204
207
  };
205
208
  export type CommandName = Extract<keyof typeof COMMANDS, string>;
206
209
  export declare function commandNames(): CommandName[];
@@ -115,6 +115,7 @@ export const COMMANDS = {
115
115
  dfix: entry('stable', 'Run DFix diagnose/plan/patch/verify loop', 'dist/core/commands/dfix-command.js', commandArgsCommand(() => import('../core/commands/dfix-command.js'), 'dfixCommand', 'dist/core/commands/dfix-command.js')),
116
116
  team: entry('beta', 'Create and observe Team missions', 'dist/core/commands/team-command.js', argsCommand(() => import('../core/commands/team-command.js'), 'team', 'dist/core/commands/team-command.js')),
117
117
  agent: entry('beta', 'Run native multi-session agent missions', 'dist/core/commands/agent-command.js', argsCommand(() => import('../core/commands/agent-command.js'), 'agentCommand', 'dist/core/commands/agent-command.js')),
118
+ naruto: entry('labs', 'Run $Naruto shadow-clone swarm (up to 100 parallel sessions)', 'dist/core/commands/naruto-command.js', argsCommand(() => import('../core/commands/naruto-command.js'), 'narutoCommand', 'dist/core/commands/naruto-command.js')),
118
119
  'qa-loop': entry('beta', 'Run QA loop missions', 'dist/core/commands/qa-loop-command.js', subcommand(() => import('../core/commands/qa-loop-command.js'), 'qaLoopCommand', 'dist/core/commands/qa-loop-command.js')),
119
120
  research: entry('labs', 'Run research missions', 'dist/core/commands/research-command.js', subcommand(() => import('../core/commands/research-command.js'), 'researchCommand', 'dist/core/commands/research-command.js')),
120
121
  autoresearch: entry('labs', 'Alias for research/autoresearch route', 'dist/core/commands/autoresearch-command.js', subcommand(() => import('../core/commands/autoresearch-command.js'), 'autoresearchCommand', 'dist/core/commands/autoresearch-command.js', 'status')),
@@ -168,7 +169,8 @@ export const COMMAND_ALIASES = {
168
169
  '--mad': 'mad',
169
170
  '--MAD': 'mad',
170
171
  '--mad-sks': 'mad-sks',
171
- '--agent': 'agent'
172
+ '--agent': 'agent',
173
+ '--naruto': 'naruto'
172
174
  };
173
175
  export function commandNames() {
174
176
  return Object.keys(COMMANDS).sort();
@@ -64,6 +64,7 @@ export type ConfigureCodexLbResult = {
64
64
  config_path?: string;
65
65
  env_path?: string;
66
66
  metadata_path?: string;
67
+ backup_path?: string | null;
67
68
  base_url?: string;
68
69
  env_key?: string;
69
70
  keychain?: Record<string, unknown>;
@@ -80,7 +81,7 @@ export type ConfigureCodexLbResult = {
80
81
  repair?: CodexLbAuthInstallResult;
81
82
  } & Partial<CodexLbStatusSnapshot>;
82
83
  export type CodexLbLaunchPromptResult = ConfigureCodexLbResult;
83
- export declare function postinstall({ bootstrap }: any): Promise<void>;
84
+ export declare function postinstall({ bootstrap, args }: any): Promise<void>;
84
85
  export declare function postinstallBootstrapDecision(root: any): Promise<{
85
86
  run: boolean;
86
87
  reason: string;
@@ -283,23 +284,72 @@ export declare function maybePromptCodexLbSetupForLaunch(args?: any, opts?: any)
283
284
  auth_summary: string;
284
285
  status: string;
285
286
  }>;
287
+ export declare function upsertCodexLbConfig(text: any | undefined, baseUrl: any, selectDefault?: boolean): string;
286
288
  export declare function ensureGlobalCodexFastModeDuringInstall(opts?: any): Promise<{
287
289
  status: string;
288
290
  reason: string;
289
291
  config_path?: never;
292
+ backup_path?: never;
293
+ parse_smoke?: never;
290
294
  error?: never;
291
295
  } | {
292
296
  status: string;
293
297
  config_path: any;
298
+ backup_path: string | null;
299
+ parse_smoke: {
300
+ ok: boolean;
301
+ unterminated_multiline_string: boolean;
302
+ invalid_table_header: string | null;
303
+ };
304
+ reason?: never;
305
+ error?: never;
306
+ } | {
307
+ status: string;
308
+ config_path: any;
309
+ reason?: never;
310
+ backup_path?: never;
311
+ parse_smoke?: never;
312
+ error?: never;
313
+ } | {
314
+ status: string;
315
+ config_path: any;
316
+ parse_smoke: {
317
+ ok: boolean;
318
+ unterminated_multiline_string: boolean;
319
+ invalid_table_header: string | null;
320
+ };
321
+ reason?: never;
322
+ backup_path?: never;
323
+ error?: never;
324
+ } | {
325
+ status: string;
326
+ config_path: any;
327
+ backup_path: string | null;
294
328
  reason?: never;
329
+ parse_smoke?: never;
295
330
  error?: never;
296
331
  } | {
297
332
  status: string;
298
333
  config_path: any;
299
334
  error: any;
300
335
  reason?: never;
336
+ backup_path?: never;
337
+ parse_smoke?: never;
301
338
  }>;
302
339
  export declare function normalizeCodexFastModeUiConfig(text?: any): string;
340
+ export declare function safeWriteCodexConfigToml(configPath: string, current: string, next: string, tag?: string): Promise<{
341
+ ok: boolean;
342
+ status: string;
343
+ config_path: string;
344
+ backup_path: string | null;
345
+ changed?: never;
346
+ } | {
347
+ ok: boolean;
348
+ status: string;
349
+ config_path: string;
350
+ backup_path: string | null;
351
+ changed: boolean;
352
+ }>;
303
353
  export declare function ensureSksCommandDuringInstall(opts?: any): Promise<SksPostinstallShimResult>;
304
354
  export declare function selftestSksShimRepair(): Promise<{
305
355
  ok: boolean;
@@ -346,6 +396,7 @@ export declare function ensureRelatedCliTools(args?: any): Promise<{
346
396
  bin?: never;
347
397
  version?: never;
348
398
  error?: never;
399
+ command?: never;
349
400
  hint?: never;
350
401
  } | {
351
402
  status: string;
@@ -353,6 +404,7 @@ export declare function ensureRelatedCliTools(args?: any): Promise<{
353
404
  version: string | null;
354
405
  reason?: never;
355
406
  error?: never;
407
+ command?: never;
356
408
  hint?: never;
357
409
  } | {
358
410
  status: string;
@@ -360,6 +412,15 @@ export declare function ensureRelatedCliTools(args?: any): Promise<{
360
412
  reason?: never;
361
413
  bin?: never;
362
414
  version?: never;
415
+ command?: never;
416
+ hint?: never;
417
+ } | {
418
+ status: string;
419
+ command: string;
420
+ error: string;
421
+ reason?: never;
422
+ bin?: never;
423
+ version?: never;
363
424
  hint?: never;
364
425
  } | {
365
426
  status: string;
@@ -368,6 +429,7 @@ export declare function ensureRelatedCliTools(args?: any): Promise<{
368
429
  hint: string | null;
369
430
  reason?: never;
370
431
  error?: never;
432
+ command?: never;
371
433
  };
372
434
  zellij: {
373
435
  ok: boolean;
@@ -401,15 +463,87 @@ export declare function ensureRelatedCliTools(args?: any): Promise<{
401
463
  reason: string;
402
464
  };
403
465
  install_hint: string | null;
404
- error: string | null;
466
+ error: any;
467
+ };
468
+ }>;
469
+ export declare function ensureMadLaunchDependencies(args?: any): Promise<{
470
+ ready: boolean;
471
+ actions: {
472
+ target: string;
473
+ status: string;
474
+ command: any;
475
+ error: any;
476
+ repair: {
477
+ target: string;
478
+ status: string;
479
+ bin: "zellij";
480
+ version: string | null;
481
+ command?: never;
482
+ error?: never;
483
+ } | {
484
+ target: string;
485
+ status: string;
486
+ command: string;
487
+ error: string | null;
488
+ bin?: never;
489
+ version?: never;
490
+ } | {
491
+ target: string;
492
+ status: string;
493
+ command: string;
494
+ bin: "zellij";
495
+ version: string | null;
496
+ error?: never;
497
+ } | {
498
+ target: string;
499
+ status: string;
500
+ reason: string;
501
+ };
502
+ }[];
503
+ status: {
504
+ zellij: {
505
+ ok: boolean;
506
+ status: "blocked" | "ok" | "missing" | "too_old";
507
+ version: string | null;
508
+ min_version: string;
509
+ repair: {
510
+ target: string;
511
+ status: string;
512
+ bin: "zellij";
513
+ version: string | null;
514
+ command?: never;
515
+ error?: never;
516
+ } | {
517
+ target: string;
518
+ status: string;
519
+ command: string;
520
+ error: string | null;
521
+ bin?: never;
522
+ version?: never;
523
+ } | {
524
+ target: string;
525
+ status: string;
526
+ command: string;
527
+ bin: "zellij";
528
+ version: string | null;
529
+ error?: never;
530
+ } | {
531
+ target: string;
532
+ status: string;
533
+ reason: string;
534
+ };
535
+ install_hint: string | null;
536
+ };
405
537
  };
406
538
  }>;
407
- export declare function ensureCodexCliTool({ skip }?: any): Promise<{
539
+ export declare function formatMadLaunchDependencyAction(action?: any): string;
540
+ export declare function ensureCodexCliTool({ skip, args }?: any): Promise<{
408
541
  status: string;
409
542
  reason: string;
410
543
  bin?: never;
411
544
  version?: never;
412
545
  error?: never;
546
+ command?: never;
413
547
  hint?: never;
414
548
  } | {
415
549
  status: string;
@@ -417,6 +551,7 @@ export declare function ensureCodexCliTool({ skip }?: any): Promise<{
417
551
  version: string | null;
418
552
  reason?: never;
419
553
  error?: never;
554
+ command?: never;
420
555
  hint?: never;
421
556
  } | {
422
557
  status: string;
@@ -424,6 +559,15 @@ export declare function ensureCodexCliTool({ skip }?: any): Promise<{
424
559
  reason?: never;
425
560
  bin?: never;
426
561
  version?: never;
562
+ command?: never;
563
+ hint?: never;
564
+ } | {
565
+ status: string;
566
+ command: string;
567
+ error: string;
568
+ reason?: never;
569
+ bin?: never;
570
+ version?: never;
427
571
  hint?: never;
428
572
  } | {
429
573
  status: string;
@@ -432,6 +576,7 @@ export declare function ensureCodexCliTool({ skip }?: any): Promise<{
432
576
  hint: string | null;
433
577
  reason?: never;
434
578
  error?: never;
579
+ command?: never;
435
580
  }>;
436
581
  export declare function ensureZellijCliTool(args?: any, opts?: any): Promise<{
437
582
  target: string;