@joshuafolkken/kit 1.1010.0 → 1.1035.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 (272) hide show
  1. package/.claude/settings.json +1 -5
  2. package/.claude/skills/dependency-update/SKILL.md +6 -3
  3. package/.claude/skills/epic-commands/SKILL.md +46 -17
  4. package/.claude/skills/workflow-commands/SKILL.md +8 -23
  5. package/.claude/skills/workflow-commands/backlogrun-child.md +4 -2
  6. package/.claude/skills/workflow-commands/backlogrun.md +3 -12
  7. package/.claude/skills/workflow-commands/fullrun-steps.md +4 -3
  8. package/.claude/skills/workflow-commands/fullrun.md +1 -1
  9. package/.claude/skills/workflow-commands/halfrun.md +2 -1
  10. package/.claude/skills/workflow-commands/into-target.md +1 -1
  11. package/.claude/skills/workflow-commands/observation-filing.md +42 -43
  12. package/.claude/skills/workflow-commands/prerequisite.md +1 -1
  13. package/.codex/hooks.json +1 -5
  14. package/.github/workflows/sonar-qube.yml +1 -1
  15. package/AGENTS.md +4 -25
  16. package/CLAUDE.md +24 -38
  17. package/GEMINI.md +4 -24
  18. package/README.md +22 -56
  19. package/dist/CLAUDE.md +24 -38
  20. package/dist/hooks/batch-guard.js +4 -4
  21. package/dist/hooks/{chunk-WMIR5SNX.js → chunk-D67KVGGY.js} +3 -3
  22. package/dist/hooks/{chunk-EZLHXKJ6.js → chunk-EIFCAJRB.js} +70 -27
  23. package/dist/hooks/{chunk-KPZN42RT.js → chunk-GJT4BNVE.js} +3 -3
  24. package/dist/hooks/{chunk-PAXMLGSS.js → chunk-GLBDBJOK.js} +44 -24
  25. package/dist/hooks/{chunk-GBJUERYK.js → chunk-HOYJU5RM.js} +1 -1
  26. package/dist/hooks/{chunk-6PSTVOLH.js → chunk-HU66PWWL.js} +33 -57
  27. package/dist/hooks/{chunk-A2H5I2VD.js → chunk-KG6PZD72.js} +2 -2
  28. package/dist/hooks/{chunk-AWTFKKFW.js → chunk-XPLP27WA.js} +3 -8
  29. package/dist/hooks/{chunk-4GDR2YTV.js → chunk-Y27M6A7X.js} +4 -4
  30. package/dist/hooks/{chunk-56LGMJJV.js → chunk-ZXNE6NY3.js} +2 -2
  31. package/dist/hooks/codex-hook-adapter.js +10 -10
  32. package/dist/hooks/duplicate-read-guard.js +5 -5
  33. package/dist/hooks/format-edited.js +2 -2
  34. package/dist/hooks/investigation-guard.js +5 -5
  35. package/dist/hooks/pretool-guard.js +9 -9
  36. package/dist/hooks/stop-guard.js +11 -15
  37. package/dist/josh.js +38 -19
  38. package/dist/version/index.js +93 -41
  39. package/eslint/base.js +2 -11
  40. package/package.json +31 -5
  41. package/prompts/coding-standards.md +15 -290
  42. package/prompts/collaboration-workflow/cross-repo-epic.md +2 -51
  43. package/prompts/collaboration-workflow/epic-audit.md +2 -53
  44. package/prompts/collaboration-workflow/epic-bundle.md +2 -106
  45. package/prompts/collaboration-workflow/issue-template.md +4 -4
  46. package/prompts/collaboration-workflow/operating-rules.md +18 -75
  47. package/prompts/collaboration-workflow/principles.md +74 -0
  48. package/prompts/collaboration-workflow/residency.md +54 -14
  49. package/prompts/collaboration-workflow/rule-delivery.md +1 -11
  50. package/prompts/collaboration-workflow/upstream-interrupt.md +1 -1
  51. package/prompts/collaboration-workflow.md +22 -28
  52. package/scripts/adopt/adopt-logic.ts +2 -2
  53. package/scripts/adopt/adopt-toolkits.ts +1 -1
  54. package/scripts/adopt/adopt.ts +2 -2
  55. package/scripts/agent/agent-event.ts +2 -9
  56. package/scripts/agent/agent-exit-record.ts +2 -9
  57. package/scripts/backlog/backlog-budget-cli.ts +2 -6
  58. package/scripts/backlog/backlog-drive-cli.ts +20 -10
  59. package/scripts/backlog/backlog-drive.ts +50 -16
  60. package/scripts/backlog/backlog-offer-cli.ts +6 -5
  61. package/scripts/backlog/backlog-plan.ts +1 -1
  62. package/scripts/build/build-bin.ts +2 -1
  63. package/scripts/build/build-config-merge.ts +2 -1
  64. package/scripts/build/build-hooks.ts +24 -4
  65. package/scripts/build/build-managed-marker.ts +2 -1
  66. package/scripts/build/build-self-sync-guard.ts +2 -1
  67. package/scripts/build/build-version.ts +2 -1
  68. package/scripts/cases/cases-logic.ts +2 -6
  69. package/scripts/ci/pr-classification.ts +13 -11
  70. package/scripts/cost-runtime/cost-transcript.ts +4 -11
  71. package/scripts/doctor/doctor-consumer.ts +5 -12
  72. package/scripts/doctor/doctor-ports.ts +2 -2
  73. package/scripts/document/document-byte-budget.ts +8 -16
  74. package/scripts/document/document-section.ts +2 -6
  75. package/scripts/document/entry-read-budget.ts +1 -1
  76. package/scripts/{git/git-epic-add-body.ts → epic/epic-add-body.ts} +23 -23
  77. package/scripts/{git/git-epic-add-plan.ts → epic/epic-add-plan.ts} +23 -26
  78. package/scripts/{git/git-epic-add.ts → epic/epic-add.ts} +17 -17
  79. package/scripts/epic/epic-audit-cli.ts +4 -4
  80. package/scripts/epic/epic-audit-orphans.ts +2 -2
  81. package/scripts/epic/epic-audit-rationale.ts +1 -1
  82. package/scripts/epic/epic-audit.ts +1 -1
  83. package/scripts/{git/git-epic-body.ts → epic/epic-body.ts} +6 -6
  84. package/scripts/epic/epic-bundle-cli.ts +1 -1
  85. package/scripts/epic/epic-bundle.ts +2 -2
  86. package/scripts/epic/epic-candidate-confirm.ts +2 -1
  87. package/scripts/{git/git-epic-chains.ts → epic/epic-chains.ts} +4 -4
  88. package/{scripts-ai → scripts/epic}/epic-check.ts +5 -4
  89. package/{scripts-ai → scripts/epic}/epic-cli.ts +4 -4
  90. package/scripts/{git/git-epic-close-comment.ts → epic/epic-close-comment.ts} +9 -9
  91. package/scripts/{git/git-epic-close.ts → epic/epic-close.ts} +23 -19
  92. package/scripts/epic/epic-cross-repo.ts +21 -38
  93. package/scripts/{git/git-epic-decision.ts → epic/epic-decision.ts} +12 -14
  94. package/scripts/epic/epic-fetch.ts +3 -3
  95. package/scripts/epic/epic-graph.ts +3 -3
  96. package/scripts/epic/epic-index.ts +2 -2
  97. package/scripts/epic/epic-issue.ts +1 -1
  98. package/scripts/epic/epic-next.ts +3 -3
  99. package/scripts/{git/git-epic-parse.ts → epic/epic-parse.ts} +3 -3
  100. package/scripts/{git/git-epic-promote.ts → epic/epic-promote.ts} +10 -10
  101. package/scripts/{git/git-epic-read.ts → epic/epic-read.ts} +9 -9
  102. package/scripts/{git/git-epic-reconcile.ts → epic/epic-reconcile.ts} +18 -20
  103. package/scripts/{git/git-epic-reference.ts → epic/epic-reference.ts} +4 -23
  104. package/scripts/epic/epic-relation-recheck.ts +4 -3
  105. package/scripts/{git/git-epic-relations.ts → epic/epic-relations.ts} +5 -5
  106. package/scripts/{git/git-epic-remove-plan.ts → epic/epic-remove-plan.ts} +17 -19
  107. package/scripts/{git/git-epic-remove.ts → epic/epic-remove.ts} +13 -13
  108. package/scripts/{git/git-epic-run.ts → epic/epic-run.ts} +27 -27
  109. package/scripts/{git/git-epic-sections.ts → epic/epic-sections.ts} +6 -6
  110. package/scripts/{git/git-epic-shape.ts → epic/epic-shape.ts} +7 -7
  111. package/scripts/{git/git-epic-validate.ts → epic/epic-validate.ts} +13 -13
  112. package/{scripts-ai → scripts/epic}/epic.ts +17 -16
  113. package/scripts/gh/fix-gh-packages.ts +2 -1
  114. package/scripts/gh/gh-spawn.ts +12 -10
  115. package/scripts/git/constants.ts +1 -1
  116. package/scripts/git/git-branch.ts +10 -1
  117. package/scripts/git/git-command.ts +1 -1
  118. package/scripts/git/git-error.ts +2 -5
  119. package/{scripts-ai → scripts/git}/git-followup-finish.ts +7 -7
  120. package/scripts/git/git-followup-flush.ts +74 -48
  121. package/scripts/git/git-followup-issue-close.ts +2 -2
  122. package/scripts/git/git-followup-label.ts +1 -1
  123. package/scripts/git/git-followup-pending.ts +1 -1
  124. package/{scripts-ai → scripts/git}/git-followup-workflow.ts +23 -11
  125. package/scripts/git/git-gh-exec.ts +85 -26
  126. package/scripts/git/git-gh-issue-read.ts +2 -2
  127. package/scripts/git/git-gh-issue-rest.ts +2 -2
  128. package/scripts/git/git-gh-issue-write.ts +6 -6
  129. package/scripts/git/git-gh-pr-read.ts +0 -21
  130. package/scripts/git/git-gh-pr.ts +2 -23
  131. package/scripts/git/git-pr-followup-wrapup.ts +2 -6
  132. package/scripts/git/git-preflight.ts +3 -6
  133. package/scripts/git/git-staging.ts +21 -9
  134. package/{scripts-ai → scripts/git}/git-workflow.ts +11 -11
  135. package/scripts/git/github-issue-url.ts +1 -1
  136. package/scripts/git/issue-labels.ts +1 -1
  137. package/scripts/git/issue-reference.ts +19 -0
  138. package/scripts/git/main-merge.ts +2 -1
  139. package/scripts/git/main-sync.ts +3 -2
  140. package/scripts/git/schemas.ts +1 -1
  141. package/scripts/git/stash-pop-args.ts +7 -13
  142. package/scripts/git/stash-pop-cli.ts +2 -1
  143. package/{scripts-ai → scripts/git}/telegram-test-logic.ts +2 -2
  144. package/{scripts-ai → scripts/git}/telegram-test.ts +7 -7
  145. package/scripts/hooks/format-rewrite-notice.ts +2 -8
  146. package/scripts/init/init-ai-copy.ts +2 -5
  147. package/scripts/init/init.ts +8 -4
  148. package/scripts/init/start-steps.ts +2 -1
  149. package/scripts/init/start.ts +2 -1
  150. package/scripts/issue/issue-comment-cli.ts +2 -1
  151. package/scripts/issue/issue-file-cli.ts +2 -1
  152. package/scripts/issue/issue-fold-cli.ts +9 -16
  153. package/scripts/issue/issue-scout-cli.ts +8 -13
  154. package/scripts/issue/measure-rerun-cli.ts +7 -6
  155. package/scripts/josh/josh-commands-ai.ts +2 -2
  156. package/scripts/josh/josh-commands-backlog.ts +1 -1
  157. package/scripts/josh/josh-commands-development.ts +1 -1
  158. package/scripts/josh/josh-commands-workflow.ts +4 -4
  159. package/scripts/lane/lane-cli.ts +2 -1
  160. package/scripts/lane/lane-open.ts +3 -2
  161. package/scripts/lane/lane-registry.ts +3 -6
  162. package/scripts/lib/cli-flags.ts +20 -2
  163. package/scripts/lib/error-message.ts +9 -0
  164. package/scripts/lib/read-file.ts +26 -2
  165. package/scripts/observations/observation-ledger-home.ts +98 -26
  166. package/scripts/observations/observation-ledger-migrate.ts +26 -21
  167. package/scripts/observations/observation-ledger-prepare.ts +10 -20
  168. package/scripts/observations/observation-ledger.ts +58 -25
  169. package/scripts/observations/observations-flush-cli.ts +6 -23
  170. package/scripts/observations/observations-flush-landing.ts +2 -1
  171. package/scripts/observations/observations-flush.ts +29 -20
  172. package/scripts/package/package-scout-cli.ts +8 -16
  173. package/scripts/ports/port-command.ts +2 -1
  174. package/scripts/propagate/propagate-publish.ts +6 -7
  175. package/scripts/propagate/propagate-steps.ts +2 -1
  176. package/scripts/propagate/propagate.ts +3 -2
  177. package/scripts/refactor/import-graph.ts +2 -6
  178. package/scripts/registry-migration/migrate.ts +3 -2
  179. package/scripts/registry-migration/user-npmrc.ts +2 -2
  180. package/scripts/release/release-cli.ts +2 -1
  181. package/scripts/repo/repo-setting.ts +10 -8
  182. package/scripts/review/review-finding-ledger.ts +3 -3
  183. package/scripts/review/review-findings-cli.ts +4 -11
  184. package/scripts/review/review-record-cli.ts +14 -11
  185. package/scripts/review/review-record.ts +6 -16
  186. package/scripts/rules/decision-oracle.ts +2 -2
  187. package/scripts/rules/rule-body-guard.ts +2 -2
  188. package/scripts/rules/rule-value-cache.ts +99 -0
  189. package/scripts/rules/rule-value-cli.ts +10 -9
  190. package/scripts/rules/rule-value.ts +1 -1
  191. package/scripts/run/run-carry-args.ts +2 -6
  192. package/scripts/run/run-carry-cli.ts +5 -7
  193. package/scripts/run/run-cut-args.ts +7 -13
  194. package/scripts/run/run-ending-cli.ts +4 -7
  195. package/scripts/run/run-event-stream.ts +2 -5
  196. package/scripts/run/run-liveness-cli.ts +4 -7
  197. package/scripts/run/run-progress-args.ts +2 -6
  198. package/scripts/run/run-progress-cli.ts +2 -1
  199. package/scripts/run/run-tail-cli.ts +3 -3
  200. package/scripts/run/run-tidy-stashes.ts +7 -14
  201. package/scripts/run/run-wake-cli.ts +2 -6
  202. package/scripts/run/run-wake-driver.ts +15 -2
  203. package/scripts/run/run-wake-session.ts +14 -4
  204. package/scripts/safe-chain/project-config.ts +3 -6
  205. package/scripts/security/security-audit-provision.ts +6 -7
  206. package/scripts/sonar/sonar-hotspots-cli.ts +2 -1
  207. package/scripts/sync/directory-copy-guard.ts +2 -1
  208. package/scripts/sync/sync-ai-files.ts +3 -3
  209. package/scripts/sync/template-source-logic.ts +3 -4
  210. package/scripts/test/e2e-retry-check.ts +3 -6
  211. package/scripts/ui/ui-routes-cli.ts +3 -6
  212. package/scripts/version/bump-version.ts +2 -1
  213. package/scripts/version/version-remote.ts +18 -27
  214. package/scripts/version/version-targets.ts +3 -3
  215. package/.claude/skills/workflow-commands/rule-residency.md +0 -267
  216. package/evals/scenarios/consult-not-execute.json +0 -20
  217. package/evals/scenarios/no-implicit-workflow.json +0 -26
  218. package/evals/scenarios/overrides-both-locations.json +0 -29
  219. package/evals/scenarios/upstream-interrupt.json +0 -23
  220. package/evals/scenarios/workflow-skill-loaded.json +0 -16
  221. package/prompts/agent-lint-protocol.json +0 -79
  222. package/prompts/agent-rules.md +0 -63
  223. package/prompts/collaboration-workflow/consultation-vs-execution.md +0 -8
  224. package/prompts/collaboration-workflow/distributed-docs.md +0 -7
  225. package/prompts/collaboration-workflow/durable-rules.md +0 -24
  226. package/prompts/collaboration-workflow/latest-first.md +0 -14
  227. package/prompts/collaboration-workflow/no-clones.md +0 -11
  228. package/prompts/collaboration-workflow/simplicity-first.md +0 -9
  229. package/prompts/collaboration-workflow/single-source-rules.md +0 -13
  230. package/scripts/build/shim-shell.ts +0 -25
  231. package/scripts/claude/skill-meta.ts +0 -37
  232. package/scripts/document/document-scan.ts +0 -108
  233. package/scripts/document/generate-catalog.ts +0 -69
  234. package/scripts/document/retired-phrases.ts +0 -143
  235. package/scripts/document/review-agent-type.ts +0 -46
  236. package/scripts/document/single-source.ts +0 -73
  237. package/scripts/git/git-fixture-workspace.ts +0 -88
  238. package/scripts/hooks/format-edited-file-fixtures.ts +0 -109
  239. package/scripts/hooks/prompt-hooks.ts +0 -38
  240. package/scripts/init/hook-command-bootstrap.ts +0 -83
  241. package/scripts/issue/issue-logic.ts +0 -50
  242. package/scripts/josh/__snapshots__/josh-command-map.test.ts.snap +0 -1227
  243. package/scripts/josh/josh-script-reader.ts +0 -11
  244. package/scripts/package/production-dependency-graph.ts +0 -68
  245. package/scripts/retrospective/retrospective-cli.ts +0 -97
  246. package/scripts/retrospective/retrospective.ts +0 -127
  247. package/scripts/rules/delivered-rules-harness.ts +0 -72
  248. package/scripts/rules/top-level-scripts-guard.ts +0 -47
  249. package/scripts/run/run-carry-flush.ts +0 -58
  250. package/scripts/run/run-transcript.golden.txt +0 -57
  251. package/scripts/run/run-wake-work.ts +0 -108
  252. package/scripts/sync/dependabot-pin-logic.ts +0 -135
  253. package/scripts/test/classify-isolation.ts +0 -149
  254. package/scripts/test/http-fault-injection.ts +0 -79
  255. package/scripts/test/josh-harness-environment.ts +0 -260
  256. package/scripts/test/josh-harness.ts +0 -96
  257. package/scripts/test/pilot-files.ts +0 -452
  258. package/scripts/test/pilot-measure.ts +0 -78
  259. package/scripts/test/test-network-guard.ts +0 -453
  260. package/scripts/test/test-repository-guard.ts +0 -317
  261. package/scripts/test/test-state-guard.ts +0 -85
  262. package/scripts/test/test-stdout-guard.ts +0 -54
  263. package/scripts/test/test-telegram-guard.ts +0 -90
  264. package/scripts/test/unit-guard-environment.ts +0 -12
  265. package/scripts/test/unit-projects.ts +0 -139
  266. package/scripts/test/vitest-include-globs.ts +0 -12
  267. package/scripts/time-runtime/time-batch-guard-fixtures.ts +0 -66
  268. package/scripts-ai/completion-gate.ts +0 -13
  269. package/scripts-ai/environment-loader.ts +0 -9
  270. /package/{scripts-ai → scripts/epic}/epic-cli-argv.ts +0 -0
  271. /package/{scripts-ai → scripts/epic}/epic-cli-remove.ts +0 -0
  272. /package/{scripts-ai → scripts/git}/followup-issue-number.ts +0 -0
