@vibe-agent-toolkit/utils 0.2.0-rc.11 → 0.2.0-rc.12

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 (322) hide show
  1. package/README.md +111 -9
  2. package/dist/archive/archive.d.ts +129 -0
  3. package/dist/archive/archive.d.ts.map +1 -0
  4. package/dist/archive/archive.js +223 -0
  5. package/dist/archive/archive.js.map +1 -0
  6. package/dist/archive/entries.d.ts +132 -0
  7. package/dist/archive/entries.d.ts.map +1 -0
  8. package/dist/archive/entries.js +223 -0
  9. package/dist/archive/entries.js.map +1 -0
  10. package/dist/archive/limits.d.ts +39 -0
  11. package/dist/archive/limits.d.ts.map +1 -0
  12. package/dist/archive/limits.js +59 -0
  13. package/dist/archive/limits.js.map +1 -0
  14. package/dist/archive/records.d.ts +14 -0
  15. package/dist/archive/records.d.ts.map +1 -0
  16. package/dist/archive/records.js +3 -0
  17. package/dist/archive/records.js.map +1 -0
  18. package/dist/archive/tar-reader.d.ts +18 -0
  19. package/dist/archive/tar-reader.d.ts.map +1 -0
  20. package/dist/archive/tar-reader.js +173 -0
  21. package/dist/archive/tar-reader.js.map +1 -0
  22. package/dist/archive/zip-reader.d.ts +76 -0
  23. package/dist/archive/zip-reader.d.ts.map +1 -0
  24. package/dist/archive/zip-reader.js +376 -0
  25. package/dist/archive/zip-reader.js.map +1 -0
  26. package/dist/archive.d.ts +14 -0
  27. package/dist/archive.d.ts.map +1 -0
  28. package/dist/archive.js +12 -0
  29. package/dist/archive.js.map +1 -0
  30. package/dist/asset-reference.d.ts +17 -1
  31. package/dist/asset-reference.d.ts.map +1 -1
  32. package/dist/asset-reference.js +31 -7
  33. package/dist/asset-reference.js.map +1 -1
  34. package/dist/dirent-kind.d.ts +13 -40
  35. package/dist/dirent-kind.d.ts.map +1 -1
  36. package/dist/dirent-kind.js +21 -69
  37. package/dist/dirent-kind.js.map +1 -1
  38. package/dist/entrypoint.d.ts +2 -2
  39. package/dist/entrypoint.d.ts.map +1 -1
  40. package/dist/entrypoint.js +4 -3
  41. package/dist/entrypoint.js.map +1 -1
  42. package/dist/env-flag.d.ts +2 -0
  43. package/dist/env-flag.d.ts.map +1 -1
  44. package/dist/env-flag.js +2 -0
  45. package/dist/env-flag.js.map +1 -1
  46. package/dist/errors/confirmed-absent.d.ts +41 -0
  47. package/dist/errors/confirmed-absent.d.ts.map +1 -0
  48. package/dist/errors/confirmed-absent.js +43 -0
  49. package/dist/errors/confirmed-absent.js.map +1 -0
  50. package/dist/errors/errno-table.d.ts +177 -0
  51. package/dist/errors/errno-table.d.ts.map +1 -0
  52. package/dist/errors/errno-table.js +343 -0
  53. package/dist/errors/errno-table.js.map +1 -0
  54. package/dist/errors/fs-boundary.d.ts +36 -0
  55. package/dist/errors/fs-boundary.d.ts.map +1 -0
  56. package/dist/errors/fs-boundary.js +121 -0
  57. package/dist/errors/fs-boundary.js.map +1 -0
  58. package/dist/errors/fs-fault.d.ts +176 -0
  59. package/dist/errors/fs-fault.d.ts.map +1 -0
  60. package/dist/errors/fs-fault.js +215 -0
  61. package/dist/errors/fs-fault.js.map +1 -0
  62. package/dist/errors/git-errno.d.ts +13 -0
  63. package/dist/errors/git-errno.d.ts.map +1 -0
  64. package/dist/errors/git-errno.js +45 -0
  65. package/dist/errors/git-errno.js.map +1 -0
  66. package/dist/errors/path-present.d.ts +72 -0
  67. package/dist/errors/path-present.d.ts.map +1 -0
  68. package/dist/errors/path-present.js +110 -0
  69. package/dist/errors/path-present.js.map +1 -0
  70. package/dist/errors/rag-index-empty.d.ts +16 -0
  71. package/dist/errors/rag-index-empty.d.ts.map +1 -0
  72. package/dist/errors/rag-index-empty.js +16 -0
  73. package/dist/errors/rag-index-empty.js.map +1 -0
  74. package/dist/errors/suppressed-faults.d.ts +34 -0
  75. package/dist/errors/suppressed-faults.d.ts.map +1 -0
  76. package/dist/errors/suppressed-faults.js +66 -0
  77. package/dist/errors/suppressed-faults.js.map +1 -0
  78. package/dist/file-crawler.d.ts +13 -18
  79. package/dist/file-crawler.d.ts.map +1 -1
  80. package/dist/file-crawler.js +140 -24
  81. package/dist/file-crawler.js.map +1 -1
  82. package/dist/fs-utils.d.ts +75 -50
  83. package/dist/fs-utils.d.ts.map +1 -1
  84. package/dist/fs-utils.js +148 -158
  85. package/dist/fs-utils.js.map +1 -1
  86. package/dist/fs.d.ts +4 -4
  87. package/dist/fs.d.ts.map +1 -1
  88. package/dist/fs.js +4 -4
  89. package/dist/fs.js.map +1 -1
  90. package/dist/git-snapshot.d.ts +25 -17
  91. package/dist/git-snapshot.d.ts.map +1 -1
  92. package/dist/git-snapshot.js +65 -11
  93. package/dist/git-snapshot.js.map +1 -1
  94. package/dist/git-tracker.d.ts +11 -3
  95. package/dist/git-tracker.d.ts.map +1 -1
  96. package/dist/git-tracker.js +29 -6
  97. package/dist/git-tracker.js.map +1 -1
  98. package/dist/git-utils.d.ts.map +1 -1
  99. package/dist/git-utils.js +7 -35
  100. package/dist/git-utils.js.map +1 -1
  101. package/dist/git.d.ts +1 -1
  102. package/dist/git.d.ts.map +1 -1
  103. package/dist/git.js +1 -1
  104. package/dist/git.js.map +1 -1
  105. package/dist/gitignore-checker.d.ts.map +1 -1
  106. package/dist/gitignore-checker.js +5 -4
  107. package/dist/gitignore-checker.js.map +1 -1
  108. package/dist/in-order.d.ts +93 -0
  109. package/dist/in-order.d.ts.map +1 -0
  110. package/dist/in-order.js +165 -0
  111. package/dist/in-order.js.map +1 -0
  112. package/dist/index.d.ts +20 -4
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +30 -4
  115. package/dist/index.js.map +1 -1
  116. package/dist/kill-process-tree.d.ts +43 -0
  117. package/dist/kill-process-tree.d.ts.map +1 -0
  118. package/dist/kill-process-tree.js +48 -0
  119. package/dist/kill-process-tree.js.map +1 -0
  120. package/dist/link-following.d.ts +115 -0
  121. package/dist/link-following.d.ts.map +1 -0
  122. package/dist/link-following.js +283 -0
  123. package/dist/link-following.js.map +1 -0
  124. package/dist/listing-refusal.d.ts +44 -0
  125. package/dist/listing-refusal.d.ts.map +1 -1
  126. package/dist/listing-refusal.js +79 -2
  127. package/dist/listing-refusal.js.map +1 -1
  128. package/dist/name-fold.d.ts +25 -0
  129. package/dist/name-fold.d.ts.map +1 -0
  130. package/dist/name-fold.js +40 -0
  131. package/dist/name-fold.js.map +1 -0
  132. package/dist/path-containment.d.ts +3 -1
  133. package/dist/path-containment.d.ts.map +1 -1
  134. package/dist/path-containment.js +13 -7
  135. package/dist/path-containment.js.map +1 -1
  136. package/dist/path-utils.d.ts +14 -17
  137. package/dist/path-utils.d.ts.map +1 -1
  138. package/dist/path-utils.js +37 -55
  139. package/dist/path-utils.js.map +1 -1
  140. package/dist/process.d.ts +2 -0
  141. package/dist/process.d.ts.map +1 -1
  142. package/dist/process.js +2 -0
  143. package/dist/process.js.map +1 -1
  144. package/dist/project-utils.d.ts.map +1 -1
  145. package/dist/project-utils.js +8 -9
  146. package/dist/project-utils.js.map +1 -1
  147. package/dist/safe-exec.d.ts +6 -2
  148. package/dist/safe-exec.d.ts.map +1 -1
  149. package/dist/safe-exec.js +1 -1
  150. package/dist/safe-exec.js.map +1 -1
  151. package/dist/skill-targets.d.ts.map +1 -1
  152. package/dist/skill-targets.js +3 -1
  153. package/dist/skill-targets.js.map +1 -1
  154. package/dist/skill-test/spawn-claude.d.ts +0 -15
  155. package/dist/skill-test/spawn-claude.d.ts.map +1 -1
  156. package/dist/skill-test/spawn-claude.js +11 -50
  157. package/dist/skill-test/spawn-claude.js.map +1 -1
  158. package/dist/special-file.d.ts +18 -0
  159. package/dist/special-file.d.ts.map +1 -0
  160. package/dist/special-file.js +21 -0
  161. package/dist/special-file.js.map +1 -0
  162. package/dist/terminating-signals.d.ts +129 -0
  163. package/dist/terminating-signals.d.ts.map +1 -0
  164. package/dist/terminating-signals.js +210 -0
  165. package/dist/terminating-signals.js.map +1 -0
  166. package/dist/test-helpers.d.ts +9 -5
  167. package/dist/test-helpers.d.ts.map +1 -1
  168. package/dist/test-helpers.js +18 -21
  169. package/dist/test-helpers.js.map +1 -1
  170. package/dist/test-scratch-guard.d.ts +34 -0
  171. package/dist/test-scratch-guard.d.ts.map +1 -0
  172. package/dist/test-scratch-guard.js +45 -0
  173. package/dist/test-scratch-guard.js.map +1 -0
  174. package/dist/testing/archive-fixtures.d.ts +147 -0
  175. package/dist/testing/archive-fixtures.d.ts.map +1 -0
  176. package/dist/testing/archive-fixtures.js +449 -0
  177. package/dist/testing/archive-fixtures.js.map +1 -0
  178. package/dist/testing/executables.d.ts +6 -0
  179. package/dist/testing/executables.d.ts.map +1 -1
  180. package/dist/testing/executables.js +20 -9
  181. package/dist/testing/executables.js.map +1 -1
  182. package/dist/testing/fault-fs-preload.d.ts +16 -0
  183. package/dist/testing/fault-fs-preload.d.ts.map +1 -0
  184. package/dist/testing/fault-fs-preload.js +22 -0
  185. package/dist/testing/fault-fs-preload.js.map +1 -0
  186. package/dist/testing/fault-fs.d.ts +115 -0
  187. package/dist/testing/fault-fs.d.ts.map +1 -0
  188. package/dist/testing/fault-fs.js +411 -0
  189. package/dist/testing/fault-fs.js.map +1 -0
  190. package/dist/testing/fault-spec.d.ts +83 -0
  191. package/dist/testing/fault-spec.d.ts.map +1 -0
  192. package/dist/testing/fault-spec.js +132 -0
  193. package/dist/testing/fault-spec.js.map +1 -0
  194. package/dist/testing/hostile-tree.d.ts.map +1 -1
  195. package/dist/testing/hostile-tree.js +3 -4
  196. package/dist/testing/hostile-tree.js.map +1 -1
  197. package/dist/testing/platform-gates.d.ts +8 -0
  198. package/dist/testing/platform-gates.d.ts.map +1 -1
  199. package/dist/testing/platform-gates.js +24 -0
  200. package/dist/testing/platform-gates.js.map +1 -1
  201. package/dist/testing/temp-dir.d.ts +31 -0
  202. package/dist/testing/temp-dir.d.ts.map +1 -1
  203. package/dist/testing/temp-dir.js +63 -0
  204. package/dist/testing/temp-dir.js.map +1 -1
  205. package/dist/testing/tier-timeout.d.ts +34 -0
  206. package/dist/testing/tier-timeout.d.ts.map +1 -0
  207. package/dist/testing/tier-timeout.js +45 -0
  208. package/dist/testing/tier-timeout.js.map +1 -0
  209. package/dist/testing/tree-snapshot.d.ts +71 -0
  210. package/dist/testing/tree-snapshot.d.ts.map +1 -0
  211. package/dist/testing/tree-snapshot.js +163 -0
  212. package/dist/testing/tree-snapshot.js.map +1 -0
  213. package/dist/testing.d.ts +6 -0
  214. package/dist/testing.d.ts.map +1 -1
  215. package/dist/testing.js +8 -1
  216. package/dist/testing.js.map +1 -1
  217. package/dist/text-file.d.ts +14 -1
  218. package/dist/text-file.d.ts.map +1 -1
  219. package/dist/text-file.js +41 -8
  220. package/dist/text-file.js.map +1 -1
  221. package/dist/timing-dump.d.ts.map +1 -1
  222. package/dist/timing-dump.js +2 -10
  223. package/dist/timing-dump.js.map +1 -1
  224. package/dist/tree-change/apply-decisions.d.ts +101 -0
  225. package/dist/tree-change/apply-decisions.d.ts.map +1 -0
  226. package/dist/tree-change/apply-decisions.js +139 -0
  227. package/dist/tree-change/apply-decisions.js.map +1 -0
  228. package/dist/tree-change/apply.d.ts +98 -0
  229. package/dist/tree-change/apply.d.ts.map +1 -0
  230. package/dist/tree-change/apply.js +364 -0
  231. package/dist/tree-change/apply.js.map +1 -0
  232. package/dist/tree-change/copy-decisions.d.ts +58 -0
  233. package/dist/tree-change/copy-decisions.d.ts.map +1 -0
  234. package/dist/tree-change/copy-decisions.js +66 -0
  235. package/dist/tree-change/copy-decisions.js.map +1 -0
  236. package/dist/tree-change/copy-tree.d.ts +125 -0
  237. package/dist/tree-change/copy-tree.d.ts.map +1 -0
  238. package/dist/tree-change/copy-tree.js +279 -0
  239. package/dist/tree-change/copy-tree.js.map +1 -0
  240. package/dist/tree-change/files.d.ts +167 -0
  241. package/dist/tree-change/files.d.ts.map +1 -0
  242. package/dist/tree-change/files.js +423 -0
  243. package/dist/tree-change/files.js.map +1 -0
  244. package/dist/tree-change/followed-walk.d.ts +54 -0
  245. package/dist/tree-change/followed-walk.d.ts.map +1 -0
  246. package/dist/tree-change/followed-walk.js +81 -0
  247. package/dist/tree-change/followed-walk.js.map +1 -0
  248. package/dist/tree-change/host-chain.d.ts +48 -0
  249. package/dist/tree-change/host-chain.d.ts.map +1 -0
  250. package/dist/tree-change/host-chain.js +85 -0
  251. package/dist/tree-change/host-chain.js.map +1 -0
  252. package/dist/tree-change/identity-compare.d.ts +61 -0
  253. package/dist/tree-change/identity-compare.d.ts.map +1 -0
  254. package/dist/tree-change/identity-compare.js +115 -0
  255. package/dist/tree-change/identity-compare.js.map +1 -0
  256. package/dist/tree-change/identity.d.ts +62 -0
  257. package/dist/tree-change/identity.d.ts.map +1 -0
  258. package/dist/tree-change/identity.js +152 -0
  259. package/dist/tree-change/identity.js.map +1 -0
  260. package/dist/tree-change/index.d.ts +24 -0
  261. package/dist/tree-change/index.d.ts.map +1 -0
  262. package/dist/tree-change/index.js +14 -0
  263. package/dist/tree-change/index.js.map +1 -0
  264. package/dist/tree-change/link-chain.d.ts +180 -0
  265. package/dist/tree-change/link-chain.d.ts.map +1 -0
  266. package/dist/tree-change/link-chain.js +377 -0
  267. package/dist/tree-change/link-chain.js.map +1 -0
  268. package/dist/tree-change/link-containment.d.ts +105 -0
  269. package/dist/tree-change/link-containment.d.ts.map +1 -0
  270. package/dist/tree-change/link-containment.js +196 -0
  271. package/dist/tree-change/link-containment.js.map +1 -0
  272. package/dist/tree-change/link-walk.d.ts +49 -0
  273. package/dist/tree-change/link-walk.d.ts.map +1 -0
  274. package/dist/tree-change/link-walk.js +69 -0
  275. package/dist/tree-change/link-walk.js.map +1 -0
  276. package/dist/tree-change/plan.d.ts +206 -0
  277. package/dist/tree-change/plan.d.ts.map +1 -0
  278. package/dist/tree-change/plan.js +320 -0
  279. package/dist/tree-change/plan.js.map +1 -0
  280. package/dist/tree-change/readable-tree.d.ts +44 -0
  281. package/dist/tree-change/readable-tree.d.ts.map +1 -0
  282. package/dist/tree-change/readable-tree.js +52 -0
  283. package/dist/tree-change/readable-tree.js.map +1 -0
  284. package/dist/tree-change/rollback-error.d.ts +29 -0
  285. package/dist/tree-change/rollback-error.d.ts.map +1 -0
  286. package/dist/tree-change/rollback-error.js +31 -0
  287. package/dist/tree-change/rollback-error.js.map +1 -0
  288. package/dist/tree-change/staging-names.d.ts +27 -0
  289. package/dist/tree-change/staging-names.d.ts.map +1 -0
  290. package/dist/tree-change/staging-names.js +40 -0
  291. package/dist/tree-change/staging-names.js.map +1 -0
  292. package/dist/tree-change/tree-walk.d.ts +81 -0
  293. package/dist/tree-change/tree-walk.d.ts.map +1 -0
  294. package/dist/tree-change/tree-walk.js +212 -0
  295. package/dist/tree-change/tree-walk.js.map +1 -0
  296. package/dist/win32-namespace.d.ts +24 -0
  297. package/dist/win32-namespace.d.ts.map +1 -0
  298. package/dist/win32-namespace.js +31 -0
  299. package/dist/win32-namespace.js.map +1 -0
  300. package/dist/yaml/surgical-yaml.d.ts +12 -3
  301. package/dist/yaml/surgical-yaml.d.ts.map +1 -1
  302. package/dist/yaml/surgical-yaml.js +16 -6
  303. package/dist/yaml/surgical-yaml.js.map +1 -1
  304. package/eslint/README.md +12 -4
  305. package/eslint/rules/fs-binding-scan.cjs +278 -0
  306. package/eslint/rules/no-adhoc-errno.cjs +364 -0
  307. package/eslint/rules/no-bare-symlink-in-tests.cjs +2 -3
  308. package/eslint/rules/no-blind-catch.cjs +1 -1
  309. package/eslint/rules/no-destructive-fs.cjs +359 -0
  310. package/eslint/rules/no-existssync.cjs +70 -0
  311. package/eslint/rules/no-fragile-entrypoint-guard.cjs +3 -2
  312. package/eslint/rules/no-link-following-fs.cjs +68 -0
  313. package/eslint/rules/no-literal-process-exit.cjs +3 -16
  314. package/eslint/rules/no-literal-test-timeout.cjs +214 -0
  315. package/eslint/rules/no-raw-signal-listener.cjs +224 -0
  316. package/eslint/rules/no-stdout-outside-writer.cjs +135 -0
  317. package/package.json +10 -2
  318. package/dist/errors/errno.d.ts +0 -51
  319. package/dist/errors/errno.d.ts.map +0 -1
  320. package/dist/errors/errno.js +0 -112
  321. package/dist/errors/errno.js.map +0 -1
  322. package/eslint/rules/no-fs-promises-cp.cjs +0 -43
