@the-open-engine/zeroshot 6.38.0 → 6.39.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 (381) hide show
  1. package/cli/event-copy.js +8 -7
  2. package/cli/event-copy.ts +12 -0
  3. package/cli/index.js +7 -31
  4. package/cli/json-export.js +61 -64
  5. package/cli/json-export.ts +112 -0
  6. package/cli/message-formatter-utils.js +68 -56
  7. package/cli/message-formatter-utils.ts +121 -0
  8. package/cli/message-formatters-normal.js +124 -259
  9. package/cli/message-formatters-normal.ts +250 -0
  10. package/cli/message-formatters-watch.js +81 -84
  11. package/cli/message-formatters-watch.ts +189 -0
  12. package/lib/agent-cli-provider/adapters/codex.d.ts.map +1 -1
  13. package/lib/agent-cli-provider/adapters/codex.js +3 -1
  14. package/lib/agent-cli-provider/adapters/codex.js.map +1 -1
  15. package/lib/cluster/generated/protocol-schema.cjs +1 -1
  16. package/lib/cluster/generated/protocol-schema.mjs +1 -1
  17. package/lib/cluster/generated/protocol.d.cts +8 -0
  18. package/lib/cluster/generated/protocol.d.mts +8 -0
  19. package/lib/cluster/generated/protocol.d.ts +8 -0
  20. package/lib/clusters-registry.d.ts +23 -0
  21. package/lib/clusters-registry.js +17 -29
  22. package/lib/completion.d.ts +12 -0
  23. package/lib/completion.js +84 -94
  24. package/lib/compose-utils.d.ts +32 -0
  25. package/lib/compose-utils.js +57 -72
  26. package/lib/detached-startup.d.ts +83 -0
  27. package/lib/detached-startup.js +231 -302
  28. package/lib/docker-config.d.ts +43 -0
  29. package/lib/docker-config.js +150 -325
  30. package/lib/docker-env-auth.d.ts +17 -0
  31. package/lib/docker-env-auth.js +75 -0
  32. package/lib/git-remote-utils.d.ts +48 -0
  33. package/lib/git-remote-utils.js +147 -213
  34. package/lib/id-detector.d.ts +15 -0
  35. package/lib/id-detector.js +37 -41
  36. package/lib/path-check.d.ts +30 -0
  37. package/lib/path-check.js +42 -45
  38. package/lib/process-liveness.d.ts +16 -0
  39. package/lib/process-liveness.js +19 -12
  40. package/lib/provider-credential-path.d.ts +16 -0
  41. package/lib/provider-credential-path.js +31 -29
  42. package/lib/provider-defaults.d.ts +30 -0
  43. package/lib/provider-defaults.js +47 -42
  44. package/lib/provider-detection.d.ts +11 -0
  45. package/lib/provider-detection.js +91 -54
  46. package/lib/provider-names.d.ts +38 -0
  47. package/lib/provider-names.js +56 -64
  48. package/lib/repo-settings.d.ts +28 -0
  49. package/lib/repo-settings.js +83 -59
  50. package/lib/run-mode.d.ts +21 -0
  51. package/lib/run-mode.js +21 -20
  52. package/lib/run-plan.d.ts +28 -0
  53. package/lib/run-plan.js +17 -16
  54. package/lib/settings/claude-auth.d.ts +35 -0
  55. package/lib/settings/claude-auth.js +30 -47
  56. package/lib/settings-defaults.d.ts +20 -0
  57. package/lib/settings-defaults.js +149 -0
  58. package/lib/settings-error.d.ts +7 -0
  59. package/lib/settings-error.js +8 -0
  60. package/lib/settings-issue-providers.d.ts +10 -0
  61. package/lib/settings-issue-providers.js +12 -0
  62. package/lib/settings-models.d.ts +22 -0
  63. package/lib/settings-models.js +93 -0
  64. package/lib/settings-storage.d.ts +23 -0
  65. package/lib/settings-storage.js +205 -0
  66. package/lib/settings-validation.d.ts +7 -0
  67. package/lib/settings-validation.js +182 -0
  68. package/lib/settings.d.ts +29 -0
  69. package/lib/settings.js +41 -736
  70. package/lib/setup-apply-types.d.ts +66 -0
  71. package/lib/setup-apply-types.js +2 -0
  72. package/lib/setup-apply.d.ts +39 -0
  73. package/lib/setup-apply.js +267 -264
  74. package/lib/setup-journal.d.ts +41 -0
  75. package/lib/setup-journal.js +119 -76
  76. package/lib/setup-plan-types.d.ts +102 -0
  77. package/lib/setup-plan-types.js +2 -0
  78. package/lib/setup-plan.d.ts +30 -0
  79. package/lib/setup-plan.js +300 -324
  80. package/lib/setup-undo.d.ts +44 -0
  81. package/lib/setup-undo.js +61 -74
  82. package/lib/start-cluster-config.d.ts +26 -0
  83. package/lib/start-cluster-config.js +56 -0
  84. package/lib/start-cluster-environment.d.ts +40 -0
  85. package/lib/start-cluster-environment.js +134 -0
  86. package/lib/start-cluster-run-options.d.ts +53 -0
  87. package/lib/start-cluster-run-options.js +147 -0
  88. package/lib/start-cluster.d.ts +64 -0
  89. package/lib/start-cluster.js +98 -454
  90. package/lib/stream-json-parser.d.ts +17 -0
  91. package/lib/stream-json-parser.js +51 -52
  92. package/npm-shrinkwrap.json +2 -2
  93. package/package.json +12 -6
  94. package/scripts/postinstall.js +27 -0
  95. package/scripts/rust-distribution.js +23 -14
  96. package/src/agent/agent-command-proofs-context.js +35 -45
  97. package/src/agent/agent-command-proofs-context.ts +87 -0
  98. package/src/agent/agent-config-settings.js +19 -0
  99. package/src/agent/agent-config-settings.ts +41 -0
  100. package/src/agent/agent-config.js +122 -231
  101. package/src/agent/agent-config.ts +285 -0
  102. package/src/agent/agent-context-builder.js +38 -273
  103. package/src/agent/agent-context-builder.ts +51 -0
  104. package/src/agent/agent-context-environment-sections.js +105 -0
  105. package/src/agent/agent-context-environment-sections.ts +134 -0
  106. package/src/agent/agent-context-packs.js +165 -0
  107. package/src/agent/agent-context-packs.ts +296 -0
  108. package/src/agent/agent-context-prompt-sections.js +100 -0
  109. package/src/agent/agent-context-prompt-sections.ts +148 -0
  110. package/src/agent/agent-context-sections.js +25 -334
  111. package/src/agent/agent-context-sections.ts +36 -0
  112. package/src/agent/agent-context-sources.js +96 -149
  113. package/src/agent/agent-context-sources.ts +253 -0
  114. package/src/agent/agent-context-types.js +2 -0
  115. package/src/agent/agent-context-types.ts +132 -0
  116. package/src/agent/agent-context-validation-sections.js +73 -0
  117. package/src/agent/agent-context-validation-sections.ts +129 -0
  118. package/src/agent/agent-input-injector.js +99 -118
  119. package/src/agent/agent-input-injector.ts +195 -0
  120. package/src/agent/agent-liveness-poll.js +74 -78
  121. package/src/agent/agent-liveness-poll.ts +163 -0
  122. package/src/agent/agent-quality-gate-schema.js +77 -86
  123. package/src/agent/agent-quality-gate-schema.ts +135 -0
  124. package/src/agent/agent-quality-gates-context.js +44 -50
  125. package/src/agent/agent-quality-gates-context.ts +91 -0
  126. package/src/agent/agent-stuck-detector.js +171 -239
  127. package/src/agent/agent-stuck-detector.ts +288 -0
  128. package/src/agent/agent-trigger-evaluator.js +29 -46
  129. package/src/agent/agent-trigger-evaluator.ts +98 -0
  130. package/src/agent/context-metrics.js +110 -141
  131. package/src/agent/context-metrics.ts +261 -0
  132. package/src/agent/context-pack-builder.js +72 -358
  133. package/src/agent/context-pack-builder.ts +105 -0
  134. package/src/agent/context-pack-core.js +70 -0
  135. package/src/agent/context-pack-core.ts +96 -0
  136. package/src/agent/context-pack-selection.js +119 -0
  137. package/src/agent/context-pack-selection.ts +187 -0
  138. package/src/agent/context-pack-truncation.js +139 -0
  139. package/src/agent/context-pack-truncation.ts +208 -0
  140. package/src/agent/context-pack-types.js +2 -0
  141. package/src/agent/context-pack-types.ts +98 -0
  142. package/src/agent/context-replay-policy.js +30 -39
  143. package/src/agent/context-replay-policy.ts +71 -0
  144. package/src/agent/critical-agent-policy.js +6 -10
  145. package/src/agent/critical-agent-policy.ts +20 -0
  146. package/src/agent/guidance-queue.js +74 -87
  147. package/src/agent/guidance-queue.ts +166 -0
  148. package/src/agent/output-extraction-error-detail.js +45 -0
  149. package/src/agent/output-extraction-error-detail.ts +49 -0
  150. package/src/agent/output-extraction-failures.js +125 -0
  151. package/src/agent/output-extraction-failures.ts +149 -0
  152. package/src/agent/output-extraction-json.js +234 -0
  153. package/src/agent/output-extraction-json.ts +235 -0
  154. package/src/agent/output-extraction-pi.js +124 -0
  155. package/src/agent/output-extraction-pi.ts +137 -0
  156. package/src/agent/output-extraction-types.js +2 -0
  157. package/src/agent/output-extraction-types.ts +49 -0
  158. package/src/agent/output-extraction.js +17 -617
  159. package/src/agent/output-extraction.ts +30 -0
  160. package/src/agent/output-reformatter-errors.js +83 -0
  161. package/src/agent/output-reformatter-errors.ts +106 -0
  162. package/src/agent/output-reformatter-types.js +2 -0
  163. package/src/agent/output-reformatter-types.ts +86 -0
  164. package/src/agent/output-reformatter.js +140 -185
  165. package/src/agent/output-reformatter.ts +238 -0
  166. package/src/agent/pi-terminal-lifecycle-types.js +2 -0
  167. package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
  168. package/src/agent/pi-terminal-lifecycle.js +186 -206
  169. package/src/agent/pi-terminal-lifecycle.ts +297 -0
  170. package/src/agent/provider-control-plane.js +22 -21
  171. package/src/agent/provider-control-plane.ts +52 -0
  172. package/src/agent/provider-terminal-failure-types.js +2 -0
  173. package/src/agent/provider-terminal-failure-types.ts +60 -0
  174. package/src/agent/provider-terminal-failure.js +194 -191
  175. package/src/agent/provider-terminal-failure.ts +262 -0
  176. package/src/agent/rate-limit-backoff.js +31 -74
  177. package/src/agent/rate-limit-backoff.ts +71 -0
  178. package/src/agent/schema-utils.js +85 -125
  179. package/src/agent/schema-utils.ts +148 -0
  180. package/src/agent/structured-output-error.js +34 -33
  181. package/src/agent/structured-output-error.ts +105 -0
  182. package/src/agent/validation-platform.js +27 -27
  183. package/src/agent/validation-platform.ts +49 -0
  184. package/src/agent-cli-provider/adapters/codex.ts +3 -1
  185. package/src/attach/attach-client.js +232 -405
  186. package/src/attach/attach-client.ts +300 -0
  187. package/src/attach/attach-server-cleanup.js +43 -0
  188. package/src/attach/attach-server-cleanup.ts +39 -0
  189. package/src/attach/attach-server-clients.js +117 -0
  190. package/src/attach/attach-server-clients.ts +122 -0
  191. package/src/attach/attach-server-events.js +38 -0
  192. package/src/attach/attach-server-events.ts +36 -0
  193. package/src/attach/attach-server-pty.js +45 -0
  194. package/src/attach/attach-server-pty.ts +64 -0
  195. package/src/attach/attach-server-runtime.js +73 -0
  196. package/src/attach/attach-server-runtime.ts +62 -0
  197. package/src/attach/attach-server-socket.js +28 -0
  198. package/src/attach/attach-server-socket.ts +23 -0
  199. package/src/attach/attach-server-types.js +2 -0
  200. package/src/attach/attach-server-types.ts +82 -0
  201. package/src/attach/attach-server.js +106 -523
  202. package/src/attach/attach-server.ts +158 -0
  203. package/src/attach/index.js +18 -35
  204. package/src/attach/index.ts +18 -0
  205. package/src/attach/protocol.js +95 -184
  206. package/src/attach/protocol.ts +181 -0
  207. package/src/attach/ring-buffer.js +76 -102
  208. package/src/attach/ring-buffer.ts +109 -0
  209. package/src/attach/send-input.js +64 -75
  210. package/src/attach/send-input.ts +94 -0
  211. package/src/attach/socket-discovery.js +164 -218
  212. package/src/attach/socket-discovery.ts +230 -0
  213. package/src/attach/socket-paths.js +42 -61
  214. package/src/attach/socket-paths.ts +81 -0
  215. package/src/claude-credentials.js +51 -54
  216. package/src/claude-credentials.ts +89 -0
  217. package/src/cluster/generated/protocol-schema.ts +1 -1
  218. package/src/cluster/generated/protocol.ts +2 -1
  219. package/src/command-proofs.js +110 -141
  220. package/src/command-proofs.ts +216 -0
  221. package/src/config-router.js +81 -73
  222. package/src/config-router.ts +131 -0
  223. package/src/copy-worker.js +53 -29
  224. package/src/copy-worker.ts +75 -0
  225. package/src/darwin-keychain-boundary.js +80 -111
  226. package/src/darwin-keychain-boundary.ts +148 -0
  227. package/src/guidance-topics.js +4 -5
  228. package/src/guidance-topics.ts +10 -0
  229. package/src/input-helpers.js +33 -54
  230. package/src/input-helpers.ts +58 -0
  231. package/src/ledger-sequence.js +45 -48
  232. package/src/ledger-sequence.ts +63 -0
  233. package/src/legacy-lib/clusters-registry.ts +40 -0
  234. package/src/legacy-lib/completion.ts +148 -0
  235. package/src/legacy-lib/compose-utils.ts +102 -0
  236. package/src/legacy-lib/detached-startup.ts +449 -0
  237. package/src/legacy-lib/docker-config.ts +282 -0
  238. package/src/legacy-lib/docker-env-auth.ts +116 -0
  239. package/src/legacy-lib/git-remote-utils.ts +244 -0
  240. package/src/legacy-lib/id-detector.ts +57 -0
  241. package/src/legacy-lib/js-yaml.d.ts +3 -0
  242. package/src/legacy-lib/omelette.d.ts +15 -0
  243. package/src/legacy-lib/path-check.ts +89 -0
  244. package/src/legacy-lib/process-liveness.ts +36 -0
  245. package/src/legacy-lib/provider-credential-path.ts +57 -0
  246. package/src/legacy-lib/provider-defaults.ts +114 -0
  247. package/src/legacy-lib/provider-detection.ts +67 -0
  248. package/src/legacy-lib/provider-names.ts +126 -0
  249. package/src/legacy-lib/repo-settings.ts +88 -0
  250. package/src/legacy-lib/run-mode.ts +58 -0
  251. package/src/legacy-lib/run-plan.ts +49 -0
  252. package/src/legacy-lib/settings/claude-auth.ts +80 -0
  253. package/src/legacy-lib/settings-defaults.ts +212 -0
  254. package/src/legacy-lib/settings-error.ts +8 -0
  255. package/src/legacy-lib/settings-issue-providers.ts +18 -0
  256. package/src/legacy-lib/settings-models.ts +124 -0
  257. package/src/legacy-lib/settings-storage.ts +277 -0
  258. package/src/legacy-lib/settings-validation.ts +220 -0
  259. package/src/legacy-lib/settings.ts +87 -0
  260. package/src/legacy-lib/setup-apply-types.ts +70 -0
  261. package/src/legacy-lib/setup-apply.ts +456 -0
  262. package/src/legacy-lib/setup-journal.ts +185 -0
  263. package/src/legacy-lib/setup-plan-types.ts +96 -0
  264. package/src/legacy-lib/setup-plan.ts +500 -0
  265. package/src/legacy-lib/setup-undo.ts +142 -0
  266. package/src/legacy-lib/start-cluster-config.ts +124 -0
  267. package/src/legacy-lib/start-cluster-environment.ts +165 -0
  268. package/src/legacy-lib/start-cluster-run-options.ts +279 -0
  269. package/src/legacy-lib/start-cluster.ts +237 -0
  270. package/src/legacy-lib/stream-json-parser.ts +88 -0
  271. package/src/message-buffer.js +55 -71
  272. package/src/message-buffer.ts +107 -0
  273. package/src/message-bus-bridge.js +92 -133
  274. package/src/message-bus-bridge.ts +149 -0
  275. package/src/name-generator-shared.js +220 -0
  276. package/src/name-generator-shared.ts +231 -0
  277. package/src/name-generator.js +8 -217
  278. package/src/name-generator.ts +27 -0
  279. package/src/omp-blob-root.js +83 -64
  280. package/src/omp-blob-root.ts +116 -0
  281. package/src/omp-config-overlay.js +65 -38
  282. package/src/omp-config-overlay.ts +110 -0
  283. package/src/omp-execution-fingerprint.js +38 -43
  284. package/src/omp-execution-fingerprint.ts +92 -0
  285. package/src/omp-session-limits.js +10 -15
  286. package/src/omp-session-limits.ts +53 -0
  287. package/src/omp-session-partition.js +2 -2
  288. package/src/omp-session-verifier.js +1 -1
  289. package/src/orchestrator.js +19 -4
  290. package/src/providers/anthropic/index.js +3 -1
  291. package/src/providers/anthropic/index.ts +13 -0
  292. package/src/providers/capabilities.js +19 -27
  293. package/src/providers/capabilities.ts +44 -0
  294. package/src/providers/google/index.js +3 -1
  295. package/src/providers/google/index.ts +13 -0
  296. package/src/providers/openai/index.js +3 -1
  297. package/src/providers/openai/index.ts +13 -0
  298. package/src/providers/opencode/index.js +3 -1
  299. package/src/providers/opencode/index.ts +13 -0
  300. package/src/quality-gates.js +67 -127
  301. package/src/quality-gates.ts +149 -0
  302. package/src/repo-settings-access.js +40 -0
  303. package/src/repo-settings-access.ts +64 -0
  304. package/src/schemas/sub-cluster.js +127 -183
  305. package/src/schemas/sub-cluster.ts +238 -0
  306. package/src/state-snapshot-normalization.js +224 -0
  307. package/src/state-snapshot-normalization.ts +222 -0
  308. package/src/state-snapshot.js +192 -359
  309. package/src/state-snapshot.ts +291 -0
  310. package/src/state-snapshotter.js +118 -130
  311. package/src/state-snapshotter.ts +167 -0
  312. package/src/sub-cluster-wrapper.js +4 -13
  313. package/src/task-run-model-args.js +87 -124
  314. package/src/task-run-model-args.ts +204 -0
  315. package/src/task-runner.js +5 -25
  316. package/src/task-runner.ts +28 -0
  317. package/src/task-startup-error.js +73 -58
  318. package/src/task-startup-error.ts +126 -0
  319. package/src/template-validation/consensus-gate-contracts.js +2 -0
  320. package/src/template-validation/consensus-gate-contracts.ts +70 -0
  321. package/src/template-validation/consensus-gate-scenarios.js +76 -0
  322. package/src/template-validation/consensus-gate-scenarios.ts +130 -0
  323. package/src/template-validation/consensus-gate-stage.js +34 -0
  324. package/src/template-validation/consensus-gate-stage.ts +56 -0
  325. package/src/template-validation/random-topology-contracts.js +2 -0
  326. package/src/template-validation/random-topology-contracts.ts +54 -0
  327. package/src/template-validation/random-topology-dispatch.js +25 -0
  328. package/src/template-validation/random-topology-dispatch.ts +33 -0
  329. package/src/template-validation/random-topology-message-loop.js +53 -0
  330. package/src/template-validation/random-topology-message-loop.ts +73 -0
  331. package/src/template-validation/random-topology-operations.js +79 -0
  332. package/src/template-validation/random-topology-operations.ts +101 -0
  333. package/src/template-validation/random-topology-runtime.js +25 -0
  334. package/src/template-validation/random-topology-runtime.ts +43 -0
  335. package/src/template-validation/random-topology-scenario.js +52 -0
  336. package/src/template-validation/random-topology-scenario.ts +57 -0
  337. package/src/template-validation/random-topology-schema.js +159 -0
  338. package/src/template-validation/random-topology-schema.ts +190 -0
  339. package/src/template-validation/random-topology-state.js +28 -0
  340. package/src/template-validation/random-topology-state.ts +30 -0
  341. package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
  342. package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
  343. package/src/template-validation/random-topology-trigger.js +75 -0
  344. package/src/template-validation/random-topology-trigger.ts +88 -0
  345. package/src/template-validation/report-formatter.js +40 -46
  346. package/src/template-validation/report-formatter.ts +101 -0
  347. package/src/template-validation/simulate-consensus-gates.js +111 -302
  348. package/src/template-validation/simulate-consensus-gates.ts +196 -0
  349. package/src/template-validation/simulate-random-topology.js +26 -519
  350. package/src/template-validation/simulate-random-topology.ts +57 -0
  351. package/src/template-validation/simulate-two-stage-validation.js +41 -265
  352. package/src/template-validation/simulate-two-stage-validation.ts +55 -0
  353. package/src/template-validation/simulation-agent-runtime.js +25 -0
  354. package/src/template-validation/simulation-agent-runtime.ts +40 -0
  355. package/src/template-validation/simulation-agent.js +29 -0
  356. package/src/template-validation/simulation-agent.ts +73 -0
  357. package/src/template-validation/simulation-runtime.js +34 -0
  358. package/src/template-validation/simulation-runtime.ts +72 -0
  359. package/src/template-validation/two-stage-contracts.js +2 -0
  360. package/src/template-validation/two-stage-contracts.ts +41 -0
  361. package/src/template-validation/two-stage-inputs.js +21 -0
  362. package/src/template-validation/two-stage-inputs.ts +29 -0
  363. package/src/template-validation/two-stage-results.js +30 -0
  364. package/src/template-validation/two-stage-results.ts +40 -0
  365. package/src/template-validation/two-stage-scenario.js +86 -0
  366. package/src/template-validation/two-stage-scenario.ts +120 -0
  367. package/src/worktree-claude-config.js +182 -220
  368. package/src/worktree-claude-config.ts +272 -0
  369. package/src/worktree-tooling-env.js +103 -125
  370. package/src/worktree-tooling-env.ts +142 -0
  371. package/task-lib/completion.js +2 -3
  372. package/task-lib/completion.ts +9 -0
  373. package/task-lib/config.js +1 -4
  374. package/task-lib/config.ts +11 -0
  375. package/task-lib/name-generator.js +4 -226
  376. package/task-lib/name-generator.ts +11 -0
  377. package/task-lib/omp-session-cleanup.js +1 -1
  378. package/task-lib/omp-storage-root.js +8 -12
  379. package/task-lib/omp-storage-root.ts +62 -0
  380. package/task-lib/process-termination.js +143 -166
  381. package/task-lib/process-termination.ts +268 -0
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Single source of truth for "is this PID actually alive?"
3
4
  *
