sneakoscope 1.17.0 → 1.18.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 (96) hide show
  1. package/README.md +14 -3
  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 +39 -9
  8. package/dist/cli/install-helpers.d.ts +9 -0
  9. package/dist/cli/install-helpers.js +43 -29
  10. package/dist/commands/image-ux-review.d.ts +55 -1
  11. package/dist/commands/ppt.d.ts +55 -1
  12. package/dist/core/agents/agent-central-ledger.d.ts +1 -0
  13. package/dist/core/agents/agent-central-ledger.js +4 -3
  14. package/dist/core/agents/agent-codex-cockpit.d.ts +13 -0
  15. package/dist/core/agents/agent-codex-cockpit.js +53 -1
  16. package/dist/core/agents/agent-janitor.d.ts +3 -0
  17. package/dist/core/agents/agent-janitor.js +32 -0
  18. package/dist/core/agents/agent-ledger-schemas.d.ts +162 -0
  19. package/dist/core/agents/agent-ledger-schemas.js +23 -0
  20. package/dist/core/agents/agent-lifecycle.js +40 -16
  21. package/dist/core/agents/agent-orchestrator.d.ts +55 -1
  22. package/dist/core/agents/agent-orchestrator.js +94 -19
  23. package/dist/core/agents/agent-output-validator.d.ts +44 -0
  24. package/dist/core/agents/agent-output-validator.js +26 -1
  25. package/dist/core/agents/agent-proof-evidence.d.ts +24 -0
  26. package/dist/core/agents/agent-proof-evidence.js +53 -0
  27. package/dist/core/agents/agent-runner-codex-exec.d.ts +2 -0
  28. package/dist/core/agents/agent-runner-codex-exec.js +6 -6
  29. package/dist/core/agents/agent-runner-fake.js +2 -0
  30. package/dist/core/agents/agent-runner-process.js +10 -4
  31. package/dist/core/agents/agent-runner-tmux.d.ts +1 -32
  32. package/dist/core/agents/agent-runner-tmux.js +83 -12
  33. package/dist/core/agents/agent-scheduler.d.ts +77 -0
  34. package/dist/core/agents/agent-scheduler.js +295 -0
  35. package/dist/core/agents/agent-schema.d.ts +2 -0
  36. package/dist/core/agents/agent-session-generation.d.ts +55 -0
  37. package/dist/core/agents/agent-session-generation.js +110 -0
  38. package/dist/core/agents/agent-terminal-session.d.ts +62 -0
  39. package/dist/core/agents/agent-terminal-session.js +130 -0
  40. package/dist/core/agents/agent-trust-report.d.ts +9 -0
  41. package/dist/core/agents/agent-trust-report.js +14 -0
  42. package/dist/core/agents/agent-work-queue.d.ts +53 -0
  43. package/dist/core/agents/agent-work-queue.js +128 -0
  44. package/dist/core/agents/agent-worker-pipeline.d.ts +2 -0
  45. package/dist/core/agents/agent-worker-pipeline.js +4 -0
  46. package/dist/core/agents/agent-worker-slot.d.ts +35 -0
  47. package/dist/core/agents/agent-worker-slot.js +90 -0
  48. package/dist/core/agents/agent-wrongness.d.ts +1 -1
  49. package/dist/core/agents/agent-wrongness.js +7 -0
  50. package/dist/core/agents/route-collaboration-ledger.d.ts +55 -1
  51. package/dist/core/agents/scout-policy.d.ts +30 -0
  52. package/dist/core/agents/scout-policy.js +68 -0
  53. package/dist/core/agents/tmux-right-lane-cockpit.d.ts +116 -0
  54. package/dist/core/agents/tmux-right-lane-cockpit.js +67 -0
  55. package/dist/core/codex/codex-web-search-adapter.d.ts +41 -0
  56. package/dist/core/codex/codex-web-search-adapter.js +105 -0
  57. package/dist/core/codex/official-goal-mode.d.ts +24 -0
  58. package/dist/core/codex/official-goal-mode.js +41 -0
  59. package/dist/core/codex-lb/codex-lb-setup.js +1 -1
  60. package/dist/core/commands/image-ux-review-command.d.ts +55 -1
  61. package/dist/core/commands/ppt-command.d.ts +55 -1
  62. package/dist/core/feature-fixtures.js +3 -2
  63. package/dist/core/feature-registry.js +1 -1
  64. package/dist/core/fsx.d.ts +1 -1
  65. package/dist/core/fsx.js +1 -1
  66. package/dist/core/goal-workflow.d.ts +9 -0
  67. package/dist/core/goal-workflow.js +16 -3
  68. package/dist/core/image-ux-review/imagegen-adapter.js +56 -13
  69. package/dist/core/imagegen/imagegen-capability.d.ts +21 -0
  70. package/dist/core/imagegen/imagegen-capability.js +111 -11
  71. package/dist/core/init.js +1 -1
  72. package/dist/core/mad-sks/immutable-harness-guard.js +2 -0
  73. package/dist/core/mcp/xai-mcp-detector.d.ts +44 -0
  74. package/dist/core/mcp/xai-mcp-detector.js +157 -0
  75. package/dist/core/mcp/xai-search-adapter.d.ts +44 -0
  76. package/dist/core/mcp/xai-search-adapter.js +100 -0
  77. package/dist/core/proof/proof-reader.d.ts +2 -0
  78. package/dist/core/proof/proof-schema.d.ts +4 -0
  79. package/dist/core/proof/proof-schema.js +3 -1
  80. package/dist/core/proof/route-adapter.d.ts +42 -0
  81. package/dist/core/proof/route-finalizer.d.ts +42 -0
  82. package/dist/core/proof/selftest-proof-fixtures.d.ts +42 -0
  83. package/dist/core/release-parallel-full-coverage.d.ts +26 -0
  84. package/dist/core/release-parallel-full-coverage.js +158 -0
  85. package/dist/core/source-intelligence/source-intelligence-policy.d.ts +41 -0
  86. package/dist/core/source-intelligence/source-intelligence-policy.js +75 -0
  87. package/dist/core/source-intelligence/source-intelligence-proof.d.ts +27 -0
  88. package/dist/core/source-intelligence/source-intelligence-proof.js +37 -0
  89. package/dist/core/source-intelligence/source-intelligence-runner.d.ts +54 -0
  90. package/dist/core/source-intelligence/source-intelligence-runner.js +113 -0
  91. package/dist/core/trust-kernel/trust-report.d.ts +84 -0
  92. package/dist/core/trust-kernel/trust-report.js +33 -2
  93. package/dist/core/version.d.ts +1 -1
  94. package/dist/core/version.js +1 -1
  95. package/package.json +24 -3
  96. package/schemas/codex/agent-result.schema.json +25 -0