@@ -1,13 +1,19 @@
1
1
  import fs from 'node:fs';
2
2
  import picomatch from 'picomatch';
3
+ import { requireConfirmedAbsent } from './errors/confirmed-absent.js';
4
+ import { fsFaultOf } from './errors/errno-table.js';
5
+ import { classifyFsFault } from './errors/fs-fault.js';
3
6
  import { directoryRefusalFor, listingFailure, } from './fs-utils.js';
4
7
  import { gitFindRoot, gitLsFiles } from './git-utils.js';
5
- import { requireUnreadablePolicy, settleRefusal } from './listing-refusal.js';
8
+ import { promised } from './in-order.js';
9
+ import { edgeStatSync, followedStatSync, realpathNativeSync } from './link-following.js';
10
+ import { crawlSideOf, requireUnreadablePolicy, settleCrawlRefusal } from './listing-refusal.js';
6
11
  import { toForwardSlash, safePath } from './path-utils.js';
12
+ export { rootListingRefusal } from './fs-utils.js';
7
13
  // The refusal vocabulary lives in `listing-refusal.ts` so `git-utils.ts` can
8
14
  // share it without importing this module (which imports that one). Re-exported
9
15
  // here because `./crawl` is where every caller of the walk already looks.
10
- export { DirectoryListingRefusedError, refusedListingMessage, settleRefusal, } from './listing-refusal.js';
16
+ export { DirectoryListingRefusedError, onCrawlOutput, refusedListingMessage, settleCrawlRefusal, settleRefusal, } from './listing-refusal.js';
11
17
  /**
12
18
  * Glob options shared by every pattern this module compiles.
13
19
  *
@@ -120,10 +126,14 @@ export function crawlPathFilter(include, exclude) {
120
126
  * baseDir: '/project',
121
127
  * include: ['**\/*.md'],
122
128
  * exclude: ['**\/node_modules/**'],
129
+ * unreadable: { refuse: { root: '/project', remedy: 'Fix the permissions.', side: 'source' } },
130
+ * outputs: [],
123
131
  * });
124
132
  */