@@ -9,18 +10,24 @@
9
10
  * simultaneously reported as "zombie" by status and "still running" by
10
11
  * resume. Consolidating avoids a sixth call site reintroducing that split.
11
12
  */
13
+ function hasErrorCode(error, code) {
14
+ return (typeof error === 'object' &&
15
+ error !== null &&
16
+ 'code' in error &&
17
+ error.code === code);
18
+ }
12
19
  function isProcessRunning(pid) {
13
- if (!pid || !Number.isInteger(pid) || pid <= 0) {
14
- return false;
15
- }
16
- try {
17
- // Signal 0 doesn't kill, just checks if the process exists.
18
- process.kill(pid, 0);
19
- return true;
20
- } catch (error) {
21
- // ESRCH = no such process, EPERM = process exists but we lack permission.
22
- return Boolean(error && error.code === 'EPERM');
23
- }
20
+ if (!pid || typeof pid !== 'number' || !Number.isInteger(pid) || pid <= 0) {
21
+ return false;
22
+ }
23
+ try {
24
+ // Signal 0 doesn't kill, just checks if the process exists.
25
+ process.kill(pid, 0);
26
+ return true;
27
+ }
28
+ catch (error) {
29
+ // ESRCH = no such process, EPERM = process exists but we lack permission.
30
+ return hasErrorCode(error, 'EPERM');
31
+ }
24
32
  }
