@flyingrobots/graft 0.11.1 → 0.12.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 (209) hide show
  1. package/CHANGELOG.md +186 -0
  2. package/README.md +7 -0
  3. package/dist/adapters/node-fs.d.ts.map +1 -1
  4. package/dist/adapters/node-fs.js +6 -0
  5. package/dist/adapters/node-fs.js.map +1 -1
  6. package/dist/api/index.d.ts +2 -2
  7. package/dist/api/index.d.ts.map +1 -1
  8. package/dist/api/index.js +2 -2
  9. package/dist/api/index.js.map +1 -1
  10. package/dist/api/repo-workspace.d.ts.map +1 -1
  11. package/dist/api/repo-workspace.js +3 -0
  12. package/dist/api/repo-workspace.js.map +1 -1
  13. package/dist/cli/cli-error.d.ts.map +1 -1
  14. package/dist/cli/cli-error.js +4 -1
  15. package/dist/cli/cli-error.js.map +1 -1
  16. package/dist/cli/command-parser.d.ts.map +1 -1
  17. package/dist/cli/command-parser.js +5 -0
  18. package/dist/cli/command-parser.js.map +1 -1
  19. package/dist/cli/structural-review-render.d.ts.map +1 -1
  20. package/dist/cli/structural-review-render.js +5 -0
  21. package/dist/cli/structural-review-render.js.map +1 -1
  22. package/dist/contracts/capabilities.d.ts +5 -5
  23. package/dist/contracts/capabilities.d.ts.map +1 -1
  24. package/dist/contracts/capabilities.js +10 -0
  25. package/dist/contracts/capabilities.js.map +1 -1
  26. package/dist/contracts/output-schema-cli.d.ts +56 -0
  27. package/dist/contracts/output-schema-cli.d.ts.map +1 -1
  28. package/dist/contracts/output-schema-cli.js +1 -0
  29. package/dist/contracts/output-schema-cli.js.map +1 -1
  30. package/dist/contracts/output-schema-mcp.d.ts +79 -1
  31. package/dist/contracts/output-schema-mcp.d.ts.map +1 -1
  32. package/dist/contracts/output-schema-mcp.js +27 -0
  33. package/dist/contracts/output-schema-mcp.js.map +1 -1
  34. package/dist/contracts/output-schema-meta.d.ts +7 -4
  35. package/dist/contracts/output-schema-meta.d.ts.map +1 -1
  36. package/dist/contracts/output-schema-meta.js +8 -2
  37. package/dist/contracts/output-schema-meta.js.map +1 -1
  38. package/dist/contracts/output-schemas.d.ts +3 -5
  39. package/dist/contracts/output-schemas.d.ts.map +1 -1
  40. package/dist/contracts/output-schemas.js +9 -34
  41. package/dist/contracts/output-schemas.js.map +1 -1
  42. package/dist/echo/structural-reading-adapter.d.ts.map +1 -1
  43. package/dist/echo/structural-reading-adapter.js +42 -0
  44. package/dist/echo/structural-reading-adapter.js.map +1 -1
  45. package/dist/echo/structural-reading-generated-model.d.ts.map +1 -1
  46. package/dist/echo/structural-reading-generated-model.js +7 -3
  47. package/dist/echo/structural-reading-generated-model.js.map +1 -1
  48. package/dist/mcp/burden.d.ts.map +1 -1
  49. package/dist/mcp/burden.js +1 -0
  50. package/dist/mcp/burden.js.map +1 -1
  51. package/dist/mcp/repo-workspace.d.ts.map +1 -1
  52. package/dist/mcp/repo-workspace.js +5 -1
  53. package/dist/mcp/repo-workspace.js.map +1 -1
  54. package/dist/mcp/server-invocation.d.ts.map +1 -1
  55. package/dist/mcp/server-invocation.js +46 -11
  56. package/dist/mcp/server-invocation.js.map +1 -1
  57. package/dist/mcp/server-tool-access.d.ts +2 -0
  58. package/dist/mcp/server-tool-access.d.ts.map +1 -1
  59. package/dist/mcp/server-tool-access.js +5 -0
  60. package/dist/mcp/server-tool-access.js.map +1 -1
  61. package/dist/mcp/tool-registry.d.ts.map +1 -1
  62. package/dist/mcp/tool-registry.js +2 -0
  63. package/dist/mcp/tool-registry.js.map +1 -1
  64. package/dist/mcp/tools/changed-since.d.ts.map +1 -1
  65. package/dist/mcp/tools/changed-since.js +8 -63
  66. package/dist/mcp/tools/changed-since.js.map +1 -1
  67. package/dist/mcp/tools/code-find.d.ts.map +1 -1
  68. package/dist/mcp/tools/code-find.js +1 -0
  69. package/dist/mcp/tools/code-find.js.map +1 -1
  70. package/dist/mcp/tools/code-refs.d.ts.map +1 -1
  71. package/dist/mcp/tools/code-refs.js +1 -0
  72. package/dist/mcp/tools/code-refs.js.map +1 -1
  73. package/dist/mcp/tools/code-show.d.ts.map +1 -1
  74. package/dist/mcp/tools/code-show.js +17 -10
  75. package/dist/mcp/tools/code-show.js.map +1 -1
  76. package/dist/mcp/tools/file-outline.d.ts.map +1 -1
  77. package/dist/mcp/tools/file-outline.js +18 -39
  78. package/dist/mcp/tools/file-outline.js.map +1 -1
  79. package/dist/mcp/tools/graft-diff.js +1 -1
  80. package/dist/mcp/tools/graft-diff.js.map +1 -1
  81. package/dist/mcp/tools/import-diagnostics.d.ts +3 -0
  82. package/dist/mcp/tools/import-diagnostics.d.ts.map +1 -0
  83. package/dist/mcp/tools/import-diagnostics.js +25 -0
  84. package/dist/mcp/tools/import-diagnostics.js.map +1 -0
  85. package/dist/mcp/tools/map.d.ts.map +1 -1
  86. package/dist/mcp/tools/map.js +1 -0
  87. package/dist/mcp/tools/map.js.map +1 -1
  88. package/dist/mcp/tools/precision-live.d.ts +8 -0
  89. package/dist/mcp/tools/precision-live.d.ts.map +1 -1
  90. package/dist/mcp/tools/precision-live.js +16 -3
  91. package/dist/mcp/tools/precision-live.js.map +1 -1
  92. package/dist/mcp/tools/precision.d.ts +1 -1
  93. package/dist/mcp/tools/precision.d.ts.map +1 -1
  94. package/dist/mcp/tools/precision.js +1 -1
  95. package/dist/mcp/tools/precision.js.map +1 -1
  96. package/dist/mcp/tools/read-range.d.ts.map +1 -1
  97. package/dist/mcp/tools/read-range.js +23 -8
  98. package/dist/mcp/tools/read-range.js.map +1 -1
  99. package/dist/mcp/tools/safe-read.js +1 -1
  100. package/dist/mcp/tools/safe-read.js.map +1 -1
  101. package/dist/mcp/tools/since.d.ts.map +1 -1
  102. package/dist/mcp/tools/since.js +1 -0
  103. package/dist/mcp/tools/since.js.map +1 -1
  104. package/dist/mcp/tools/structural-review.d.ts.map +1 -1
  105. package/dist/mcp/tools/structural-review.js +16 -13
  106. package/dist/mcp/tools/structural-review.js.map +1 -1
  107. package/dist/mcp/workspace-read-observation-model.d.ts +1 -0
  108. package/dist/mcp/workspace-read-observation-model.d.ts.map +1 -1
  109. package/dist/mcp/workspace-read-observation-model.js +1 -0
  110. package/dist/mcp/workspace-read-observation-model.js.map +1 -1
  111. package/dist/mcp/workspace-read-observation.d.ts.map +1 -1
  112. package/dist/mcp/workspace-read-observation.js +3 -1
  113. package/dist/mcp/workspace-read-observation.js.map +1 -1
  114. package/dist/mcp/workspace-router-model.d.ts +4 -0
  115. package/dist/mcp/workspace-router-model.d.ts.map +1 -1
  116. package/dist/mcp/workspace-router-model.js +7 -0
  117. package/dist/mcp/workspace-router-model.js.map +1 -1
  118. package/dist/mcp/workspace-router.d.ts +8 -1
  119. package/dist/mcp/workspace-router.d.ts.map +1 -1
  120. package/dist/mcp/workspace-router.js +81 -2
  121. package/dist/mcp/workspace-router.js.map +1 -1
  122. package/dist/operations/file-outline.d.ts +13 -4
  123. package/dist/operations/file-outline.d.ts.map +1 -1
  124. package/dist/operations/file-outline.js +12 -7
  125. package/dist/operations/file-outline.js.map +1 -1
  126. package/dist/operations/read-range.d.ts +9 -4
  127. package/dist/operations/read-range.d.ts.map +1 -1
  128. package/dist/operations/read-range.js +12 -7
  129. package/dist/operations/read-range.js.map +1 -1
  130. package/dist/operations/repo-workspace.d.ts +53 -3
  131. package/dist/operations/repo-workspace.d.ts.map +1 -1
  132. package/dist/operations/repo-workspace.js +125 -65
  133. package/dist/operations/repo-workspace.js.map +1 -1
  134. package/dist/operations/safe-read.d.ts +8 -5
  135. package/dist/operations/safe-read.d.ts.map +1 -1
  136. package/dist/operations/safe-read.js +34 -26
  137. package/dist/operations/safe-read.js.map +1 -1
  138. package/dist/operations/structural-review.d.ts +7 -1
  139. package/dist/operations/structural-review.d.ts.map +1 -1
  140. package/dist/operations/structural-review.js +13 -2
  141. package/dist/operations/structural-review.js.map +1 -1
  142. package/dist/operations/workspace-read-view.d.ts +208 -0
  143. package/dist/operations/workspace-read-view.d.ts.map +1 -0
  144. package/dist/operations/workspace-read-view.js +302 -0
  145. package/dist/operations/workspace-read-view.js.map +1 -0
  146. package/dist/ports/filesystem.d.ts +2 -0
  147. package/dist/ports/filesystem.d.ts.map +1 -1
  148. package/dist/ports/structural-reading.d.ts +21 -1
  149. package/dist/ports/structural-reading.d.ts.map +1 -1
  150. package/dist/ports/structural-reading.js.map +1 -1
  151. package/dist/warp/ast-emitter.d.ts +4 -0
  152. package/dist/warp/ast-emitter.d.ts.map +1 -1
  153. package/dist/warp/ast-emitter.js +16 -10
  154. package/dist/warp/ast-emitter.js.map +1 -1
  155. package/dist/warp/ast-import-resolver.d.ts +7 -0
  156. package/dist/warp/ast-import-resolver.d.ts.map +1 -1
  157. package/dist/warp/ast-import-resolver.js +41 -20
  158. package/dist/warp/ast-import-resolver.js.map +1 -1
  159. package/dist/warp/committed-reference-scan.d.ts +38 -0
  160. package/dist/warp/committed-reference-scan.d.ts.map +1 -0
  161. package/dist/warp/committed-reference-scan.js +346 -0
  162. package/dist/warp/committed-reference-scan.js.map +1 -0
  163. package/dist/warp/go-reference-context.d.ts +8 -0
  164. package/dist/warp/go-reference-context.d.ts.map +1 -0
  165. package/dist/warp/go-reference-context.js +209 -0
  166. package/dist/warp/go-reference-context.js.map +1 -0
  167. package/dist/warp/import-diagnostic.d.ts +17 -0
  168. package/dist/warp/import-diagnostic.d.ts.map +1 -0
  169. package/dist/warp/import-diagnostic.js +2 -0
  170. package/dist/warp/import-diagnostic.js.map +1 -0
  171. package/dist/warp/index-head.d.ts.map +1 -1
  172. package/dist/warp/index-head.js +34 -8
  173. package/dist/warp/index-head.js.map +1 -1
  174. package/dist/warp/python-import-resolver.d.ts +10 -0
  175. package/dist/warp/python-import-resolver.d.ts.map +1 -0
  176. package/dist/warp/python-import-resolver.js +100 -0
  177. package/dist/warp/python-import-resolver.js.map +1 -0
  178. package/dist/warp/qualified-reference-bindings.d.ts +11 -0
  179. package/dist/warp/qualified-reference-bindings.d.ts.map +1 -0
  180. package/dist/warp/qualified-reference-bindings.js +483 -0
  181. package/dist/warp/qualified-reference-bindings.js.map +1 -0
  182. package/dist/warp/qualified-reference-contract.d.ts +76 -0
  183. package/dist/warp/qualified-reference-contract.d.ts.map +1 -0
  184. package/dist/warp/qualified-reference-contract.js +2 -0
  185. package/dist/warp/qualified-reference-contract.js.map +1 -0
  186. package/dist/warp/qualified-reference-language-adapters.d.ts +4 -0
  187. package/dist/warp/qualified-reference-language-adapters.d.ts.map +1 -0
  188. package/dist/warp/qualified-reference-language-adapters.js +148 -0
  189. package/dist/warp/qualified-reference-language-adapters.js.map +1 -0
  190. package/dist/warp/qualified-reference-resolver.d.ts +10 -0
  191. package/dist/warp/qualified-reference-resolver.d.ts.map +1 -0
  192. package/dist/warp/qualified-reference-resolver.js +222 -0
  193. package/dist/warp/qualified-reference-resolver.js.map +1 -0
  194. package/dist/warp/qualified-reference-shadows.d.ts +5 -0
  195. package/dist/warp/qualified-reference-shadows.d.ts.map +1 -0
  196. package/dist/warp/qualified-reference-shadows.js +601 -0
  197. package/dist/warp/qualified-reference-shadows.js.map +1 -0
  198. package/dist/warp/structural-reading-adapter.d.ts +2 -1
  199. package/dist/warp/structural-reading-adapter.d.ts.map +1 -1
  200. package/dist/warp/structural-reading-adapter.js +79 -27
  201. package/dist/warp/structural-reading-adapter.js.map +1 -1
  202. package/docs/CLI.md +10 -1
  203. package/docs/MCP.md +9 -1
  204. package/docs/SETUP.md +7 -0
  205. package/package.json +9 -7
  206. package/dist/operations/import-reference-impact.d.ts +0 -13
  207. package/dist/operations/import-reference-impact.d.ts.map +0 -1
  208. package/dist/operations/import-reference-impact.js +0 -101
  209. package/dist/operations/import-reference-impact.js.map +0 -1
