deepclause-sdk 0.0.88 → 0.1.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 (318) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +418 -914
  3. package/dist/agent.d.ts +19 -2
  4. package/dist/agent.d.ts.map +1 -1
  5. package/dist/agent.js +221 -4
  6. package/dist/agent.js.map +1 -1
  7. package/dist/cli/config.d.ts +323 -176
  8. package/dist/cli/config.d.ts.map +1 -1
  9. package/dist/cli/config.js +146 -188
  10. package/dist/cli/config.js.map +1 -1
  11. package/dist/cli/index.d.ts +3 -2
  12. package/dist/cli/index.d.ts.map +1 -1
  13. package/dist/cli/index.js +61 -425
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/login.d.ts +29 -0
  16. package/dist/cli/login.d.ts.map +1 -0
  17. package/dist/cli/login.js +184 -0
  18. package/dist/cli/login.js.map +1 -0
  19. package/dist/cli/readline.d.ts +6 -0
  20. package/dist/cli/readline.d.ts.map +1 -0
  21. package/dist/cli/readline.js +15 -0
  22. package/dist/cli/readline.js.map +1 -0
  23. package/dist/cli/repl-bin.d.ts +9 -0
  24. package/dist/cli/repl-bin.d.ts.map +1 -0
  25. package/dist/cli/repl-bin.js +16 -0
  26. package/dist/cli/repl-bin.js.map +1 -0
  27. package/dist/cli/repl.d.ts +191 -0
  28. package/dist/cli/repl.d.ts.map +1 -0
  29. package/dist/cli/repl.js +1232 -0
  30. package/dist/cli/repl.js.map +1 -0
  31. package/dist/cli/run.d.ts +17 -18
  32. package/dist/cli/run.d.ts.map +1 -1
  33. package/dist/cli/run.js +196 -183
  34. package/dist/cli/run.js.map +1 -1
  35. package/dist/cli/set-backend.d.ts +53 -0
  36. package/dist/cli/set-backend.d.ts.map +1 -0
  37. package/dist/cli/set-backend.js +259 -0
  38. package/dist/cli/set-backend.js.map +1 -0
  39. package/dist/cli/visualize.d.ts +38 -0
  40. package/dist/cli/visualize.d.ts.map +1 -0
  41. package/dist/cli/visualize.js +125 -0
  42. package/dist/cli/visualize.js.map +1 -0
  43. package/dist/compiler.d.ts +5 -52
  44. package/dist/compiler.d.ts.map +1 -1
  45. package/dist/compiler.js +4 -768
  46. package/dist/compiler.js.map +1 -1
  47. package/dist/index.d.ts +29 -2
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +20 -2
  50. package/dist/index.js.map +1 -1
  51. package/dist/judge/index.d.ts +9 -0
  52. package/dist/judge/index.d.ts.map +1 -0
  53. package/dist/judge/index.js +6 -0
  54. package/dist/judge/index.js.map +1 -0
  55. package/dist/judge/jev.d.ts +21 -0
  56. package/dist/judge/jev.d.ts.map +1 -0
  57. package/dist/judge/jev.js +218 -0
  58. package/dist/judge/jev.js.map +1 -0
  59. package/dist/judge/llm.d.ts +23 -0
  60. package/dist/judge/llm.d.ts.map +1 -0
  61. package/dist/judge/llm.js +120 -0
  62. package/dist/judge/llm.js.map +1 -0
  63. package/dist/judge/marshal.d.ts +26 -0
  64. package/dist/judge/marshal.d.ts.map +1 -0
  65. package/dist/judge/marshal.js +266 -0
  66. package/dist/judge/marshal.js.map +1 -0
  67. package/dist/judge/mock.d.ts +28 -0
  68. package/dist/judge/mock.d.ts.map +1 -0
  69. package/dist/judge/mock.js +98 -0
  70. package/dist/judge/mock.js.map +1 -0
  71. package/dist/judge/types.d.ts +95 -0
  72. package/dist/judge/types.d.ts.map +1 -0
  73. package/dist/judge/types.js +23 -0
  74. package/dist/judge/types.js.map +1 -0
  75. package/dist/prolog/bridge.d.ts +5 -1
  76. package/dist/prolog/bridge.d.ts.map +1 -1
  77. package/dist/prolog/bridge.js +29 -1
  78. package/dist/prolog/bridge.js.map +1 -1
  79. package/dist/prolog-src/deepclause_analysis.pl +10 -2
  80. package/dist/prolog-src/deepclause_mi.pl +2522 -118
  81. package/dist/repl/agent.d.ts +72 -0
  82. package/dist/repl/agent.d.ts.map +1 -0
  83. package/dist/repl/agent.js +366 -0
  84. package/dist/repl/agent.js.map +1 -0
  85. package/dist/repl/auth.d.ts +45 -0
  86. package/dist/repl/auth.d.ts.map +1 -0
  87. package/dist/repl/auth.js +116 -0
  88. package/dist/repl/auth.js.map +1 -0
  89. package/dist/repl/backend.d.ts +290 -0
  90. package/dist/repl/backend.d.ts.map +1 -0
  91. package/dist/repl/backend.js +370 -0
  92. package/dist/repl/backend.js.map +1 -0
  93. package/dist/repl/compaction.d.ts +122 -0
  94. package/dist/repl/compaction.d.ts.map +1 -0
  95. package/dist/repl/compaction.js +318 -0
  96. package/dist/repl/compaction.js.map +1 -0
  97. package/dist/repl/export.d.ts +30 -0
  98. package/dist/repl/export.d.ts.map +1 -0
  99. package/dist/repl/export.js +23 -0
  100. package/dist/repl/export.js.map +1 -0
  101. package/dist/repl/frames.d.ts +21 -0
  102. package/dist/repl/frames.d.ts.map +1 -0
  103. package/dist/repl/frames.js +79 -0
  104. package/dist/repl/frames.js.map +1 -0
  105. package/dist/repl/harness-tools.d.ts +74 -0
  106. package/dist/repl/harness-tools.d.ts.map +1 -0
  107. package/dist/repl/harness-tools.js +121 -0
  108. package/dist/repl/harness-tools.js.map +1 -0
  109. package/dist/repl/highlight.d.ts +30 -0
  110. package/dist/repl/highlight.d.ts.map +1 -0
  111. package/dist/repl/highlight.js +285 -0
  112. package/dist/repl/highlight.js.map +1 -0
  113. package/dist/repl/history.d.ts +234 -0
  114. package/dist/repl/history.d.ts.map +1 -0
  115. package/dist/repl/history.js +661 -0
  116. package/dist/repl/history.js.map +1 -0
  117. package/dist/repl/index.d.ts +120 -0
  118. package/dist/repl/index.d.ts.map +1 -0
  119. package/dist/repl/index.js +107 -0
  120. package/dist/repl/index.js.map +1 -0
  121. package/dist/repl/judge.d.ts +51 -0
  122. package/dist/repl/judge.d.ts.map +1 -0
  123. package/dist/repl/judge.js +58 -0
  124. package/dist/repl/judge.js.map +1 -0
  125. package/dist/repl/markdown.d.ts +25 -0
  126. package/dist/repl/markdown.d.ts.map +1 -0
  127. package/dist/repl/markdown.js +103 -0
  128. package/dist/repl/markdown.js.map +1 -0
  129. package/dist/repl/picker.d.ts +34 -0
  130. package/dist/repl/picker.d.ts.map +1 -0
  131. package/dist/repl/picker.js +81 -0
  132. package/dist/repl/picker.js.map +1 -0
  133. package/dist/repl/project-context.d.ts +16 -0
  134. package/dist/repl/project-context.d.ts.map +1 -0
  135. package/dist/repl/project-context.js +23 -0
  136. package/dist/repl/project-context.js.map +1 -0
  137. package/dist/repl/render.d.ts +160 -0
  138. package/dist/repl/render.d.ts.map +1 -0
  139. package/dist/repl/render.js +715 -0
  140. package/dist/repl/render.js.map +1 -0
  141. package/dist/repl/session.d.ts +356 -0
  142. package/dist/repl/session.d.ts.map +1 -0
  143. package/dist/repl/session.js +1275 -0
  144. package/dist/repl/session.js.map +1 -0
  145. package/dist/repl/status.d.ts +100 -0
  146. package/dist/repl/status.d.ts.map +1 -0
  147. package/dist/repl/status.js +218 -0
  148. package/dist/repl/status.js.map +1 -0
  149. package/dist/repl/tools.d.ts +53 -0
  150. package/dist/repl/tools.d.ts.map +1 -0
  151. package/dist/repl/tools.js +307 -0
  152. package/dist/repl/tools.js.map +1 -0
  153. package/dist/repl/toolset.d.ts +32 -0
  154. package/dist/repl/toolset.d.ts.map +1 -0
  155. package/dist/repl/toolset.js +82 -0
  156. package/dist/repl/toolset.js.map +1 -0
  157. package/dist/repl/tui/editor.d.ts +17 -0
  158. package/dist/repl/tui/editor.d.ts.map +1 -0
  159. package/dist/repl/tui/editor.js +39 -0
  160. package/dist/repl/tui/editor.js.map +1 -0
  161. package/dist/repl/tui/status-bar.d.ts +26 -0
  162. package/dist/repl/tui/status-bar.d.ts.map +1 -0
  163. package/dist/repl/tui/status-bar.js +47 -0
  164. package/dist/repl/tui/status-bar.js.map +1 -0
  165. package/dist/repl/tui/theme.d.ts +30 -0
  166. package/dist/repl/tui/theme.d.ts.map +1 -0
  167. package/dist/repl/tui/theme.js +81 -0
  168. package/dist/repl/tui/theme.js.map +1 -0
  169. package/dist/repl/tui/transcript.d.ts +39 -0
  170. package/dist/repl/tui/transcript.d.ts.map +1 -0
  171. package/dist/repl/tui/transcript.js +123 -0
  172. package/dist/repl/tui/transcript.js.map +1 -0
  173. package/dist/runner.d.ts +145 -13
  174. package/dist/runner.d.ts.map +1 -1
  175. package/dist/runner.js +600 -282
  176. package/dist/runner.js.map +1 -1
  177. package/dist/sdk.d.ts.map +1 -1
  178. package/dist/sdk.js +56 -32
  179. package/dist/sdk.js.map +1 -1
  180. package/dist/system/assets/docs/AGENT_PROMPT.md +1373 -0
  181. package/dist/system/assets/docs/DML_AUTHORING.md +195 -0
  182. package/dist/system/assets/docs/DML_REFERENCE.md +393 -72
  183. package/dist/system/assets/docs/HARNESS_EXAMPLES.md +172 -0
  184. package/dist/system/assets/docs/HARNESS_PATTERNS.md +562 -0
  185. package/dist/system/assets/docs/META_PROMPT.md +68 -0
  186. package/dist/system/assets/docs/PROLOG_SNIPPETS.md +117 -0
  187. package/dist/system/assets/index.d.ts +9 -17
  188. package/dist/system/assets/index.d.ts.map +1 -1
  189. package/dist/system/assets/index.js +26 -85
  190. package/dist/system/assets/index.js.map +1 -1
  191. package/dist/system/runtime/agentvm-manager.d.ts +9 -2
  192. package/dist/system/runtime/agentvm-manager.d.ts.map +1 -1
  193. package/dist/system/runtime/agentvm-manager.js +70 -44
  194. package/dist/system/runtime/agentvm-manager.js.map +1 -1
  195. package/dist/system/runtime/media.d.ts +23 -0
  196. package/dist/system/runtime/media.d.ts.map +1 -0
  197. package/dist/system/runtime/media.js +55 -0
  198. package/dist/system/runtime/media.js.map +1 -0
  199. package/dist/system/runtime/shell-limits.d.ts +21 -0
  200. package/dist/system/runtime/shell-limits.d.ts.map +1 -0
  201. package/dist/system/runtime/shell-limits.js +39 -0
  202. package/dist/system/runtime/shell-limits.js.map +1 -0
  203. package/dist/system/runtime/shell-manager.d.ts +8 -3
  204. package/dist/system/runtime/shell-manager.d.ts.map +1 -1
  205. package/dist/system/runtime/shell-manager.js +56 -39
  206. package/dist/system/runtime/shell-manager.js.map +1 -1
  207. package/dist/system/runtime/shell-tool-events.js +5 -0
  208. package/dist/system/runtime/shell-tool-events.js.map +1 -1
  209. package/dist/system/runtime/token-usage.d.ts +2 -0
  210. package/dist/system/runtime/token-usage.d.ts.map +1 -1
  211. package/dist/system/runtime/token-usage.js +7 -0
  212. package/dist/system/runtime/token-usage.js.map +1 -1
  213. package/dist/tools.d.ts +3 -21
  214. package/dist/tools.d.ts.map +1 -1
  215. package/dist/tools.js +14 -168
  216. package/dist/tools.js.map +1 -1
  217. package/dist/types.d.ts +149 -118
  218. package/dist/types.d.ts.map +1 -1
  219. package/dist/validate.d.ts +19 -0
  220. package/dist/validate.d.ts.map +1 -0
  221. package/dist/validate.js +338 -0
  222. package/dist/validate.js.map +1 -0
  223. package/dist/visualize/index.d.ts +52 -0
  224. package/dist/visualize/index.d.ts.map +1 -0
  225. package/dist/visualize/index.js +189 -0
  226. package/dist/visualize/index.js.map +1 -0
  227. package/package.json +17 -15
  228. package/src/prolog-src/deepclause_analysis.pl +10 -2
  229. package/src/prolog-src/deepclause_mi.pl +2522 -118
  230. package/dist/cli/commands.d.ts +0 -42
  231. package/dist/cli/commands.d.ts.map +0 -1
  232. package/dist/cli/commands.js +0 -246
  233. package/dist/cli/commands.js.map +0 -1
  234. package/dist/cli/compile.d.ts +0 -99
  235. package/dist/cli/compile.d.ts.map +0 -1
  236. package/dist/cli/compile.js +0 -363
  237. package/dist/cli/compile.js.map +0 -1
  238. package/dist/cli/default-skills.d.ts +0 -10
  239. package/dist/cli/default-skills.d.ts.map +0 -1
  240. package/dist/cli/default-skills.js +0 -206
  241. package/dist/cli/default-skills.js.map +0 -1
  242. package/dist/cli/interactive.d.ts +0 -2
  243. package/dist/cli/interactive.d.ts.map +0 -1
  244. package/dist/cli/interactive.js +0 -20
  245. package/dist/cli/interactive.js.map +0 -1
  246. package/dist/cli/mcp.d.ts +0 -56
  247. package/dist/cli/mcp.d.ts.map +0 -1
  248. package/dist/cli/mcp.js +0 -138
  249. package/dist/cli/mcp.js.map +0 -1
  250. package/dist/cli/prompt.d.ts +0 -2
  251. package/dist/cli/prompt.d.ts.map +0 -1
  252. package/dist/cli/prompt.js +0 -2
  253. package/dist/cli/prompt.js.map +0 -1
  254. package/dist/cli/search.d.ts +0 -19
  255. package/dist/cli/search.d.ts.map +0 -1
  256. package/dist/cli/search.js +0 -189
  257. package/dist/cli/search.js.map +0 -1
  258. package/dist/cli/tool-args.d.ts +0 -2
  259. package/dist/cli/tool-args.d.ts.map +0 -1
  260. package/dist/cli/tool-args.js +0 -39
  261. package/dist/cli/tool-args.js.map +0 -1
  262. package/dist/cli/tools.d.ts +0 -36
  263. package/dist/cli/tools.d.ts.map +0 -1
  264. package/dist/cli/tools.js +0 -229
  265. package/dist/cli/tools.js.map +0 -1
  266. package/dist/cli/tui/index.d.ts +0 -22
  267. package/dist/cli/tui/index.d.ts.map +0 -1
  268. package/dist/cli/tui/index.js +0 -29
  269. package/dist/cli/tui/index.js.map +0 -1
  270. package/dist/cli/tui.d.ts +0 -167
  271. package/dist/cli/tui.d.ts.map +0 -1
  272. package/dist/cli/tui.js +0 -5228
  273. package/dist/cli/tui.js.map +0 -1
  274. package/dist/compiler_prompt.d.ts +0 -20
  275. package/dist/compiler_prompt.d.ts.map +0 -1
  276. package/dist/compiler_prompt.js +0 -870
  277. package/dist/compiler_prompt.js.map +0 -1
  278. package/dist/deepclause-cli.skill +0 -0
  279. package/dist/prolog-src/deepclause_mi.pl.bak +0 -570
  280. package/dist/system/assets/compactors/default-memory-compactor.dml +0 -6
  281. package/dist/system/assets/docs/CONDUCTOR_PROMPT.md +0 -105
  282. package/dist/system/assets/docs/DML_COMPILER_PROMPT.md +0 -700
  283. package/dist/system/assets/docs/TUI.md +0 -150
  284. package/dist/system/assets/recipes/deepclause-coding-workflow/SKILL.md +0 -100
  285. package/dist/system/assets/skills/conductor.dml +0 -76
  286. package/dist/system/assets/skills/deep-planner.dml +0 -412
  287. package/dist/system/assets/skills/plan.dml +0 -429
  288. package/dist/system/assets/skills/security-planner.dml +0 -337
  289. package/dist/system/assets/skills/skill-creator.dml +0 -187
  290. package/dist/system/runtime/catalog-recipes.d.ts +0 -24
  291. package/dist/system/runtime/catalog-recipes.d.ts.map +0 -1
  292. package/dist/system/runtime/catalog-recipes.js +0 -273
  293. package/dist/system/runtime/catalog-recipes.js.map +0 -1
  294. package/dist/system/runtime/catalog-skills.d.ts +0 -50
  295. package/dist/system/runtime/catalog-skills.d.ts.map +0 -1
  296. package/dist/system/runtime/catalog-skills.js +0 -152
  297. package/dist/system/runtime/catalog-skills.js.map +0 -1
  298. package/dist/system/runtime/conductor.d.ts +0 -105
  299. package/dist/system/runtime/conductor.d.ts.map +0 -1
  300. package/dist/system/runtime/conductor.js +0 -732
  301. package/dist/system/runtime/conductor.js.map +0 -1
  302. package/dist/system/runtime/console-capture.d.ts +0 -9
  303. package/dist/system/runtime/console-capture.d.ts.map +0 -1
  304. package/dist/system/runtime/console-capture.js +0 -67
  305. package/dist/system/runtime/console-capture.js.map +0 -1
  306. package/dist/system/runtime/dml-executor.d.ts +0 -52
  307. package/dist/system/runtime/dml-executor.d.ts.map +0 -1
  308. package/dist/system/runtime/dml-executor.js +0 -203
  309. package/dist/system/runtime/dml-executor.js.map +0 -1
  310. package/dist/system/runtime/runtime-tools.d.ts +0 -31
  311. package/dist/system/runtime/runtime-tools.d.ts.map +0 -1
  312. package/dist/system/runtime/runtime-tools.js +0 -312
  313. package/dist/system/runtime/runtime-tools.js.map +0 -1
  314. package/dist/system/runtime/skill-creator.d.ts +0 -38
  315. package/dist/system/runtime/skill-creator.d.ts.map +0 -1
  316. package/dist/system/runtime/skill-creator.js +0 -763
  317. package/dist/system/runtime/skill-creator.js.map +0 -1
  318. package/src/prolog-src/deepclause_mi.pl.bak +0 -570
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Helpers shared by the REPL session/frame layers.
3
+ *
4
+ * The frame stack itself lives in the Prolog runtime (`session_frame/4`,
5
+ * `step_frame/4`) and is driven by `DMLRunner.runFrame`. These helpers cover
6
+ * the Prolog-term marshalling and small presentation utilities the REPL needs.
7
+ */
8
+ /** Unwrap a swipl-wasm tagged value (`{ $t, v }`) into a plain JS value. */
9
+ export function plainValue(value) {
10
+ if (value && typeof value === 'object') {
11
+ const tagged = value;
12
+ if (tagged.$t) {
13
+ return tagged.v;
14
+ }
15
+ }
16
+ return value;
17
+ }
18
+ /** Convert a JS value into a Prolog term string, mirroring DMLRunner.toPrologTerm. */
19
+ export function toPrologTerm(value) {
20
+ if (value === null || value === undefined) {
21
+ return 'null';
22
+ }
23
+ if (typeof value === 'string') {
24
+ return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
25
+ }
26
+ if (typeof value === 'number') {
27
+ return String(value);
28
+ }
29
+ if (typeof value === 'boolean') {
30
+ return value ? 'true' : 'false';
31
+ }
32
+ if (Array.isArray(value)) {
33
+ return `[${value.map((item) => toPrologTerm(item)).join(', ')}]`;
34
+ }
35
+ if (typeof value === 'object') {
36
+ const entries = Object.entries(value)
37
+ .map(([key, item]) => `${quoteAtom(key)}: ${toPrologTerm(item)}`)
38
+ .join(', ');
39
+ return `dict{${entries}}`;
40
+ }
41
+ return 'null';
42
+ }
43
+ /** Quote a string as a single-line Prolog string literal. */
44
+ export function quotePrologString(value) {
45
+ const escaped = value
46
+ .replace(/\\/g, '\\\\')
47
+ .replace(/"/g, '\\"')
48
+ .replace(/\r/g, '\\r')
49
+ .replace(/\n/g, '\\n')
50
+ .replace(/\t/g, '\\t');
51
+ return `"${escaped}"`;
52
+ }
53
+ /** Quote a string as a Prolog atom when needed. */
54
+ export function quoteAtom(value) {
55
+ if (/^[a-z][a-zA-Z0-9_]*$/.test(value)) {
56
+ return value;
57
+ }
58
+ return `'${value.replace(/'/g, "''")}'`;
59
+ }
60
+ /** Build a `params{...}` dict term from a JS record (keys lowercased). */
61
+ export function buildParamsTerm(params) {
62
+ const entries = Object.entries(params)
63
+ .map(([key, value]) => `${key.toLowerCase()}: ${toPrologTerm(value)}`)
64
+ .join(', ');
65
+ return `params{${entries}}`;
66
+ }
67
+ /** Human label for a frame kind, used by the renderer. */
68
+ export function frameKindLabel(kind) {
69
+ switch (kind) {
70
+ case 'object':
71
+ return 'run';
72
+ case 'nested':
73
+ return 'nested';
74
+ case 'query':
75
+ default:
76
+ return 'query';
77
+ }
78
+ }
79
+ //# sourceMappingURL=frames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/repl/frames.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Harness tools for the REPL authoring agent.
3
+ *
4
+ * Unlike the old meta tools (which ran inside the Prolog meta frame), these are
5
+ * plain host tools the TypeScript `HarnessAgent` calls directly. They operate on
6
+ * the live harness through a `HarnessToolController` implemented by `DMLSession`.
7
+ */
8
+ import type { DMLEvent, ToolDefinition } from '../types.js';
9
+ export interface HarnessExecuteResult {
10
+ bindings: Array<{
11
+ name: string;
12
+ value: string;
13
+ }>;
14
+ solutions: Array<Array<{
15
+ name: string;
16
+ value: string;
17
+ }>>;
18
+ output: string;
19
+ error?: string;
20
+ /** Wall-clock duration of the goal, in milliseconds. */
21
+ elapsedMs: number;
22
+ }
23
+ export interface HarnessCommitResult {
24
+ committed: boolean;
25
+ /** Predicates added/replaced/removed by the commit. */
26
+ changed?: string[];
27
+ error?: string;
28
+ }
29
+ /** The harness operations the authoring agent needs. Implemented by `DMLSession`. */
30
+ export interface HarnessToolController {
31
+ isFrozen(): boolean;
32
+ /** Read the harness: `all`, `Name/Arity`, `tools`, or a name prefix. */
33
+ listing(filter: string): Promise<string>;
34
+ /** Concise harness manifest for the system prompt. */
35
+ manifest(): Promise<string>;
36
+ /** Snapshot the harness and open a transaction. */
37
+ beginTurn(): Promise<void>;
38
+ /** Validate and commit the open transaction; records a history version. */
39
+ endTurn(): Promise<HarnessCommitResult>;
40
+ /** Restore the last snapshot and discard edits. */
41
+ rollbackTurn(): Promise<void>;
42
+ /** Replace a predicate with the given complete clause block. */
43
+ define(head: string, clauses: string): Promise<{
44
+ ok: boolean;
45
+ error?: string;
46
+ }>;
47
+ /** Assert one clause (new predicates only). */
48
+ assertClause(clause: string): Promise<{
49
+ ok: boolean;
50
+ error?: string;
51
+ }>;
52
+ /** Assert a block of clauses in order. */
53
+ assertMany(clauses: string): Promise<{
54
+ ok: boolean;
55
+ error?: string;
56
+ }>;
57
+ /** Retract matching clauses. */
58
+ retractClause(clause: string): Promise<{
59
+ ok: boolean;
60
+ error?: string;
61
+ }>;
62
+ /** Delete a predicate by `Name/Arity`. */
63
+ deletePredicate(nameArity: string): Promise<{
64
+ ok: boolean;
65
+ error?: string;
66
+ }>;
67
+ /** Run a DML goal against the scratch harness. */
68
+ execute(goal: string, limit?: number, signal?: AbortSignal, onEvent?: (event: DMLEvent) => void): Promise<HarnessExecuteResult>;
69
+ /** DML reference / authoring guide / examples / snippets. */
70
+ reference(topic: string): Promise<string>;
71
+ }
72
+ /** Build the authoring agent's harness tools. */
73
+ export declare function createHarnessTools(controller: HarnessToolController): Map<string, ToolDefinition>;
74
+ //# sourceMappingURL=harness-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-tools.d.ts","sourceRoot":"","sources":["../../src/repl/harness-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qFAAqF;AACrF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,IAAI,OAAO,CAAC;IACpB,wEAAwE;IACxE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,sDAAsD;IACtD,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,mDAAmD;IACnD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,2EAA2E;IAC3E,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACxC,mDAAmD;IACnD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,gEAAgE;IAChE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChF,+CAA+C;IAC/C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,0CAA0C;IAC1C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE,gCAAgC;IAChC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,0CAA0C;IAC1C,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,kDAAkD;IAClD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAChI,6DAA6D;IAC7D,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3C;AAQD,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,qBAAqB,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CA6HjG"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Harness tools for the REPL authoring agent.
3
+ *
4
+ * Unlike the old meta tools (which ran inside the Prolog meta frame), these are
5
+ * plain host tools the TypeScript `HarnessAgent` calls directly. They operate on
6
+ * the live harness through a `HarnessToolController` implemented by `DMLSession`.
7
+ */
8
+ function text(message) {
9
+ return { text: message };
10
+ }
11
+ const stringProp = (description) => ({ type: 'string', description });
12
+ /** Build the authoring agent's harness tools. */
13
+ export function createHarnessTools(controller) {
14
+ const tools = new Map();
15
+ const frozenError = (name) => controller.isFrozen() ? { ok: false, error: `harness is frozen; ${name} is disabled` } : undefined;
16
+ tools.set('listing', {
17
+ description: 'Read the harness: all predicates (filter "all"), one predicate ("Name/Arity"), "tools", "scripts", or a name prefix. Call this before editing.',
18
+ parameters: {
19
+ type: 'object',
20
+ properties: { filter: stringProp('all (default), a Name/Arity, tools, scripts, or a name prefix.') },
21
+ required: [],
22
+ },
23
+ execute: async (args) => text(await controller.listing(String(args.filter ?? 'all').trim() || 'all')),
24
+ });
25
+ tools.set('begin_turn', {
26
+ description: 'Open an edit transaction (snapshot the harness). You MUST call this before the first edit; `define`/`assert`/`assert_many`/`retract`/`delete` are refused while no transaction is open. `end_turn` commits it, `rollback` discards it.',
27
+ parameters: { type: 'object', properties: {}, required: [] },
28
+ execute: async () => {
29
+ await controller.beginTurn();
30
+ return { ok: true };
31
+ },
32
+ });
33
+ tools.set('end_turn', {
34
+ description: 'Validate and commit the open transaction (opened by begin_turn) and record a harness version. Returns the predicates changed.',
35
+ parameters: {
36
+ type: 'object',
37
+ properties: { summary: stringProp('One-line summary of the change (optional).') },
38
+ required: [],
39
+ },
40
+ execute: async () => controller.endTurn(),
41
+ });
42
+ tools.set('rollback', {
43
+ description: 'Discard every edit made in the current transaction and restore the last committed harness.',
44
+ parameters: { type: 'object', properties: {}, required: [] },
45
+ execute: async () => {
46
+ await controller.rollbackTurn();
47
+ return { ok: true };
48
+ },
49
+ });
50
+ tools.set('define', {
51
+ description: 'Replace the predicate(s) defined by a clause block: remove every predicate the block defines (plus the head pattern) and assert the block in order. Requires an open transaction (call begin_turn first). Use this for any change to existing predicates — a block may define several.',
52
+ parameters: {
53
+ type: 'object',
54
+ properties: {
55
+ head: stringProp('A head pattern naming the predicate, e.g. "describe_image(Path, Text)".'),
56
+ clauses: stringProp('The complete clause block, in order, each clause ending with a period.'),
57
+ },
58
+ required: ['head', 'clauses'],
59
+ },
60
+ execute: async (args) => frozenError('define') ?? controller.define(String(args.head ?? ''), String(args.clauses ?? '')),
61
+ });
62
+ tools.set('assert', {
63
+ description: 'Assert one clause. Requires an open transaction (call begin_turn first). Use only for a new predicate — assert appends, so asserting over an existing predicate duplicates clauses. Use define to change one.',
64
+ parameters: {
65
+ type: 'object',
66
+ properties: { clause: stringProp('The DML clause/fact text to assert (no trailing period required).') },
67
+ required: ['clause'],
68
+ },
69
+ execute: async (args) => frozenError('assert') ?? controller.assertClause(String(args.clause ?? '')),
70
+ });
71
+ tools.set('assert_many', {
72
+ description: 'Assert a block of clauses in the order written. Requires an open transaction (call begin_turn first). Use this to define a whole predicate so clause order (base case before recursive rule) is preserved.',
73
+ parameters: {
74
+ type: 'object',
75
+ properties: { clauses: stringProp('The DML clauses/facts, in order, each ending with a period.') },
76
+ required: ['clauses'],
77
+ },
78
+ execute: async (args) => frozenError('assert_many') ?? controller.assertMany(String(args.clauses ?? '')),
79
+ });
80
+ tools.set('retract', {
81
+ description: 'Remove matching clauses from the harness. Requires an open transaction (call begin_turn first). Reserved names are protected.',
82
+ parameters: {
83
+ type: 'object',
84
+ properties: { clause: stringProp('The clause pattern to retract (no trailing period required).') },
85
+ required: ['clause'],
86
+ },
87
+ execute: async (args) => frozenError('retract') ?? controller.retractClause(String(args.clause ?? '')),
88
+ });
89
+ tools.set('delete', {
90
+ description: 'Delete a predicate entirely (abolishes all its clauses), e.g. delete("describe_image/2"). Requires an open transaction (call begin_turn first).',
91
+ parameters: {
92
+ type: 'object',
93
+ properties: { predicate: stringProp('The predicate indicator to delete, e.g. "describe_image/2".') },
94
+ required: ['predicate'],
95
+ },
96
+ execute: async (args) => frozenError('delete') ?? controller.deletePredicate(String(args.predicate ?? '')),
97
+ });
98
+ tools.set('execute', {
99
+ description: 'Run a DML goal against the scratch harness and return its bindings and output. Use this to test changes before committing.',
100
+ parameters: {
101
+ type: 'object',
102
+ properties: {
103
+ goal: stringProp('The DML goal to run, e.g. "fact(5, F)".'),
104
+ limit: { type: 'integer', description: 'Maximum solutions to collect (default 5).' },
105
+ },
106
+ required: ['goal'],
107
+ },
108
+ execute: async (args, context) => controller.execute(String(args.goal ?? ''), typeof args.limit === 'number' ? args.limit : undefined, context?.signal, context?.onEvent),
109
+ });
110
+ tools.set('reference', {
111
+ description: 'Read DeepClause language documentation. Topics: "language" (DML reference), "authoring" (authoring guide), "patterns" (harness patterns by use case), "examples" (harness examples), "snippets" (Prolog snippets), "tools" (host tool catalog).',
112
+ parameters: {
113
+ type: 'object',
114
+ properties: { topic: stringProp('language | authoring | examples | snippets | tools.') },
115
+ required: ['topic'],
116
+ },
117
+ execute: async (args) => text(await controller.reference(String(args.topic ?? 'language'))),
118
+ });
119
+ return tools;
120
+ }
121
+ //# sourceMappingURL=harness-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-tools.js","sourceRoot":"","sources":["../../src/repl/harness-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Prolog/DML syntax highlighting and listing cleanup for the REPL.
3
+ *
4
+ * The runtime prints listings as Prolog source (`~q`), which is dense and long.
5
+ * `formatListing` cleans it up for display (one predicate per block, merged
6
+ * doc line, top-level conjuncts on separate lines) and applies ANSI syntax
7
+ * highlighting. It is display-only: the raw text is what the model and files
8
+ * see.
9
+ */
10
+ export interface FormatListingOptions {
11
+ /** Apply ANSI colors. When false, only the structural cleanup is done. */
12
+ color?: boolean;
13
+ }
14
+ type TokenKind = 'space' | 'comment' | 'string' | 'quotedAtom' | 'variable' | 'number' | 'atom' | 'functor' | 'operator' | 'cut' | 'other';
15
+ interface Token {
16
+ kind: TokenKind;
17
+ value: string;
18
+ }
19
+ /** Tokenize Prolog source well enough to color it and to find top-level commas. */
20
+ export declare function tokenizeProlog(input: string): Token[];
21
+ /** Highlight one line of Prolog, preserving its visible text exactly. */
22
+ export declare function highlightProlog(text: string, color?: boolean): string;
23
+ /** Split a clause body line on top-level commas (ignoring quoted/parenthesized ones). */
24
+ export declare function splitTopLevelGoals(line: string): string[];
25
+ /** Clean up a listing: merge doc lines, group predicates, split long bodies. */
26
+ export declare function reflowListing(text: string): string;
27
+ /** Clean and highlight a README-style Prolog listing for display. */
28
+ export declare function formatListing(text: string, options?: FormatListingOptions): string;
29
+ export {};
30
+ //# sourceMappingURL=highlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/repl/highlight.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAgBD,KAAK,SAAS,GACV,OAAO,GACP,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,QAAQ,GACR,MAAM,GACN,SAAS,GACT,UAAU,GACV,KAAK,GACL,OAAO,CAAC;AAEZ,UAAU,KAAK;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAoBD,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CA2HrD;AAgBD,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,UAAO,GAAG,MAAM,CAQlE;AAMD,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA2BzD;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8ClD;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,MAAM,CActF"}
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Prolog/DML syntax highlighting and listing cleanup for the REPL.
3
+ *
4
+ * The runtime prints listings as Prolog source (`~q`), which is dense and long.
5
+ * `formatListing` cleans it up for display (one predicate per block, merged
6
+ * doc line, top-level conjuncts on separate lines) and applies ANSI syntax
7
+ * highlighting. It is display-only: the raw text is what the model and files
8
+ * see.
9
+ */
10
+ const ANSI = {
11
+ reset: '\u001b[0m',
12
+ /** Predicate header (`name/arity`). */
13
+ header: '\u001b[1;36m',
14
+ comment: '\u001b[38;5;244m',
15
+ string: '\u001b[38;5;179m',
16
+ quotedAtom: '\u001b[38;5;80m',
17
+ variable: '\u001b[38;5;111m',
18
+ number: '\u001b[38;5;215m',
19
+ functor: '\u001b[38;5;81m',
20
+ operator: '\u001b[38;5;245m',
21
+ cut: '\u001b[1;31m',
22
+ };
23
+ const SYMBOL_CHARS = '+-*/\\^<>=~:.?@#&$';
24
+ function isDigit(char) {
25
+ return char >= '0' && char <= '9';
26
+ }
27
+ function isLower(char) {
28
+ return char >= 'a' && char <= 'z';
29
+ }
30
+ function isUpper(char) {
31
+ return char >= 'A' && char <= 'Z';
32
+ }
33
+ function isWordChar(char) {
34
+ return /[A-Za-z0-9_]/.test(char);
35
+ }
36
+ /** Tokenize Prolog source well enough to color it and to find top-level commas. */
37
+ export function tokenizeProlog(input) {
38
+ const tokens = [];
39
+ const length = input.length;
40
+ let index = 0;
41
+ while (index < length) {
42
+ const char = input[index];
43
+ // Line comment.
44
+ if (char === '%') {
45
+ let end = index;
46
+ while (end < length && input[end] !== '\n')
47
+ end += 1;
48
+ tokens.push({ kind: 'comment', value: input.slice(index, end) });
49
+ index = end;
50
+ continue;
51
+ }
52
+ // Block comment.
53
+ if (char === '/' && input[index + 1] === '*') {
54
+ let end = index + 2;
55
+ while (end < length && !(input[end] === '*' && input[end + 1] === '/'))
56
+ end += 1;
57
+ end = Math.min(length, end + 2);
58
+ tokens.push({ kind: 'comment', value: input.slice(index, end) });
59
+ index = end;
60
+ continue;
61
+ }
62
+ // Strings, quoted atoms, and back-quoted codes.
63
+ if (char === '"' || char === "'" || char === '`') {
64
+ const quote = char;
65
+ let end = index + 1;
66
+ while (end < length) {
67
+ if (input[end] === '\\') {
68
+ end += 2;
69
+ continue;
70
+ }
71
+ if (input[end] === quote) {
72
+ end += 1;
73
+ break;
74
+ }
75
+ end += 1;
76
+ }
77
+ tokens.push({
78
+ kind: quote === '"' ? 'string' : quote === "'" ? 'quotedAtom' : 'string',
79
+ value: input.slice(index, end),
80
+ });
81
+ index = end;
82
+ continue;
83
+ }
84
+ // Numbers (integer/float, including `_` separators).
85
+ if (isDigit(char)) {
86
+ let end = index;
87
+ while (end < length && /[0-9_]/.test(input[end]))
88
+ end += 1;
89
+ if (input[end] === '.' && isDigit(input[end + 1])) {
90
+ end += 1;
91
+ while (end < length && isDigit(input[end]))
92
+ end += 1;
93
+ }
94
+ if ((input[end] === 'e' || input[end] === 'E') && (isDigit(input[end + 1]) || input[end + 1] === '-' || input[end + 1] === '+')) {
95
+ end += 2;
96
+ while (end < length && isDigit(input[end]))
97
+ end += 1;
98
+ }
99
+ tokens.push({ kind: 'number', value: input.slice(index, end) });
100
+ index = end;
101
+ continue;
102
+ }
103
+ // Variables.
104
+ if (isUpper(char) || char === '_') {
105
+ let end = index;
106
+ while (end < length && isWordChar(input[end]))
107
+ end += 1;
108
+ tokens.push({ kind: 'variable', value: input.slice(index, end) });
109
+ index = end;
110
+ continue;
111
+ }
112
+ // Atoms.
113
+ if (isLower(char)) {
114
+ let end = index;
115
+ while (end < length && isWordChar(input[end]))
116
+ end += 1;
117
+ tokens.push({ kind: 'atom', value: input.slice(index, end) });
118
+ index = end;
119
+ continue;
120
+ }
121
+ // Cut.
122
+ if (char === '!') {
123
+ tokens.push({ kind: 'cut', value: '!' });
124
+ index += 1;
125
+ continue;
126
+ }
127
+ // Symbolic operators.
128
+ if (SYMBOL_CHARS.includes(char)) {
129
+ let end = index;
130
+ while (end < length && SYMBOL_CHARS.includes(input[end]))
131
+ end += 1;
132
+ tokens.push({ kind: 'operator', value: input.slice(index, end) });
133
+ index = end;
134
+ continue;
135
+ }
136
+ // Brackets, commas, bars, semicolons.
137
+ if ('()[]{},|;'.includes(char)) {
138
+ tokens.push({ kind: 'operator', value: char });
139
+ index += 1;
140
+ continue;
141
+ }
142
+ // Whitespace.
143
+ if (/\s/.test(char)) {
144
+ let end = index;
145
+ while (end < length && /\s/.test(input[end]))
146
+ end += 1;
147
+ tokens.push({ kind: 'space', value: input.slice(index, end) });
148
+ index = end;
149
+ continue;
150
+ }
151
+ tokens.push({ kind: 'other', value: char });
152
+ index += 1;
153
+ }
154
+ // An atom immediately followed by `(` or `[` is a functor/call: color it.
155
+ for (let i = 0; i < tokens.length; i += 1) {
156
+ if (tokens[i].kind !== 'atom')
157
+ continue;
158
+ let j = i + 1;
159
+ while (j < tokens.length && tokens[j].kind === 'space')
160
+ j += 1;
161
+ if (tokens[j] && (tokens[j].value === '(' || tokens[j].value === '[')) {
162
+ tokens[i] = { kind: 'functor', value: tokens[i].value };
163
+ }
164
+ }
165
+ return tokens;
166
+ }
167
+ function colorFor(kind) {
168
+ switch (kind) {
169
+ case 'comment': return ANSI.comment;
170
+ case 'string': return ANSI.string;
171
+ case 'quotedAtom': return ANSI.quotedAtom;
172
+ case 'variable': return ANSI.variable;
173
+ case 'number': return ANSI.number;
174
+ case 'functor': return ANSI.functor;
175
+ case 'operator': return ANSI.operator;
176
+ case 'cut': return ANSI.cut;
177
+ default: return undefined;
178
+ }
179
+ }
180
+ /** Highlight one line of Prolog, preserving its visible text exactly. */
181
+ export function highlightProlog(text, color = true) {
182
+ if (!color)
183
+ return text;
184
+ return tokenizeProlog(text)
185
+ .map((token) => {
186
+ const code = colorFor(token.kind);
187
+ return code ? `${code}${token.value}${ANSI.reset}` : token.value;
188
+ })
189
+ .join('');
190
+ }
191
+ function isPredicateHeader(line) {
192
+ return /^[a-z][A-Za-z0-9_]*\/\d+$/.test(line.trim());
193
+ }
194
+ /** Split a clause body line on top-level commas (ignoring quoted/parenthesized ones). */
195
+ export function splitTopLevelGoals(line) {
196
+ const indent = /^(\s*)/.exec(line)?.[1] ?? '';
197
+ const body = line.slice(indent.length);
198
+ const tokens = tokenizeProlog(body);
199
+ const segments = [];
200
+ let depth = 0;
201
+ let start = 0;
202
+ let offset = 0;
203
+ for (const token of tokens) {
204
+ const tokenStart = offset;
205
+ offset += token.value.length;
206
+ if (token.kind === 'space' || token.kind === 'comment')
207
+ continue;
208
+ if (token.kind === 'operator') {
209
+ if (token.value === '(' || token.value === '[' || token.value === '{') {
210
+ depth += 1;
211
+ }
212
+ else if (token.value === ')' || token.value === ']' || token.value === '}') {
213
+ depth = Math.max(0, depth - 1);
214
+ }
215
+ else if (token.value === ',' && depth === 0) {
216
+ segments.push(body.slice(start, tokenStart + 1).trimEnd());
217
+ start = tokenStart + 1;
218
+ }
219
+ }
220
+ }
221
+ segments.push(body.slice(start).trimEnd());
222
+ return segments.map((segment) => `${indent}${segment.trimStart()}`);
223
+ }
224
+ /** Clean up a listing: merge doc lines, group predicates, split long bodies. */
225
+ export function reflowListing(text) {
226
+ const lines = text.replace(/\r\n?/g, '\n').split('\n');
227
+ const out = [];
228
+ let inBody = false;
229
+ for (const rawLine of lines) {
230
+ const line = rawLine.replace(/\s+$/, '');
231
+ if (line.trim() === '') {
232
+ out.push('');
233
+ inBody = false;
234
+ continue;
235
+ }
236
+ // A predicate header, optionally followed by its `% doc` line.
237
+ if (isPredicateHeader(line)) {
238
+ if (out.length > 0 && out[out.length - 1] !== '')
239
+ out.push('');
240
+ out.push(line.trim());
241
+ inBody = false;
242
+ continue;
243
+ }
244
+ // A `% doc` line directly under a header becomes part of the header block.
245
+ if (line.trim().startsWith('%') && out.length > 0 && isPredicateHeader(out[out.length - 1])) {
246
+ out[out.length - 1] = `${out[out.length - 1]} ${line.trim()}`;
247
+ continue;
248
+ }
249
+ // `head(...) :-` starts a clause body on the following line(s).
250
+ if (line.trimEnd().endsWith(':-')) {
251
+ out.push(line.trimEnd());
252
+ inBody = true;
253
+ continue;
254
+ }
255
+ if (inBody) {
256
+ out.push(...splitTopLevelGoals(line));
257
+ inBody = false;
258
+ continue;
259
+ }
260
+ out.push(line);
261
+ }
262
+ // Trim leading/trailing blank lines.
263
+ while (out.length > 0 && out[0] === '')
264
+ out.shift();
265
+ while (out.length > 0 && out[out.length - 1] === '')
266
+ out.pop();
267
+ return out.join('\n');
268
+ }
269
+ /** Clean and highlight a README-style Prolog listing for display. */
270
+ export function formatListing(text, options = {}) {
271
+ const color = options.color ?? true;
272
+ const cleaned = reflowListing(text);
273
+ return cleaned
274
+ .split('\n')
275
+ .map((line) => {
276
+ const header = /^([a-z][A-Za-z0-9_]*\/\d+)(\s+%.*)?$/.exec(line);
277
+ if (header && color) {
278
+ const rest = header[2] ?? '';
279
+ return `${ANSI.header}${header[1]}${ANSI.reset}${highlightProlog(rest, color)}`;
280
+ }
281
+ return highlightProlog(line, color);
282
+ })
283
+ .join('\n');
284
+ }
285
+ //# sourceMappingURL=highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../src/repl/highlight.ts"],"names":[],"mappings":"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"}