25
-
26
33
  module.exports = { isProcessRunning };
@@ -0,0 +1,16 @@
1
+ type Environment = Readonly<Record<string, string | undefined>>;
2
+ interface ProviderCredentialMetadata {
3
+ readonly credentialPaths: readonly string[];
4
+ readonly docker?: {
5
+ readonly mount?: {
6
+ readonly hostEnv?: unknown;
7
+ };
8
+ };
9
+ }
10
+ declare function expandProviderCredentialPath(value: string, env?: Environment): string | null;
11
+ declare function resolveProviderCredentialPaths(metadata: ProviderCredentialMetadata, env?: Environment): string[];
12
+ declare const _default: {
13
+ expandProviderCredentialPath: typeof expandProviderCredentialPath;
14
+ resolveProviderCredentialPaths: typeof resolveProviderCredentialPaths;
15
+ };
16
+ export = _default;
@@ -1,36 +1,38 @@
1
- const os = require('node:os');
2
- const path = require('node:path');
3
-
1
+ "use strict";
2
+ const os = require("node:os");
3
+ const path = require("node:path");
4
4
  function expandHome(value) {
5
- if (value === '~') return os.homedir();
6
- return value.startsWith('~/') ? path.join(os.homedir(), value.slice(2)) : value;
5
+ if (value === '~')
6
+ return os.homedir();
7
+ return value.startsWith('~/') ? path.join(os.homedir(), value.slice(2)) : value;
7
8
  }