@@ -1,12 +1,17 @@
1
1
  const MAX_RANGE_LINES = 250;
2
- export async function readRange(filePath, start, end, opts) {
3
- let raw;
4
- try {
5
- raw = await opts.fs.readFile(filePath, "utf-8");
6
- }
7
- catch {
8
- return { path: filePath, reason: "NOT_FOUND" };
2
+ /**
3
+ * Projects a line range from bytes already observed.
4
+ *
5
+ * Synchronous because it performs no I/O. The caller supplies the observation,
6
+ * so the range returned is necessarily cut from the same bytes the caller
7
+ * authorised.
8
+ */
9
+ export function readRange(file, start, end) {
10
+ const filePath = file.path;
11
+ if (file.utf8 === null) {
12
+ return { path: filePath, reason: "INVALID_UTF8" };
9
13
  }
14
+ const raw = file.utf8;
10
15
  if (start > end) {
11
16
  return { path: filePath, reason: "INVALID_RANGE" };
12
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"read-range.js","sourceRoot":"","sources":["../../src/operations/read-range.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,GAAG,CAAC;AAY5B,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,KAAa,EACb,GAAW,EACX,IAAwB;IAExB,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;IAEnC,IAAI,YAAY,GAAG,GAAG,CAAC;IACvB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,mCAAmC;IACnC,IAAI,YAAY,GAAG,KAAK,GAAG,CAAC,GAAG,eAAe,EAAE,CAAC;QAC/C,YAAY,GAAG,KAAK,GAAG,eAAe,GAAG,CAAC,CAAC;QAC3C,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,cAAc;IACd,IAAI,YAAY,GAAG,UAAU,EAAE,CAAC;QAC9B,YAAY,GAAG,UAAU,CAAC;QAC1B,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,qCAAqC;IACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO;QACP,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,YAAY;QACrB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"read-range.js","sourceRoot":"","sources":["../../src/operations/read-range.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,GAAG,CAAC;AAY5B;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CACvB,IAAkB,EAClB,KAAa,EACb,GAAW;IAEX,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;IAEtB,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;IAEnC,IAAI,YAAY,GAAG,GAAG,CAAC;IACvB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,mCAAmC;IACnC,IAAI,YAAY,GAAG,KAAK,GAAG,CAAC,GAAG,eAAe,EAAE,CAAC;QAC/C,YAAY,GAAG,KAAK,GAAG,eAAe,GAAG,CAAC,CAAC;QAC3C,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,cAAc;IACd,IAAI,YAAY,GAAG,UAAU,EAAE,CAAC;QAC9B,YAAY,GAAG,UAAU,CAAC;QAC1B,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,qCAAqC;IACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO;QACP,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,YAAY;QACrB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC"}
@@ -6,6 +6,7 @@ import { GovernorTracker } from "../session/tracker.js";
6
6
  import { type OutlineDiff } from "../parser/diff.js";
7
7
  import type { JumpEntry, OutlineEntry } from "../parser/types.js";
8
8
  import type { FileSystem } from "../ports/filesystem.js";
9
+ import { type WorkspaceReadView } from "./workspace-read-view.js";
9
10
  import type { JsonCodec } from "../ports/codec.js";
10
11
  import type { ProseProjectionProvider } from "./colorful-prose-projection.js";
11
12
  export interface RepoWorkspaceRefusedResult {
@@ -66,9 +67,8 @@ export type RepoWorkspaceChangedSinceResult = {
66
67
  readonly diff: OutlineDiff;
67
68
  readonly consumed: boolean;
68
69
  };
69
- export interface RepoWorkspaceOptions {
70
+ interface RepoWorkspaceCommonOptions {
70
71
  readonly projectRoot: string;
71
- readonly fs: FileSystem;
72
72
  readonly codec: JsonCodec;
73
73
  readonly graftignorePatterns?: readonly string[] | undefined;
74
74
  readonly resolvePath?: ((input: string) => string) | undefined;
@@ -77,17 +77,56 @@ export interface RepoWorkspaceOptions {
77
77
  readonly cache?: ObservationCache | undefined;
78
78
  readonly proseProjector?: ProseProjectionProvider | undefined;
79
79
  }
80
+ export type RepoWorkspaceOptions = RepoWorkspaceCommonOptions & ({
81
+ /**
82
+ * The single read authority for this workspace.
83
+ *
84
+ * There is deliberately no filesystem parameter beside it. Two doors
85
+ * would leave correctness resting on every code path remembering which
86
+ * one is lawful; a workspace built over a settled observation must not
87
+ * be able to reach the live disk at all. Callers that still want live
88
+ * reads pass a `LiveWorkspaceReadSource` and are visible by name.
89
+ */
90
+ readonly readView: WorkspaceReadView;
91
+ readonly fs?: never;
92
+ } | {
93
+ /**
94
+ * Compatibility input for the semver-public constructor.
95
+ *
96
+ * Normalized immediately to one live read authority used by every
97
+ * analysis method. The same filesystem remains externally visible
98
+ * through the legacy `fs` member but is never consulted internally.
99
+ */
100
+ readonly fs: FileSystem;
101
+ readonly readView?: never;
102
+ });
103
+ /** An admitted read view whose evidence belongs to a different workspace. */
104
+ export declare class WorkspaceRootMismatchError extends Error {
105
+ readonly projectRoot: string;
106
+ readonly evidenceWorkspaceRoot: string;
107
+ readonly code: "WORKSPACE_ROOT_MISMATCH";
108
+ constructor(projectRoot: string, evidenceWorkspaceRoot: string);
109
+ }
80
110
  export declare class RepoWorkspace {
81
111
  private readonly resolveWorkspacePath;
82
112
  private readonly policyPathForWorkspaceFile;
113
+ private readonly compatibilityFs;
83
114
  readonly projectRoot: string;
84
- readonly fs: FileSystem;
115
+ readonly readView: WorkspaceReadView;
85
116
  readonly codec: JsonCodec;
86
117
  readonly graftignorePatterns: readonly string[];
87
118
  readonly governor: GovernorTracker;
88
119
  readonly cache: ObservationCache;
89
120
  readonly proseProjector: ProseProjectionProvider | undefined;
90
121
  constructor(options: RepoWorkspaceOptions);
122
+ /**
123
+ * The filesystem supplied through the semver-public compatibility constructor.
124
+ *
125
+ * Analysis methods never use this member; they retain only `readView` as
126
+ * their read authority. Snapshot-backed workspaces have no live filesystem
127
+ * to expose and fail loudly if new code attempts to cross that boundary.
128
+ */
129
+ get fs(): FileSystem;
91
130
  static loadGraftignorePatterns(fs: Pick<FileSystem, "readFile">, projectRoot: string): Promise<string[]>;
92
131
  setBudget(bytes: number): void;
93
132
  getBudget(): {
@@ -97,6 +136,16 @@ export declare class RepoWorkspace {
97
136
  fraction: number;
98
137
  } | null;
99
138
  private evaluateRefusal;
139
+ private invalidUtf8Refusal;
140
+ /**
141
+ * Observes a path exactly once, or reports that it could not be observed.
142
+ *
143
+ * A path the observation never admitted is a refusal, not an absence, and it
144
+ * propagates. Folding it into not-found would report an authority escalation
145
+ * as a cache miss, and would tell a caller a file does not exist when what
146
+ * is true is that they may not read it.
147
+ */
148
+ private observe;
100
149
  private outlineForSnapshot;
101
150
  safeRead(args: {
102
151
  readonly path: string;
@@ -115,4 +164,5 @@ export declare class RepoWorkspace {
115
164
  readonly consume?: boolean | undefined;
116
165
  }): Promise<RepoWorkspaceChangedSinceResult>;
117
166
  }
167
+ export {};
118
168
  //# sourceMappingURL=repo-workspace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repo-workspace.d.ts","sourceRoot":"","sources":["../../src/operations/repo-workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repo-workspace.d.ts","sourceRoot":"","sources":["../../src/operations/repo-workspace.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ import { detectOutlineFormat } from "../parser/lang.js";
9
9
  import { evaluatePolicy } from "../policy/evaluate.js";
10
10
  import { RefusedResult } from "../policy/types.js";
11
11
  import { loadGraftignore } from "../policy/graftignore.js";
12
+ import { LiveWorkspaceReadSource, observedActual, observeFile, } from "./workspace-read-view.js";
12
13
  async function loadWorkspaceGraftignore(fs, projectRoot) {
13
14
  try {
14
15
  return loadGraftignore(await fs.readFile(`${projectRoot}/.graftignore`, "utf-8"));
@@ -17,19 +18,48 @@ async function loadWorkspaceGraftignore(fs, projectRoot) {
17
18
  return [];
18
19
  }
19
20
  }
21
+ function isFileNotFoundError(error) {
22
+ return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
23
+ }
24
+ function isAdmittedWorkspaceReadView(view) {
25
+ return "evidence" in view && "admittedPaths" in view;
26
+ }
27
+ /** An admitted read view whose evidence belongs to a different workspace. */
28
+ export class WorkspaceRootMismatchError extends Error {
29
+ projectRoot;
30
+ evidenceWorkspaceRoot;
31
+ code = "WORKSPACE_ROOT_MISMATCH";
32
+ constructor(projectRoot, evidenceWorkspaceRoot) {
33
+ super(`workspace root ${projectRoot} does not match admitted evidence root ${evidenceWorkspaceRoot}`);
34
+ this.projectRoot = projectRoot;
35
+ this.evidenceWorkspaceRoot = evidenceWorkspaceRoot;
36
+ this.name = "WorkspaceRootMismatchError";
37
+ }
38
+ }
20
39
  export class RepoWorkspace {
21
40
  resolveWorkspacePath;
22
41
  policyPathForWorkspaceFile;
42
+ compatibilityFs;
23
43
  projectRoot;
24
- fs;
44
+ readView;
25
45
  codec;
26
46
  graftignorePatterns;
27
47
  governor;
28
48
  cache;
29
49
  proseProjector;
30
50
  constructor(options) {
51
+ const readView = options.readView ?? new LiveWorkspaceReadSource(options.fs, options.projectRoot);
52
+ if (isAdmittedWorkspaceReadView(readView) &&
53
+ readView.evidence.workspaceRoot !== options.projectRoot) {
54
+ throw new WorkspaceRootMismatchError(options.projectRoot, readView.evidence.workspaceRoot);
55
+ }
31
56
  this.projectRoot = options.projectRoot;
32
- this.fs = options.fs;
57
+ this.compatibilityFs = options.fs;
58
+ this.readView = readView;
59
+ Object.defineProperty(this, "readView", {
60
+ writable: false,
61
+ configurable: false,
62
+ });
33
63
  this.codec = options.codec;
34
64
  this.graftignorePatterns = options.graftignorePatterns ?? [];
35
65
  this.governor = options.governor ?? new GovernorTracker();
@@ -38,6 +68,19 @@ export class RepoWorkspace {
38
68
  this.resolveWorkspacePath = options.resolvePath ?? ((input) => input);
39
69
  this.policyPathForWorkspaceFile = options.toPolicyPath ?? ((resolvedPath) => resolvedPath);
40
70
  }
71
+ /**
72
+ * The filesystem supplied through the semver-public compatibility constructor.
73
+ *
74
+ * Analysis methods never use this member; they retain only `readView` as
75
+ * their read authority. Snapshot-backed workspaces have no live filesystem
76
+ * to expose and fail loudly if new code attempts to cross that boundary.
77
+ */
78
+ get fs() {
79
+ if (this.compatibilityFs === undefined) {
80
+ throw new Error("RepoWorkspace.fs is unavailable for a readView-backed workspace");
81
+ }
82
+ return this.compatibilityFs;
83
+ }
41
84
  static async loadGraftignorePatterns(fs, projectRoot) {
42
85
  return loadWorkspaceGraftignore(fs, projectRoot);
43
86
  }
@@ -69,6 +112,35 @@ export class RepoWorkspace {
69
112
  actual,
70
113
  };
71
114
  }
115
+ invalidUtf8Refusal(filePath, actual) {
116
+ return {
117
+ path: filePath,
118
+ projection: "refused",
119
+ reason: "INVALID_UTF8",
120
+ reasonDetail: "This file is not valid UTF-8, so it has no faithful text projection.",
121
+ next: ["Read it as bytes if you need its contents."],
122
+ actual,
123
+ };
124
+ }
125
+ /**
126
+ * Observes a path exactly once, or reports that it could not be observed.
127
+ *
128
+ * A path the observation never admitted is a refusal, not an absence, and it
129
+ * propagates. Folding it into not-found would report an authority escalation
130
+ * as a cache miss, and would tell a caller a file does not exist when what
131
+ * is true is that they may not read it.
132
+ */
133
+ async observe(filePath) {
134
+ try {
135
+ return await observeFile(this.readView, filePath);
136
+ }
137
+ catch (error) {
138
+ if (isFileNotFoundError(error)) {
139
+ return null;
140
+ }
141
+ throw error;
142
+ }
143
+ }
72
144
  async outlineForSnapshot(snapshot) {
73
145
  return extractOutlineProjectionForContent(snapshot.path, snapshot.rawContent, {
74
146
  proseProjector: this.proseProjector,
@@ -76,13 +148,14 @@ export class RepoWorkspace {
76
148
  }
77
149
  async safeRead(args) {
78
150
  const filePath = this.resolveWorkspacePath(args.path);
79
- let snapshot = null;
80
- try {
81
- snapshot = new CachedFile(filePath, await this.fs.readFile(filePath, "utf-8"));
82
- }
83
- catch {
84
- // Let safeRead produce the not-found error shape.
151
+ const observed = await this.observe(filePath);
152
+ if (observed === null) {
153
+ return { path: filePath, projection: "error", reason: "NOT_FOUND" };
85
154
  }
155
+ // No cache entry for bytes with no faithful text projection. Hashing and
156
+ // comparing a lenient decode would key the cache by content the
157
+ // observation never settled.
158
+ const snapshot = observed.utf8 === null ? null : new CachedFile(filePath, observed.utf8);
86
159
  if (snapshot !== null) {
87
160
  const cacheResult = this.cache.check(filePath, snapshot.rawContent);
88
161
  if (cacheResult.hit) {
@@ -110,11 +183,8 @@ export class RepoWorkspace {
110
183
  }
111
184
  const freshOutline = await this.outlineForSnapshot(snapshot);
112
185
  if (freshOutline === null) {
113
- return await safeRead(filePath, {
114
- fs: this.fs,
186
+ return await safeRead(observed, {
115
187
  codec: this.codec,
116
- content: snapshot.rawContent,
117
- intent: args.intent,
118
188
  policyPath: this.policyPathForWorkspaceFile(filePath),
119
189
  graftignorePatterns: [...this.graftignorePatterns],
120
190
  sessionDepth: this.governor.getGovernorDepth(),
@@ -137,11 +207,8 @@ export class RepoWorkspace {
137
207
  };
138
208
  }
139
209
  }
140
- const result = await safeRead(filePath, {
141
- fs: this.fs,
210
+ const result = await safeRead(observed, {
142
211
  codec: this.codec,
143
- content: snapshot?.rawContent,
144
- intent: args.intent,
145
212
  policyPath: this.policyPathForWorkspaceFile(filePath),
146
213
  graftignorePatterns: [...this.graftignorePatterns],
147
214
  sessionDepth: this.governor.getGovernorDepth(),
@@ -171,80 +238,73 @@ export class RepoWorkspace {
171
238
  }
172
239
  async fileOutline(args) {
173
240
  const filePath = this.resolveWorkspacePath(args.path);
174
- let rawContent = null;
175
- try {
176
- rawContent = await this.fs.readFile(filePath, "utf-8");
241
+ const observed = await this.observe(filePath);
242
+ if (observed === null) {
243
+ return { path: filePath, outline: [], jumpTable: [], reason: "NOT_FOUND", error: "File not found" };
244
+ }
245
+ const rawContent = observed.utf8;
246
+ // Refusal is evaluated for every observation. Gating it on a successful
247
+ // decode let a banned or binary path skip policy and reach the projection.
248
+ const refusal = this.evaluateRefusal(filePath, observedActual(observed));
249
+ if (refusal !== null) {
250
+ return refusal;
177
251
  }
178
- catch {
179
- // Let fileOutline shape the not-found result.
252
+ if (rawContent === null) {
253
+ return this.invalidUtf8Refusal(filePath, observedActual(observed));
180
254
  }
181
- if (rawContent !== null) {
182
- const actual = {
183
- lines: rawContent.split("\n").length,
184
- bytes: Buffer.byteLength(rawContent),
255
+ const cacheResult = this.cache.check(filePath, rawContent);
256
+ if (cacheResult.hit) {
257
+ cacheResult.obs.touch(this.cache.now());
258
+ return {
259
+ path: filePath,
260
+ outline: [...cacheResult.obs.outline],
261
+ jumpTable: [...cacheResult.obs.jumpTable],
262
+ cacheHit: true,
263
+ actual: { ...cacheResult.obs.actual },
185
264
  };
186
- const refusal = this.evaluateRefusal(filePath, actual);
187
- if (refusal !== null) {
188
- return refusal;
189
- }
190
- const cacheResult = this.cache.check(filePath, rawContent);
191
- if (cacheResult.hit) {
192
- cacheResult.obs.touch(this.cache.now());
193
- return {
194
- path: filePath,
195
- outline: [...cacheResult.obs.outline],
196
- jumpTable: [...cacheResult.obs.jumpTable],
197
- cacheHit: true,
198
- };
199
- }
200
265
  }
201
- const result = await fileOutline(filePath, {
202
- fs: this.fs,
266
+ const result = await fileOutline(observed, {
203
267
  proseProjector: this.proseProjector,
204
268
  });
205
- if (rawContent !== null && result.reason !== "UNSUPPORTED_LANGUAGE") {
269
+ if (result.reason !== "UNSUPPORTED_LANGUAGE") {
206
270
  this.cache.record(filePath, hashContent(rawContent), result.outline, result.jumpTable, { lines: rawContent.split("\n").length, bytes: Buffer.byteLength(rawContent) });
207
271
  }
208
272
  return result;
209
273
  }
210
274
  async readRange(args) {
211
275
  const filePath = this.resolveWorkspacePath(args.path);
212
- let rawContent = null;
213
- try {
214
- rawContent = await this.fs.readFile(filePath, "utf-8");
276
+ const observed = await this.observe(filePath);
277
+ if (observed === null) {
278
+ return { path: filePath, reason: "NOT_FOUND" };
215
279
  }
216
- catch {
217
- // Let readRange shape the not-found result.
280
+ // Refusal is evaluated for every observation, decodable or not.
281
+ const refusal = this.evaluateRefusal(filePath, observedActual(observed));
282
+ if (refusal !== null) {
283
+ return refusal;
218
284
  }
219
- if (rawContent !== null) {
220
- const refusal = this.evaluateRefusal(filePath, {
221
- lines: rawContent.split("\n").length,
222
- bytes: Buffer.byteLength(rawContent),
223
- });
224
- if (refusal !== null) {
225
- return refusal;
226
- }
285
+ if (observed.utf8 === null) {
286
+ return this.invalidUtf8Refusal(filePath, observedActual(observed));
227
287
  }
228
- return readRange(filePath, args.start, args.end, { fs: this.fs });
288
+ return readRange(observed, args.start, args.end);
229
289
  }
230
290
  async changedSince(args) {
231
291
  const filePath = this.resolveWorkspacePath(args.path);
232
292
  const consume = args.consume === true;
233
- let rawContent;
234
- try {
235
- rawContent = await this.fs.readFile(filePath, "utf-8");
236
- }
237
- catch {
293
+ const observed = await this.observe(filePath);
294
+ if (observed === null) {
238
295
  return { status: "file_not_found" };
239
296
  }
240
- const actual = {
241
- lines: rawContent.split("\n").length,
242
- bytes: Buffer.byteLength(rawContent),
243
- };
297
+ const actual = observedActual(observed);
244
298
  const refusal = this.evaluateRefusal(filePath, actual);
245
299
  if (refusal !== null) {
246
300
  return { status: "refused", reason: refusal.reason };
247
301
  }
302
+ if (observed.utf8 === null) {
303
+ // Not an absence and not an unchanged file: there is no faithful text
304
+ // projection to compare outlines across.
305
+ return { status: "refused", reason: "INVALID_UTF8" };
306
+ }
307
+ const rawContent = observed.utf8;
248
308
  const cacheResult = this.cache.check(filePath, rawContent);
249
309
  if (cacheResult.hit) {
250
310
  return { status: "unchanged" };
@@ -1 +1 @@
1
- {"version":3,"file":"repo-workspace.js","sourceRoot":"","sources":["../../src/operations/repo-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAuB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EACL,kCAAkC,EAClC,WAAW,GAGZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAwB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAmE3D,KAAK,UAAU,wBAAwB,CACrC,EAAgC,EAChC,WAAmB;IAEnB,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,WAAW,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,OAAO,aAAa;IACP,oBAAoB,CAA4B;IAChD,0BAA0B,CAAmC;IACrE,WAAW,CAAS;IACpB,EAAE,CAAa;IACf,KAAK,CAAY;IACjB,mBAAmB,CAAoB;IACvC,QAAQ,CAAkB;IAC1B,KAAK,CAAmB;IACxB,cAAc,CAAsC;IAE7D,YAAY,OAA6B;QACvC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC;QAC7D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,eAAe,EAAE,CAAC;QAC1D,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,CAAC,0BAA0B,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAClC,EAAgC,EAChC,WAAmB;QAEnB,OAAO,wBAAwB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC;IAEO,eAAe,CACrB,QAAgB,EAChB,MAA0D;QAE1D,MAAM,MAAM,GAAG,cAAc,CAC3B;YACE,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC;YAC/C,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,EACD;YACE,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS;YACpG,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;YAC9C,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,SAAS;SACtD,CACF,CAAC;QACF,IAAI,CAAC,CAAC,MAAM,YAAY,aAAa,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,SAAS;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;YACtB,MAAM;SACP,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,QAAoB;QACnD,OAAO,kCAAkC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE;YAC5E,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAqE;QAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,QAAQ,GAAsB,IAAI,CAAC;QACvC,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;QACpD,CAAC;QAED,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YACpE,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAChE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxC,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,WAAW;oBACvB,MAAM,EAAE,kBAAkB;oBAC1B,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO;oBAChC,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,SAAS;oBACpC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM;oBAC9B,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,SAAS;oBACpC,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK;oBAC5C,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,UAAU;iBACvC,CAAC;YACJ,CAAC;YAED,IAAI,WAAW,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAChE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAC7D,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE;wBAC9B,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,OAAO,EAAE,QAAQ,CAAC,UAAU;wBAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,UAAU,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC;wBACrD,mBAAmB,EAAE,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;wBAClD,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;wBAC9C,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,SAAS;wBACrD,cAAc,EAAE,IAAI,CAAC,cAAc;qBACpC,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,MAAM,CACf,QAAQ,EACR,QAAQ,CAAC,IAAI,EACb,YAAY,CAAC,OAAO,EACpB,YAAY,CAAC,SAAS,EACtB,QAAQ,CAAC,MAAM,CAChB,CAAC;gBACF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACzC,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,MAAM;oBAClB,MAAM,EAAE,yBAAyB;oBACjC,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC;oBACnE,OAAO,EAAE,YAAY,CAAC,OAAO;oBAC7B,SAAS,EAAE,YAAY,CAAC,SAAS;oBACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC;oBAC1C,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;iBACpD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE;YACtC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,QAAQ,EAAE,UAAU;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC;YACrD,mBAAmB,EAAE,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;YAClD,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;YAC9C,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,SAAS;YACrD,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;QAEH,IACE,QAAQ,KAAK,IAAI;YACjB,MAAM,CAAC,MAAM,KAAK,SAAS;YAC3B,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC;YACpE,MAAM,CAAC,MAAM,KAAK,sBAAsB,EACxC,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS;oBAC1C,CAAC,CAAC;wBACA,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;qBAClC;oBACD,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAC5C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBAChG,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,4EAA4E;YAC9E,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAA+B;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;QAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG;gBACb,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;gBACpC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;aACrC,CAAC;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC3D,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;gBACpB,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxC,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;oBACrC,SAAS,EAAE,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;oBACzC,QAAQ,EAAE,IAAI;iBACf,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE;YACzC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;QACH,IAAI,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,sBAAsB,EAAE,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,MAAM,CACf,QAAQ,EACR,WAAW,CAAC,UAAU,CAAC,EACvB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,SAAS,EAChB,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAC/E,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAA6E;QAC3F,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;QACD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;gBAC7C,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;gBACpC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;aACrC,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAuE;QACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;QAEtC,IAAI,UAAkB,CAAC;QACvB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACtC,CAAC;QAED,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;YACpC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;SACrC,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACvD,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3D,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;YACpB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,WAAW,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC/B,IAAI,mBAAmB,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3C,MAAM,OAAO,GAAG,MAAM,kCAAkC,CAAC,QAAQ,EAAE,UAAU,EAAE;oBAC7E,cAAc,EAAE,IAAI,CAAC,cAAc;iBACpC,CAAC,CAAC;gBACH,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,OAAO;wBACL,MAAM,EAAE,aAAa;wBACrB,MAAM,EAAE,sBAAsB;qBAC/B,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;QAC/C,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAM,kCAAkC,CAAC,QAAQ,EAAE,UAAU,EAAE;YACtF,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;QACH,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO;gBACL,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,sBAAsB;aAC/B,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE/E,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CACf,QAAQ,EACR,WAAW,CAAC,UAAU,CAAC,EACvB,gBAAgB,CAAC,OAAO,EACxB,gBAAgB,CAAC,SAAS,EAC1B,MAAM,CACP,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACrC,CAAC;CACF"}
1
+ {"version":3,"file":"repo-workspace.js","sourceRoot":"","sources":["../../src/operations/repo-workspace.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { GovernorDepth } from "../policy/types.js";
2
2
  import type { OutlineEntry, JumpEntry } from "../parser/types.js";
3
- import type { FileSystem } from "../ports/filesystem.js";
3
+ import { type ObservedFile } from "./workspace-read-view.js";
4
4
  import type { JsonCodec } from "../ports/codec.js";
5
5
  import type { ProseProjectionProvider } from "./colorful-prose-projection.js";
6
6
  export interface SafeReadResult {
@@ -23,15 +23,18 @@ export interface SafeReadResult {
23
23
  sessionDepth?: GovernorDepth | undefined;
24
24
  }
25
25
  export interface SafeReadOptions {
26
- fs: FileSystem;
27
26
  codec: JsonCodec;
28
- content?: string | undefined;
29
- intent?: string | undefined;
30
27
  policyPath?: string | undefined;
31
28
  graftignorePatterns?: string[] | undefined;
32
29
  sessionDepth?: GovernorDepth | undefined;
33
30
  budgetRemaining?: number | undefined;
34
31
  proseProjector?: ProseProjectionProvider | undefined;
35
32
  }
36
- export declare function safeRead(filePath: string, options: SafeReadOptions): Promise<SafeReadResult>;
33
+ /**
34
+ * Applies read policy to bytes already observed.
35
+ *
36
+ * Takes the observation rather than a filesystem: the content this returns is
37
+ * necessarily the content the policy decision was made about.
38
+ */
39
+ export declare function safeRead(file: ObservedFile, options: SafeReadOptions): Promise<SafeReadResult>;
37
40
  //# sourceMappingURL=safe-read.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe-read.d.ts","sourceRoot":"","sources":["../../src/operations/safe-read.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAmB,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE/F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IACrC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACpC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACtD,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC1D,YAAY,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,cAAc,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;CACtD;AAED,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAsGzB"}
1
+ {"version":3,"file":"safe-read.d.ts","sourceRoot":"","sources":["../../src/operations/safe-read.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAmB,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE/F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IACrC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACpC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACtD,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC1D,YAAY,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,cAAc,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;CACtD;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAwGzB"}
@@ -1,29 +1,16 @@
1
1
  import { evaluatePolicy } from "../policy/evaluate.js";
2
2
  import { ContentResult, RefusedResult } from "../policy/types.js";
3
3
  import { extractOutlineForFileAsync } from "../parser/outline.js";
4
- export async function safeRead(filePath, options) {
5
- let content;
6
- let bytes;
7
- if (options.content !== undefined) {
8
- content = options.content;
9
- bytes = Buffer.byteLength(content, "utf-8");
10
- }
11
- else {
12
- let raw;
13
- try {
14
- raw = await options.fs.readFile(filePath);
15
- }
16
- catch {
17
- return {
18
- path: filePath,
19
- projection: "error",
20
- reason: "NOT_FOUND",
21
- };
22
- }
23
- content = raw.toString("utf-8");
24
- bytes = raw.byteLength;
25
- }
26
- const lines = content.split("\n").length;
4
+ import { observedActual } from "./workspace-read-view.js";
5
+ /**
6
+ * Applies read policy to bytes already observed.
7
+ *
8
+ * Takes the observation rather than a filesystem: the content this returns is
9
+ * necessarily the content the policy decision was made about.
10
+ */
11
+ export async function safeRead(file, options) {
12
+ const filePath = file.path;
13
+ const { lines, bytes } = observedActual(file);
27
14
  const policy = evaluatePolicy({ path: options.policyPath ?? filePath, lines, bytes }, {
28
15
  graftignorePatterns: options.graftignorePatterns,
29
16
  sessionDepth: options.sessionDepth,
@@ -37,15 +24,36 @@ export async function safeRead(filePath, options) {
37
24
  thresholds: policy.thresholds,
38
25
  ...(policy.sessionDepth !== undefined ? { sessionDepth: policy.sessionDepth } : {}),
39
26
  };
40
- if (policy instanceof ContentResult) {
41
- return { ...base, content };
42
- }
43
27
  if (policy instanceof RefusedResult) {
44
28
  return {
45
29
  ...base,
46
30
  next: [...policy.next],
47
31
  };
48
32
  }
33
+ // Below here the projection returns text, so the bytes have to have one.
34
+ // Refused rather than decoded leniently: the previous path read raw bytes
35
+ // and called Buffer.toString("utf-8"), which substitutes U+FFFD for invalid
36
+ // sequences, returning content the observation never settled under the
37
+ // identity of content it did.
38
+ //
39
+ // After the policy decision, not before it. A banned or binary path is
40
+ // refused for being banned or binary whatever its encoding, and reporting
41
+ // that as an encoding problem would lose the reason the caller needs.
42
+ if (file.utf8 === null) {
43
+ return {
44
+ ...base,
45
+ projection: "refused",
46
+ reason: "INVALID_UTF8",
47
+ next: [
48
+ "This file is not valid UTF-8, so it has no faithful text projection.",
49
+ "Read it as bytes if you need its contents.",
50
+ ],
51
+ };
52
+ }
53
+ const content = file.utf8;
54
+ if (policy instanceof ContentResult) {
55
+ return { ...base, content };
56
+ }
49
57
  // projection === "outline"
50
58
  const outlineResult = await extractOutlineForFileAsync(filePath, content);
51
59
  if (outlineResult === null) {
@@ -1 +1 @@
1
- {"version":3,"file":"safe-read.js","sourceRoot":"","sources":["../../src/operations/safe-read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"safe-read.js","sourceRoot":"","sources":["../../src/operations/safe-read.ts"],"names":[],"mappings":"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"}