125
- export async function crawlDirectory(options) {
126
- return crawlDirectorySync(options);
133
+ export function crawlDirectory(options) {
134
+ // Not `async`: there is nothing to await. A refusal still arrives as a
135
+ // rejection, never as a synchronous throw.
136
+ return promised(() => crawlDirectorySync(options));
127
137
  }
128
138
  /**
129
139
  * Refuse a symlink observer on the `git ls-files` route.
@@ -154,11 +164,70 @@ function requireWalkForSymlinkObserver(observer, respectGitignore) {
154
164
  * baseDir: '/project',
155
165
  * include: ['**\/*.md'],
156
166
  * exclude: ['**\/node_modules/**'],
167
+ * unreadable: { refuse: { root: '/project', remedy: 'Fix the permissions.', side: 'source' } },
168
+ * outputs: [],
157
169
  * });
158
170
  */
171
+ /**
172
+ * Refuse omitted `outputs` by name: the runtime half of a required field, for the callers the
173
+ * type cannot reach (test files are not typechecked; a JavaScript adopter has no compiler).
174
+ * Without it a fault on what the verb writes would be classified as its input.
175
+ */
176
+ function requireOutputs(outputs) {
177
+ if (outputs === undefined) {
178
+ throw new TypeError('crawlDirectory: `outputs` is required — the trees the calling verb writes, [] for none.');
179
+ }
180
+ }
181
+ /**
182
+ * `stat` the crawl's base; every fault — an absent base too, as the walk's own listing of it answers — is
183
+ * classified on the context decided only then (see `crawlDirectorySync`).
184
+ */
185
+ function statCrawlBase(base, context) {
186
+ try {
187
+ // The base is the operator's own input: its own link is the edge the kernel answers.
188
+ return edgeStatSync(base);
189
+ }
190
+ catch (error) {
191
+ throw classifyFsFault(error, context());
192
+ }
193
+ }
194
+ /**
195
+ * Whether a member `git ls-files` listed may be handed on. A committed symbolic link (mode 120000)
196
+ * is read by its chain beneath the crawl's base first, as the walk's `processSymlink` reads one: a
197
+ * chain VAT will not follow, or a probe the OS refuses, is a gap settled by `settle` and the member
198
+ * is dropped, so no caller's `readFile` makes the kernel resolve it. A link that resolves to nothing
199
+ * stays a member (its read reports it); a non-link costs one `lstat`.
200
+ *
201
+ * @param fullPath - The member, absolute
202
+ * @param base - The crawl's base, the tree its links are read within
203
+ * @param settle - The walk's `settleLinkFault`: settles a fault on `fullPath` under the caller's policy
204
+ */
205
+ function gitMemberHandedOn(fullPath, base, settle) {
206
+ try {
207
+ if (!fs.lstatSync(fullPath).isSymbolicLink())
208
+ return true;
209
+ }
210
+ catch (error) {
211
+ if (fsFaultOf(error) === undefined)
212
+ throw error;
213
+ // Absent (a tracked file deleted from the working tree), or a member whose own `lstat` is refused —
214
+ // under a directory git already reported as unlistable: no kernel can follow what it cannot reach,
215
+ // so it stays a member, as it always was, and its read reports it.
216
+ return true;
217
+ }
218
+ try {
219
+ followedStatSync(fullPath, base);
220
+ return true;
221
+ }
222
+ catch (error) {
223
+ settle(error, fullPath);
224
+ return false;
225
+ }
226
+ }
159
227
  export function crawlDirectorySync(options) {
160
- const { baseDir, include = ['**/*'], exclude = DEFAULT_EXCLUDE, followSymlinks = false, absolute = true, filesOnly = true, respectGitignore = true, includeUntracked = false, unreadable, onSymlinkNotFollowed, } = options;
228
+ const { baseDir, include = ['**/*'], exclude = DEFAULT_EXCLUDE, followSymlinks = false, absolute = true, filesOnly = true, respectGitignore = true, includeUntracked = false, unreadable, onSymlinkNotFollowed, outputs, } = options;
161
229
  requireUnreadablePolicy(unreadable, 'crawlDirectory');
230
+ requireOutputs(outputs);
162
231
  requireWalkForSymlinkObserver(onSymlinkNotFollowed, respectGitignore);
163
232
  const picoOptions = PICOMATCH_OPTIONS;
164
233
  // Resolve base directory to absolute path
@@ -180,14 +249,14 @@ export function crawlDirectorySync(options) {
180
249
  * over. Never a silent skip, on either route.
181
250
  */
182
251
  function raiseRefusal(refusal) {
183
- settleRefusal(unreadable, refusal);
184
- }
185
- // Ensure base directory exists
186
- if (!fs.existsSync(resolvedBaseDir)) {
187
- throw new Error(`Base directory does not exist: ${resolvedBaseDir}`);
252
+ settleCrawlRefusal(unreadable, refusal, outputs);
188
253
  }
189
- // Ensure base directory is actually a directory
190
- const baseStat = fs.statSync(resolvedBaseDir);
254
+ // A refusal at the base is the destination's when the base is on what the verb writes, else
255
+ // the input's — the tree this crawl reads, whose content decides what is in it.
256
+ // Decided only once a fault needs it: deciding resolves paths, which a crawl that meets no fault never pays for.
257
+ const crawlBase = () => ({ side: crawlSideOf(resolvedBaseDir, outputs, unreadable), origin: 'content', action: `crawl ${resolvedBaseDir}`, path: resolvedBaseDir });
258
+ // Ensure base directory exists and is actually a directory
259
+ const baseStat = statCrawlBase(resolvedBaseDir, crawlBase);
191
260
  if (!baseStat.isDirectory()) {
192
261
  throw new Error(`Base path is not a directory: ${resolvedBaseDir}`);
193
262
  }
@@ -246,6 +315,7 @@ export function crawlDirectorySync(options) {
246
315
  const isMember = crawlPathFilter(include, exclude);
247
316
  return gitFiles
248
317
  .filter((relativePath) => isMember(relativePath))
318
+ .filter((relativePath) => gitMemberHandedOn(safePath.resolve(resolvedBaseDir, relativePath), resolvedBaseDir, settleLinkFault))
249
319
  .map((relativePath) => {
250
320
  // git ls-files returns paths relative to cwd
251
321
  return absolute ? safePath.resolve(resolvedBaseDir, relativePath) : relativePath;
@@ -286,11 +356,15 @@ export function crawlDirectorySync(options) {
286
356
  /**
287
357
  * What a failed `readdirSync` / `statSync` means for the walk.
288
358
  *
289
- * Absence (`ENOENT` / `ENOTDIR`) is an entry that vanished between being
290
- * enumerated by its parent and being asked about itself — not in the
291
- * population, nothing to report. Anything else is a refusal, and a refusal
292
- * is a GAP: handed to the caller if it asked, thrown otherwise. Never a
293
- * silent `return` — that is the shorter list this walk used to hand back.
359
+ * Absence (`ENOENT` / `ENOTDIR`) is believed only when the parent's listing
360
+ * agrees ({@link vanished}): an entry that vanished between being enumerated by
361
+ * its parent and being asked about itself is not in the population, nothing to
362
+ * report; one the parent still names was refused, and is a GAP like any other.
363
+ * The BASE has no parent listing: it was just found to exist, so its absence is
364
+ * a classified source fault, never an empty population. Anything else is a
365
+ * refusal, and a refusal is a GAP: handed to the caller if it asked, thrown
366
+ * otherwise. Never a silent `return` — that is the shorter list this walk used
367
+ * to hand back.
294
368
  *
295
369
  * @param error - What the filesystem threw
296
370
  * @param target - The directory (or link) it was asked about
@@ -298,12 +372,49 @@ export function crawlDirectorySync(options) {
298
372
  */
299
373
  function reportOrSkip(error, target) {
300
374
  const listing = listingFailure(error);
375
+ if (listing.outcome === 'absent' && target === resolvedBaseDir)
376
+ throw classifyFsFault(error, crawlBase());
301
377
  if (listing.outcome === 'absent')
302
- return true;
378
+ return vanished(error, target);
303
379
  if (listing.outcome === 'unreadable')
304
380
  raiseRefusal(directoryRefusalFor(listing, target));
305
381
  return false;
306
382
  }
383
+ /**
384
+ * Settle a symbolic link whose chain could not be followed — a probe the OS refused, or a chain VAT
385
+ * will not hand the kernel — on either route. A link is not a directory, so under `refuse` it is the
386
+ * classified fault on the link itself (its side from the crawl's one rule), never a "listing
387
+ * refused" for a path that was never listed; under `degrade` it is the gap the caller records.
388
+ *
389
+ * @param error - What following the link threw
390
+ * @param link - The link, absolute
391
+ */
392
+ function settleLinkFault(error, link) {
393
+ if ('refuse' in unreadable) {
394
+ throw classifyFsFault(error, { side: crawlSideOf(link, outputs, unreadable), origin: 'content', action: 'follow the symbolic link', path: link });
395
+ }
396
+ reportOrSkip(error, link);
397
+ }
398
+ /**
399
+ * Whether `target`, whose probe answered absent, really is gone: the parent's
400
+ * listing is the second witness (`requireConfirmedAbsent`). A link the parent
401
+ * names is gone when its target is (the probe followed it). An entry the parent
402
+ * still names — or a parent that will not list — is a refused listing,
403
+ * raised under the caller's policy like any other gap.
404
+ */
405
+ function vanished(error, target) {
406
+ try {
407
+ requireConfirmedAbsent(target, error, { origin: 'content', action: `crawl ${target}` }, { follows: true, sideOf: (refused) => crawlSideOf(refused, outputs, unreadable) });
408
+ return true;
409
+ }
410
+ catch (error_) {
411
+ const facts = fsFaultOf(error_);
412
+ if (facts === undefined)
413
+ throw error_;
414
+ raiseRefusal(directoryRefusalFor({ outcome: 'unreadable', code: facts.errno }, facts.path ?? target));
415
+ return false;
416
+ }
417
+ }
307
418
  /**
308
419
  * Record a directory as walked, reporting whether it had already been seen.
309
420
  *
@@ -322,7 +433,9 @@ export function crawlDirectorySync(options) {
322
433
  function alreadyWalked(dir) {
323
434
  let realPath;
324
435
  try {
325
- realPath = fs.realpathSync.native(dir);
436
+ // The one native fallback rule (`realpathNativeSync`): a volume that cannot answer a
437
+ // final-path query is asked of the JS walk rather than reported as a refused directory.
438
+ realPath = realpathNativeSync(dir, resolvedBaseDir);
326
439
  }
327
440
  catch (error) {
328
441
  reportOrSkip(error, dir);
@@ -344,17 +457,20 @@ export function crawlDirectorySync(options) {
344
457
  }
345
458
  return;
346
459
  }
347
- // Resolve symlink and check if it's a directory or file
460
+ // Resolve symlink and check if it's a directory or file: its chain is read beneath the base
461
+ // first, so the kernel never follows a text VAT has not read.
348
462
  let targetStat;
349
463
  try {
350
- targetStat = fs.statSync(fullPath);
464
+ targetStat = followedStatSync(fullPath, resolvedBaseDir);
351
465
  }
352
466
  catch (error) {
353
- // A broken symlink is absence and is skipped; a target the OS refused to
354
- // stat is a gap, and goes the same way a refused listing does.
355
- reportOrSkip(error, fullPath);
467
+ // A target the OS refused to stat, or a chain VAT will not follow: the link's own fault.
468
+ settleLinkFault(error, fullPath);
356
469
  return;
357
470
  }
471
+ // A broken symlink (or a cycle) is absence and is skipped.
472
+ if (targetStat === undefined)
473
+ return;
358
474
  if (targetStat.isDirectory()) {
359
475
  walkDirectory(fullPath);
360
476
  }
@@ -1 +1 @@
1
- {"version":3,"file":"file-crawler.js","sourceRoot":"","sources":["../src/file-crawler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-crawler.js","sourceRoot":"","sources":["../src/file-crawler.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,17 @@
1
1
  /**
2
2
  * Filesystem utilities
3
3
  */
4
- import { VatError } from './errors/vat-error.js';
4
+ import { type FsFaultClass } from './errors/errno-table.js';
5
5
  /**
6
6
  * What one path looked like the first time this run asked.
7
7
  *
8
8
  * The two fields are deliberately NOT collapsed into a single `stat` result:
9
- * they record the outcome of `existsSync` and of `statSync` *separately*,
9
+ * they record whether anything resolves there and what the `stat` said *separately*,
10
10
  * because callers distinguish three states and only two of them are "the stat
11
11
  * worked". See {@link FsLookupCache.probe}.
12
12
  */
13
13
  export interface PathProbe {
14
- /** `existsSync` — follows symlinks, so a dangling link reads as absent. */
14
+ /** Whether the path resolves (its chain read first) — a dangling link or a cycle reads as absent. */
15
15
  readonly exists: boolean;
16
16
  /**
17
17
  * `statSync().isDirectory()`.
@@ -62,7 +62,7 @@ export type DirectoryListing =
62
62
  /**
63
63
  * Turn a `readdir` rejection into the failure it actually is.
64
64
  *
65
- * ⚠️ **`isFilesystemAccessError` is deliberately NOT used here, and that is not
65
+ * ⚠️ **`fsFaultOf` is deliberately NOT used here, and that is not
66
66
  * an oversight.** It answers a different question — *"is this the environment's
67
67
  * fault or a bug in our code?"* — and to answer it, it deliberately groups
68
68
  * `ENOENT` together with `EACCES`. That grouping IS the conflation this function
@@ -79,7 +79,7 @@ export type DirectoryListing =
79
79
  */
80
80
  export declare function listingFailure(error: unknown): DirectoryListing;
81
81
  /**
82
- * The clause a finding prints about a refusal {@link TRANSIENT_LISTING_ERRNOS}
82
+ * The clause a finding prints about a refusal {@link isTransientListingCode}
83
83
  * calls transient — owned here, beside the list, so it describes every member.
84
84
  *
85
85
  * 🪤 Both consumers of `AbsenceCause.transient` used to write their own: "`X`
@@ -132,6 +132,8 @@ export interface PathProbeStats {
132
132
  */
133
133
  export declare class FsLookupCache {
134
134
  #private;
135
+ /** @param within - The tree this run's paths are crawled in — a project or skill root the operator named */
136
+ constructor(within: string);
135
137
  /**
136
138
  * The three-way spelling index over this cache's listings — one per run, for
137
139
  * the same reason the listings themselves are.
@@ -159,12 +161,12 @@ export declare class FsLookupCache {
159
161
  /**
160
162
  * Does this path exist, and is it a directory — asked once per run.
161
163
  *
162
- * **Both syscalls are preserved, in order, exactly as an uncached caller
163
- * would make them.** `existsSync` then `statSync` is not the same as one
164
- * `statSync`: the pair distinguishes "absent" from "present but unstattable",
165
- * and the link walker's classifier branches differently on each. Collapsing
166
- * them would be a behaviour change wearing the shape of an optimization, so
167
- * this method deduplicates the pair rather than replacing it.
164
+ * One followed `stat`, its link chain read beneath this cache's tree first
165
+ * (`followedStatSync`): a path that resolves to nothing — absent, dangling, a
166
+ * cycle — is `{ exists: false }`; a probe the OS refused, or a chain VAT will not
167
+ * hand the kernel (a link to a network or device path), is present with NO
168
+ * answer (`isDirectory: null`), which the link walker reports as an unreadable
169
+ * target — so the refusal is SEEN, never read as "not there".
168
170
  *
169
171
  * Synchronous, unlike this class's other two lookups, because its caller (the
170
172
  * skill link-graph walker) is synchronous throughout. One oracle answering
@@ -210,9 +212,16 @@ export declare class FsLookupCache {
210
212
  * is idempotent at a root (`'/'` on posix, `'C:/'` for a drive, `'//server/share/'`
211
213
  * for a UNC share), so without it the walk never terminates.
212
214
  *
213
- * Errno is deliberately not inspected. EACCES on an existing file and ELOOP on
214
- * a symlink cycle land in the same catch as ENOENT, and for all three the
215
- * ancestor's namespace is a strictly better answer than the lexical one.
215
+ * Every filesystem failure walks up, and the row says which kind it was
216
+ * ({@link linkResolutionFault}, the one predicate): a path that resolves to
217
+ * nothing (ENOENT, ELOOP on a cycle, …) carries `fault: null`, and one the OS
218
+ * DECLINED (`EACCES`/`EPERM`) or could not look at carries the fault — errno
219
+ * and class — for the judge to report against that ONE target. Never a
220
+ * rejection: this column is filled over every link target in one
221
+ * `Promise.all`, and one refused target must not abort the run and lose every
222
+ * other finding. The ancestor answer is still the containment answer: a
223
+ * target outside the root is outside whatever refused beneath it. A bug
224
+ * (no errno) rejects as itself.
216
225
  *
217
226
  * ⚠️ **`promisify(nodeFs.realpath)` — NOT `fs/promises.realpath`. Node ships two
218
227
  * different realpaths and they do not agree.** `fs.realpathSync` and the
@@ -250,15 +259,16 @@ export declare class FsLookupCache {
250
259
  * The wrapper is allocated only on a cache MISS, i.e. once per actual syscall.
251
260
  *
252
261
  * @param targetPath - Path to canonicalize
253
- * @returns Canonical path with forward slashes on every platform
262
+ * @returns The canonical path with forward slashes on every platform, and the
263
+ * fault (or `null`) that sent the answer to an ancestor
254
264
  */
255
- realpath(targetPath: string): Promise<string>;
265
+ realpath(targetPath: string): Promise<RealpathRow>;
256
266
  /**
257
267
  * What `dirPath` holds, or which of the two ways the question went unanswered.
258
268
  *
259
269
  * A *stable* failure is cached like a success: re-asking a directory whose
260
270
  * mode bits refuse us, or whose path is a symlink cycle, is the same failed
261
- * syscall. A **transient** one is not — see {@link TRANSIENT_LISTING_ERRNOS}.
271
+ * syscall. A **transient** one is not — see {@link isTransientListingCode}.
262
272
  *
263
273
  * ⚠️ **The transient entry is dropped only once the promise has SETTLED, and
264
274
  * that timing is the whole design.** Deleting the row up front, or refusing to
@@ -281,30 +291,6 @@ export declare class FsLookupCache {
281
291
  */
282
292
  readdir(dirPath: string): Promise<DirectoryListing>;
283
293
  }
284
- /** Thrown when a link inside the tree being copied points outside it. */
285
- export declare class CopyLinkEscapesSourceError extends VatError {
286
- constructor(link: string, src: string);
287
- }
288
- /**
289
- * Recursively copy a directory, following symlinks — contained to `src`.
290
- *
291
- * A link is copied as what it points at (a linked directory as its tree, a
292
- * linked file as its bytes; a dangling link fails loudly in `stat`). Two
293
- * refusals bound that: a link whose target is not under `src` throws
294
- * {@link CopyLinkEscapesSourceError} — `scripts/etc -> /etc` used to copy
295
- * `/etc` into `dist` — and a link that leads the walk back into a directory
296
- * it already entered throws `DirectoryWalkRevisitedError` (`scripts/loop -> .`
297
- * used to create `dest/loop/loop/…` until `ENAMETOOLONG`, writing every file
298
- * at every level first). Adopter-authored trees reach this through
299
- * `vat agent build`, so neither shape is exotic.
300
- *
301
- * @param src - Source directory path
302
- * @param dest - Destination directory path
303
- *
304
- * @example
305
- * await copyDirectory('/source/dir', '/dest/dir');
306
- */
307
- export declare function copyDirectory(src: string, dest: string): Promise<void>;
308
294
  /**
309
295
  * Which spelling rule matched a name, and therefore how faithfully the
310
296
  * asked-for spelling matches disk.
@@ -405,7 +391,7 @@ export type AbsenceCause =
405
391
  readonly directory: string;
406
392
  /**
407
393
  * Whether re-running could get a different answer — see
408
- * {@link TRANSIENT_LISTING_ERRNOS}.
394
+ * {@link isTransientListingCode}.
409
395
  *
410
396
  * Derived once, here, rather than by each consumer: two lanes write a
411
397
  * "re-run before investigating" remedy off this fact, and a second errno
@@ -432,6 +418,18 @@ export type DirectoryRefusal = Extract<AbsenceCause, {
432
418
  export declare function directoryRefusalFor(listing: Extract<DirectoryListing, {
433
419
  outcome: 'unreadable';
434
420
  }>, directory: string): DirectoryRefusal;
421
+ /**
422
+ * The refusal a failed `stat` or `readdir` of a scan ROOT stands for, or
423
+ * `undefined` when the root is simply absent (`ENOENT`/`ENOTDIR`).
424
+ *
425
+ * For a caller that must decide whether a root exists before it scans it: an
426
+ * `existsSync` answers `false` for an untraversable parent too, and the root
427
+ * then reads as scanned and empty.
428
+ *
429
+ * @param error - What the `stat` or `readdir` of `directory` threw
430
+ * @param directory - The root that was asked about
431
+ */
432
+ export declare function rootListingRefusal(error: unknown, directory: string): DirectoryRefusal | undefined;
435
433
  /** What one directory entry name matched, and how the directory spells it. */
436
434
  export type ComponentMatch = {
437
435
  match: Exclude<FilenameMatch, 'absent'>;
@@ -621,22 +619,48 @@ export declare function fillPathSpellings(requests: Iterable<PathSpellingRequest
621
619
  */
622
620
  export declare function pathSpellingFrom(table: PathSpellingTable, referrer: string, target: string): PathSpelling;
623
621
  /**
624
- * The materialized realpath column: path → its canonical path.
622
+ * Why a path's canonical answer came from an ancestor although something is
623
+ * there to resolve: the OS declined (`EACCES`, `EPERM`), ran short or could not
624
+ * look. Carried on the row so a judge reports it against that ONE target.
625
+ */
626
+ export interface RealpathFault {
627
+ readonly errno: string;
628
+ readonly faultClass: FsFaultClass;
629
+ /** The resolution's own error — what a caller classifies when the path is the run's own (the project root), not a target. */
630
+ readonly error: unknown;
631
+ }
632
+ /** One row of the realpath column. */
633
+ export interface RealpathRow {
634
+ /** The canonical path, forward-slashed — from the deepest ancestor that resolved when the path itself did not. */
635
+ readonly path: string;
636
+ /**
637
+ * `null` when the path resolved, or resolves to nothing (dangling, a cycle);
638
+ * otherwise the fault that kept it from resolving. Required, never optional,
639
+ * so every WRITER of a row must decide it. The type does not make a reader ask:
640
+ * one that uses `path` alone still compiles, and reads a faulted row as the
641
+ * nearest ancestor that resolved. Every judge of a link target reads `fault`
642
+ * before it trusts `path` (`gitIgnoreSafetyIssue` beside `isWithinProjectFrom`).
643
+ */
644
+ readonly fault: RealpathFault | null;
645
+ }
646
+ /**
647
+ * The materialized realpath column: path → its canonical path and the fault, if
648
+ * any, that kept it from resolving.
625
649
  *
626
- * Every filled row is a string — never `null`, never `undefined`.
650
+ * Every filled row is a {@link RealpathRow} — never `null`, never `undefined`.
627
651
  * {@link FsLookupCache.realpath} answers a path it cannot canonicalize from that
628
652
  * path's deepest existing ancestor rather than failing, because a path that does
629
653
  * not exist has no realpath and a caller comparing paths still needs an answer.
630
654
  * That fallback IS the contract, and it is what lets `undefined` out of this map
631
- * mean exactly one thing: *absent key*. See {@link realpathFrom}.
655
+ * mean exactly one thing: *absent key*. See {@link realpathRowFrom}.
632
656
  */
633
- export type RealpathTable = ReadonlyMap<string, string>;
657
+ export type RealpathTable = ReadonlyMap<string, RealpathRow>;
634
658
  /**
635
659
  * Canonicalize every path in `paths` — the only place I/O is legal for this
636
660
  * fact, and the pass that must run *before* any judging.
637
661
  *
638
662
  * ⚠️ **Rows are keyed by the input path string exactly as given** — not a
639
- * dirname, not a re-resolved form. {@link realpathFrom} looks that same string
663
+ * dirname, not a re-resolved form. {@link realpathRowFrom} looks that same string
640
664
  * up, so any normalization applied here and not there is a silent miss (a loud
641
665
  * one, in fact: the judge throws). Contrast {@link fillPathSpellings}, which
642
666
  * keys by (walk root, target) *because* many references share one walk; here the
@@ -655,7 +679,8 @@ export type RealpathTable = ReadonlyMap<string, string>;
655
679
  */
656
680
  export declare function fillRealpaths(paths: Iterable<string>, fsCache: FsLookupCache): Promise<RealpathTable>;
657
681
  /**
658
- * Read the canonical path for `filePath` out of an already-filled table. Pure.
682
+ * Read the row for `filePath` — its canonical path and the fault, if any, that
683
+ * kept it from resolving — out of an already-filled table. Pure.
659
684
  *
660
685
  * **A miss throws rather than degrading to a recomputed realpath.** The fill set
661
686
  * is derived from exactly the paths the judge will be asked about, so a missing
@@ -678,8 +703,8 @@ export declare function fillRealpaths(paths: Iterable<string>, fsCache: FsLookup
678
703
  *
679
704
  * @param table - Table filled by {@link fillRealpaths}
680
705
  * @param filePath - Path being asked about, as it was handed to the fill
681
- * @returns The canonical path, with forward slashes on every platform
706
+ * @returns The row: the canonical path, with forward slashes on every platform, and its fault
682
707
  * @throws If `table` holds no row for `filePath`
683
708
  */
684
- export declare function realpathFrom(table: RealpathTable, filePath: string): string;
709
+ export declare function realpathRowFrom(table: RealpathTable, filePath: string): RealpathRow;
685
710
  //# sourceMappingURL=fs-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"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"}