8
-
9
9
  function expandProviderCredentialPath(value, env = process.env) {
10
- const homeExpanded = expandHome(value);
11
- if (homeExpanded !== value) return homeExpanded;
12
- const variable = value.match(/^\$([A-Z_][A-Z0-9_]*)(\/.*)?$/);
13
- if (!variable) return value;
14
- const root = env[variable[1]];
15
- return typeof root === 'string' && root.trim()
16
- ? path.resolve(expandHome(root), `.${variable[2] || ''}`)
17
- : null;
10
+ const homeExpanded = expandHome(value);
11
+ if (homeExpanded !== value)
12
+ return homeExpanded;
13
+ const variable = /^\$([A-Z_][A-Z0-9_]*)(\/.*)?$/.exec(value);
14
+ if (!variable)
15
+ return value;
16
+ const variableName = variable[1];
17
+ if (!variableName)
18
+ return value;
19
+ const root = env[variableName];
20
+ return typeof root === 'string' && root.trim()
21
+ ? path.resolve(expandHome(root), `.${variable[2] || ''}`)
22
+ : null;
18
23
  }
19
-
20
24
  function resolveProviderCredentialPaths(metadata, env = process.env) {
21
- const overrideName = metadata.docker?.mount?.hostEnv;
22
- const overrideSet =
23
- typeof overrideName === 'string' &&
24
- typeof env[overrideName] === 'string' &&
25
- env[overrideName].trim();
26
- const candidates = overrideName
27
- ? metadata.credentialPaths.filter((value) =>
28
- overrideSet ? value.startsWith(`$${overrideName}/`) : !value.startsWith(`$${overrideName}/`)
29
- )
30
- : metadata.credentialPaths;
31
- return candidates
32
- .map((value) => expandProviderCredentialPath(value, env))
33
- .filter((value) => value !== null);
25
+ const overrideName = metadata.docker?.mount?.hostEnv;
26
+ const overrideSet = typeof overrideName === 'string' &&
27
+ typeof env[overrideName] === 'string' &&
28
+ env[overrideName].trim();
29
+ const candidates = overrideName
30
+ ? metadata.credentialPaths.filter((value) => overrideSet
31
+ ? value.startsWith(`$${overrideName}/`)
32
+ : !value.startsWith(`$${overrideName}/`))
33
+ : metadata.credentialPaths;
34
+ return candidates
35
+ .map((value) => expandProviderCredentialPath(value, env))
36
+ .filter((value) => value !== null);
34
37
  }