@@ -13,6 +13,7 @@ import {
13
13
  agent_role_profile,
14
14
  agent_session_environment,
15
15
  bash_triggers,
16
+ error_text,
16
17
  filing_cap,
17
18
  gh_failure,
18
19
  git_command,
@@ -36,42 +37,43 @@ import {
36
37
  run_watcher_guard,
37
38
  shell_segments,
38
39
  tail_commands
39
- } from "./chunk-EZLHXKJ6.js";
40
+ } from "./chunk-EIFCAJRB.js";
40
41
  import {
41
42
  find_local_bin_upwards
42
43
  } from "./chunk-3V37IID6.js";
43
44
  import {
44
45
  batch_outcome
45
- } from "./chunk-A2H5I2VD.js";
46
+ } from "./chunk-KG6PZD72.js";
46
47
  import {
47
48
  investigation_refusal
48
- } from "./chunk-KPZN42RT.js";
49
+ } from "./chunk-GJT4BNVE.js";
49
50
  import {
50
51
  duplicate_read_outcome
51
- } from "./chunk-4GDR2YTV.js";
52
+ } from "./chunk-Y27M6A7X.js";
52
53
  import {
53
54
  investigation_reads
54
- } from "./chunk-WMIR5SNX.js";
55
+ } from "./chunk-D67KVGGY.js";
55
56
  import {
56
57
  lane_guard_policy,
57
58
  time_batch_guard
58
- } from "./chunk-56LGMJJV.js";
59
+ } from "./chunk-ZXNE6NY3.js";
59
60
  import {
60
61
  hook_decision,
61
62
  lane_child_marker,
62
63
  run_issue_number
63
- } from "./chunk-GBJUERYK.js";
64
+ } from "./chunk-HOYJU5RM.js";
64
65
  import {
65
66
  PLATFORM_TEMP_ROOT,
66
67
  cost_attribute,
67
68
  cost_blocks,
68
69
  cost_transcript,
69
70
  cost_usage,
71
+ file_reader,
70
72
  json_value,
71
73
  lane_paths,
72
74
  stamp_file,
73
75
  time_shell
74
- } from "./chunk-PAXMLGSS.js";
76
+ } from "./chunk-GLBDBJOK.js";
75
77
 