package/README.md CHANGED
@@ -10,7 +10,7 @@ SKS does not try to clone every other harness. It focuses on one thing: making C
10
10
 
11
11
  ## Current Release
12
12
 
13
- SKS **1.17.0** makes TypeScript the only runtime source of truth, moves package execution to built `dist/**/*.js`, adds Codex App agent cockpit artifacts, parallelizes release verification with a dependency DAG, and namespaces agent sessions by project hash plus mission id.
13
+ SKS **1.18.1** adds Dynamic Agent Pool replenishment: `agents=5` now means keep up to five active worker slots running until the work queue drains, with immutable session generations, generation-aware terminal close reports, real/fake-tmux pane launch evidence, and Source Intelligence / Goal mode refs propagated to every generation.
14
14
 
15
15
  ```bash
16
16
  sks mad-sks plan --target-root <path> --json
@@ -20,6 +20,9 @@ sks mad-sks rollback-apply --rollback-plan <path> --yes --json
20
20
  sks features complete --json
21
21
  sks agent status latest --json
22
22
  sks agent run "release review" --agents 8 --concurrency 4 --mock --json
23
+ npm run source-intelligence:all-modes
24
+ npm run agent:background-terminals
25
+ npm run agent:tmux-right-lanes
23
26
  npm run release:readiness
24
27
  ```
25
28
 
@@ -48,6 +51,14 @@ Detailed release history lives in [CHANGELOG.md](CHANGELOG.md). Current release
48
51
  - Core dominance: [docs/core-dominance.md](docs/core-dominance.md)
49
52
  - Performance budgets: [docs/performance-budgets.md](docs/performance-budgets.md)
50
53
  - Native Agent Kernel: [docs/native-agent-kernel.md](docs/native-agent-kernel.md)
54
+ - Source Intelligence Layer: [docs/source-intelligence-layer.md](docs/source-intelligence-layer.md)
55
+ - X AI / Context7 / Codex Web policy: [docs/xai-context7-codex-web-policy.md](docs/xai-context7-codex-web-policy.md)
56
+ - Main no-Scout / worker Scout policy: [docs/main-no-scout-worker-scout-policy.md](docs/main-no-scout-worker-scout-policy.md)
57
+ - Agent terminal lanes: [docs/agent-terminal-lanes.md](docs/agent-terminal-lanes.md)
58
+ - tmux right-lane cockpit: [docs/tmux-right-lane-cockpit.md](docs/tmux-right-lane-cockpit.md)
59
+ - Codex official Goal mode: [docs/codex-official-goal-mode.md](docs/codex-official-goal-mode.md)
60
+ - Release parallel full coverage: [docs/release-parallel-full-coverage.md](docs/release-parallel-full-coverage.md)
61
+ - Priority closure P0-P4: [docs/priority-closure-p0-p4.md](docs/priority-closure-p0-p4.md)
51
62
  - Image Voxel TriWiki: [docs/image-voxel-ledger.md](docs/image-voxel-ledger.md)
52
63
  - Image Wrongness: [docs/image-wrongness.md](docs/image-wrongness.md)
53
64
  - Route finalization: [docs/route-finalization.md](docs/route-finalization.md)
@@ -250,7 +261,7 @@ sks codex-lb repair
250
261
  sks
251
262
  ```
252
263
 
253
- Bare `sks` can also prompt for codex-lb auth; SKS stores the base URL/key in `~/.codex/sks-codex-lb.env`, writes the upstream codex-lb Codex CLI / IDE Extension provider block into `~/.codex/config.toml` for Codex App routing, loads the provider env key for tmux 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 = true` as documented by codex-lb. 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-*` tmux 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.
264
+ 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 tmux 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`; PPT/imagegen bridge checks treat that env-key provider as configured without requiring OpenAI OAuth. 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-*` tmux 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.
254
265
 
255
266
  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>`.
256
267
 
@@ -601,7 +612,7 @@ npm run release:check
601
612
  npm run publish:dry