35
-
36
38
  module.exports = { expandProviderCredentialPath, resolveProviderCredentialPaths };
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Provider defaults module
3
+ *
4
+ * Separated from settings.js to break circular dependency:
5
+ * - settings.js requires provider defaults
6
+ * - providers require settings.js (for loadSettings, getClaudeCommand, etc.)
7
+ *
8
+ * CRITICAL: This module should NOT import from settings.js
9
+ */
10
+ interface ProviderDefaultSettings {
11
+ defaultLevel?: string;
12
+ levelOverrides?: Record<string, string>;
13
+ maxLevel?: string;
14
+ minLevel?: string;
15
+ [key: string]: unknown;
16
+ }
17
+ type ProviderDefaults = Record<string, ProviderDefaultSettings>;
18
+ /**
19
+ * Get or build cached provider defaults
20
+ */
21
+ declare function getProviderDefaults(): ProviderDefaults;
22
+ /**
23
+ * Clear the provider defaults cache (primarily for testing)
24
+ */
25
+ declare function clearProviderDefaultsCache(): void;
26
+ declare const _default: {
27
+ getProviderDefaults: typeof getProviderDefaults;
28
+ clearProviderDefaultsCache: typeof clearProviderDefaultsCache;
29
+ };
30
+ export = _default;
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Provider defaults module
3
4
  *
@@ -7,67 +8,71 @@
7
8
  *
8
9
  * CRITICAL: This module should NOT import from settings.js
9
10
  */
10
-
11
11
  // Cache provider defaults to avoid repeated instantiation
