sensemaking 0.16.0 → 0.17.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 (312) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/chunk/extract.d.cts +2 -0
  3. package/dist/cjs/chunk/extract.d.ts +2 -0
  4. package/dist/cjs/chunk/extract.js +139 -0
  5. package/dist/cjs/chunk/extract.js.map +1 -0
  6. package/dist/cjs/chunk/group.d.cts +4 -0
  7. package/dist/cjs/chunk/group.d.ts +4 -0
  8. package/dist/cjs/chunk/group.js +489 -0
  9. package/dist/cjs/chunk/group.js.map +1 -0
  10. package/dist/cjs/chunk/index.d.cts +8 -0
  11. package/dist/cjs/chunk/index.d.ts +8 -0
  12. package/dist/cjs/chunk/index.js +44 -0
  13. package/dist/cjs/chunk/index.js.map +1 -0
  14. package/dist/cjs/chunk/parse.d.cts +2 -0
  15. package/dist/cjs/chunk/parse.d.ts +2 -0
  16. package/dist/cjs/chunk/parse.js +71 -0
  17. package/dist/cjs/chunk/parse.js.map +1 -0
  18. package/dist/cjs/chunk/types.d.cts +19 -0
  19. package/dist/cjs/chunk/types.d.ts +19 -0
  20. package/dist/cjs/chunk/types.js +5 -0
  21. package/dist/cjs/chunk/types.js.map +1 -0
  22. package/dist/cjs/chunk/version.d.cts +1 -0
  23. package/dist/cjs/chunk/version.d.ts +1 -0
  24. package/dist/cjs/chunk/version.js +14 -0
  25. package/dist/cjs/chunk/version.js.map +1 -0
  26. package/dist/cjs/cli/map.js +1 -1
  27. package/dist/cjs/cli/map.js.map +1 -1
  28. package/dist/cjs/cli/named.js +1 -1
  29. package/dist/cjs/cli/named.js.map +1 -1
  30. package/dist/cjs/cli/path.js +2 -2
  31. package/dist/cjs/cli/path.js.map +1 -1
  32. package/dist/cjs/cli/peek.js +1 -1
  33. package/dist/cjs/cli/peek.js.map +1 -1
  34. package/dist/cjs/cli/related.js +1 -1
  35. package/dist/cjs/cli/related.js.map +1 -1
  36. package/dist/cjs/cli/search.js +1 -1
  37. package/dist/cjs/cli/search.js.map +1 -1
  38. package/dist/cjs/cli/shared.d.cts +1 -1
  39. package/dist/cjs/cli/shared.d.ts +1 -1
  40. package/dist/cjs/cli/shared.js +3 -3
  41. package/dist/cjs/cli/shared.js.map +1 -1
  42. package/dist/cjs/cli/status.js +1 -1
  43. package/dist/cjs/cli/status.js.map +1 -1
  44. package/dist/cjs/commands/map.d.cts +1 -1
  45. package/dist/cjs/commands/map.d.ts +1 -1
  46. package/dist/cjs/commands/map.js.map +1 -1
  47. package/dist/cjs/commands/peek.d.cts +1 -1
  48. package/dist/cjs/commands/peek.d.ts +1 -1
  49. package/dist/cjs/commands/peek.js +13 -6
  50. package/dist/cjs/commands/peek.js.map +1 -1
  51. package/dist/cjs/commands/scope.js +1 -1
  52. package/dist/cjs/commands/scope.js.map +1 -1
  53. package/dist/cjs/commands/search.d.cts +1 -1
  54. package/dist/cjs/commands/search.d.ts +1 -1
  55. package/dist/cjs/commands/search.js +3 -3
  56. package/dist/cjs/commands/search.js.map +1 -1
  57. package/dist/cjs/commands/signals.js +1 -1
  58. package/dist/cjs/commands/signals.js.map +1 -1
  59. package/dist/cjs/config/access.d.cts +3 -1
  60. package/dist/cjs/config/access.d.ts +3 -1
  61. package/dist/cjs/config/access.js +11 -11
  62. package/dist/cjs/config/access.js.map +1 -1
  63. package/dist/cjs/config/index.d.cts +1 -0
  64. package/dist/cjs/config/index.d.ts +1 -0
  65. package/dist/cjs/config/index.js +4 -0
  66. package/dist/cjs/config/index.js.map +1 -1
  67. package/dist/cjs/config/types.d.cts +1 -0
  68. package/dist/cjs/config/types.d.ts +1 -0
  69. package/dist/cjs/config/types.js.map +1 -1
  70. package/dist/cjs/config/validate.d.cts +1 -0
  71. package/dist/cjs/config/validate.d.ts +1 -0
  72. package/dist/cjs/config/validate.js +8 -1
  73. package/dist/cjs/config/validate.js.map +1 -1
  74. package/dist/cjs/db/open.d.cts +1 -1
  75. package/dist/cjs/db/open.d.ts +1 -1
  76. package/dist/cjs/db/open.js +4 -4
  77. package/dist/cjs/db/open.js.map +1 -1
  78. package/dist/cjs/db/reconcile.js +8 -8
  79. package/dist/cjs/db/reconcile.js.map +1 -1
  80. package/dist/cjs/{sql-functions.js → db/sql-functions.js} +1 -1
  81. package/dist/cjs/db/sql-functions.js.map +1 -0
  82. package/dist/cjs/embed/langfit.js +45 -85
  83. package/dist/cjs/embed/langfit.js.map +1 -1
  84. package/dist/cjs/embed/languages.js.map +1 -1
  85. package/dist/cjs/embed/query.js +6 -6
  86. package/dist/cjs/embed/query.js.map +1 -1
  87. package/dist/cjs/embed/static.js +3 -40
  88. package/dist/cjs/embed/static.js.map +1 -1
  89. package/dist/cjs/features/embed.d.cts +2 -5
  90. package/dist/cjs/features/embed.d.ts +2 -5
  91. package/dist/cjs/features/embed.js +36 -58
  92. package/dist/cjs/features/embed.js.map +1 -1
  93. package/dist/cjs/{fences.js → features/fences.js} +1 -1
  94. package/dist/cjs/features/fences.js.map +1 -0
  95. package/dist/cjs/features/links.js +1 -1
  96. package/dist/cjs/features/links.js.map +1 -1
  97. package/dist/cjs/features/rank.js +1 -1
  98. package/dist/cjs/features/rank.js.map +1 -1
  99. package/dist/cjs/features/sections.js +4 -3
  100. package/dist/cjs/features/sections.js.map +1 -1
  101. package/dist/cjs/features/tags.js +1 -1
  102. package/dist/cjs/features/tags.js.map +1 -1
  103. package/dist/cjs/features/types.d.cts +4 -2
  104. package/dist/cjs/features/types.d.ts +4 -2
  105. package/dist/cjs/graph/graph.js.map +1 -0
  106. package/dist/cjs/graph/traverse.js.map +1 -0
  107. package/dist/cjs/index.d.cts +4 -4
  108. package/dist/cjs/index.d.ts +4 -4
  109. package/dist/cjs/index.js +4 -1
  110. package/dist/cjs/index.js.map +1 -1
  111. package/dist/cjs/output/column-hint.js.map +1 -0
  112. package/dist/cjs/output/output.js.map +1 -0
  113. package/dist/cjs/output/progress.js.map +1 -0
  114. package/dist/cjs/{search-error.js → output/search-error.js} +1 -1
  115. package/dist/cjs/output/search-error.js.map +1 -0
  116. package/dist/cjs/scan/frontmatter.d.cts +13 -0
  117. package/dist/cjs/scan/frontmatter.d.ts +13 -0
  118. package/dist/cjs/scan/frontmatter.js +229 -0
  119. package/dist/cjs/scan/frontmatter.js.map +1 -0
  120. package/dist/cjs/scan/index.d.cts +25 -0
  121. package/dist/cjs/scan/index.d.ts +25 -0
  122. package/dist/cjs/scan/index.js +107 -0
  123. package/dist/cjs/scan/index.js.map +1 -0
  124. package/dist/cjs/scan/list.d.cts +12 -0
  125. package/dist/cjs/scan/list.d.ts +12 -0
  126. package/dist/cjs/scan/list.js +154 -0
  127. package/dist/cjs/scan/list.js.map +1 -0
  128. package/dist/cjs/text/segment.d.cts +3 -0
  129. package/dist/cjs/text/segment.d.ts +3 -0
  130. package/dist/cjs/{segment.js → text/segment.js} +17 -14
  131. package/dist/cjs/text/segment.js.map +1 -0
  132. package/dist/cjs/text/strip.d.cts +3 -0
  133. package/dist/cjs/text/strip.d.ts +3 -0
  134. package/dist/cjs/text/strip.js +32 -0
  135. package/dist/cjs/text/strip.js.map +1 -0
  136. package/dist/esm/chunk/extract.d.ts +2 -0
  137. package/dist/esm/chunk/extract.js +114 -0
  138. package/dist/esm/chunk/extract.js.map +1 -0
  139. package/dist/esm/chunk/group.d.ts +4 -0
  140. package/dist/esm/chunk/group.js +253 -0
  141. package/dist/esm/chunk/group.js.map +1 -0
  142. package/dist/esm/chunk/index.d.ts +8 -0
  143. package/dist/esm/chunk/index.js +16 -0
  144. package/dist/esm/chunk/index.js.map +1 -0
  145. package/dist/esm/chunk/parse.d.ts +2 -0
  146. package/dist/esm/chunk/parse.js +63 -0
  147. package/dist/esm/chunk/parse.js.map +1 -0
  148. package/dist/esm/chunk/types.d.ts +19 -0
  149. package/dist/esm/chunk/types.js +2 -0
  150. package/dist/esm/chunk/types.js.map +1 -0
  151. package/dist/esm/chunk/version.d.ts +1 -0
  152. package/dist/esm/chunk/version.js +3 -0
  153. package/dist/esm/chunk/version.js.map +1 -0
  154. package/dist/esm/cli/map.js +1 -1
  155. package/dist/esm/cli/map.js.map +1 -1
  156. package/dist/esm/cli/named.js +1 -1
  157. package/dist/esm/cli/named.js.map +1 -1
  158. package/dist/esm/cli/path.js +2 -2
  159. package/dist/esm/cli/path.js.map +1 -1
  160. package/dist/esm/cli/peek.js +1 -1
  161. package/dist/esm/cli/peek.js.map +1 -1
  162. package/dist/esm/cli/related.js +1 -1
  163. package/dist/esm/cli/related.js.map +1 -1
  164. package/dist/esm/cli/search.js +1 -1
  165. package/dist/esm/cli/search.js.map +1 -1
  166. package/dist/esm/cli/shared.d.ts +1 -1
  167. package/dist/esm/cli/shared.js +3 -3
  168. package/dist/esm/cli/shared.js.map +1 -1
  169. package/dist/esm/cli/status.js +1 -1
  170. package/dist/esm/cli/status.js.map +1 -1
  171. package/dist/esm/commands/map.d.ts +1 -1
  172. package/dist/esm/commands/map.js.map +1 -1
  173. package/dist/esm/commands/peek.d.ts +1 -1
  174. package/dist/esm/commands/peek.js +8 -1
  175. package/dist/esm/commands/peek.js.map +1 -1
  176. package/dist/esm/commands/scope.js +1 -1
  177. package/dist/esm/commands/scope.js.map +1 -1
  178. package/dist/esm/commands/search.d.ts +1 -1
  179. package/dist/esm/commands/search.js +3 -3
  180. package/dist/esm/commands/search.js.map +1 -1
  181. package/dist/esm/commands/signals.js +1 -1
  182. package/dist/esm/commands/signals.js.map +1 -1
  183. package/dist/esm/config/access.d.ts +3 -1
  184. package/dist/esm/config/access.js +9 -9
  185. package/dist/esm/config/access.js.map +1 -1
  186. package/dist/esm/config/index.d.ts +1 -0
  187. package/dist/esm/config/index.js +1 -0
  188. package/dist/esm/config/index.js.map +1 -1
  189. package/dist/esm/config/types.d.ts +1 -0
  190. package/dist/esm/config/types.js.map +1 -1
  191. package/dist/esm/config/validate.d.ts +1 -0
  192. package/dist/esm/config/validate.js +8 -2
  193. package/dist/esm/config/validate.js.map +1 -1
  194. package/dist/esm/db/open.d.ts +1 -1
  195. package/dist/esm/db/open.js +5 -5
  196. package/dist/esm/db/open.js.map +1 -1
  197. package/dist/esm/db/reconcile.js +4 -4
  198. package/dist/esm/db/reconcile.js.map +1 -1
  199. package/dist/esm/{sql-functions.js → db/sql-functions.js} +1 -1
  200. package/dist/esm/db/sql-functions.js.map +1 -0
  201. package/dist/esm/embed/langfit.js +3 -3
  202. package/dist/esm/embed/langfit.js.map +1 -1
  203. package/dist/esm/embed/languages.js.map +1 -1
  204. package/dist/esm/embed/query.js +5 -5
  205. package/dist/esm/embed/query.js.map +1 -1
  206. package/dist/esm/embed/static.js +1 -2
  207. package/dist/esm/embed/static.js.map +1 -1
  208. package/dist/esm/features/embed.d.ts +2 -5
  209. package/dist/esm/features/embed.js +34 -32
  210. package/dist/esm/features/embed.js.map +1 -1
  211. package/dist/esm/{fences.js → features/fences.js} +1 -1
  212. package/dist/esm/features/fences.js.map +1 -0
  213. package/dist/esm/features/links.js +1 -1
  214. package/dist/esm/features/links.js.map +1 -1
  215. package/dist/esm/features/rank.js +1 -1
  216. package/dist/esm/features/rank.js.map +1 -1
  217. package/dist/esm/features/sections.js +4 -3
  218. package/dist/esm/features/sections.js.map +1 -1
  219. package/dist/esm/features/tags.js +1 -1
  220. package/dist/esm/features/tags.js.map +1 -1
  221. package/dist/esm/features/types.d.ts +4 -2
  222. package/dist/esm/features/types.js.map +1 -1
  223. package/dist/esm/graph/graph.js.map +1 -0
  224. package/dist/esm/graph/traverse.js.map +1 -0
  225. package/dist/esm/index.d.ts +4 -4
  226. package/dist/esm/index.js +2 -2
  227. package/dist/esm/index.js.map +1 -1
  228. package/dist/esm/output/column-hint.js.map +1 -0
  229. package/dist/esm/output/output.js.map +1 -0
  230. package/dist/esm/output/progress.js.map +1 -0
  231. package/dist/esm/{search-error.js → output/search-error.js} +1 -1
  232. package/dist/esm/output/search-error.js.map +1 -0
  233. package/dist/esm/scan/frontmatter.d.ts +13 -0
  234. package/dist/esm/{scan.js → scan/frontmatter.js} +4 -123
  235. package/dist/esm/scan/frontmatter.js.map +1 -0
  236. package/dist/esm/scan/index.d.ts +25 -0
  237. package/dist/esm/scan/index.js +58 -0
  238. package/dist/esm/scan/index.js.map +1 -0
  239. package/dist/esm/scan/list.d.ts +12 -0
  240. package/dist/esm/scan/list.js +58 -0
  241. package/dist/esm/scan/list.js.map +1 -0
  242. package/dist/esm/text/segment.d.ts +3 -0
  243. package/dist/esm/{segment.js → text/segment.js} +3 -3
  244. package/dist/esm/text/segment.js.map +1 -0
  245. package/dist/esm/text/strip.d.ts +3 -0
  246. package/dist/esm/text/strip.js +12 -0
  247. package/dist/esm/text/strip.js.map +1 -0
  248. package/package.json +15 -2
  249. package/schema.json +8 -1
  250. package/skills/sense/SKILL.md +1 -1
  251. package/skills/sense-setup/SKILL.md +3 -3
  252. package/dist/cjs/column-hint.js.map +0 -1
  253. package/dist/cjs/fences.js.map +0 -1
  254. package/dist/cjs/graph.js.map +0 -1
  255. package/dist/cjs/output.js.map +0 -1
  256. package/dist/cjs/progress.js.map +0 -1
  257. package/dist/cjs/scan.d.cts +0 -35
  258. package/dist/cjs/scan.d.ts +0 -35
  259. package/dist/cjs/scan.js +0 -436
  260. package/dist/cjs/scan.js.map +0 -1
  261. package/dist/cjs/search-error.js.map +0 -1
  262. package/dist/cjs/segment.d.cts +0 -2
  263. package/dist/cjs/segment.d.ts +0 -2
  264. package/dist/cjs/segment.js.map +0 -1
  265. package/dist/cjs/sql-functions.js.map +0 -1
  266. package/dist/cjs/traverse.js.map +0 -1
  267. package/dist/esm/column-hint.js.map +0 -1
  268. package/dist/esm/fences.js.map +0 -1
  269. package/dist/esm/graph.js.map +0 -1
  270. package/dist/esm/output.js.map +0 -1
  271. package/dist/esm/progress.js.map +0 -1
  272. package/dist/esm/scan.d.ts +0 -35
  273. package/dist/esm/scan.js.map +0 -1
  274. package/dist/esm/search-error.js.map +0 -1
  275. package/dist/esm/segment.d.ts +0 -2
  276. package/dist/esm/segment.js.map +0 -1
  277. package/dist/esm/sql-functions.js.map +0 -1
  278. package/dist/esm/traverse.js.map +0 -1
  279. /package/dist/cjs/{sql-functions.d.cts → db/sql-functions.d.cts} +0 -0
  280. /package/dist/cjs/{sql-functions.d.ts → db/sql-functions.d.ts} +0 -0
  281. /package/dist/cjs/{fences.d.cts → features/fences.d.cts} +0 -0
  282. /package/dist/cjs/{fences.d.ts → features/fences.d.ts} +0 -0
  283. /package/dist/cjs/{graph.d.cts → graph/graph.d.cts} +0 -0
  284. /package/dist/cjs/{graph.d.ts → graph/graph.d.ts} +0 -0
  285. /package/dist/cjs/{graph.js → graph/graph.js} +0 -0
  286. /package/dist/cjs/{traverse.d.cts → graph/traverse.d.cts} +0 -0
  287. /package/dist/cjs/{traverse.d.ts → graph/traverse.d.ts} +0 -0
  288. /package/dist/cjs/{traverse.js → graph/traverse.js} +0 -0
  289. /package/dist/cjs/{column-hint.d.cts → output/column-hint.d.cts} +0 -0
  290. /package/dist/cjs/{column-hint.d.ts → output/column-hint.d.ts} +0 -0
  291. /package/dist/cjs/{column-hint.js → output/column-hint.js} +0 -0
  292. /package/dist/cjs/{output.d.cts → output/output.d.cts} +0 -0
  293. /package/dist/cjs/{output.d.ts → output/output.d.ts} +0 -0
  294. /package/dist/cjs/{output.js → output/output.js} +0 -0
  295. /package/dist/cjs/{progress.d.cts → output/progress.d.cts} +0 -0
  296. /package/dist/cjs/{progress.d.ts → output/progress.d.ts} +0 -0
  297. /package/dist/cjs/{progress.js → output/progress.js} +0 -0
  298. /package/dist/cjs/{search-error.d.cts → output/search-error.d.cts} +0 -0
  299. /package/dist/cjs/{search-error.d.ts → output/search-error.d.ts} +0 -0
  300. /package/dist/esm/{sql-functions.d.ts → db/sql-functions.d.ts} +0 -0
  301. /package/dist/esm/{fences.d.ts → features/fences.d.ts} +0 -0
  302. /package/dist/esm/{graph.d.ts → graph/graph.d.ts} +0 -0
  303. /package/dist/esm/{graph.js → graph/graph.js} +0 -0
  304. /package/dist/esm/{traverse.d.ts → graph/traverse.d.ts} +0 -0
  305. /package/dist/esm/{traverse.js → graph/traverse.js} +0 -0
  306. /package/dist/esm/{column-hint.d.ts → output/column-hint.d.ts} +0 -0
  307. /package/dist/esm/{column-hint.js → output/column-hint.js} +0 -0
  308. /package/dist/esm/{output.d.ts → output/output.d.ts} +0 -0
  309. /package/dist/esm/{output.js → output/output.js} +0 -0
  310. /package/dist/esm/{progress.d.ts → output/progress.d.ts} +0 -0
  311. /package/dist/esm/{progress.js → output/progress.js} +0 -0
  312. /package/dist/esm/{search-error.d.ts → output/search-error.d.ts} +0 -0