76
78
  // scripts/hooks/pretool-guard.ts
77
79
  import { text } from "node:stream/consumers";
@@ -1510,7 +1512,7 @@ var DECISION_ORACLES = [
1510
1512
  decision: "Whether cross-file or cross-repository code duplication exists",
1511
1513
  args: "",
1512
1514
  vocabulary: ["clean", "clones:"],
1513
- single_source: "prompts/collaboration-workflow/no-clones.md"
1515
+ single_source: "prompts/collaboration-workflow/principles.md \u2192 \u30AF\u30ED\u30FC\u30F3\u7981\u6B62"
1514
1516
  },
1515
1517
  {
1516
1518
  name: "epic:reconcile",
@@ -1848,7 +1850,6 @@ var ROW11 = {
1848
1850
  var raw_field_body = { RAW_FIELD_BODY_REASON, ROW: ROW11, posts_at_path_literally };
1849
1851
 
1850
1852
  // scripts/rules/rule-body-guard.ts
1851
- import { existsSync as existsSync2, readFileSync as readFileSync3 } from "node:fs";
1852
1853
  var EDIT_TOOL = "Edit";
1853
1854
  var WRITE_TOOL = "Write";
1854
1855
  var CLAUDE_DOCUMENT = /(?:^|\/)CLAUDE\.md$/u;
@@ -1871,7 +1872,7 @@ function string_field(input, key) {
1871
1872
  return typeof value === "string" ? value : "";
1872
1873
  }
1873
1874
  function read_existing(file_path) {
1874
- return existsSync2(file_path) ? readFileSync3(file_path, "utf8") : "";
1875
+ return file_reader.read_file_or_empty(file_path);
1875
1876
  }
1876
1877
  function texts_of(name, input, read2) {
1877
1878
  if (name === WRITE_TOOL) {
@@ -2010,11 +2011,11 @@ var shell_body_trigger = {
2010
2011
  import { execFileSync } from "node:child_process";
2011
2012
 
2012
2013
  // scripts/gate/project-checks.ts
2013
- import { existsSync as existsSync4, globSync as globSync2, readFileSync as readFileSync5 } from "node:fs";
2014
+ import { existsSync as existsSync3, globSync as globSync2, readFileSync as readFileSync4 } from "node:fs";
2014
2015
  import path5 from "node:path";
2015
2016
 
2016
2017
  // scripts/init/project-profile.ts
2017
- import { existsSync as existsSync3, readdirSync, readFileSync as readFileSync4 } from "node:fs";
2018
+ import { existsSync as existsSync2, readdirSync, readFileSync as readFileSync3 } from "node:fs";
2018
2019
  import path4 from "node:path";
2019
2020
 
2020
2021
  // scripts/version/kit-descriptor.ts
@@ -2054,8 +2055,8 @@ function requested_profile(args, usage = "josh init [--profile basic|full]") {
2054
2055
  }
2055
2056
  function read_manifest(root) {
2056
2057
  const filename = path4.join(root, "package.json");
2057
- if (!existsSync3(filename)) return void 0;
2058
- const parsed = JSON.parse(readFileSync4(filename, "utf8"));
2058
+ if (!existsSync2(filename)) return void 0;
2059
+ const parsed = JSON.parse(readFileSync3(filename, "utf8"));
2059
2060
  if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
2060
2061
  throw new Error("package.json must contain an object");
2061
2062
  }
@@ -2126,7 +2127,7 @@ function has_github_remote(root) {
2126
2127
  function inspect_project(root, requested) {
2127
2128
  const profile = resolve_profile(root, requested);
2128
2129
  const files = scan_files(root);
2129
- const has_git = existsSync3(path4.join(root, ".git"));
2130
+ const has_git = existsSync2(path4.join(root, ".git"));
2130
2131
  return { ...profile, ...files, has_git, has_github: has_git && has_github_remote(root) };
2131
2132
  }
2132
2133
  var project_profile = {
@@ -2179,7 +2180,7 @@ var DEPENDENCY_FIELDS = ["dependencies", "devDependencies"];
2179
2180
  var object_schema = z5.record(z5.string(), z5.unknown());
2180
2181
  function project_root(directory) {
2181
2182
  let current = directory;
2182
- while (!existsSync4(path5.join(current, PACKAGE_JSON))) {
2183
+ while (!existsSync3(path5.join(current, PACKAGE_JSON))) {
2183
2184
  const parent = path5.dirname(current);
2184
2185
  if (parent === current) return directory;
2185
2186
  current = parent;
@@ -2193,7 +2194,7 @@ function has_files(directory, pattern) {
2193
2194
  return globSync2(pattern, { cwd: project_root(directory), exclude: is_ignored }).length > 0;
2194
2195
  }
2195
2196
  function has_config(directory, names) {
2196
- return names.some((name) => existsSync4(path5.join(project_root(directory), name)));
2197
+ return names.some((name) => existsSync3(path5.join(project_root(directory), name)));
2197
2198
  }
2198
2199
  function has_bin(directory, bin_name) {
2199
2200
  return find_local_bin_upwards(directory, bin_name) !== void 0;
@@ -2210,7 +2211,7 @@ function is_basic_manifest(manifest) {
2210
2211
  function read_manifest2(directory) {
2211
2212
  try {
2212
2213
  const manifest_path = path5.join(project_root(directory), PACKAGE_JSON);
2213
- return JSON.parse(readFileSync5(manifest_path, "utf8"));
2214
+ return JSON.parse(readFileSync4(manifest_path, "utf8"));
2214
2215
  } catch {
2215
2216
  return void 0;
2216
2217
  }
@@ -3527,9 +3528,8 @@ var git_gh_issue = {
3527
3528
  };
3528
3529
 
3529
3530
  // scripts/ci/pr-classification.ts
3530
- import { readFileSync as readFileSync6 } from "node:fs";
3531
+ import { readFileSync as readFileSync5 } from "node:fs";
3531
3532
  import { fileURLToPath as fileURLToPath2 } from "node:url";
3532
- import { execaSync as execaSync2 } from "execa";
3533
3533
  import { z as z8 } from "zod";
3534
3534
  var CLASSIFICATION_SET = new Set(RELEASE_CLASSIFICATION_NAMES);
3535
3535
  var ISSUE_BUG_LABEL = "bug";
@@ -3587,18 +3587,17 @@ function select_issue_classification(issue_json) {
3587
3587
  return label;
3588
3588
  }
3589
3589
  function fetch_current_labels(repository, pull_number) {
3590
- const result = execaSync2(
3591
- "gh",
3592
- ["api", `repos/${repository}/issues/${String(pull_number)}/labels`, "--jq", ".[].name"],
3593
- { reject: false }
3594
- );
3595
- if (result.exitCode !== 0) {
3596
- throw new Error(`Could not read the pull request labels: ${result.stderr}`);
3590
+ const path7 = `repos/${repository}/issues/${String(pull_number)}/labels`;
3591
+ try {
3592
+ const names = git_gh_exec.exec_gh_api_sync({ path: path7, jq_filter: ".[].name" });
3593
+ return names.split("\n").filter((name) => name !== "");
3594
+ } catch (error) {
3595
+ const detail = error_text.message_of(error);
3596
+ throw new Error(`Could not read the pull request labels: ${detail}`, { cause: error });
3597
3597
  }
3598
- return result.stdout.split("\n").filter((name) => name !== "");
3599
3598
  }
3600
3599
  function check_event(event_path, read_labels = fetch_current_labels) {
3601
- const event = EVENT.parse(JSON.parse(readFileSync6(event_path, "utf8")));
3600
+ const event = EVENT.parse(JSON.parse(readFileSync5(event_path, "utf8")));
3602
3601
  const labels = read_labels(event.repository.full_name, event.pull_request.number);
3603
3602
  return classification_error(labels, event.pull_request.user.login);
3604
3603
  }
@@ -3614,6 +3613,7 @@ if (process.argv[1] === fileURLToPath2(import.meta.url)) {
3614
3613
  var pr_classification = {
3615
3614
  classification_error,
3616
3615
  check_event,
3616
+ fetch_current_labels,
3617
3617
  declaration,
3618
3618
  is_classification,
3619
3619
  select_issue_classification
@@ -3728,8 +3728,6 @@ var pr_number_by_branch = /* @__PURE__ */ new Map();
3728
3728
  var LOOKUP_QUERY = "state=all&sort=created&direction=desc&per_page=100";
3729
3729
  var COMMENTS_QUERY = FULL_PAGE_QUERY;
3730
3730
  var OWNER_PLACEHOLDER = "{owner}";
3731
- var NO_HEAD_REF_MESSAGE = "gh api answered a pull request with no head branch";
3732
- var FORK_HEAD_MESSAGE = "gh api answered a pull request whose head branch is in another repository";
3733
3731
  var NO_PULL_REQUEST_MESSAGE = "gh api found no pull request for branch";
3734
3732
  var UNREADABLE_PULL_REQUEST_MESSAGE = "gh api could not read the pull requests for branch";
3735
3733
  function lookup_path(branch_name) {
@@ -3822,13 +3820,6 @@ async function pr_view(branch_name) {
3822
3820
  if (pull === void 0) return "";
3823
3821
  return JSON.stringify(git_gh_pr_rest.to_pr_info(pull));
3824
3822
  }
3825
- async function pr_head_reference(pr_number) {
3826
- const pull = await read_pull(pr_number);
3827
- const reference = pull.head?.ref;
3828
- if (reference === void 0) throw new Error(NO_HEAD_REF_MESSAGE);
3829
- if (!git_gh_pr_rest.is_same_repository_head(pull)) throw new Error(FORK_HEAD_MESSAGE);
3830
- return reference;
3831
- }
3832
3823
  async function read_comments(branch_name, to_path, to_json) {
3833
3824
  const pr_number = await resolve_pr_number(branch_name);
3834
3825
  if (pr_number === void 0) return void 0;
@@ -3857,7 +3848,6 @@ var git_gh_pr_read = {
3857
3848
  pr_get_url,
3858
3849
  pr_get_body,
3859
3850
  pr_view,
3860
- pr_head_reference,
3861
3851
  pr_get_comments,
3862
3852
  pr_get_review_comments
3863
3853
  };
@@ -4097,12 +4087,6 @@ async function pr_create(title, body, label) {
4097
4087
  await add_pr_classification(number, label);
4098
4088
  return url;
4099
4089
  }
4100
- async function pr_checkout(pr_number) {
4101
- const branch_name = await git_gh_pr_read.pr_head_reference(pr_number);
4102
- await git_command.fetch_branch(branch_name);
4103
- await git_command.checkout(branch_name);
4104
- await git_command.merge_fast_forward(branch_name);
4105
- }
4106
4090
  async function pr_comment(branch_name, body) {
4107
4091
  const pr_number = await require_pr_number(branch_name);
4108
4092
  return await git_gh_issue_write.issue_comment(String(pr_number), body);
@@ -4156,7 +4140,6 @@ var git_gh_pr = {
4156
4140
  pr_create,
4157
4141
  pr_get_classification,
4158
4142
  pr_ensure_classification,
4159
- pr_checkout,
4160
4143
  pr_comment,
4161
4144
  pr_merge,
4162
4145
  pr_update_body
@@ -4634,7 +4617,7 @@ var epic_busy = {
4634
4617
  };
4635
4618
 
4636
4619
  // scripts/run/run-liveness.ts
4637
- import { readFileSync as readFileSync7, realpathSync, statSync } from "node:fs";
4620
+ import { readFileSync as readFileSync6, realpathSync, statSync } from "node:fs";
4638
4621
  import { homedir, tmpdir } from "node:os";
4639
4622
  import path6 from "node:path";
4640
4623
  import { setTimeout as sleep2 } from "node:timers/promises";
@@ -4732,13 +4715,6 @@ var EMPTY_STATE = {
4732
4715
  };
4733
4716
  var LAUNCH_HEADER_PREFIX = "=== ";
4734
4717
  var LAUNCH_HEADER_MARKER = " \xB7 started by process ";
4735
- function parse_line(line) {
4736
- try {
4737
- return JSON.parse(line);
4738
- } catch {
4739
- return void 0;
4740
- }
4741
- }
4742
4718
  function usable_text(value) {
4743
4719
  return typeof value === "string" && value.trim() !== "" ? value : void 0;
4744
4720
  }
@@ -4803,7 +4779,7 @@ function normalized(value, state) {
4803
4779
  function next_state2(line, state) {
4804
4780
  const is_header = line.startsWith(LAUNCH_HEADER_PREFIX) && line.includes(LAUNCH_HEADER_MARKER);
4805
4781
  if (is_header) return EMPTY_STATE;
4806
- return normalized(parse_line(line), state);
4782
+ return normalized(json_value.parse_or_undefined(line), state);
4807
4783
  }
4808
4784
  function read(transcript) {
4809
4785
  let state = EMPTY_STATE;
@@ -4970,7 +4946,7 @@ function read_agent_state(output_path) {
4970
4946
  const safe_path = to_safe_path(output_path);
4971
4947
  if (safe_path === void 0) return void 0;
4972
4948
  try {
4973
- const state = agent_event.read(readFileSync7(safe_path, "utf8"));
4949
+ const state = agent_event.read(readFileSync6(safe_path, "utf8"));
4974
4950
  return state.provider === void 0 ? void 0 : state;
4975
4951
  } catch {
4976
4952
  return void 0;
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  lane_guard_policy,
3
3
  time_batch_guard
4
- } from "./chunk-56LGMJJV.js";
4
+ } from "./chunk-ZXNE6NY3.js";
5
5
  import {
6
6
  hook_decision
7
- } from "./chunk-GBJUERYK.js";
7
+ } from "./chunk-HOYJU5RM.js";
8
8
 
9
9
  // scripts/hooks/batch-guard.ts
10
10
  import { text } from "node:stream/consumers";
@@ -4,8 +4,9 @@ import {
4
4
  } from "./chunk-3V37IID6.js";
5
5
  import {
6
6
  ESLINT_EDIT_CACHE_FLAGS,
7
+ file_reader,
7
8
  time_density_hook
8
- } from "./chunk-PAXMLGSS.js";
9
+ } from "./chunk-GLBDBJOK.js";
9
10
 
10
11
  // scripts/hooks/format-edited-file.ts
11
12
  import { existsSync as existsSync2 } from "node:fs";
@@ -87,7 +88,6 @@ async function spelling_diagnostics(file_path, project_root, runner = run_cspell
87
88
  var edited_cspell = { format_unknown_words, is_checkable, spelling_diagnostics };
88
89
 
89
90
  // scripts/hooks/format-rewrite-notice.ts
90
- import { readFileSync } from "node:fs";
91
91
  var MAX_REWRITE_CHARS = 1200;
92
92
  var REWRITE_TRUNCATION_NOTICE = "\n\u2026(rewrite preview truncated)";
93
93
  var REWRITE_HEADER = "The format hook rewrote this file after your edit, so your in-memory copy is now stale \u2014 re-read it before the next Edit or the match will miss.";
@@ -130,12 +130,7 @@ ${location}
130
130
  ${cap_body(range.body)}`;
131
131
  }
132
132
  function read_text(file_path) {
133
- if (file_path === void 0) return "";
134
- try {
135
- return readFileSync(file_path, "utf8");
136
- } catch {
137
- return "";
138
- }
133
+ return file_path === void 0 ? "" : file_reader.read_if_readable(file_path) ?? "";
139
134
  }
140
135
  var rewrite_notice = { build, read_text };
141
136
 
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  investigation_reads
3
- } from "./chunk-WMIR5SNX.js";
3
+ } from "./chunk-D67KVGGY.js";
4
4
  import {
5
5
  lane_guard_policy
6
- } from "./chunk-56LGMJJV.js";
6
+ } from "./chunk-ZXNE6NY3.js";
7
7
  import {
8
8
  hook_decision
9
- } from "./chunk-GBJUERYK.js";
9
+ } from "./chunk-HOYJU5RM.js";
10
10
  import {
11
11
  json_value,
12
12
  time_spans
13
- } from "./chunk-PAXMLGSS.js";
13
+ } from "./chunk-GLBDBJOK.js";
14
14
 
15
15
  // scripts/delegation/duplicate-read-guard.ts
16
16
  import { statSync } from "node:fs";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  lane_child_marker
3
- } from "./chunk-GBJUERYK.js";
3
+ } from "./chunk-HOYJU5RM.js";
4
4
  import {
5
5
  time_bundle_call,
6
6
  time_format,
7
7
  time_round_trips,
8
8
  time_spans,
9
9
  time_transcript_line
10
- } from "./chunk-PAXMLGSS.js";
10
+ } from "./chunk-GLBDBJOK.js";
11
11
 
12
12
  // scripts/lane/lane-guard-policy.ts
13
13
  var DEFAULT_MODE = "refuse";
@@ -1,25 +1,25 @@
1
1
  #!/usr/bin/env tsx
2
2
  import {
3
3
  pretool_guard
4
- } from "./chunk-6PSTVOLH.js";
5
- import "./chunk-EZLHXKJ6.js";
4
+ } from "./chunk-HU66PWWL.js";
5
+ import "./chunk-EIFCAJRB.js";
6
6
  import {
7
7
  build_envelope,
8
8
  compose_context,
9
9
  format_edited_payload
10
- } from "./chunk-AWTFKKFW.js";
10
+ } from "./chunk-XPLP27WA.js";
11
11
  import "./chunk-3V37IID6.js";
12
- import "./chunk-A2H5I2VD.js";
13
- import "./chunk-KPZN42RT.js";
14
- import "./chunk-4GDR2YTV.js";
15
- import "./chunk-WMIR5SNX.js";
16
- import "./chunk-56LGMJJV.js";
12
+ import "./chunk-KG6PZD72.js";
13
+ import "./chunk-GJT4BNVE.js";
14
+ import "./chunk-Y27M6A7X.js";
15
+ import "./chunk-D67KVGGY.js";
16
+ import "./chunk-ZXNE6NY3.js";
17
17
  import {
18
18
  hook_decision
19
- } from "./chunk-GBJUERYK.js";
19
+ } from "./chunk-HOYJU5RM.js";
20
20
  import {
21
21
  time_density_hook
22
- } from "./chunk-PAXMLGSS.js";
22
+ } from "./chunk-GLBDBJOK.js";
23
23
  import "./chunk-WPALEIRX.js";
24
24
  import "./chunk-RKUAD3I6.js";
25
25
 
@@ -9,11 +9,11 @@ import {
9
9
  is_enabled,
10
10
  notice_refusal_path,
11
11
  refusal_path
12
- } from "./chunk-4GDR2YTV.js";
13
- import "./chunk-WMIR5SNX.js";
14
- import "./chunk-56LGMJJV.js";
15
- import "./chunk-GBJUERYK.js";
16
- import "./chunk-PAXMLGSS.js";
12
+ } from "./chunk-Y27M6A7X.js";
13
+ import "./chunk-D67KVGGY.js";
14
+ import "./chunk-ZXNE6NY3.js";
15
+ import "./chunk-HOYJU5RM.js";
16
+ import "./chunk-GLBDBJOK.js";
17
17
  import "./chunk-WPALEIRX.js";
18
18
  import "./chunk-RKUAD3I6.js";
19
19
  export {
@@ -15,9 +15,9 @@ import {
15
15
  relative_to_root,
16
16
  resolve_invocations,
17
17
  select_invocation
18
- } from "./chunk-AWTFKKFW.js";
18
+ } from "./chunk-XPLP27WA.js";
19
19
  import "./chunk-3V37IID6.js";
20
- import "./chunk-PAXMLGSS.js";
20
+ import "./chunk-GLBDBJOK.js";
21
21
  import "./chunk-RKUAD3I6.js";
22
22
  export {
23
23
  ESLINT_DAEMON,
@@ -10,11 +10,11 @@ import {
10
10
  is_enabled,
11
11
  load_environment_file,
12
12
  refusal_path
13
- } from "./chunk-KPZN42RT.js";
14
- import "./chunk-WMIR5SNX.js";
15
- import "./chunk-56LGMJJV.js";
16
- import "./chunk-GBJUERYK.js";
17
- import "./chunk-PAXMLGSS.js";
13
+ } from "./chunk-GJT4BNVE.js";
14
+ import "./chunk-D67KVGGY.js";
15
+ import "./chunk-ZXNE6NY3.js";
16
+ import "./chunk-HOYJU5RM.js";
17
+ import "./chunk-GLBDBJOK.js";
18
18
  import "./chunk-WPALEIRX.js";
19
19
  import "./chunk-RKUAD3I6.js";
20
20
  export {
@@ -3,16 +3,16 @@ import {
3
3
  pretool_guard,
4
4
  pretool_outcome,
5
5
  pretool_outcome_async
6
- } from "./chunk-6PSTVOLH.js";
7
- import "./chunk-EZLHXKJ6.js";
6
+ } from "./chunk-HU66PWWL.js";
7
+ import "./chunk-EIFCAJRB.js";
8
8
  import "./chunk-3V37IID6.js";
9
- import "./chunk-A2H5I2VD.js";
10
- import "./chunk-KPZN42RT.js";
11
- import "./chunk-4GDR2YTV.js";
12
- import "./chunk-WMIR5SNX.js";
13
- import "./chunk-56LGMJJV.js";
14
- import "./chunk-GBJUERYK.js";
15
- import "./chunk-PAXMLGSS.js";
9
+ import "./chunk-KG6PZD72.js";
10
+ import "./chunk-GJT4BNVE.js";
11
+ import "./chunk-Y27M6A7X.js";
12
+ import "./chunk-D67KVGGY.js";
13
+ import "./chunk-ZXNE6NY3.js";
14
+ import "./chunk-HOYJU5RM.js";
15
+ import "./chunk-GLBDBJOK.js";
16
16
  import "./chunk-WPALEIRX.js";
17
17
  import "./chunk-RKUAD3I6.js";
18
18
  export {
@@ -19,14 +19,14 @@ import {
19
19
  run_hold,
20
20
  run_invocation,
21
21
  run_watcher_guard
22
- } from "./chunk-EZLHXKJ6.js";
22
+ } from "./chunk-EIFCAJRB.js";
23
23
  import {
24
24
  session_language
25
25
  } from "./chunk-6V5OPIUU.js";
26
26
  import {
27
27
  hook_decision,
28
28
  lane_child_marker
29
- } from "./chunk-GBJUERYK.js";
29
+ } from "./chunk-HOYJU5RM.js";
30
30
  import {
31
31
  PROJECT_ROOT,
32
32
  json_value,
@@ -34,7 +34,7 @@ import {
34
34
  time_density_hook,
35
35
  time_hook_transcript,
36
36
  time_reported_failure
37
- } from "./chunk-PAXMLGSS.js";
37
+ } from "./chunk-GLBDBJOK.js";
38
38
  import "./chunk-WPALEIRX.js";
39
39
  import "./chunk-RKUAD3I6.js";
40
40
 
@@ -488,11 +488,7 @@ function is_present(event) {
488
488
  return event !== void 0;
489
489
  }
490
490
  function parse_line(line) {
491
- try {
492
- return event_schema.safeParse(JSON.parse(line)).data;
493
- } catch {
494
- return void 0;
495
- }
491
+ return event_schema.safeParse(json_value.parse_or_undefined(line)).data;
496
492
  }
497
493
  function read_events(target) {
498
494
  const raw = stamp_file.read_stamp_text(target);
@@ -668,16 +664,16 @@ var backlog_ready = {
668
664
  };
669
665
 
670
666
  // scripts/gh/gh-spawn.ts
671
- import { execaSync } from "execa";
667
+ var NO_BUDGET = 0;
672
668
  function fetch_repo_name(timeout_ms) {
673
- const result = execaSync("gh", ["api", git_gh_api_path.repo_api_path(), "--jq", ".full_name"], {
674
- ...git_gh_exec.direct_environment(),
669
+ const stdout = git_gh_exec.read_gh_api_sync({
670
+ path: git_gh_api_path.repo_api_path(),
671
+ jq_filter: ".full_name",
675
672
  cwd: PROJECT_ROOT,
676
- reject: false,
677
- ...timeout_ms !== void 0 && { timeout: timeout_ms }
673
+ timeout_ms: timeout_ms ?? NO_BUDGET
678
674
  });
679
- if (result.exitCode !== 0 || !result.stdout) return void 0;
680
- return result.stdout.trim() || void 0;
675
+ const name = stdout?.trim();
676
+ return name === "" ? void 0 : name;
681
677
  }
682
678
  function get_repo_name_with_owner() {
683
679
  return fetch_repo_name(void 0);