12
12
  let _providerDefaultsCache = null;
13
+ // The emitted CommonJS module resolves this maintained JavaScript facade from lib/.
14
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
13
15
  const { VALID_PROVIDERS, getProviderMetadata } = require('./provider-names');
14
-
16
+ function errorMessage(error) {
17
+ if (typeof error !== 'object' || error === null || !('message' in error)) {
18
+ return undefined;
19
+ }
20
+ return typeof error.message === 'string' ? error.message : String(error.message);
21
+ }
15
22
  /**
16
23
  * Build provider default settings by instantiating each provider
17
24
  * and calling getDefaultSettings()
18
- * @returns {Object} Map of provider name to default settings
19
25
  */
20
26
  function buildProviderDefaults() {
21
- const { listProviders, getProvider } = require('../src/providers');
22
-
23
- const defaults = {};
24
- for (const providerName of listProviders()) {
25
- try {
26
- const provider = getProvider(providerName);
27
- defaults[providerName] = provider.getDefaultSettings();
28
- } catch (error) {
29
- const metadata = getProviderMetadata(providerName);
30
- console.warn(`Warning: Could not get defaults for ${providerName}: ${error.message}`);
31
- defaults[providerName] = {
32
- maxLevel: metadata.defaultLevels.max,
33
- minLevel: metadata.defaultLevels.min,
34
- defaultLevel: metadata.defaultLevels.default,
35
- levelOverrides: {},
36
- };
27
+ // Keep this require lazy to preserve the settings/provider circular-dependency boundary.
28
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
29
+ const { listProviders, getProvider } = require('../src/providers');
30
+ const defaults = {};
31
+ for (const providerName of listProviders()) {
32
+ try {
33
+ const provider = getProvider(providerName);
34
+ defaults[providerName] = provider.getDefaultSettings();
35
+ }
36
+ catch (error) {
37
+ const metadata = getProviderMetadata(providerName);
38
+ console.warn(`Warning: Could not get defaults for ${providerName}: ${errorMessage(error)}`);
39
+ defaults[providerName] = {
40
+ maxLevel: metadata.defaultLevels.max,
41
+ minLevel: metadata.defaultLevels.min,
42
+ defaultLevel: metadata.defaultLevels.default,
43
+ levelOverrides: {},
44
+ };
45
+ }
37
46
  }
38
- }
39
- for (const providerName of VALID_PROVIDERS) {
40
- if (defaults[providerName]) continue;
41
- const metadata = getProviderMetadata(providerName);
42
- defaults[providerName] = {
43
- maxLevel: metadata.defaultLevels.max,
44
- minLevel: metadata.defaultLevels.min,
45
- defaultLevel: metadata.defaultLevels.default,
46
- levelOverrides: {},
47
- };
48
- }
49
- return defaults;
47
+ for (const providerName of VALID_PROVIDERS) {
48
+ if (defaults[providerName])
49
+ continue;
50
+ const metadata = getProviderMetadata(providerName);
51
+ defaults[providerName] = {
52
+ maxLevel: metadata.defaultLevels.max,
53
+ minLevel: metadata.defaultLevels.min,
54
+ defaultLevel: metadata.defaultLevels.default,
55
+ levelOverrides: {},
56
+ };
57
+ }
58
+ return defaults;
50
59
  }
51
-
52
60
  /**
53
61
  * Get or build cached provider defaults
54
- * @returns {Object} Provider defaults
55
62
  */
56
63
  function getProviderDefaults() {
57
- if (!_providerDefaultsCache) {
58
- _providerDefaultsCache = buildProviderDefaults();
59
- }
60
- return _providerDefaultsCache;
64
+ if (!_providerDefaultsCache) {
65
+ _providerDefaultsCache = buildProviderDefaults();
66
+ }
67
+ return _providerDefaultsCache;
61
68
  }
62
-
63
69
  /**
64
70
  * Clear the provider defaults cache (primarily for testing)
65
71
  */
66
72
  function clearProviderDefaultsCache() {
67
- _providerDefaultsCache = null;
73
+ _providerDefaultsCache = null;
68
74
  }
69
-
70
75
  module.exports = {
71
- getProviderDefaults,
72
- clearProviderDefaultsCache,
76
+ getProviderDefaults,
77
+ clearProviderDefaultsCache,
73
78
  };
@@ -0,0 +1,11 @@
1
+ declare function commandExists(command: string): boolean;
2
+ declare function getCommandPath(command: string): string | null;
3
+ declare function getHelpOutput(command: string, args?: string[]): string;
4
+ declare function getVersionOutput(command: string, args?: string[]): string;
5
+ declare const _default: {
6
+ commandExists: typeof commandExists;
7
+ getCommandPath: typeof getCommandPath;
8
+ getHelpOutput: typeof getHelpOutput;
9
+ getVersionOutput: typeof getVersionOutput;
10
+ };
11
+ export = _default;
@@ -1,64 +1,101 @@
1
- const { execSync, spawnSync } = require('child_process');
2
- const fs = require('fs');
3
- const path = require('path');
4
-
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ const childProcess = __importStar(require("child_process"));
36
+ const fs = __importStar(require("fs"));
37
+ const path = __importStar(require("path"));
38
+ const { execSync, spawnSync } = childProcess;
5
39
  function commandExists(command) {
6
- if (!command) return false;
7
- if (command.includes(path.sep)) {
8
- return fs.existsSync(command);
9
- }
10
- const probe = process.platform === 'win32' ? `where ${command}` : `command -v ${command}`;
11
- try {
12
- execSync(probe, { stdio: 'pipe' });
13
- return true;
14
- } catch {
15
- return false;
16
- }
40
+ if (!command)
41
+ return false;
42
+ if (command.includes(path.sep)) {
43
+ return fs.existsSync(command);
44
+ }
45
+ const probe = process.platform === 'win32' ? `where ${command}` : `command -v ${command}`;
46
+ try {
47
+ execSync(probe, { stdio: 'pipe' });
48
+ return true;
49
+ }
50
+ catch {
51
+ return false;
52
+ }
17
53
  }
18
-
19
54
  function getCommandPath(command) {
20
- if (!command) return null;
21
- if (command.includes(path.sep)) {
22
- return fs.existsSync(command) ? command : null;
23
- }
24
- const probe = process.platform === 'win32' ? `where ${command}` : `command -v ${command}`;
25
- try {
26
- const output = execSync(probe, { encoding: 'utf8', stdio: 'pipe' });
27
- // `where` can return multiple matches (one per line); take the first.
28
- return output.split(/\r?\n/)[0].trim() || null;
29
- } catch {
30
- return null;
31
- }
55
+ if (!command)
56
+ return null;
57
+ if (command.includes(path.sep)) {
58
+ return fs.existsSync(command) ? command : null;
59
+ }
60
+ const probe = process.platform === 'win32' ? `where ${command}` : `command -v ${command}`;
61
+ try {
62
+ const output = execSync(probe, { encoding: 'utf8', stdio: 'pipe' });
63
+ // `where` can return multiple matches (one per line); take the first.
64
+ const [firstMatch = ''] = output.split(/\r?\n/);
65
+ return firstMatch.trim() || null;
66
+ }
67
+ catch {
68
+ return null;
69
+ }
32
70
  }
33
-
34
71
  function getHelpOutput(command, args = []) {
35
- if (!commandExists(command)) return '';
36
-
37
- const attempt = (flag) => {
38
- const result = spawnSync(command, [...args, flag], { encoding: 'utf8' });
39
- if (result.status !== 0) return '';
40
- const output = `${result.stdout || ''}${result.stderr || ''}`;
41
- return output.trim();
42
- };
43
-
44
- const help = attempt('--help');
45
- if (help) return help;
46
-
47
- const alt = attempt('-h');
48
- return alt || '';
72
+ if (!commandExists(command))
73
+ return '';
74
+ const attempt = (flag) => {
75
+ const result = spawnSync(command, [...args, flag], { encoding: 'utf8' });
76
+ if (result.status !== 0)
77
+ return '';
78
+ const output = `${result.stdout || ''}${result.stderr || ''}`;
79
+ return output.trim();
80
+ };
81
+ const help = attempt('--help');
82
+ if (help)
83
+ return help;
84
+ const alt = attempt('-h');
85
+ return alt || '';
49
86
  }
50
-
51
87
  function getVersionOutput(command, args = []) {
52
- if (!commandExists(command)) return '';
53
- const result = spawnSync(command, [...args, '--version'], { encoding: 'utf8' });
54
- if (result.status !== 0) return '';
55
- const output = `${result.stdout || ''}${result.stderr || ''}`;
56
- return output.trim();
88
+ if (!commandExists(command))
89
+ return '';
90
+ const result = spawnSync(command, [...args, '--version'], { encoding: 'utf8' });
91
+ if (result.status !== 0)
92
+ return '';
93
+ const output = `${result.stdout || ''}${result.stderr || ''}`;
94
+ return output.trim();
57
95
  }
58
-
59
96
  module.exports = {
60
- commandExists,
61
- getCommandPath,
62
- getHelpOutput,
63
- getVersionOutput,
97
+ commandExists,
98
+ getCommandPath,
99
+ getHelpOutput,
100
+ getVersionOutput,
64
101
  };
@@ -0,0 +1,38 @@
1
+ type ProviderCapabilityState = boolean | 'experimental';
2
+ type ProviderCapabilities = Readonly<Record<string, ProviderCapabilityState>>;
3
+ interface ProviderRegistryEntry {
4
+ readonly capabilities: ProviderCapabilities;
5
+ readonly docker: {
6
+ readonly envPassthrough: readonly string[];
7
+ };
8
+ readonly id: string;
9
+ readonly [key: string]: unknown;
10
+ }
11
+ declare function normalizeProviderName<T>(name: T): T | string;
12
+ declare function normalizeProviderSettings<T>(providerSettings: T): T | Record<string, unknown>;
13
+ declare function getProviderMetadata(name: string): ProviderRegistryEntry;
14
+ declare function listProviderMetadata(): readonly ProviderRegistryEntry[];
15
+ declare function resolveProviderCommand(name: string): {
16
+ readonly args: readonly string[];
17
+ readonly command: string;
18
+ };
19
+ declare function providerSupportsCapability(name: string, capability: string): boolean;
20
+ declare function providerSupportsOutputReformatting(name: string): boolean;
21
+ declare function getDefaultProviderId(): string;
22
+ declare const _default: {
23
+ KNOWN_PROVIDER_NAMES: string[];
24
+ PROVIDER_ALIASES: Readonly<{
25
+ [x: string]: string;
26
+ }>;
27
+ PROVIDER_CAPABILITIES: Readonly<Record<string, Readonly<Record<string, ProviderCapabilityState>>>>;
28
+ VALID_PROVIDERS: string[];
29
+ getDefaultProviderId: typeof getDefaultProviderId;
30
+ getProviderMetadata: typeof getProviderMetadata;
31
+ listProviderMetadata: typeof listProviderMetadata;
32
+ normalizeProviderName: typeof normalizeProviderName;
33
+ normalizeProviderSettings: typeof normalizeProviderSettings;
34
+ providerSupportsCapability: typeof providerSupportsCapability;
35
+ providerSupportsOutputReformatting: typeof providerSupportsOutputReformatting;
36
+ resolveProviderCommand: typeof resolveProviderCommand;
37
+ };
38
+ export = _default;
@@ -1,87 +1,79 @@
1
+ "use strict";
2
+ // The emitted CommonJS facade resolves the built registry beside this module.
3
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
1
4
  const registry = require('./agent-cli-provider/provider-registry');
2
-
3
5
  const VALID_PROVIDERS = [...registry.providerIds];
4
6
  const KNOWN_PROVIDER_NAMES = [...registry.knownProviderNames];
5
7
  const PROVIDER_ALIASES = Object.freeze({ ...registry.providerAliasMap });
6
- const PROVIDER_CAPABILITIES = Object.freeze(
7
- Object.fromEntries(
8
- registry.listProviderRegistryEntries().map((entry) => [entry.id, entry.capabilities])
9
- )
10
- );
11
-
8
+ const PROVIDER_CAPABILITIES = Object.freeze(Object.fromEntries(registry.listProviderRegistryEntries().map((entry) => [entry.id, entry.capabilities])));
9
+ // Non-string legacy inputs intentionally pass through unchanged.
10
+ // eslint-disable-next-line sonarjs/function-return-type
12
11
  function normalizeProviderName(name) {
13
- if (!name || typeof name !== 'string') return name;
14
- return registry.normalizeProviderName(name);
12
+ if (!name || typeof name !== 'string')
13
+ return name;
14
+ return registry.normalizeProviderName(name);
15
15
  }
16
-
16
+ // Non-record legacy settings intentionally pass through unchanged.
17
+ // eslint-disable-next-line sonarjs/function-return-type
17
18
  function normalizeProviderSettings(providerSettings) {
18
- if (
19
- !providerSettings ||
20
- typeof providerSettings !== 'object' ||
21
- Array.isArray(providerSettings)
22
- ) {
23
- return providerSettings;
24
- }
25
-
26
- const normalized = {};
27
- const entries = Object.entries(providerSettings);
28
- const aliasFirst = entries.sort(([left], [right]) => {
29
- const leftIsCanonical = normalizeProviderName(left) === left;
30
- const rightIsCanonical = normalizeProviderName(right) === right;
31
- if (leftIsCanonical === rightIsCanonical) return 0;
32
- return leftIsCanonical ? 1 : -1;
33
- });
34
-
35
- for (const [key, value] of aliasFirst) {
36
- const canonical = normalizeProviderName(key);
37
- if (!VALID_PROVIDERS.includes(canonical)) {
38
- normalized[key] = value;
39
- continue;
19
+ if (!providerSettings ||
20
+ typeof providerSettings !== 'object' ||
21
+ Array.isArray(providerSettings)) {
22
+ return providerSettings;
40
23
  }
41
- normalized[canonical] = {
42
- ...(normalized[canonical] || {}),
43
- ...(value || {}),
44
- };
45
- }
46
-
47
- return normalized;
24
+ const normalized = {};
25
+ const entries = Object.entries(providerSettings);
26
+ entries.sort(([left], [right]) => {
27
+ const leftIsCanonical = normalizeProviderName(left) === left;
28
+ const rightIsCanonical = normalizeProviderName(right) === right;
29
+ if (leftIsCanonical === rightIsCanonical)
30
+ return 0;
31
+ return leftIsCanonical ? 1 : -1;
32
+ });
33
+ const aliasFirst = entries;
34
+ for (const [key, value] of aliasFirst) {
35
+ const canonical = normalizeProviderName(key);
36
+ if (!VALID_PROVIDERS.includes(canonical)) {
37
+ normalized[key] = value;
38
+ continue;
39
+ }
40
+ // Preserve JavaScript object-spread coercion for malformed legacy values.
41
+ normalized[canonical] = {
42
+ ...Object(normalized[canonical] || {}),
43
+ ...Object(value || {}),
44
+ };
45
+ }
46
+ return normalized;
48
47
  }
49
-
50
48
  function getProviderMetadata(name) {
51
- return registry.getProviderRegistryEntry(name);
49
+ return registry.getProviderRegistryEntry(name);
52
50
  }
53
-
54
51
  function listProviderMetadata() {
55
- return registry.listProviderRegistryEntries();
52
+ return registry.listProviderRegistryEntries();
56
53
  }
57
-
58
54
  function resolveProviderCommand(name) {
59
- return registry.resolveProviderCommand(name);
55
+ return registry.resolveProviderCommand(name);
60
56
  }
61
-
62
57
  function providerSupportsCapability(name, capability) {
63
- return registry.supportsProviderCapability(name, capability);
58
+ return registry.supportsProviderCapability(name, capability);
64
59
  }
65
-
66
60
  function providerSupportsOutputReformatting(name) {
67
- return registry.supportsProviderOutputReformatting(name);
61
+ return registry.supportsProviderOutputReformatting(name);
68
62
  }
69
-
70
63
  function getDefaultProviderId() {
71
- return registry.getDefaultProviderId();
64
+ return registry.getDefaultProviderId();
72
65
  }
73
-
74
66
  module.exports = {
75
- KNOWN_PROVIDER_NAMES,
76
- PROVIDER_ALIASES,
77
- PROVIDER_CAPABILITIES,
78
- VALID_PROVIDERS,
79
- getDefaultProviderId,
80
- getProviderMetadata,
81
- listProviderMetadata,
82
- normalizeProviderName,
83
- normalizeProviderSettings,
84
- providerSupportsCapability,
85
- providerSupportsOutputReformatting,
86
- resolveProviderCommand,
67
+ KNOWN_PROVIDER_NAMES,
68
+ PROVIDER_ALIASES,
69
+ PROVIDER_CAPABILITIES,
70
+ VALID_PROVIDERS,
71
+ getDefaultProviderId,
72
+ getProviderMetadata,
73
+ listProviderMetadata,
74
+ normalizeProviderName,
75
+ normalizeProviderSettings,
76
+ providerSupportsCapability,
77
+ providerSupportsOutputReformatting,
78
+ resolveProviderCommand,
87
79
  };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Repo-local settings for zeroshot
3
+ *
4
+ * Optional per-repository config file:
5
+ * <repoRoot>/.zeroshot/settings.json
6
+ *
7
+ * This complements the global user settings at:
8
+ * ~/.zeroshot/settings.json
9
+ */
10
+ type RepoSettings = object;
11
+ interface RepoSettingsResult {
12
+ repoRoot: string | null;
13
+ settings: RepoSettings | null;
14
+ settingsPath: string | null;
15
+ }
16
+ /**
17
+ * Read repo-local settings if present.
18
+ */
19
+ declare function readRepoSettings(startDir: string): RepoSettingsResult;
20
+ /**
21
+ * Write repo-local settings.
22
+ */
23
+ declare function writeRepoSettings(repoRoot: string, settings: object): string;
24
+ declare const _default: {
25
+ readRepoSettings: typeof readRepoSettings;
26
+ writeRepoSettings: typeof writeRepoSettings;
27
+ };
28
+ export = _default;