602
613
  ```
603
614
 
604
- `release:check` runs the 1.17.0 parallel P0 DAG, writes a source digest stamp under `.sneakoscope/reports/`, then refreshes release readiness so publish commands can verify the same stamp. The DAG covers build, TS runtime source checks, dist parity, proof artifact structure, Codex App cockpit, janitor, multi-project isolation, parallel verification, typecheck, schema, release metadata, and release readiness. Broader live or historical gates remain explicit scripts such as `release:real-check`. 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.
615
+ `release:check` runs the 1.18.1 dynamic agent pool 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 dynamic pool, backfill replenishment, scheduler proof, session generation, terminal generation, tmux real right-lane, dynamic cockpit, Source Intelligence propagation, and Goal mode propagation checks. Broader live or historical gates remain explicit scripts such as `release:real-check`. 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.
605
616
 
606
617
  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.
607
618
 
@@ -76,7 +76,7 @@ dependencies = [
76
76
 
77
77
  [[package]]
78
78
  name = "sks-core"
79
- version = "1.17.0"
79
+ version = "1.18.1"
80
80
  dependencies = [
81
81
  "serde_json",
82
82
  ]
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "sks-core"
3
- version = "1.17.0"
3
+ version = "1.18.1"
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.17.0"),
7
+ Some("--version") => println!("sks-rs 1.18.1"),
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.17.0",
5
- "source_digest": "527177fcd408d00042f7263b37de99dd135af1fd2fdd0a8d79a220e747de03cb",
6
- "source_file_count": 1515,
7
- "built_at_source_time": 1779685135168
4
+ "package_version": "1.18.1",
5
+ "source_digest": "6df40e82722a56a4df2efafa956011204d7a96fd218b43d19aa10672bbd0842c",
6
+ "source_file_count": 1312,
7
+ "built_at_source_time": 1779722031788
8
8
  }
package/dist/bin/sks.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const FAST_PACKAGE_VERSION = '1.17.0';
2
+ const FAST_PACKAGE_VERSION = '1.18.1';
3
3
  const args = process.argv.slice(2);
4
4
  try {
5
5
  if (args[0] === '--version' || args[0] === '-v' || args[0] === 'version') {
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "schema": "sks.dist-build.v2",
3
- "version": "1.17.0",
4
- "package_version": "1.17.0",
3
+ "version": "1.18.1",
4
+ "package_version": "1.18.1",
5
5
  "typescript": true,
6
6
  "mjs_runtime_files": 0,
7
- "compiled_file_count": 828,
8
- "compiled_js_count": 414,
9
- "compiled_dts_count": 414,
10
- "source_digest": "527177fcd408d00042f7263b37de99dd135af1fd2fdd0a8d79a220e747de03cb",
11
- "source_file_count": 1515,
12
- "source_files_hash": "137bd4f96d0913bd90ab4e74364e959627dd8fd29576dae9d57c89c38b9b009f",
13
- "source_list_hash": "137bd4f96d0913bd90ab4e74364e959627dd8fd29576dae9d57c89c38b9b009f",
7
+ "compiled_file_count": 858,
8
+ "compiled_js_count": 429,
9
+ "compiled_dts_count": 429,
10
+ "source_digest": "6df40e82722a56a4df2efafa956011204d7a96fd218b43d19aa10672bbd0842c",
11
+ "source_file_count": 1312,
12
+ "source_files_hash": "fbe2aa994acefbdab214a17074d539960fa99369b928c3679442019ace20e7c6",
13
+ "source_list_hash": "fbe2aa994acefbdab214a17074d539960fa99369b928c3679442019ace20e7c6",
14
14
  "src_mjs_runtime_files": 0,
15
15
  "dist_stamp_schema": "sks.dist-build-stamp.v1",
16
16
  "files": [
@@ -234,22 +234,36 @@
234
234
  "core/agents/agent-runner-process.js",
235
235
  "core/agents/agent-runner-tmux.d.ts",
236
236
  "core/agents/agent-runner-tmux.js",
237
+ "core/agents/agent-scheduler.d.ts",
238
+ "core/agents/agent-scheduler.js",
237
239
  "core/agents/agent-schema.d.ts",
238
240
  "core/agents/agent-schema.js",
241
+ "core/agents/agent-session-generation.d.ts",
242
+ "core/agents/agent-session-generation.js",
239
243
  "core/agents/agent-session-rows.d.ts",
240
244
  "core/agents/agent-session-rows.js",
241
245
  "core/agents/agent-task-slicer.d.ts",
242
246
  "core/agents/agent-task-slicer.js",
247
+ "core/agents/agent-terminal-session.d.ts",
248
+ "core/agents/agent-terminal-session.js",
243
249
  "core/agents/agent-trust-report.d.ts",
244
250
  "core/agents/agent-trust-report.js",
245
251
  "core/agents/agent-work-partition.d.ts",
246
252
  "core/agents/agent-work-partition.js",
253
+ "core/agents/agent-work-queue.d.ts",
254
+ "core/agents/agent-work-queue.js",
247
255
  "core/agents/agent-worker-pipeline.d.ts",
248
256
  "core/agents/agent-worker-pipeline.js",
257
+ "core/agents/agent-worker-slot.d.ts",
258
+ "core/agents/agent-worker-slot.js",
249
259
  "core/agents/agent-wrongness.d.ts",
250
260
  "core/agents/agent-wrongness.js",
251
261
  "core/agents/route-collaboration-ledger.d.ts",
252
262
  "core/agents/route-collaboration-ledger.js",
263
+ "core/agents/scout-policy.d.ts",
264
+ "core/agents/scout-policy.js",
265
+ "core/agents/tmux-right-lane-cockpit.d.ts",
266
+ "core/agents/tmux-right-lane-cockpit.js",
253
267
  "core/agents/work-partition/conflict-detector.d.ts",
254
268
  "core/agents/work-partition/conflict-detector.js",
255
269
  "core/agents/work-partition/dependency-graph.d.ts",
@@ -332,6 +346,10 @@
332
346
  "core/codex-lb/codex-lb-setup.js",
333
347
  "core/codex-model-guard.d.ts",
334
348
  "core/codex-model-guard.js",
349
+ "core/codex/codex-web-search-adapter.d.ts",
350
+ "core/codex/codex-web-search-adapter.js",
351
+ "core/codex/official-goal-mode.d.ts",
352
+ "core/codex/official-goal-mode.js",
335
353
  "core/commands/agent-command.d.ts",
336
354
  "core/commands/agent-command.js",
337
355
  "core/commands/autoresearch-command.d.ts",
@@ -582,6 +600,10 @@
582
600
  "core/mad-sks/write-guard.js",
583
601
  "core/managed-paths.d.ts",
584
602
  "core/managed-paths.js",
603
+ "core/mcp/xai-mcp-detector.d.ts",
604
+ "core/mcp/xai-mcp-detector.js",
605
+ "core/mcp/xai-search-adapter.d.ts",
606
+ "core/mcp/xai-search-adapter.js",
585
607
  "core/memory-governor.d.ts",
586
608
  "core/memory-governor.js",
587
609
  "core/memory-summary.d.ts",
@@ -717,6 +739,8 @@
717
739
  "core/questions.js",
718
740
  "core/recallpulse.d.ts",
719
741
  "core/recallpulse.js",
742
+ "core/release-parallel-full-coverage.d.ts",
743
+ "core/release-parallel-full-coverage.js",
720
744
  "core/research.d.ts",
721
745
  "core/research.js",
722
746
  "core/retention.d.ts",
@@ -731,6 +755,12 @@
731
755
  "core/session/project-namespace.js",
732
756
  "core/skill-forge.d.ts",
733
757
  "core/skill-forge.js",
758
+ "core/source-intelligence/source-intelligence-policy.d.ts",
759
+ "core/source-intelligence/source-intelligence-policy.js",
760
+ "core/source-intelligence/source-intelligence-proof.d.ts",
761
+ "core/source-intelligence/source-intelligence-proof.js",
762
+ "core/source-intelligence/source-intelligence-runner.d.ts",
763
+ "core/source-intelligence/source-intelligence-runner.js",
734
764
  "core/structured-output-adapter.d.ts",
735
765
  "core/structured-output-adapter.js",
736
766
  "core/team-dag.d.ts",
@@ -101,6 +101,9 @@ export declare function codexLbStatus(opts?: any): Promise<{
101
101
  env_path: any;
102
102
  provider_configured: boolean;
103
103
  provider_requires_openai_auth: boolean;
104
+ provider_openai_auth_disabled: boolean;
105
+ provider_env_key: string | null;
106
+ provider_uses_codex_lb_env_auth: boolean;
104
107
  selected: boolean;
105
108
  env_file: boolean;
106
109
  env_key_configured: boolean;
@@ -207,6 +210,9 @@ export declare function maybePromptCodexLbSetupForLaunch(args?: any, opts?: any)
207
210
  env_path: any;
208
211
  provider_configured: boolean;
209
212
  provider_requires_openai_auth: boolean;
213
+ provider_openai_auth_disabled: boolean;
214
+ provider_env_key: string | null;
215
+ provider_uses_codex_lb_env_auth: boolean;
210
216
  selected: boolean;
211
217
  env_file: boolean;
212
218
  env_key_configured: boolean;
@@ -245,6 +251,9 @@ export declare function maybePromptCodexLbSetupForLaunch(args?: any, opts?: any)
245
251
  env_path: any;
246
252
  provider_configured: boolean;
247
253
  provider_requires_openai_auth: boolean;
254
+ provider_openai_auth_disabled: boolean;
255
+ provider_env_key: string | null;
256
+ provider_uses_codex_lb_env_auth: boolean;
248
257
  selected: boolean;
249
258
  env_file: boolean;
250
259
  env_key_configured: boolean;
@@ -132,7 +132,7 @@ async function reportPostinstallCodexLbAuth() {
132
132
  console.log(`codex-lb auth: repair skipped (${codexLbAuth.status}${codexLbAuth.error ? `: ${codexLbAuth.error}` : ''}).`);
133
133
  const reconcile = codexLbAuth.auth_reconcile;
134
134
  if (reconcile?.status === 'oauth_preserved') {
135
- console.log(`codex-lb auth: ChatGPT OAuth preserved for Codex App; codex-lb key stays in env_key (OAuth backup at ${reconcile.backup_path ?? 'unknown'}).`);
135
+ console.log(`codex-lb auth: ChatGPT OAuth preserved as backup; codex-lb key stays in env_key (OpenAI OAuth not required, backup at ${reconcile.backup_path ?? 'unknown'}).`);
136
136
  }
137
137
  else if (reconcile?.status === 'oauth_restored') {
138
138
  console.log(`codex-lb auth: restored ChatGPT OAuth from ${reconcile.backup_path ?? 'unknown'} while keeping codex-lb selected.`);
@@ -452,12 +452,19 @@ export async function codexLbStatus(opts = {}) {
452
452
  const selected = hasTopLevelCodexLbSelected(config);
453
453
  const baseUrl = codexLbProviderBaseUrl(config) || envLoad.base_url || null;
454
454
  const providerRequiresOpenAiAuth = codexLbProviderRequiresOpenAiAuth(config);
455
+ const providerOpenAiAuthDisabled = codexLbProviderOpenAiAuthDisabled(config);
456
+ const providerEnvKey = codexLbProviderEnvKey(config);
457
+ const providerUsesCodexLbEnvAuth = providerConfigured && providerEnvKey === 'CODEX_LB_API_KEY' && providerOpenAiAuthDisabled;
458
+ const codexAppUsableWithCodexLb = providerUsesCodexLbEnvAuth && envKeyConfigured && Boolean(baseUrl);
455
459
  return {
456
- ok: providerConfigured && envKeyConfigured && Boolean(baseUrl) && providerRequiresOpenAiAuth,
460
+ ok: providerConfigured && envKeyConfigured && Boolean(baseUrl) && providerUsesCodexLbEnvAuth,
457
461
  config_path: configPath,
458
462
  env_path: envPath,
459
463
  provider_configured: providerConfigured,
460
464
  provider_requires_openai_auth: providerRequiresOpenAiAuth,
465
+ provider_openai_auth_disabled: providerOpenAiAuthDisabled,
466
+ provider_env_key: providerEnvKey || null,
467
+ provider_uses_codex_lb_env_auth: providerUsesCodexLbEnvAuth,
461
468
  selected,
462
469
  env_file: envExists,
463
470
  env_key_configured: envKeyConfigured,
@@ -474,8 +481,8 @@ export async function codexLbStatus(opts = {}) {
474
481
  base_url: baseUrl,
475
482
  auth_path: authPath,
476
483
  auth_mode: authMode.mode,
477
- auth_usable_for_codex_app: authMode.codex_app_usable,
478
- auth_summary: authMode.summary
484
+ auth_usable_for_codex_app: authMode.codex_app_usable || codexAppUsableWithCodexLb,
485
+ auth_summary: codexAppUsableWithCodexLb ? 'codex-lb provider uses CODEX_LB_API_KEY env_key; OpenAI OAuth not required' : authMode.summary
479
486
  };
480
487
  }
481
488
  export function formatCodexLbStatusText(status = {}, opts = {}) {
@@ -487,7 +494,7 @@ export function formatCodexLbStatusText(status = {}, opts = {}) {
487
494
  `Configured: ${status.ok ? 'yes' : 'no'}`,
488
495
  `Selected: ${status.selected ? 'yes' : 'no'}`,
489
496
  `Provider: ${status.provider_configured ? 'yes' : 'no'}`,
490
- `Provider requires OpenAI auth: ${status.provider_requires_openai_auth ? 'yes' : 'missing'}`,
497
+ `Provider OpenAI OAuth: ${status.provider_openai_auth_disabled ? 'disabled for codex-lb env_key' : status.provider_requires_openai_auth ? 'required (repair recommended)' : 'missing explicit false'}`,
491
498
  `Codex App auth: ${status.auth_usable_for_codex_app ? 'ok' : 'needs sign-in/repair'} (${status.auth_mode || 'unknown'})`
492
499
  ];
493
500
  if (status.auth_summary)
@@ -521,7 +528,7 @@ export function formatCodexLbRepairResultText(result = {}) {
521
528
  if (result.auth_reconcile?.status === 'oauth_restored')
522
529
  lines.push(`Codex App auth: ChatGPT OAuth restored from ${result.auth_reconcile.backup_path}.`);
523
530
  else if (result.auth_reconcile?.status === 'oauth_preserved')
524
- lines.push('Codex App auth: ChatGPT OAuth preserved; codex-lb will use CODEX_LB_API_KEY from env_key.');
531
+ lines.push('Codex App auth: ChatGPT OAuth preserved as backup; codex-lb will use CODEX_LB_API_KEY from env_key without OpenAI OAuth.');
525
532
  else if (result.auth_reconcile?.status === 'apikey_auth_active')
526
533
  lines.push('Codex App auth: API-key auth.json is still active. Sign in again if the App asks for ChatGPT OAuth.');
527
534
  return `${lines.join('\n')}\n`;
@@ -757,6 +764,14 @@ function codexLbProviderRequiresOpenAiAuth(text = '') {
757
764
  const block = String(text || '').match(/(^|\n)\[model_providers\.codex-lb\]([\s\S]*?)(?=\n\[[^\]]+\]|\s*$)/)?.[2] || '';
758
765
  return /(^|\n)\s*requires_openai_auth\s*=\s*true\s*(?:#.*)?(?=\n|$)/.test(block);
759
766
  }
767
+ function codexLbProviderOpenAiAuthDisabled(text = '') {
768
+ const block = String(text || '').match(/(^|\n)\[model_providers\.codex-lb\]([\s\S]*?)(?=\n\[[^\]]+\]|\s*$)/)?.[2] || '';
769
+ return /(^|\n)\s*requires_openai_auth\s*=\s*false\s*(?:#.*)?(?=\n|$)/.test(block);
770
+ }
771
+ function codexLbProviderEnvKey(text = '') {
772
+ const block = String(text || '').match(/(^|\n)\[model_providers\.codex-lb\]([\s\S]*?)(?=\n\[[^\]]+\]|\s*$)/)?.[2] || '';
773
+ return block.match(/(^|\n)\s*env_key\s*=\s*"([^"]+)"/)?.[2] || '';
774
+ }
760
775
  export async function repairCodexLbAuth(opts = {}) {
761
776
  let status = await codexLbStatus(opts);
762
777
  let configRepaired = false;
@@ -771,7 +786,7 @@ export async function repairCodexLbAuth(opts = {}) {
771
786
  status = await codexLbStatus(opts);
772
787
  }
773
788
  }
774
- if (status.env_key_configured && status.base_url && (!status.ok || !status.selected || !status.provider_requires_openai_auth || legacyAuthMigrated || hasTopLevelCodexModeLock(currentConfig))) {
789
+ if (status.env_key_configured && status.base_url && (!status.ok || !status.selected || !status.provider_uses_codex_lb_env_auth || legacyAuthMigrated || hasTopLevelCodexModeLock(currentConfig))) {
775
790
  await ensureDir(path.dirname(status.config_path));
776
791
  const next = normalizeCodexFastModeUiConfig(upsertCodexLbConfig(currentConfig, status.base_url));
777
792
  await writeTextAtomic(status.config_path, next);
@@ -816,7 +831,7 @@ export async function ensureCodexLbAuthDuringInstall(opts = {}) {
816
831
  if (!status.selected && !status.provider_configured && !status.env_file)
817
832
  return { status: 'not_configured', codex_lb: status };
818
833
  await migrateCodexAuthKeyFormat({ home: opts.home });
819
- if (status.ok && (!status.selected || !status.provider_requires_openai_auth))
834
+ if (status.ok && (!status.selected || !status.provider_uses_codex_lb_env_auth))
820
835
  return repairCodexLbAuth(opts);
821
836
  if (!status.ok) {
822
837
  if (status.base_url && (status.env_key_configured || status.provider_configured || status.selected || status.env_base_url_configured))
@@ -935,10 +950,9 @@ async function migrateCodexAuthKeyFormat(opts = {}) {
935
950
  return { status: 'skipped', reason: 'parse_error' };
936
951
  }
937
952
  }
938
- // Codex App needs a refreshable ChatGPT OAuth blob when a provider declares
939
- // requires_openai_auth=true. For codex-lb, the proxy key belongs in env_key
940
- // (CODEX_LB_API_KEY), so SKS preserves or restores OAuth by default and only
941
- // writes apikey auth.json when explicitly requested for CLI-only legacy use.
953
+ // codex-lb authenticates through env_key (CODEX_LB_API_KEY) and explicitly
954
+ // disables OpenAI OAuth on the provider. SKS still preserves existing OAuth
955
+ // blobs, but OAuth is no longer a readiness requirement for codex-lb.
942
956
  export async function reconcileCodexLbAuthConflict(opts = {}) {
943
957
  const home = opts.home || process.env.HOME || os.homedir();
944
958
  const status = opts.status || await codexLbStatus({ ...opts, home });
@@ -979,7 +993,7 @@ export async function reconcileCodexLbAuthConflict(opts = {}) {
979
993
  if (process.env.SKS_CODEX_LB_FORCE_APIKEY_AUTH !== '1') {
980
994
  return {
981
995
  status: 'oauth_preserved',
982
- reason: 'codex_app_requires_refreshable_oauth',
996
+ reason: 'chatgpt_oauth_preserved_while_codex_lb_uses_env_key',
983
997
  auth_path: authPath,
984
998
  backup_path: backupPath
985
999
  };
@@ -1190,7 +1204,7 @@ export async function maybePromptCodexLbSetupForLaunch(args = [], opts = {}) {
1190
1204
  if (args.includes('--json') || args.includes('--skip-codex-lb') || process.env.SKS_SKIP_CODEX_LB_PROMPT === '1')
1191
1205
  return { status: 'skipped' };
1192
1206
  let status = await codexLbStatus(opts);
1193
- if (status.env_key_configured && status.base_url && (!status.provider_configured || !status.selected || !status.provider_requires_openai_auth)) {
1207
+ if (status.env_key_configured && status.base_url && (!status.provider_configured || !status.selected || !status.provider_uses_codex_lb_env_auth)) {
1194
1208
  let promptedRestore = false;
1195
1209
  if (!status.provider_configured && canAskYesNo()) {
1196
1210
  promptedRestore = true;
@@ -1349,7 +1363,7 @@ function upsertCodexLbConfig(text = '', baseUrl, selectDefault = true) {
1349
1363
  'wire_api = "responses"',
1350
1364
  'env_key = "CODEX_LB_API_KEY"',
1351
1365
  'supports_websockets = true',
1352
- 'requires_openai_auth = true'
1366
+ 'requires_openai_auth = false'
1353
1367
  ].join('\n');
1354
1368
  next = upsertTomlTable(next, 'model_providers.codex-lb', block);
1355
1369
  return `${next.trim()}\n`;
@@ -2248,8 +2262,8 @@ export async function selftestCodexLb(tmp) {
2248
2262
  const codexLbAuth = await safeReadText(path.join(codexLbHome, '.codex', 'auth.json'));
2249
2263
  if (!codexLbSetupJson.ok || codexLbSetupJson.base_url !== 'https://lb.example.test/backend-api/codex' || !hasTopLevelCodexLbSelected(codexLbConfig) || !codexLbConfig.includes('[model_providers.codex-lb]') || !codexLbEnv.includes("CODEX_LB_BASE_URL='https://lb.example.test/backend-api/codex'") || !codexLbEnv.includes("CODEX_LB_API_KEY='sk-test'") || codexLbSetupJson.codex_environment?.ok !== true || codexLbSetupJson.codex_login?.status !== 'skipped' || codexLbAuth.trim())
2250
2264
  throw new Error('selftest: codex-lb setup');
2251
- if (!codexLbConfig.includes('requires_openai_auth = true'))
2252
- throw new Error('selftest: codex-lb setup did not write upstream-required requires_openai_auth');
2265
+ if (!codexLbConfig.includes('requires_openai_auth = false'))
2266
+ throw new Error('selftest: codex-lb setup did not disable OpenAI OAuth for codex-lb env_key auth');
2253
2267
  const codexLbFailLaunchctl = path.join(codexLbFakeBin, 'launchctl-fail');
2254
2268
  await writeTextAtomic(codexLbFailLaunchctl, '#!/bin/sh\necho "launchctl denied" >&2\nexit 7\n');
2255
2269
  await fsp.chmod(codexLbFailLaunchctl, 0o755);
@@ -2262,8 +2276,8 @@ export async function selftestCodexLb(tmp) {
2262
2276
  const codexLbRepairSetupConfig = await safeReadText(path.join(codexLbHome, '.codex', 'config.toml'));
2263
2277
  if (!hasTopLevelCodexLbSelected(codexLbRepairSetupConfig) || !codexLbRepairSetupConfig.includes('[model_providers.codex-lb]') || !codexLbRepairSetupConfig.includes('https://lb.example.test/backend-api/codex') || codexLbRepairSetupConfig.includes('sk-test'))
2264
2278
  throw new Error('selftest: init codex-lb');
2265
- if (!codexLbRepairSetupConfig.includes('requires_openai_auth = true'))
2266
- throw new Error('selftest: init codex-lb did not preserve upstream-required requires_openai_auth');
2279
+ if (!codexLbRepairSetupConfig.includes('requires_openai_auth = false'))
2280
+ throw new Error('selftest: init codex-lb did not preserve OpenAI OAuth disablement');
2267
2281
  if (!hasCodexUnstableFeatureWarningSuppression(codexLbRepairSetupConfig))
2268
2282
  throw new Error('selftest: init codex-lb did not suppress Codex unstable feature warning');
2269
2283
  await writeTextAtomic(path.join(codexLbHome, '.codex', 'config.toml'), `${codexLbConfig}\n[mcp_servers.supabase]\nurl = "https://mcp.supabase.com/mcp?project_ref=ref&read_only=true&features=database,docs"\n`);
@@ -2281,8 +2295,8 @@ export async function selftestCodexLb(tmp) {
2281
2295
  const pcfg = await safeReadText(path.join(ptmp, '.codex', 'config.toml'));
2282
2296
  if (!hasTopLevelCodexLbSelected(pcfg) || !pcfg.includes('[model_providers.codex-lb]') || !pcfg.includes('[mcp_servers.supabase]') || !pcfg.includes('read_only=true'))
2283
2297
  throw new Error('selftest: project codex-lb');
2284
- if (!pcfg.includes('requires_openai_auth = true'))
2285
- throw new Error('selftest: project codex-lb did not copy upstream-required requires_openai_auth');
2298
+ if (!pcfg.includes('requires_openai_auth = false'))
2299
+ throw new Error('selftest: project codex-lb did not copy OpenAI OAuth disablement');
2286
2300
  if (!hasCodexUnstableFeatureWarningSuppression(pcfg))
2287
2301
  throw new Error('selftest: project codex-lb config did not suppress Codex unstable feature warning');
2288
2302
  await writeTextAtomic(path.join(codexLbHome, '.codex', 'auth.json'), '{"auth_mode":"browser"}\n');
@@ -2356,8 +2370,8 @@ export async function selftestCodexLb(tmp) {
2356
2370
  throw new Error('selftest: postinstall drift auth');
2357
2371
  if (!hasTopLevelCodexLbSelected(codexLbPostBootstrapConfig) || !codexLbPostBootstrapConfig.includes('[model_providers.codex-lb]') || !codexLbPostBootstrapConfig.includes('https://lb.example.test/backend-api/codex') || codexLbPostBootstrapConfig.includes('sk-test'))
2358
2372
  throw new Error('selftest: postinstall drift config');
2359
- if (!codexLbPostBootstrapConfig.includes('requires_openai_auth = true'))
2360
- throw new Error('selftest: postinstall drift config did not restore upstream-required requires_openai_auth');
2373
+ if (!codexLbPostBootstrapConfig.includes('requires_openai_auth = false'))
2374
+ throw new Error('selftest: postinstall drift config did not restore OpenAI OAuth disablement');
2361
2375
  const doctorProject = tmpdir();
2362
2376
  await ensureDir(path.join(doctorProject, '.git'));
2363
2377
  await writeTextAtomic(path.join(doctorProject, 'package.json'), '{"name":"codex-lb-doctor-project","version":"0.0.0"}\n');
@@ -2377,8 +2391,8 @@ export async function selftestCodexLb(tmp) {
2377
2391
  const codexLbDoctorConfig = await safeReadText(path.join(codexLbHome, '.codex', 'config.toml'));
2378
2392
  if (!codexLbDoctorJson.repair?.codex_lb?.ok || !codexLbDoctorJson.repair.codex_lb.config_repaired || !codexLbDoctorJson.codex_lb?.ok || !codexLbDoctorAuth.includes('"auth_mode":"browser"') || codexLbDoctorAuth.includes('sk-test') || !hasTopLevelCodexLbSelected(codexLbDoctorConfig) || !codexLbDoctorConfig.includes('https://lb.example.test/backend-api/codex') || !hasCodexUnstableFeatureWarningSuppression(codexLbDoctorConfig))
2379
2393
  throw new Error('selftest: doctor codex-lb');
2380
- if (!codexLbDoctorConfig.includes('requires_openai_auth = true'))
2381
- throw new Error('selftest: doctor codex-lb did not restore upstream-required requires_openai_auth');
2394
+ if (!codexLbDoctorConfig.includes('requires_openai_auth = false'))
2395
+ throw new Error('selftest: doctor codex-lb did not restore OpenAI OAuth disablement');
2382
2396
  // codex-lb auth: ChatGPT OAuth ↔ codex-lb env_key conflict reconciliation.
2383
2397
  const oauthAuthJson = JSON.stringify({
2384
2398
  auth_mode: 'chatgpt',
@@ -2387,7 +2401,7 @@ export async function selftestCodexLb(tmp) {
2387
2401
  });
2388
2402
  await writeTextAtomic(path.join(codexLbHome, '.codex', 'auth.json'), `${oauthAuthJson}\n`);
2389
2403
  await writeTextAtomic(path.join(codexLbHome, '.codex', 'sks-codex-lb.env'), "export CODEX_LB_BASE_URL='https://lb.example.test/backend-api/codex'\nexport CODEX_LB_API_KEY='sk-test'\n");
2390
- await writeTextAtomic(path.join(codexLbHome, '.codex', 'config.toml'), 'model_provider = "codex-lb"\n\n[model_providers.codex-lb]\nname = "OpenAI"\nbase_url = "https://lb.example.test/backend-api/codex"\nwire_api = "responses"\nenv_key = "CODEX_LB_API_KEY"\nsupports_websockets = true\nrequires_openai_auth = true\n');
2404
+ await writeTextAtomic(path.join(codexLbHome, '.codex', 'config.toml'), 'model_provider = "codex-lb"\n\n[model_providers.codex-lb]\nname = "OpenAI"\nbase_url = "https://lb.example.test/backend-api/codex"\nwire_api = "responses"\nenv_key = "CODEX_LB_API_KEY"\nsupports_websockets = true\nrequires_openai_auth = false\n');
2391
2405
  await fsp.rm(path.join(codexLbHome, '.codex', 'auth.chatgpt-backup.json'), { force: true });
2392
2406
  const codexLbReconcileRepair = await runProcess(process.execPath, [packagedSksEntrypoint(), 'auth', 'repair', '--json'], { cwd: tmp, env: codexLbEnvForSelftest, timeoutMs: 15000, maxOutputBytes: 64 * 1024 });
2393
2407
  if (codexLbReconcileRepair.code !== 0)
@@ -2423,7 +2437,7 @@ export async function selftestCodexLb(tmp) {
2423
2437
  // codex-lb auth: release flow — restore ChatGPT OAuth from backup so the user can return to
2424
2438
  // the official ChatGPT account login. Default deselects model_provider; flags control whether
2425
2439
  // the provider stays selected and whether the backup file is removed after restore.
2426
- const codexLbReleaseConfig = 'model_provider = "codex-lb"\n\n[model_providers.codex-lb]\nname = "OpenAI"\nbase_url = "https://lb.example.test/backend-api/codex"\nwire_api = "responses"\nenv_key = "CODEX_LB_API_KEY"\nsupports_websockets = true\nrequires_openai_auth = true\n';
2440
+ const codexLbReleaseConfig = 'model_provider = "codex-lb"\n\n[model_providers.codex-lb]\nname = "OpenAI"\nbase_url = "https://lb.example.test/backend-api/codex"\nwire_api = "responses"\nenv_key = "CODEX_LB_API_KEY"\nsupports_websockets = true\nrequires_openai_auth = false\n';
2427
2441
  const codexLbReleaseEnv = "export CODEX_LB_BASE_URL='https://lb.example.test/backend-api/codex'\nexport CODEX_LB_API_KEY='sk-test'\n";
2428
2442
  const codexLbReleaseApikeyAuth = '{"auth_mode":"apikey","OPENAI_API_KEY":"sk-test"}\n';
2429
2443
  const codexLbReleaseOauthBackup = `${oauthAuthJson}\n`;
@@ -2719,8 +2733,8 @@ export async function selftestCodexLb(tmp) {
2719
2733
  }
2720
2734
  });
2721
2735
  const missingProviderRepairedConfig = await safeReadText(path.join(codexLbHome, '.codex', 'config.toml'));
2722
- if (!missingProviderLaunch.ok || missingProviderLaunch.status !== 'present' || missingProviderLaunch.chain_health?.status !== 'chain_ok' || missingProviderLaunchCalls.length !== 2 || !hasTopLevelCodexLbSelected(missingProviderRepairedConfig) || !missingProviderRepairedConfig.includes('[model_providers.codex-lb]') || !missingProviderRepairedConfig.includes('env_key = "CODEX_LB_API_KEY"') || !missingProviderRepairedConfig.includes('supports_websockets = true') || !missingProviderRepairedConfig.includes('requires_openai_auth = true'))
2723
- throw new Error('selftest: bare sks launch did not restore missing upstream codex-lb provider block from stored env');
2736
+ if (!missingProviderLaunch.ok || missingProviderLaunch.status !== 'present' || missingProviderLaunch.chain_health?.status !== 'chain_ok' || missingProviderLaunchCalls.length !== 2 || !hasTopLevelCodexLbSelected(missingProviderRepairedConfig) || !missingProviderRepairedConfig.includes('[model_providers.codex-lb]') || !missingProviderRepairedConfig.includes('env_key = "CODEX_LB_API_KEY"') || !missingProviderRepairedConfig.includes('supports_websockets = true') || !missingProviderRepairedConfig.includes('requires_openai_auth = false'))
2737
+ throw new Error('selftest: bare sks launch did not restore codex-lb provider block from stored env with OpenAI OAuth disabled');
2724
2738
  const chainCalls = [];
2725
2739
  const okChain = await checkCodexLbResponseChain({ base_url: 'https://lb.example.test/backend-api/codex', env_path: path.join(codexLbHome, '.codex', 'sks-codex-lb.env') }, {
2726
2740
  apiKey: 'sk-test',
@@ -436,6 +436,28 @@ export declare function run(command: any, args?: any): Promise<void | {
436
436
  lease_count: number;
437
437
  blockers: string[];
438
438
  };
439
+ scheduler: {
440
+ schema: string;
441
+ ok: boolean;
442
+ state: import("../core/agents/agent-scheduler.js").AgentSchedulerState;
443
+ queue: import("../core/agents/agent-work-queue.js").AgentWorkQueue;
444
+ slots: import("../core/agents/agent-worker-slot.js").AgentWorkerSlot[];
445
+ results: any[];
446
+ };
447
+ source_intelligence: {
448
+ artifact: string;
449
+ ok: boolean;
450
+ mode: import("../core/source-intelligence/source-intelligence-policy.js").SourceIntelligenceMode;
451
+ cache_key: string;
452
+ proof_ok: boolean;
453
+ };
454
+ goal_mode: {
455
+ artifact: string;
456
+ ok: boolean;
457
+ mode: "official_goal_default" | "sks_goal_fallback";
458
+ official_goal_available: boolean;
459
+ default_enabled: boolean;
460
+ };
439
461
  results: any[];
440
462
  consensus: {
441
463
  schema: string;
@@ -524,6 +546,15 @@ export declare function run(command: any, args?: any): Promise<void | {
524
546
  no_overlap_ok: boolean;
525
547
  ledger_hash_chain_ok: boolean;
526
548
  all_sessions_closed: boolean;
549
+ terminal_sessions_closed: any;
550
+ terminal_close_report: string;
551
+ target_active_slots: any;
552
+ max_observed_active_slots: any;
553
+ backfill_count: any;
554
+ pending_queue_drained: any;
555
+ generation_count: any;
556
+ tmux_attach_command: string | null;
557
+ tmux_lane_manifest: string;
527
558
  output_schema_ok: boolean;
528
559
  output_tail_report: string;
529
560
  output_tail_records: number;
@@ -538,7 +569,7 @@ export declare function run(command: any, args?: any): Promise<void | {
538
569
  generated_at: string;
539
570
  records: {
540
571
  schema: string;
541
- kind: "recursion_attempt" | "lease_conflict" | "session_not_closed" | "schema_invalid_output" | "stale_heartbeat" | "legacy_multiagent_runtime_usage_attempt";
572
+ kind: "xai_available_not_used" | "context7_missing" | "codex_web_search_missing" | "recursion_attempt" | "lease_conflict" | "session_not_closed" | "terminal_missing" | "terminal_not_closed" | "scheduler_starvation" | "session_generation_missing" | "schema_invalid_output" | "stale_heartbeat" | "legacy_multiagent_runtime_usage_attempt";
542
573
  blocker: string;
543
574
  created_at: string;
544
575
  status: string;
@@ -558,6 +589,29 @@ export declare function run(command: any, args?: any): Promise<void | {
558
589
  all_sessions_closed: boolean;
559
590
  launched_count: number;
560
591
  closed_session_count: number;
592
+ terminal_sessions_closed: boolean;
593
+ terminal_session_count: number;
594
+ terminal_generation_count: number;
595
+ terminal_close_report_count: number;
596
+ terminal_close_report: string;
597
+ session_generation_count: number;
598
+ all_generations_closed: boolean;
599
+ scheduler_state: string;
600
+ target_active_slots: any;
601
+ max_observed_active_slots: any;
602
+ pending_queue_drained: boolean;
603
+ backfill_count: any;
604
+ expected_backfill_count: any;
605
+ slot_count: any;
606
+ generation_count: number;
607
+ all_slots_closed_after_drain: boolean;
608
+ generated_work_item_count: any;
609
+ source_intelligence_generation_refs_ok: boolean;
610
+ goal_mode_generation_refs_ok: boolean;
611
+ tmux_lane_manifest: string;
612
+ tmux_lane_manifest_ok: boolean;
613
+ tmux_pane_launch_ledger: string;
614
+ tmux_pane_launch_count: number;
561
615
  ledger_hash_chain_ok: boolean;
562
616
  no_overlap_ok: boolean;
563
617
  consensus_ok: boolean;
@@ -288,6 +288,28 @@ export declare function run(command: any, args?: any): Promise<void | {
288
288
  lease_count: number;
289
289
  blockers: string[];
290
290
  };
291
+ scheduler: {
292
+ schema: string;
293
+ ok: boolean;
294
+ state: import("../core/agents/agent-scheduler.js").AgentSchedulerState;
295
+ queue: import("../core/agents/agent-work-queue.js").AgentWorkQueue;
296
+ slots: import("../core/agents/agent-worker-slot.js").AgentWorkerSlot[];
297
+ results: any[];
298
+ };
299
+ source_intelligence: {
300
+ artifact: string;
301
+ ok: boolean;
302
+ mode: import("../core/source-intelligence/source-intelligence-policy.js").SourceIntelligenceMode;
303
+ cache_key: string;
304
+ proof_ok: boolean;
305
+ };
306
+ goal_mode: {
307
+ artifact: string;
308
+ ok: boolean;
309
+ mode: "official_goal_default" | "sks_goal_fallback";
310
+ official_goal_available: boolean;
311
+ default_enabled: boolean;
312
+ };
291
313
  results: any[];
292
314
  consensus: {
293
315
  schema: string;
@@ -376,6 +398,15 @@ export declare function run(command: any, args?: any): Promise<void | {
376
398
  no_overlap_ok: boolean;
377
399
  ledger_hash_chain_ok: boolean;
378
400
  all_sessions_closed: boolean;
401
+ terminal_sessions_closed: any;
402
+ terminal_close_report: string;
403
+ target_active_slots: any;
404
+ max_observed_active_slots: any;
405
+ backfill_count: any;
406
+ pending_queue_drained: any;
407
+ generation_count: any;
408
+ tmux_attach_command: string | null;
409
+ tmux_lane_manifest: string;
379
410
  output_schema_ok: boolean;
380
411
  output_tail_report: string;
381
412
  output_tail_records: number;
@@ -390,7 +421,7 @@ export declare function run(command: any, args?: any): Promise<void | {
390
421
  generated_at: string;
391
422
  records: {
392
423
  schema: string;
393
- kind: "recursion_attempt" | "lease_conflict" | "session_not_closed" | "schema_invalid_output" | "stale_heartbeat" | "legacy_multiagent_runtime_usage_attempt";
424
+ kind: "xai_available_not_used" | "context7_missing" | "codex_web_search_missing" | "recursion_attempt" | "lease_conflict" | "session_not_closed" | "terminal_missing" | "terminal_not_closed" | "scheduler_starvation" | "session_generation_missing" | "schema_invalid_output" | "stale_heartbeat" | "legacy_multiagent_runtime_usage_attempt";
394
425
  blocker: string;
395
426
  created_at: string;
396
427
  status: string;
@@ -410,6 +441,29 @@ export declare function run(command: any, args?: any): Promise<void | {
410
441
  all_sessions_closed: boolean;
411
442
  launched_count: number;
412
443
  closed_session_count: number;
444
+ terminal_sessions_closed: boolean;
445
+ terminal_session_count: number;
446
+ terminal_generation_count: number;
447
+ terminal_close_report_count: number;
448
+ terminal_close_report: string;
449
+ session_generation_count: number;
450
+ all_generations_closed: boolean;
451
+ scheduler_state: string;
452
+ target_active_slots: any;
453
+ max_observed_active_slots: any;
454
+ pending_queue_drained: boolean;
455
+ backfill_count: any;
456
+ expected_backfill_count: any;
457
+ slot_count: any;
458
+ generation_count: number;
459
+ all_slots_closed_after_drain: boolean;
460
+ generated_work_item_count: any;
461
+ source_intelligence_generation_refs_ok: boolean;
462
+ goal_mode_generation_refs_ok: boolean;
463
+ tmux_lane_manifest: string;
464
+ tmux_lane_manifest_ok: boolean;
465
+ tmux_pane_launch_ledger: string;
466
+ tmux_pane_launch_count: number;
413
467
  ledger_hash_chain_ok: boolean;
414
468
  no_overlap_ok: boolean;
415
469
  consensus_ok: boolean;