@@ -0,0 +1,489 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get DEFAULT_TARGET_TOKENS () {
13
+ return DEFAULT_TARGET_TOKENS;
14
+ },
15
+ get estimateTokens () {
16
+ return estimateTokens;
17
+ },
18
+ get group () {
19
+ return group;
20
+ }
21
+ });
22
+ var _segmentts = require("../text/segment.js");
23
+ var _extractts = require("./extract.js");
24
+ var _parsets = require("./parse.js");
25
+ function _array_like_to_array(arr, len) {
26
+ if (len == null || len > arr.length) len = arr.length;
27
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
28
+ return arr2;
29
+ }
30
+ function _array_without_holes(arr) {
31
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
32
+ }
33
+ function _define_property(obj, key, value) {
34
+ if (key in obj) {
35
+ Object.defineProperty(obj, key, {
36
+ value: value,
37
+ enumerable: true,
38
+ configurable: true,
39
+ writable: true
40
+ });
41
+ } else obj[key] = value;
42
+ return obj;
43
+ }
44
+ function _iterable_to_array(iter) {
45
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
46
+ return Array.from(iter);
47
+ }
48
+ }
49
+ function _non_iterable_spread() {
50
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
51
+ }
52
+ function _object_spread(target) {
53
+ for(var i = 1; i < arguments.length; i++){
54
+ var source = arguments[i] != null ? arguments[i] : {};
55
+ var ownKeys = Object.keys(source);
56
+ if (typeof Object.getOwnPropertySymbols === "function") {
57
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
58
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
59
+ }));
60
+ }
61
+ ownKeys.forEach(function(key) {
62
+ _define_property(target, key, source[key]);
63
+ });
64
+ }
65
+ return target;
66
+ }
67
+ function ownKeys(object, enumerableOnly) {
68
+ var keys = Object.keys(object);
69
+ if (Object.getOwnPropertySymbols) {
70
+ var symbols = Object.getOwnPropertySymbols(object);
71
+ if (enumerableOnly) {
72
+ symbols = symbols.filter(function(sym) {
73
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
74
+ });
75
+ }
76
+ keys.push.apply(keys, symbols);
77
+ }
78
+ return keys;
79
+ }
80
+ function _object_spread_props(target, source) {
81
+ source = source != null ? source : {};
82
+ if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
83
+ else {
84
+ ownKeys(Object(source)).forEach(function(key) {
85
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
86
+ });
87
+ }
88
+ return target;
89
+ }
90
+ function _to_consumable_array(arr) {
91
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
92
+ }
93
+ function _unsupported_iterable_to_array(o, minLen) {
94
+ if (!o) return;
95
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
96
+ var n = Object.prototype.toString.call(o).slice(8, -1);
97
+ if (n === "Object" && o.constructor) n = o.constructor.name;
98
+ if (n === "Map" || n === "Set") return Array.from(n);
99
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
100
+ }
101
+ var DEFAULT_TARGET_TOKENS = 500;
102
+ var PGC_GROUP_SIZE = 2;
103
+ var OVERSIZE_TRIGGER_MULTIPLE = 2;
104
+ // D5: segment.ts's unspaced-script set packs close to one token per character; Hangul is
105
+ // spaced but still token-dense, added here as a conservative bound (one Unicode set, one home).
106
+ var DENSE_SCRIPT = new RegExp("[".concat(_segmentts.UNSPACED_SCRIPTS, "\\p{scx=Hangul}]"), 'u');
107
+ function estimateTokens(text) {
108
+ var dense = 0;
109
+ var other = 0;
110
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
111
+ try {
112
+ for(var _iterator = text[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
113
+ var ch = _step.value;
114
+ if (DENSE_SCRIPT.test(ch)) dense++;
115
+ else other++;
116
+ }
117
+ } catch (err) {
118
+ _didIteratorError = true;
119
+ _iteratorError = err;
120
+ } finally{
121
+ try {
122
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
123
+ _iterator.return();
124
+ }
125
+ } finally{
126
+ if (_didIteratorError) {
127
+ throw _iteratorError;
128
+ }
129
+ }
130
+ }
131
+ return dense + other / 4;
132
+ }
133
+ function resolveOptions(opts) {
134
+ var _ref, _ref1;
135
+ return {
136
+ targetTokens: (_ref = opts === null || opts === void 0 ? void 0 : opts.targetTokens) !== null && _ref !== void 0 ? _ref : DEFAULT_TARGET_TOKENS,
137
+ text: (_ref1 = opts === null || opts === void 0 ? void 0 : opts.text) !== null && _ref1 !== void 0 ? _ref1 : 'raw'
138
+ };
139
+ }
140
+ // A heading of any depth ends the current scope and starts a new one (D1); the heading block
141
+ // itself is carried into the new scope, where it joins that scope's first group (F7/F10).
142
+ function splitScopes(blocks) {
143
+ var scopes = [];
144
+ var current = [];
145
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
146
+ try {
147
+ for(var _iterator = blocks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
148
+ var block = _step.value;
149
+ if (block.type === 'heading' && current.length > 0) {
150
+ scopes.push(current);
151
+ current = [];
152
+ }
153
+ current.push(block);
154
+ }
155
+ } catch (err) {
156
+ _didIteratorError = true;
157
+ _iteratorError = err;
158
+ } finally{
159
+ try {
160
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
161
+ _iterator.return();
162
+ }
163
+ } finally{
164
+ if (_didIteratorError) {
165
+ throw _iteratorError;
166
+ }
167
+ }
168
+ }
169
+ if (current.length > 0) scopes.push(current);
170
+ return scopes;
171
+ }
172
+ function finalize(parts) {
173
+ if (parts.length === 0) return undefined;
174
+ var first = parts[0];
175
+ var last = parts[parts.length - 1];
176
+ return {
177
+ startLine: first.startLine,
178
+ endLine: last.endLine,
179
+ text: parts.map(function(p) {
180
+ return p.text;
181
+ }).join('\n'),
182
+ final: parts.some(function(p) {
183
+ return p.final;
184
+ })
185
+ };
186
+ }
187
+ var NEWLINE_TOKENS = estimateTokens('\n');
188
+ var SENTENCE_SEGMENTER = new Intl.Segmenter(undefined, {
189
+ granularity: 'sentence'
190
+ });
191
+ var WORD_SEGMENTER = new Intl.Segmenter(undefined, {
192
+ granularity: 'word'
193
+ });
194
+ function segmentsOf(text, segmenter) {
195
+ return Array.from(segmenter.segment(text), function(s) {
196
+ return s.segment;
197
+ });
198
+ }
199
+ // Greedily packs segments (already contiguous, tiling the source text with no gaps) into groups
200
+ // of at most `working` estimated tokens; a lone segment over `working` still stands alone.
201
+ function pack(segments, working) {
202
+ var groups = [];
203
+ var current = '';
204
+ var tokens = 0;
205
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
206
+ try {
207
+ for(var _iterator = segments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
208
+ var segment = _step.value;
209
+ var segmentTokens = estimateTokens(segment);
210
+ if (current.length > 0 && tokens + segmentTokens > working) {
211
+ groups.push(current);
212
+ current = '';
213
+ tokens = 0;
214
+ }
215
+ current += segment;
216
+ tokens += segmentTokens;
217
+ }
218
+ } catch (err) {
219
+ _didIteratorError = true;
220
+ _iteratorError = err;
221
+ } finally{
222
+ try {
223
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
224
+ _iterator.return();
225
+ }
226
+ } finally{
227
+ if (_didIteratorError) {
228
+ throw _iteratorError;
229
+ }
230
+ }
231
+ }
232
+ if (current.length > 0) groups.push(current);
233
+ return groups;
234
+ }
235
+ // A single line's text, still over working after rule 5's line-split can't reduce a lone line
236
+ // (the CJK case, one sentence-dense line with no newlines), falls back to Intl.Segmenter sentence
237
+ // boundaries, then word boundaries for any one sentence still over working. Never splits inside a
238
+ // grapheme either way (both are ECMA-402, the same proven component segment.ts uses for
239
+ // graphemes). Mode-agnostic: the caller decides whether `text` is the raw line or its extracted
240
+ // flavor -- this only packs whatever text it is given.
241
+ function splitLineText(text, working) {
242
+ var sentences = segmentsOf(text, SENTENCE_SEGMENTER);
243
+ var out = [];
244
+ var current = '';
245
+ var tokens = 0;
246
+ var flush = function flush() {
247
+ if (current.length > 0) {
248
+ out.push(current);
249
+ current = '';
250
+ tokens = 0;
251
+ }
252
+ };
253
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
254
+ try {
255
+ for(var _iterator = sentences[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
256
+ var sentence = _step.value;
257
+ var sentenceTokens = estimateTokens(sentence);
258
+ if (sentenceTokens > working) {
259
+ var _out;
260
+ flush();
261
+ (_out = out).push.apply(_out, _to_consumable_array(pack(segmentsOf(sentence, WORD_SEGMENTER), working)));
262
+ continue;
263
+ }
264
+ if (current.length > 0 && tokens + sentenceTokens > working) flush();
265
+ current += sentence;
266
+ tokens += sentenceTokens;
267
+ }
268
+ } catch (err) {
269
+ _didIteratorError = true;
270
+ _iteratorError = err;
271
+ } finally{
272
+ try {
273
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
274
+ _iterator.return();
275
+ }
276
+ } finally{
277
+ if (_didIteratorError) {
278
+ throw _iteratorError;
279
+ }
280
+ }
281
+ }
282
+ flush();
283
+ return out;
284
+ }
285
+ var ATOMIC_TYPES = new Set([
286
+ 'code',
287
+ 'table',
288
+ 'list'
289
+ ]);
290
+ // An atomic block's (code/table/list) piece is always a raw line slice: re-parsing a table's
291
+ // later pieces without their header/delimiter rows demotes them to paragraph text. A non-atomic
292
+ // piece is a raw line slice too when raw mode requested it; extracted mode re-parses and resolves
293
+ // flavor as before.
294
+ function piece(pieceLines, startLine, endLine, blockType, textMode) {
295
+ var text = ATOMIC_TYPES.has(blockType) || textMode === 'raw' ? pieceLines.join('\n') : (0, _parsets.parse)(pieceLines.join('\n')).map(function(b) {
296
+ return (0, _extractts.extractText)(b.node);
297
+ }).join('\n');
298
+ return {
299
+ startLine: startLine,
300
+ endLine: endLine,
301
+ text: text
302
+ };
303
+ }
304
+ // A piece over working size that came from exactly one source line cannot be reduced by another
305
+ // line-boundary pass (rule 5's gap); it is sliced instead, at sentence then word boundaries, over
306
+ // the mode-resolved text piece() already produced -- so raw mode packs the raw line and extracted
307
+ // mode packs its flavor-resolved text. Extents collapse to that one line for every sub-piece (F5:
308
+ // re-derivation is by index over chunk()'s own deterministic output, not by a unique line range
309
+ // per piece); `final` flags each sub-piece so group() knows not to re-derive its text from that
310
+ // shared extent.
311
+ function finalizePiece(pieceLines, startLine, endLine, working, blockType, textMode) {
312
+ var p = piece(pieceLines, startLine, endLine, blockType, textMode);
313
+ if (pieceLines.length === 1 && estimateTokens(p.text) > working) {
314
+ return splitLineText(p.text, working).map(function(text) {
315
+ return {
316
+ startLine: startLine,
317
+ endLine: endLine,
318
+ text: text,
319
+ final: true
320
+ };
321
+ });
322
+ }
323
+ return [
324
+ p
325
+ ];
326
+ }
327
+ // A block over 2x working size splits at line boundaries into pieces each <= working size,
328
+ // never mid-line. `seed`: pending tokens (a heading) the first piece must join, checked against
329
+ // the limit too.
330
+ function splitOversizeBlock(lines, startLine, endLine, working, blockType, textMode) {
331
+ var seed = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : 0;
332
+ var _pieces;
333
+ var pieces = [];
334
+ var pieceLines = [];
335
+ var pieceStart = startLine;
336
+ var tokens = seed;
337
+ for(var line = startLine; line <= endLine; line++){
338
+ var lineText = lines[line - 1];
339
+ var sep = pieceLines.length > 0 || tokens > 0 ? NEWLINE_TOKENS : 0;
340
+ var lineTokens = estimateTokens(lineText);
341
+ if (pieceLines.length > 0 && tokens + sep + lineTokens > working) {
342
+ var _pieces1;
343
+ (_pieces1 = pieces).push.apply(_pieces1, _to_consumable_array(finalizePiece(pieceLines, pieceStart, line - 1, working, blockType, textMode)));
344
+ pieceLines = [];
345
+ tokens = 0;
346
+ pieceStart = line;
347
+ pieceLines.push(lineText);
348
+ tokens += lineTokens;
349
+ continue;
350
+ }
351
+ pieceLines.push(lineText);
352
+ tokens += sep + lineTokens;
353
+ }
354
+ if (pieceLines.length > 0) (_pieces = pieces).push.apply(_pieces, _to_consumable_array(finalizePiece(pieceLines, pieceStart, endLine, working, blockType, textMode)));
355
+ return pieces;
356
+ }
357
+ // One heading scope's groups (D1): a heading opens the first group, and an oversize block
358
+ // (rule 5, including an oversize heading) splits into pieces that each close their own group.
359
+ function groupScope(scopeBlocks, lines, resolved) {
360
+ var working = resolved.targetTokens;
361
+ var trigger = working * OVERSIZE_TRIGGER_MULTIPLE;
362
+ var finished = [];
363
+ var parts = [];
364
+ var paragraphCount = 0;
365
+ var tokens = 0;
366
+ function close() {
367
+ var group = finalize(parts);
368
+ if (group) finished.push(group);
369
+ parts = [];
370
+ paragraphCount = 0;
371
+ tokens = 0;
372
+ }
373
+ // tokens tracks the active text mode's own estimate (a newline between parts costs
374
+ // NEWLINE_TOKENS too), so packing decisions size the text the chunk will actually ship as.
375
+ function addPart(text, sizeText, startLine, endLine) {
376
+ tokens += (parts.length > 0 ? NEWLINE_TOKENS : 0) + estimateTokens(sizeText);
377
+ parts.push({
378
+ startLine: startLine,
379
+ endLine: endLine,
380
+ text: text
381
+ });
382
+ }
383
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
384
+ try {
385
+ for(var _iterator = scopeBlocks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
386
+ var block = _step.value;
387
+ var raw = lines.slice(block.startLine - 1, block.endLine).join('\n');
388
+ var blockTokens = estimateTokens(raw);
389
+ if (blockTokens > trigger) {
390
+ var seed = parts.length > 0 ? tokens : 0;
391
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
392
+ try {
393
+ for(var _iterator1 = splitOversizeBlock(lines, block.startLine, block.endLine, working, block.type, resolved.text, seed)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
394
+ var p = _step1.value;
395
+ parts.push(p);
396
+ close();
397
+ }
398
+ } catch (err) {
399
+ _didIteratorError1 = true;
400
+ _iteratorError1 = err;
401
+ } finally{
402
+ try {
403
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
404
+ _iterator1.return();
405
+ }
406
+ } finally{
407
+ if (_didIteratorError1) {
408
+ throw _iteratorError1;
409
+ }
410
+ }
411
+ }
412
+ continue;
413
+ }
414
+ var extracted = (0, _extractts.extractText)(block.node);
415
+ var sizeText = resolved.text === 'raw' ? raw : extracted;
416
+ if (block.type === 'heading') {
417
+ addPart(extracted, sizeText, block.startLine, block.endLine);
418
+ continue;
419
+ }
420
+ // The 2x-working invariant holds even under pgc's paper-faithful 2-paragraph pairing --
421
+ // close first if the pair about to form would cross it.
422
+ var pairOversize = parts.length > 0 && tokens + NEWLINE_TOKENS + blockTokens > trigger;
423
+ if (pairOversize) close();
424
+ addPart(extracted, sizeText, block.startLine, block.endLine);
425
+ paragraphCount++;
426
+ if (paragraphCount >= PGC_GROUP_SIZE) close();
427
+ }
428
+ } catch (err) {
429
+ _didIteratorError = true;
430
+ _iteratorError = err;
431
+ } finally{
432
+ try {
433
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
434
+ _iterator.return();
435
+ }
436
+ } finally{
437
+ if (_didIteratorError) {
438
+ throw _iteratorError;
439
+ }
440
+ }
441
+ }
442
+ close();
443
+ return finished;
444
+ }
445
+ function group(blocks, body, opts) {
446
+ var _chunks;
447
+ var resolved = resolveOptions(opts);
448
+ var lines = body.split('\n');
449
+ var chunks = [];
450
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
451
+ try {
452
+ for(var _iterator = splitScopes(blocks)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
453
+ var scope = _step.value;
454
+ (_chunks = chunks).push.apply(_chunks, _to_consumable_array(groupScope(scope, lines, resolved)));
455
+ }
456
+ } catch (err) {
457
+ _didIteratorError = true;
458
+ _iteratorError = err;
459
+ } finally{
460
+ try {
461
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
462
+ _iterator.return();
463
+ }
464
+ } finally{
465
+ if (_didIteratorError) {
466
+ throw _iteratorError;
467
+ }
468
+ }
469
+ }
470
+ // 'raw': the chunk's own source lines verbatim, replacing the flavor-resolved join above (D9).
471
+ // A `final` chunk (a sub-line split) already carries its own slice's raw text -- re-slicing by
472
+ // extent would return the whole shared source line instead, once per sub-piece.
473
+ var texted = resolved.text === 'raw' ? chunks.map(function(c) {
474
+ return c.final ? c : _object_spread_props(_object_spread({}, c), {
475
+ text: lines.slice(c.startLine - 1, c.endLine).join('\n').trim()
476
+ });
477
+ }) : chunks;
478
+ // A group can be all-blank (flavor-stripped to nothing, or a raw slice of pure syntax); it never produces a chunk.
479
+ return texted.filter(function(c) {
480
+ return c.text.trim().length > 0;
481
+ }).map(function(c) {
482
+ return {
483
+ startLine: c.startLine,
484
+ endLine: c.endLine,
485
+ text: c.text
486
+ };
487
+ });
488
+ }
489
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/chunk/group.ts"],"sourcesContent":["import { UNSPACED_SCRIPTS } from '../text/segment.ts';\nimport { extractText } from './extract.ts';\nimport { parse } from './parse.ts';\nimport type { Block, BlockType, Chunk, ChunkOptions } from './types.ts';\n\nexport const DEFAULT_TARGET_TOKENS = 500;\nconst PGC_GROUP_SIZE = 2;\nconst OVERSIZE_TRIGGER_MULTIPLE = 2;\n\n// D5: segment.ts's unspaced-script set packs close to one token per character; Hangul is\n// spaced but still token-dense, added here as a conservative bound (one Unicode set, one home).\nconst DENSE_SCRIPT = new RegExp(`[${UNSPACED_SCRIPTS}\\\\p{scx=Hangul}]`, 'u');\n\n// D5's size estimate: dense-script graphemes 1:1, everything else at 4 chars/token.\nexport function estimateTokens(text: string): number {\n let dense = 0;\n let other = 0;\n for (const ch of text) {\n if (DENSE_SCRIPT.test(ch)) dense++;\n else other++;\n }\n return dense + other / 4;\n}\n\ninterface ResolvedOptions {\n targetTokens: number;\n text: 'extracted' | 'raw';\n}\n\nfunction resolveOptions(opts?: ChunkOptions): ResolvedOptions {\n return {\n targetTokens: opts?.targetTokens ?? DEFAULT_TARGET_TOKENS,\n text: opts?.text ?? 'raw',\n };\n}\n\n// A heading of any depth ends the current scope and starts a new one (D1); the heading block\n// itself is carried into the new scope, where it joins that scope's first group (F7/F10).\nfunction splitScopes(blocks: Block[]): Block[][] {\n const scopes: Block[][] = [];\n let current: Block[] = [];\n for (const block of blocks) {\n if (block.type === 'heading' && current.length > 0) {\n scopes.push(current);\n current = [];\n }\n current.push(block);\n }\n if (current.length > 0) scopes.push(current);\n return scopes;\n}\n\ninterface Part {\n startLine: number;\n endLine: number;\n text: string;\n // true for a sub-line split piece (finalizePiece's splitLineText branch): its text is already\n // the active mode's final text for its own slice of the line, not the whole line, so group()'s\n // extent-based raw re-slice (startLine === endLine for every sibling sub-piece) must not touch it.\n final?: boolean;\n}\n\nfunction finalize(parts: Part[]): (Chunk & { final?: boolean }) | undefined {\n if (parts.length === 0) return undefined;\n const first = parts[0];\n const last = parts[parts.length - 1];\n return { startLine: first.startLine, endLine: last.endLine, text: parts.map((p) => p.text).join('\\n'), final: parts.some((p) => p.final) };\n}\n\nconst NEWLINE_TOKENS = estimateTokens('\\n');\nconst SENTENCE_SEGMENTER = new Intl.Segmenter(undefined, { granularity: 'sentence' });\nconst WORD_SEGMENTER = new Intl.Segmenter(undefined, { granularity: 'word' });\n\nfunction segmentsOf(text: string, segmenter: Intl.Segmenter): string[] {\n return Array.from(segmenter.segment(text), (s) => s.segment);\n}\n\n// Greedily packs segments (already contiguous, tiling the source text with no gaps) into groups\n// of at most `working` estimated tokens; a lone segment over `working` still stands alone.\nfunction pack(segments: string[], working: number): string[] {\n const groups: string[] = [];\n let current = '';\n let tokens = 0;\n for (const segment of segments) {\n const segmentTokens = estimateTokens(segment);\n if (current.length > 0 && tokens + segmentTokens > working) {\n groups.push(current);\n current = '';\n tokens = 0;\n }\n current += segment;\n tokens += segmentTokens;\n }\n if (current.length > 0) groups.push(current);\n return groups;\n}\n\n// A single line's text, still over working after rule 5's line-split can't reduce a lone line\n// (the CJK case, one sentence-dense line with no newlines), falls back to Intl.Segmenter sentence\n// boundaries, then word boundaries for any one sentence still over working. Never splits inside a\n// grapheme either way (both are ECMA-402, the same proven component segment.ts uses for\n// graphemes). Mode-agnostic: the caller decides whether `text` is the raw line or its extracted\n// flavor -- this only packs whatever text it is given.\nfunction splitLineText(text: string, working: number): string[] {\n const sentences = segmentsOf(text, SENTENCE_SEGMENTER);\n const out: string[] = [];\n let current = '';\n let tokens = 0;\n const flush = () => {\n if (current.length > 0) {\n out.push(current);\n current = '';\n tokens = 0;\n }\n };\n for (const sentence of sentences) {\n const sentenceTokens = estimateTokens(sentence);\n if (sentenceTokens > working) {\n flush();\n out.push(...pack(segmentsOf(sentence, WORD_SEGMENTER), working));\n continue;\n }\n if (current.length > 0 && tokens + sentenceTokens > working) flush();\n current += sentence;\n tokens += sentenceTokens;\n }\n flush();\n return out;\n}\n\nconst ATOMIC_TYPES: ReadonlySet<BlockType> = new Set(['code', 'table', 'list']);\n\n// An atomic block's (code/table/list) piece is always a raw line slice: re-parsing a table's\n// later pieces without their header/delimiter rows demotes them to paragraph text. A non-atomic\n// piece is a raw line slice too when raw mode requested it; extracted mode re-parses and resolves\n// flavor as before.\nfunction piece(pieceLines: string[], startLine: number, endLine: number, blockType: BlockType, textMode: 'extracted' | 'raw'): Part {\n const text =\n ATOMIC_TYPES.has(blockType) || textMode === 'raw'\n ? pieceLines.join('\\n')\n : parse(pieceLines.join('\\n'))\n .map((b) => extractText(b.node))\n .join('\\n');\n return { startLine, endLine, text };\n}\n\n// A piece over working size that came from exactly one source line cannot be reduced by another\n// line-boundary pass (rule 5's gap); it is sliced instead, at sentence then word boundaries, over\n// the mode-resolved text piece() already produced -- so raw mode packs the raw line and extracted\n// mode packs its flavor-resolved text. Extents collapse to that one line for every sub-piece (F5:\n// re-derivation is by index over chunk()'s own deterministic output, not by a unique line range\n// per piece); `final` flags each sub-piece so group() knows not to re-derive its text from that\n// shared extent.\nfunction finalizePiece(pieceLines: string[], startLine: number, endLine: number, working: number, blockType: BlockType, textMode: 'extracted' | 'raw'): Part[] {\n const p = piece(pieceLines, startLine, endLine, blockType, textMode);\n if (pieceLines.length === 1 && estimateTokens(p.text) > working) {\n return splitLineText(p.text, working).map((text) => ({ startLine, endLine, text, final: true }));\n }\n return [p];\n}\n\n// A block over 2x working size splits at line boundaries into pieces each <= working size,\n// never mid-line. `seed`: pending tokens (a heading) the first piece must join, checked against\n// the limit too.\nfunction splitOversizeBlock(lines: string[], startLine: number, endLine: number, working: number, blockType: BlockType, textMode: 'extracted' | 'raw', seed = 0): Part[] {\n const pieces: Part[] = [];\n let pieceLines: string[] = [];\n let pieceStart = startLine;\n let tokens = seed;\n for (let line = startLine; line <= endLine; line++) {\n const lineText = lines[line - 1];\n const sep = pieceLines.length > 0 || tokens > 0 ? NEWLINE_TOKENS : 0;\n const lineTokens = estimateTokens(lineText);\n if (pieceLines.length > 0 && tokens + sep + lineTokens > working) {\n pieces.push(...finalizePiece(pieceLines, pieceStart, line - 1, working, blockType, textMode));\n pieceLines = [];\n tokens = 0;\n pieceStart = line;\n pieceLines.push(lineText);\n tokens += lineTokens;\n continue;\n }\n pieceLines.push(lineText);\n tokens += sep + lineTokens;\n }\n if (pieceLines.length > 0) pieces.push(...finalizePiece(pieceLines, pieceStart, endLine, working, blockType, textMode));\n return pieces;\n}\n\n// One heading scope's groups (D1): a heading opens the first group, and an oversize block\n// (rule 5, including an oversize heading) splits into pieces that each close their own group.\nfunction groupScope(scopeBlocks: Block[], lines: string[], resolved: ResolvedOptions): (Chunk & { final?: boolean })[] {\n const working = resolved.targetTokens;\n const trigger = working * OVERSIZE_TRIGGER_MULTIPLE;\n const finished: (Chunk & { final?: boolean })[] = [];\n let parts: Part[] = [];\n let paragraphCount = 0;\n let tokens = 0;\n\n function close(): void {\n const group = finalize(parts);\n if (group) finished.push(group);\n parts = [];\n paragraphCount = 0;\n tokens = 0;\n }\n\n // tokens tracks the active text mode's own estimate (a newline between parts costs\n // NEWLINE_TOKENS too), so packing decisions size the text the chunk will actually ship as.\n function addPart(text: string, sizeText: string, startLine: number, endLine: number): void {\n tokens += (parts.length > 0 ? NEWLINE_TOKENS : 0) + estimateTokens(sizeText);\n parts.push({ startLine, endLine, text });\n }\n\n for (const block of scopeBlocks) {\n const raw = lines.slice(block.startLine - 1, block.endLine).join('\\n');\n const blockTokens = estimateTokens(raw);\n\n if (blockTokens > trigger) {\n const seed = parts.length > 0 ? tokens : 0;\n for (const p of splitOversizeBlock(lines, block.startLine, block.endLine, working, block.type, resolved.text, seed)) {\n parts.push(p);\n close();\n }\n continue;\n }\n\n const extracted = extractText(block.node);\n const sizeText = resolved.text === 'raw' ? raw : extracted;\n\n if (block.type === 'heading') {\n addPart(extracted, sizeText, block.startLine, block.endLine);\n continue;\n }\n\n // The 2x-working invariant holds even under pgc's paper-faithful 2-paragraph pairing --\n // close first if the pair about to form would cross it.\n const pairOversize = parts.length > 0 && tokens + NEWLINE_TOKENS + blockTokens > trigger;\n if (pairOversize) close();\n\n addPart(extracted, sizeText, block.startLine, block.endLine);\n paragraphCount++;\n\n if (paragraphCount >= PGC_GROUP_SIZE) close();\n }\n close();\n\n return finished;\n}\n\n// Groups already-parsed blocks per opts (D1/D3), against the same body the blocks were parsed\n// from (line lookups for oversize splitting).\nexport function group(blocks: Block[], body: string, opts?: ChunkOptions): Chunk[] {\n const resolved = resolveOptions(opts);\n const lines = body.split('\\n');\n const chunks: (Chunk & { final?: boolean })[] = [];\n for (const scope of splitScopes(blocks)) chunks.push(...groupScope(scope, lines, resolved));\n // 'raw': the chunk's own source lines verbatim, replacing the flavor-resolved join above (D9).\n // A `final` chunk (a sub-line split) already carries its own slice's raw text -- re-slicing by\n // extent would return the whole shared source line instead, once per sub-piece.\n const texted =\n resolved.text === 'raw'\n ? chunks.map((c) =>\n c.final\n ? c\n : {\n ...c,\n text: lines\n .slice(c.startLine - 1, c.endLine)\n .join('\\n')\n .trim(),\n }\n )\n : chunks;\n // A group can be all-blank (flavor-stripped to nothing, or a raw slice of pure syntax); it never produces a chunk.\n return texted.filter((c) => c.text.trim().length > 0).map((c) => ({ startLine: c.startLine, endLine: c.endLine, text: c.text }));\n}\n"],"names":["DEFAULT_TARGET_TOKENS","estimateTokens","group","PGC_GROUP_SIZE","OVERSIZE_TRIGGER_MULTIPLE","DENSE_SCRIPT","RegExp","UNSPACED_SCRIPTS","text","dense","other","ch","test","resolveOptions","opts","targetTokens","splitScopes","blocks","scopes","current","block","type","length","push","finalize","parts","undefined","first","last","startLine","endLine","map","p","join","final","some","NEWLINE_TOKENS","SENTENCE_SEGMENTER","Intl","Segmenter","granularity","WORD_SEGMENTER","segmentsOf","segmenter","Array","from","segment","s","pack","segments","working","groups","tokens","segmentTokens","splitLineText","sentences","out","flush","sentence","sentenceTokens","ATOMIC_TYPES","Set","piece","pieceLines","blockType","textMode","has","parse","b","extractText","node","finalizePiece","splitOversizeBlock","lines","seed","pieces","pieceStart","line","lineText","sep","lineTokens","groupScope","scopeBlocks","resolved","trigger","finished","paragraphCount","close","addPart","sizeText","raw","slice","blockTokens","extracted","pairOversize","body","chunks","split","scope","texted","c","trim","filter"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Block, Chunk, ChunkOptions } from './types.js';
2
+ export declare function chunkFromBlocks(blocks: Block[], body: string, opts?: ChunkOptions): Chunk[];
3
+ export declare function chunk(body: string, opts?: ChunkOptions): Chunk[];
4
+ export { extractText } from './extract.js';
5
+ export { DEFAULT_TARGET_TOKENS, estimateTokens } from './group.js';
6
+ export { parse } from './parse.js';
7
+ export type { Block, BlockType, Chunk, ChunkOptions } from './types.js';
8
+ export { CHUNK_VERSION } from './version.js';
@@ -0,0 +1,8 @@
1
+ import type { Block, Chunk, ChunkOptions } from './types.js';
2
+ export declare function chunkFromBlocks(blocks: Block[], body: string, opts?: ChunkOptions): Chunk[];
3
+ export declare function chunk(body: string, opts?: ChunkOptions): Chunk[];
4
+ export { extractText } from './extract.js';
5
+ export { DEFAULT_TARGET_TOKENS, estimateTokens } from './group.js';
6
+ export { parse } from './parse.js';
7
+ export type { Block, BlockType, Chunk, ChunkOptions } from './types.js';
8
+ export { CHUNK_VERSION } from './version.js';
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get CHUNK_VERSION () {
13
+ return _versionts.CHUNK_VERSION;
14
+ },
15
+ get DEFAULT_TARGET_TOKENS () {
16
+ return _groupts.DEFAULT_TARGET_TOKENS;
17
+ },
18
+ get chunk () {
19
+ return chunk;
20
+ },
21
+ get chunkFromBlocks () {
22
+ return chunkFromBlocks;
23
+ },
24
+ get estimateTokens () {
25
+ return _groupts.estimateTokens;
26
+ },
27
+ get extractText () {
28
+ return _extractts.extractText;
29
+ },
30
+ get parse () {
31
+ return _parsets.parse;
32
+ }
33
+ });
34
+ var _groupts = require("./group.js");
35
+ var _parsets = require("./parse.js");
36
+ var _extractts = require("./extract.js");
37
+ var _versionts = require("./version.js");
38
+ function chunkFromBlocks(blocks, body, opts) {
39
+ return (0, _groupts.group)(blocks, body, opts);
40
+ }
41
+ function chunk(body, opts) {
42
+ return chunkFromBlocks((0, _parsets.parse)(body), body, opts);
43
+ }
44
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/chunk/index.ts"],"sourcesContent":["import { group } from './group.ts';\nimport { parse } from './parse.ts';\nimport type { Block, Chunk, ChunkOptions } from './types.ts';\n\n// Groups blocks a caller already parsed (e.g. scan/index.ts, sharing one parse with the FTS\n// text path) against the same body they came from, per opts (D1/D3).\nexport function chunkFromBlocks(blocks: Block[], body: string, opts?: ChunkOptions): Chunk[] {\n return group(blocks, body, opts);\n}\n\n// Pure, deterministic function of file content; chunk semantics are version-stamped via\n// CHUNK_VERSION (./version.ts). Algorithm and evidence: BENCHMARKING.md, \"The chunking algorithm\".\nexport function chunk(body: string, opts?: ChunkOptions): Chunk[] {\n return chunkFromBlocks(parse(body), body, opts);\n}\n\nexport { extractText } from './extract.ts';\nexport { DEFAULT_TARGET_TOKENS, estimateTokens } from './group.ts';\nexport { parse } from './parse.ts';\nexport type { Block, BlockType, Chunk, ChunkOptions } from './types.ts';\nexport { CHUNK_VERSION } from './version.ts';\n"],"names":["CHUNK_VERSION","DEFAULT_TARGET_TOKENS","chunk","chunkFromBlocks","estimateTokens","extractText","parse","blocks","body","opts","group"],"mappings":";;;;;;;;;;;QAoBSA;eAAAA,wBAAa;;QAHbC;eAAAA,8BAAqB;;QALdC;eAAAA;;QANAC;eAAAA;;QAWgBC;eAAAA,uBAAc;;QADrCC;eAAAA,sBAAW;;QAEXC;eAAAA,cAAK;;;uBAlBQ;uBACA;yBAeM;yBAIE;AAdvB,SAASH,gBAAgBI,MAAe,EAAEC,IAAY,EAAEC,IAAmB;IAChF,OAAOC,IAAAA,cAAK,EAACH,QAAQC,MAAMC;AAC7B;AAIO,SAASP,MAAMM,IAAY,EAAEC,IAAmB;IACrD,OAAON,gBAAgBG,IAAAA,cAAK,EAACE,OAAOA,MAAMC;AAC5C"}
@@ -0,0 +1,2 @@
1
+ import type { Block } from './types.js';
2
+ export declare function parse(body: string): Block[];
@@ -0,0 +1,2 @@
1
+ import type { Block } from './types.js';
2
+ export declare function parse(body: string): Block[];