liminal 0.4.1 → 0.5.2

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 (562) hide show
  1. package/Action.ts +29 -0
  2. package/Agent.ts +10 -0
  3. package/CHANGELOG.md +20 -0
  4. package/Exec.ts +51 -0
  5. package/L.ts +24 -0
  6. package/LiminalAssertionError.ts +3 -0
  7. package/LiminalConfig.ts +7 -0
  8. package/Message.ts +94 -0
  9. package/Model.ts +26 -0
  10. package/PathLike.ts +17 -0
  11. package/Scope.ts +152 -0
  12. package/Spec.ts +29 -0
  13. package/Tool.ts +58 -0
  14. package/_.ts +11 -0
  15. package/actions/abort.ts +23 -0
  16. package/actions/actions_common/updateModels.ts +23 -0
  17. package/actions/actions_derived/__snapshots__/declareModel.test.ts.snap +89 -0
  18. package/actions/actions_derived/clear.ts +6 -0
  19. package/actions/actions_derived/declareModel.test.ts +36 -0
  20. package/actions/actions_derived/declareModel.ts +9 -0
  21. package/actions/actions_derived/declareModel.type-test.ts +70 -0
  22. package/actions/actions_derived/messages.test.ts +88 -0
  23. package/actions/actions_derived/messages.ts +18 -0
  24. package/actions/actions_derived/metatype.ts +9 -0
  25. package/actions/actions_derived/readers_derived.ts +15 -0
  26. package/actions/appendMessage.ts +54 -0
  27. package/actions/await.ts +13 -0
  28. package/actions/branch.ts +106 -0
  29. package/actions/catch.ts +42 -0
  30. package/actions/declareArg.ts +14 -0
  31. package/actions/disableTool.ts +26 -0
  32. package/actions/embed.ts +29 -0
  33. package/actions/emit.ts +21 -0
  34. package/actions/enableTool.ts +75 -0
  35. package/actions/enableTool.type-test.ts +118 -0
  36. package/actions/infer.ts +49 -0
  37. package/actions/messages.ts +62 -0
  38. package/actions/pushModel.ts +52 -0
  39. package/actions/scope.ts +13 -0
  40. package/actions/section.ts +105 -0
  41. package/actions/throw.ts +18 -0
  42. package/cli/WriteHandler.ts +35 -0
  43. package/cli/cli_common.ts +4 -0
  44. package/cli/main.ts +24 -0
  45. package/cli/runExec.ts +72 -0
  46. package/dist/Action.d.ts +15 -0
  47. package/dist/Action.js +13 -0
  48. package/dist/Action.js.map +1 -0
  49. package/dist/Agent.d.ts +7 -0
  50. package/dist/Agent.js +2 -0
  51. package/dist/Agent.js.map +1 -0
  52. package/dist/Exec.d.ts +25 -0
  53. package/dist/Exec.js +19 -0
  54. package/dist/Exec.js.map +1 -0
  55. package/dist/L.d.ts +23 -0
  56. package/dist/L.js +24 -0
  57. package/dist/L.js.map +1 -0
  58. package/dist/LiminalAssertionError.d.ts +3 -0
  59. package/dist/LiminalAssertionError.js +4 -0
  60. package/dist/LiminalAssertionError.js.map +1 -0
  61. package/dist/LiminalConfig.d.ts +6 -0
  62. package/dist/LiminalConfig.js +2 -0
  63. package/dist/LiminalConfig.js.map +1 -0
  64. package/dist/Message.d.ts +82 -0
  65. package/dist/Message.js +2 -0
  66. package/dist/Message.js.map +1 -0
  67. package/dist/Model.d.ts +21 -0
  68. package/dist/Model.js +2 -0
  69. package/dist/Model.js.map +1 -0
  70. package/dist/PathLike.d.ts +11 -0
  71. package/dist/PathLike.js +2 -0
  72. package/dist/PathLike.js.map +1 -0
  73. package/dist/Scope.d.ts +42 -0
  74. package/dist/Scope.js +93 -0
  75. package/dist/Scope.js.map +1 -0
  76. package/dist/Spec.d.ts +20 -0
  77. package/dist/Spec.js +2 -0
  78. package/dist/Spec.js.map +1 -0
  79. package/dist/Tool.d.ts +21 -0
  80. package/dist/Tool.js +32 -0
  81. package/dist/Tool.js.map +1 -0
  82. package/dist/_.d.ts +5 -0
  83. package/dist/_.js +7 -0
  84. package/dist/_.js.map +1 -0
  85. package/dist/actions/abort.d.ts +9 -0
  86. package/dist/actions/abort.js +15 -0
  87. package/dist/actions/abort.js.map +1 -0
  88. package/dist/actions/actions_common/updateModels.d.ts +3 -0
  89. package/dist/actions/actions_common/updateModels.js +17 -0
  90. package/dist/actions/actions_common/updateModels.js.map +1 -0
  91. package/dist/actions/actions_derived/clear.d.ts +8 -0
  92. package/dist/actions/actions_derived/clear.js +5 -0
  93. package/dist/actions/actions_derived/clear.js.map +1 -0
  94. package/dist/actions/actions_derived/declareModel.d.ts +5 -0
  95. package/dist/actions/actions_derived/declareModel.js +7 -0
  96. package/dist/actions/actions_derived/declareModel.js.map +1 -0
  97. package/dist/actions/actions_derived/declareModel.test.d.ts +1 -0
  98. package/dist/actions/actions_derived/declareModel.test.js +35 -0
  99. package/dist/actions/actions_derived/declareModel.test.js.map +1 -0
  100. package/dist/actions/actions_derived/declareModel.type-test.d.ts +1 -0
  101. package/dist/actions/actions_derived/declareModel.type-test.js +66 -0
  102. package/dist/actions/actions_derived/declareModel.type-test.js.map +1 -0
  103. package/dist/actions/actions_derived/messages.d.ts +6 -0
  104. package/dist/actions/actions_derived/messages.js +15 -0
  105. package/dist/actions/actions_derived/messages.js.map +1 -0
  106. package/dist/actions/actions_derived/messages.test.d.ts +1 -0
  107. package/dist/actions/actions_derived/messages.test.js +72 -0
  108. package/dist/actions/actions_derived/messages.test.js.map +1 -0
  109. package/dist/actions/actions_derived/metatype.d.ts +9 -0
  110. package/dist/actions/actions_derived/metatype.js +7 -0
  111. package/dist/actions/actions_derived/metatype.js.map +1 -0
  112. package/dist/actions/actions_derived/readers_derived.d.ts +6 -0
  113. package/dist/actions/actions_derived/readers_derived.js +14 -0
  114. package/dist/actions/actions_derived/readers_derived.js.map +1 -0
  115. package/dist/actions/appendMessage.d.ts +14 -0
  116. package/dist/actions/appendMessage.js +41 -0
  117. package/dist/actions/appendMessage.js.map +1 -0
  118. package/dist/actions/await.d.ts +5 -0
  119. package/dist/actions/await.js +10 -0
  120. package/dist/actions/await.js.map +1 -0
  121. package/dist/actions/branch.d.ts +39 -0
  122. package/dist/actions/branch.js +40 -0
  123. package/dist/actions/branch.js.map +1 -0
  124. package/dist/actions/catch.d.ts +10 -0
  125. package/dist/actions/catch.js +27 -0
  126. package/dist/actions/catch.js.map +1 -0
  127. package/dist/actions/declareArg.d.ts +8 -0
  128. package/dist/actions/declareArg.js +10 -0
  129. package/dist/actions/declareArg.js.map +1 -0
  130. package/dist/actions/disableTool.d.ts +10 -0
  131. package/dist/actions/disableTool.js +17 -0
  132. package/dist/actions/disableTool.js.map +1 -0
  133. package/dist/actions/embed.d.ts +9 -0
  134. package/dist/actions/embed.js +24 -0
  135. package/dist/actions/embed.js.map +1 -0
  136. package/dist/actions/emit.d.ts +9 -0
  137. package/dist/actions/emit.js +14 -0
  138. package/dist/actions/emit.js.map +1 -0
  139. package/dist/actions/enableTool.d.ts +20 -0
  140. package/dist/actions/enableTool.js +26 -0
  141. package/dist/actions/enableTool.js.map +1 -0
  142. package/dist/actions/enableTool.type-test.d.ts +1 -0
  143. package/dist/actions/enableTool.type-test.js +30 -0
  144. package/dist/actions/enableTool.type-test.js.map +1 -0
  145. package/dist/actions/infer.d.ts +15 -0
  146. package/dist/actions/infer.js +29 -0
  147. package/dist/actions/infer.js.map +1 -0
  148. package/dist/actions/messages.d.ts +24 -0
  149. package/dist/actions/messages.js +35 -0
  150. package/dist/actions/messages.js.map +1 -0
  151. package/dist/actions/pushModel.d.ts +15 -0
  152. package/dist/actions/pushModel.js +36 -0
  153. package/dist/actions/pushModel.js.map +1 -0
  154. package/dist/actions/scope.d.ts +7 -0
  155. package/dist/actions/scope.js +10 -0
  156. package/dist/actions/scope.js.map +1 -0
  157. package/dist/actions/section.d.ts +23 -0
  158. package/dist/actions/section.js +64 -0
  159. package/dist/actions/section.js.map +1 -0
  160. package/dist/actions/throw.d.ts +9 -0
  161. package/dist/actions/throw.js +13 -0
  162. package/dist/actions/throw.js.map +1 -0
  163. package/dist/cli/WriteHandler.d.ts +9 -0
  164. package/dist/cli/WriteHandler.js +24 -0
  165. package/dist/cli/WriteHandler.js.map +1 -0
  166. package/dist/cli/cli_common.d.ts +4 -0
  167. package/dist/cli/cli_common.js +2 -0
  168. package/dist/cli/cli_common.js.map +1 -0
  169. package/dist/cli/main.d.ts +2 -0
  170. package/dist/cli/main.js +20 -0
  171. package/dist/cli/main.js.map +1 -0
  172. package/dist/cli/runExec.d.ts +2 -0
  173. package/dist/cli/runExec.js +74 -0
  174. package/dist/cli/runExec.js.map +1 -0
  175. package/dist/events/Aborted.d.ts +4 -0
  176. package/dist/events/Aborted.js +2 -0
  177. package/dist/events/Aborted.js.map +1 -0
  178. package/dist/events/Embedded.d.ts +5 -0
  179. package/dist/events/Embedded.js +2 -0
  180. package/dist/events/Embedded.js.map +1 -0
  181. package/dist/events/EmbeddingRequested.d.ts +4 -0
  182. package/dist/events/EmbeddingRequested.js +2 -0
  183. package/dist/events/EmbeddingRequested.js.map +1 -0
  184. package/dist/events/Emitted.d.ts +4 -0
  185. package/dist/events/Emitted.js +2 -0
  186. package/dist/events/Emitted.js.map +1 -0
  187. package/dist/events/EventBase.d.ts +3 -0
  188. package/dist/events/EventBase.js +2 -0
  189. package/dist/events/EventBase.js.map +1 -0
  190. package/dist/events/EventHandler.d.ts +2 -0
  191. package/dist/events/EventHandler.js +2 -0
  192. package/dist/events/EventHandler.js.map +1 -0
  193. package/dist/events/EventResolved.d.ts +19 -0
  194. package/dist/events/EventResolved.js +2 -0
  195. package/dist/events/EventResolved.js.map +1 -0
  196. package/dist/events/Forked.d.ts +3 -0
  197. package/dist/events/Forked.js +2 -0
  198. package/dist/events/Forked.js.map +1 -0
  199. package/dist/events/InferenceRequested.d.ts +3 -0
  200. package/dist/events/InferenceRequested.js +2 -0
  201. package/dist/events/InferenceRequested.js.map +1 -0
  202. package/dist/events/Inferred.d.ts +5 -0
  203. package/dist/events/Inferred.js +2 -0
  204. package/dist/events/Inferred.js.map +1 -0
  205. package/dist/events/LEvent.d.ts +20 -0
  206. package/dist/events/LEvent.js +2 -0
  207. package/dist/events/LEvent.js.map +1 -0
  208. package/dist/events/MessageAppended.d.ts +5 -0
  209. package/dist/events/MessageAppended.js +2 -0
  210. package/dist/events/MessageAppended.js.map +1 -0
  211. package/dist/events/MessageRemoved.d.ts +5 -0
  212. package/dist/events/MessageRemoved.js +2 -0
  213. package/dist/events/MessageRemoved.js.map +1 -0
  214. package/dist/events/MessagesSet.d.ts +5 -0
  215. package/dist/events/MessagesSet.js +2 -0
  216. package/dist/events/MessagesSet.js.map +1 -0
  217. package/dist/events/ModelPushed.d.ts +7 -0
  218. package/dist/events/ModelPushed.js +2 -0
  219. package/dist/events/ModelPushed.js.map +1 -0
  220. package/dist/events/ModelRemoved.d.ts +7 -0
  221. package/dist/events/ModelRemoved.js +2 -0
  222. package/dist/events/ModelRemoved.js.map +1 -0
  223. package/dist/events/Returned.d.ts +4 -0
  224. package/dist/events/Returned.js +2 -0
  225. package/dist/events/Returned.js.map +1 -0
  226. package/dist/events/SectionCleared.d.ts +5 -0
  227. package/dist/events/SectionCleared.js +2 -0
  228. package/dist/events/SectionCleared.js.map +1 -0
  229. package/dist/events/Sectioned.d.ts +5 -0
  230. package/dist/events/Sectioned.js +2 -0
  231. package/dist/events/Sectioned.js.map +1 -0
  232. package/dist/events/Threw.d.ts +4 -0
  233. package/dist/events/Threw.js +2 -0
  234. package/dist/events/Threw.js.map +1 -0
  235. package/dist/events/ToolCalled.d.ts +6 -0
  236. package/dist/events/ToolCalled.js +2 -0
  237. package/dist/events/ToolCalled.js.map +1 -0
  238. package/dist/events/ToolDisabled.d.ts +5 -0
  239. package/dist/events/ToolDisabled.js +2 -0
  240. package/dist/events/ToolDisabled.js.map +1 -0
  241. package/dist/events/ToolEnabled.d.ts +7 -0
  242. package/dist/events/ToolEnabled.js +2 -0
  243. package/dist/events/ToolEnabled.js.map +1 -0
  244. package/dist/events/isScopeChildEvent.d.ts +6 -0
  245. package/dist/events/isScopeChildEvent.js +9 -0
  246. package/dist/events/isScopeChildEvent.js.map +1 -0
  247. package/dist/events/isScopeDescendantEvent.d.ts +14 -0
  248. package/dist/events/isScopeDescendantEvent.js +12 -0
  249. package/dist/events/isScopeDescendantEvent.js.map +1 -0
  250. package/dist/index.d.ts +41 -0
  251. package/dist/index.js +42 -0
  252. package/dist/index.js.map +1 -0
  253. package/dist/testing/AgentAssertions.d.ts +9 -0
  254. package/dist/testing/AgentAssertions.js +6 -0
  255. package/dist/testing/AgentAssertions.js.map +1 -0
  256. package/dist/testing/TestEmbeddingModel.d.ts +6 -0
  257. package/dist/testing/TestEmbeddingModel.js +11 -0
  258. package/dist/testing/TestEmbeddingModel.js.map +1 -0
  259. package/dist/testing/TestLanguageModel.d.ts +8 -0
  260. package/dist/testing/TestLanguageModel.js +22 -0
  261. package/dist/testing/TestLanguageModel.js.map +1 -0
  262. package/dist/testing/index.d.ts +4 -0
  263. package/dist/testing/index.js +5 -0
  264. package/dist/testing/index.js.map +1 -0
  265. package/dist/testing/takeFirstAction.d.ts +3 -0
  266. package/dist/testing/takeFirstAction.js +6 -0
  267. package/dist/testing/takeFirstAction.js.map +1 -0
  268. package/dist/tsconfig.tsbuildinfo +1 -0
  269. package/dist/types/AssertDiagnostics.d.ts +18 -0
  270. package/dist/types/AssertDiagnostics.js +152 -0
  271. package/dist/types/AssertDiagnostics.js.map +1 -0
  272. package/dist/types/JSONRootType.d.ts +6 -0
  273. package/dist/types/JSONRootType.js +2 -0
  274. package/dist/types/JSONRootType.js.map +1 -0
  275. package/dist/types/JSONType.d.ts +16 -0
  276. package/dist/types/JSONType.js +2 -0
  277. package/dist/types/JSONType.js.map +1 -0
  278. package/dist/types/JSONTypeBase.d.ts +3 -0
  279. package/dist/types/JSONTypeBase.js +2 -0
  280. package/dist/types/JSONTypeBase.js.map +1 -0
  281. package/dist/types/Metatype/MetatypeDescriptor.d.ts +41 -0
  282. package/dist/types/Metatype/MetatypeDescriptor.js +38 -0
  283. package/dist/types/Metatype/MetatypeDescriptor.js.map +1 -0
  284. package/dist/types/Metatype/fromMetatypeDescriptor.d.ts +6 -0
  285. package/dist/types/Metatype/fromMetatypeDescriptor.js +43 -0
  286. package/dist/types/Metatype/fromMetatypeDescriptor.js.map +1 -0
  287. package/dist/types/Type.d.ts +31 -0
  288. package/dist/types/Type.js +5 -0
  289. package/dist/types/Type.js.map +1 -0
  290. package/dist/types/TypeContext.d.ts +7 -0
  291. package/dist/types/TypeContext.js +17 -0
  292. package/dist/types/TypeContext.js.map +1 -0
  293. package/dist/types/TypeLike.d.ts +23 -0
  294. package/dist/types/TypeLike.js +23 -0
  295. package/dist/types/TypeLike.js.map +1 -0
  296. package/dist/types/TypeVisitor.d.ts +14 -0
  297. package/dist/types/TypeVisitor.js +12 -0
  298. package/dist/types/TypeVisitor.js.map +1 -0
  299. package/dist/types/array.d.ts +10 -0
  300. package/dist/types/array.js +9 -0
  301. package/dist/types/array.js.map +1 -0
  302. package/dist/types/boolean.d.ts +6 -0
  303. package/dist/types/boolean.js +3 -0
  304. package/dist/types/boolean.js.map +1 -0
  305. package/dist/types/const.d.ts +8 -0
  306. package/dist/types/const.js +7 -0
  307. package/dist/types/const.js.map +1 -0
  308. package/dist/types/enum.d.ts +8 -0
  309. package/dist/types/enum.js +7 -0
  310. package/dist/types/enum.js.map +1 -0
  311. package/dist/types/factories.d.ts +8 -0
  312. package/dist/types/factories.js +9 -0
  313. package/dist/types/factories.js.map +1 -0
  314. package/dist/types/index.d.ts +2 -0
  315. package/dist/types/index.js +3 -0
  316. package/dist/types/index.js.map +1 -0
  317. package/dist/types/integer.d.ts +6 -0
  318. package/dist/types/integer.js +3 -0
  319. package/dist/types/integer.js.map +1 -0
  320. package/dist/types/intrinsics.d.ts +11 -0
  321. package/dist/types/intrinsics.js +12 -0
  322. package/dist/types/intrinsics.js.map +1 -0
  323. package/dist/types/makeType.d.ts +2 -0
  324. package/dist/types/makeType.js +58 -0
  325. package/dist/types/makeType.js.map +1 -0
  326. package/dist/types/match.d.ts +3 -0
  327. package/dist/types/match.js +11 -0
  328. package/dist/types/match.js.map +1 -0
  329. package/dist/types/non_factories.d.ts +21 -0
  330. package/dist/types/non_factories.js +9 -0
  331. package/dist/types/non_factories.js.map +1 -0
  332. package/dist/types/null.d.ts +7 -0
  333. package/dist/types/null.js +4 -0
  334. package/dist/types/null.js.map +1 -0
  335. package/dist/types/number.d.ts +6 -0
  336. package/dist/types/number.js +3 -0
  337. package/dist/types/number.js.map +1 -0
  338. package/dist/types/object.d.ts +16 -0
  339. package/dist/types/object.js +10 -0
  340. package/dist/types/object.js.map +1 -0
  341. package/dist/types/ref.d.ts +7 -0
  342. package/dist/types/ref.js +5 -0
  343. package/dist/types/ref.js.map +1 -0
  344. package/dist/types/string.d.ts +6 -0
  345. package/dist/types/string.js +3 -0
  346. package/dist/types/string.js.map +1 -0
  347. package/dist/types/toJSON.d.ts +5 -0
  348. package/dist/types/toJSON.js +97 -0
  349. package/dist/types/toJSON.js.map +1 -0
  350. package/dist/types/type_common.d.ts +10 -0
  351. package/dist/types/type_common.js +12 -0
  352. package/dist/types/type_common.js.map +1 -0
  353. package/dist/types/types_derived/option.d.ts +5 -0
  354. package/dist/types/types_derived/option.js +6 -0
  355. package/dist/types/types_derived/option.js.map +1 -0
  356. package/dist/types/types_derived/taggedUnion.d.ts +19 -0
  357. package/dist/types/types_derived/taggedUnion.js +8 -0
  358. package/dist/types/types_derived/taggedUnion.js.map +1 -0
  359. package/dist/types/types_derived/wrapper.d.ts +8 -0
  360. package/dist/types/types_derived/wrapper.js +5 -0
  361. package/dist/types/types_derived/wrapper.js.map +1 -0
  362. package/dist/types/union.d.ts +9 -0
  363. package/dist/types/union.js +9 -0
  364. package/dist/types/union.js.map +1 -0
  365. package/dist/util/ArrayOfLength.d.ts +1 -0
  366. package/dist/util/ArrayOfLength.js +2 -0
  367. package/dist/util/ArrayOfLength.js.map +1 -0
  368. package/dist/util/DeferredOr.d.ts +1 -0
  369. package/dist/util/DeferredOr.js +2 -0
  370. package/dist/util/DeferredOr.js.map +1 -0
  371. package/dist/util/EnsureNarrow.d.ts +2 -0
  372. package/dist/util/EnsureNarrow.js +2 -0
  373. package/dist/util/EnsureNarrow.js.map +1 -0
  374. package/dist/util/EnsureRecord.d.ts +2 -0
  375. package/dist/util/EnsureRecord.js +2 -0
  376. package/dist/util/EnsureRecord.js.map +1 -0
  377. package/dist/util/Expand.d.ts +3 -0
  378. package/dist/util/Expand.js +2 -0
  379. package/dist/util/Expand.js.map +1 -0
  380. package/dist/util/Falsy.d.ts +1 -0
  381. package/dist/util/Falsy.js +2 -0
  382. package/dist/util/Falsy.js.map +1 -0
  383. package/dist/util/FromEntries.d.ts +3 -0
  384. package/dist/util/FromEntries.js +2 -0
  385. package/dist/util/FromEntries.js.map +1 -0
  386. package/dist/util/IteratorLike.d.ts +1 -0
  387. package/dist/util/IteratorLike.js +2 -0
  388. package/dist/util/IteratorLike.js.map +1 -0
  389. package/dist/util/JSONEntry.d.ts +2 -0
  390. package/dist/util/JSONEntry.js +2 -0
  391. package/dist/util/JSONEntry.js.map +1 -0
  392. package/dist/util/JSONKey.d.ts +1 -0
  393. package/dist/util/JSONKey.js +2 -0
  394. package/dist/util/JSONKey.js.map +1 -0
  395. package/dist/util/JSONObject.d.ts +5 -0
  396. package/dist/util/JSONObject.js +2 -0
  397. package/dist/util/JSONObject.js.map +1 -0
  398. package/dist/util/JSONSchemaMemo.d.ts +2 -0
  399. package/dist/util/JSONSchemaMemo.js +13 -0
  400. package/dist/util/JSONSchemaMemo.js.map +1 -0
  401. package/dist/util/JSONValue.d.ts +2 -0
  402. package/dist/util/JSONValue.js +2 -0
  403. package/dist/util/JSONValue.js.map +1 -0
  404. package/dist/util/PromiseOr.d.ts +1 -0
  405. package/dist/util/PromiseOr.js +2 -0
  406. package/dist/util/PromiseOr.js.map +1 -0
  407. package/dist/util/Result.d.ts +7 -0
  408. package/dist/util/Result.js +2 -0
  409. package/dist/util/Result.js.map +1 -0
  410. package/dist/util/Taggable.d.ts +9 -0
  411. package/dist/util/Taggable.js +8 -0
  412. package/dist/util/Taggable.js.map +1 -0
  413. package/dist/util/TupleToRecord.d.ts +5 -0
  414. package/dist/util/TupleToRecord.js +2 -0
  415. package/dist/util/TupleToRecord.js.map +1 -0
  416. package/dist/util/assert.d.ts +1 -0
  417. package/dist/util/assert.js +7 -0
  418. package/dist/util/assert.js.map +1 -0
  419. package/dist/util/dedent.d.ts +1 -0
  420. package/dist/util/dedent.js +5 -0
  421. package/dist/util/dedent.js.map +1 -0
  422. package/dist/util/fixTemplateStrings.d.ts +11 -0
  423. package/dist/util/fixTemplateStrings.js +83 -0
  424. package/dist/util/fixTemplateStrings.js.map +1 -0
  425. package/dist/util/fixTemplateStrings.test.d.ts +1 -0
  426. package/dist/util/fixTemplateStrings.test.js +221 -0
  427. package/dist/util/fixTemplateStrings.test.js.map +1 -0
  428. package/dist/util/isAsyncIterator.d.ts +1 -0
  429. package/dist/util/isAsyncIterator.js +7 -0
  430. package/dist/util/isAsyncIterator.js.map +1 -0
  431. package/dist/util/isIterator.d.ts +1 -0
  432. package/dist/util/isIterator.js +7 -0
  433. package/dist/util/isIterator.js.map +1 -0
  434. package/dist/util/isJSONValue.d.ts +2 -0
  435. package/dist/util/isJSONValue.js +16 -0
  436. package/dist/util/isJSONValue.js.map +1 -0
  437. package/dist/util/isPropertyKey.d.ts +1 -0
  438. package/dist/util/isPropertyKey.js +4 -0
  439. package/dist/util/isPropertyKey.js.map +1 -0
  440. package/dist/util/isTemplateStringsArray.d.ts +1 -0
  441. package/dist/util/isTemplateStringsArray.js +4 -0
  442. package/dist/util/isTemplateStringsArray.js.map +1 -0
  443. package/dist/util/jsonEquals.d.ts +2 -0
  444. package/dist/util/jsonEquals.js +33 -0
  445. package/dist/util/jsonEquals.js.map +1 -0
  446. package/dist/util/nullaryMemo.d.ts +1 -0
  447. package/dist/util/nullaryMemo.js +12 -0
  448. package/dist/util/nullaryMemo.js.map +1 -0
  449. package/dist/util/peekLast.d.ts +1 -0
  450. package/dist/util/peekLast.js +4 -0
  451. package/dist/util/peekLast.js.map +1 -0
  452. package/dist/util/unimplemented.d.ts +1 -0
  453. package/dist/util/unimplemented.js +5 -0
  454. package/dist/util/unimplemented.js.map +1 -0
  455. package/dist/util/unreachable.d.ts +1 -0
  456. package/dist/util/unreachable.js +5 -0
  457. package/dist/util/unreachable.js.map +1 -0
  458. package/dist/util/unwrapDeferred.d.ts +2 -0
  459. package/dist/util/unwrapDeferred.js +4 -0
  460. package/dist/util/unwrapDeferred.js.map +1 -0
  461. package/dist/util/util.d.ts +10 -0
  462. package/dist/util/util.js +11 -0
  463. package/dist/util/util.js.map +1 -0
  464. package/events/Aborted.ts +5 -0
  465. package/events/Embedded.ts +6 -0
  466. package/events/EmbeddingRequested.ts +5 -0
  467. package/events/Emitted.ts +5 -0
  468. package/events/EventBase.ts +3 -0
  469. package/events/EventHandler.ts +3 -0
  470. package/events/EventResolved.ts +30 -0
  471. package/events/Forked.ts +3 -0
  472. package/events/InferenceRequested.ts +3 -0
  473. package/events/Inferred.ts +6 -0
  474. package/events/LEvent.ts +40 -0
  475. package/events/MessageAppended.ts +6 -0
  476. package/events/MessageRemoved.ts +6 -0
  477. package/events/MessagesSet.ts +6 -0
  478. package/events/ModelPushed.ts +10 -0
  479. package/events/ModelRemoved.ts +10 -0
  480. package/events/Returned.ts +5 -0
  481. package/events/SectionCleared.ts +6 -0
  482. package/events/Sectioned.ts +6 -0
  483. package/events/Threw.ts +5 -0
  484. package/events/ToolCalled.ts +7 -0
  485. package/events/ToolDisabled.ts +6 -0
  486. package/events/ToolEnabled.ts +8 -0
  487. package/events/isScopeChildEvent.ts +15 -0
  488. package/events/isScopeDescendantEvent.ts +30 -0
  489. package/index.ts +41 -0
  490. package/package.json +32 -9
  491. package/testing/AgentAssertions.ts +17 -0
  492. package/testing/TestEmbeddingModel.ts +19 -0
  493. package/testing/TestLanguageModel.ts +33 -0
  494. package/testing/index.ts +4 -0
  495. package/testing/takeFirstAction.ts +8 -0
  496. package/tsconfig.json +8 -0
  497. package/types/AssertDiagnostics.ts +183 -0
  498. package/types/JSONRootType.ts +8 -0
  499. package/types/JSONType.ts +27 -0
  500. package/types/JSONTypeBase.ts +3 -0
  501. package/types/Metatype/MetatypeDescriptor.ts +80 -0
  502. package/types/Metatype/fromMetatypeDescriptor.ts +52 -0
  503. package/types/Type.ts +47 -0
  504. package/types/TypeContext.ts +19 -0
  505. package/types/TypeLike.ts +60 -0
  506. package/types/TypeVisitor.ts +49 -0
  507. package/types/array.ts +20 -0
  508. package/types/boolean.ts +9 -0
  509. package/types/const.ts +17 -0
  510. package/types/enum.ts +14 -0
  511. package/types/factories.ts +8 -0
  512. package/types/index.ts +2 -0
  513. package/types/integer.ts +9 -0
  514. package/types/intrinsics.ts +11 -0
  515. package/types/makeType.ts +72 -0
  516. package/types/match.ts +13 -0
  517. package/types/non_factories.ts +26 -0
  518. package/types/null.ts +10 -0
  519. package/types/number.ts +9 -0
  520. package/types/object.ts +27 -0
  521. package/types/ref.ts +12 -0
  522. package/types/string.ts +9 -0
  523. package/types/toJSON.ts +111 -0
  524. package/types/type_common.ts +21 -0
  525. package/types/types_derived/option.ts +10 -0
  526. package/types/types_derived/taggedUnion.ts +30 -0
  527. package/types/types_derived/wrapper.ts +10 -0
  528. package/types/union.ts +19 -0
  529. package/util/ArrayOfLength.ts +5 -0
  530. package/util/DeferredOr.ts +1 -0
  531. package/util/EnsureNarrow.ts +5 -0
  532. package/util/EnsureRecord.ts +3 -0
  533. package/util/Expand.ts +1 -0
  534. package/util/Falsy.ts +1 -0
  535. package/util/FromEntries.ts +3 -0
  536. package/util/IteratorLike.ts +1 -0
  537. package/util/JSONEntry.ts +3 -0
  538. package/util/JSONKey.ts +1 -0
  539. package/util/JSONObject.ts +6 -0
  540. package/util/JSONSchemaMemo.ts +15 -0
  541. package/util/JSONValue.ts +3 -0
  542. package/util/PromiseOr.ts +1 -0
  543. package/util/Result.ts +7 -0
  544. package/util/Taggable.ts +18 -0
  545. package/util/TupleToRecord.ts +5 -0
  546. package/util/assert.ts +7 -0
  547. package/util/dedent.ts +5 -0
  548. package/util/fixTemplateStrings.test.ts +250 -0
  549. package/util/fixTemplateStrings.ts +99 -0
  550. package/util/isAsyncIterator.ts +6 -0
  551. package/util/isIterator.ts +6 -0
  552. package/util/isJSONValue.ts +20 -0
  553. package/util/isPropertyKey.ts +3 -0
  554. package/util/isTemplateStringsArray.ts +3 -0
  555. package/util/jsonEquals.ts +41 -0
  556. package/util/nullaryMemo.ts +11 -0
  557. package/util/peekLast.ts +3 -0
  558. package/util/unimplemented.ts +5 -0
  559. package/util/unreachable.ts +5 -0
  560. package/util/unwrapDeferred.ts +5 -0
  561. package/util/util.ts +10 -0
  562. package/lib/index.js +0 -1
@@ -0,0 +1,5 @@
1
+ import type { EventBase } from "./EventBase.ts"
2
+
3
+ export interface Aborted<E = any> extends EventBase<"aborted"> {
4
+ reason: E
5
+ }
@@ -0,0 +1,6 @@
1
+ import type { EventBase } from "./EventBase.ts"
2
+
3
+ export interface Embedded extends EventBase<"embedded"> {
4
+ value: string
5
+ embedding: Array<number>
6
+ }
@@ -0,0 +1,5 @@
1
+ import type { EventBase } from "./EventBase.ts"
2
+
3
+ export interface EmbeddingRequested extends EventBase<"embedding_requested"> {
4
+ value: string
5
+ }
@@ -0,0 +1,5 @@
1
+ import type { EventBase } from "./EventBase.ts"
2
+
3
+ export interface Emitted<E = any> extends EventBase<"emitted"> {
4
+ value: E
5
+ }
@@ -0,0 +1,3 @@
1
+ export interface EventBase<K extends string> {
2
+ type: K
3
+ }
@@ -0,0 +1,3 @@
1
+ import type { EventResolved } from "./EventResolved.ts"
2
+
3
+ export type EventHandler<E extends EventResolved = EventResolved> = (event: E) => any
@@ -0,0 +1,30 @@
1
+ import type { Spec } from "../Spec.ts"
2
+ import type { Expand } from "../util/Expand.ts"
3
+ import type { JSONKey } from "../util/JSONKey.ts"
4
+ import type { Forked } from "./Forked.ts"
5
+ import type { LEvent } from "./LEvent.ts"
6
+ import type { Returned } from "./Returned.ts"
7
+
8
+ export type EventResolved<E extends LEvent = LEvent> = E & {
9
+ scope: Array<JSONKey>
10
+ index: number
11
+ }
12
+
13
+ export type ExtractEventResolved<S extends Spec, P extends Array<JSONKey> = []> =
14
+ | ([S["Event"]] extends [never] ? never
15
+ : Expand<
16
+ {
17
+ scope: P
18
+ index: number
19
+ } & (S["Event"] | (P extends [] ? never : Forked))
20
+ >)
21
+ | ([S["Child"]] extends [infer C extends [JSONKey, Spec]] ? {
22
+ [L in C[0]]: ExtractEventResolved<Extract<C, [L, Spec]>[1], [...P, L]>
23
+ }[C[0]]
24
+ : never)
25
+ | ([S["Value"]] extends [never] ? never : Expand<
26
+ {
27
+ scope: P
28
+ index: number
29
+ } & Returned<S["Value"]>
30
+ >)
@@ -0,0 +1,3 @@
1
+ import type { EventBase } from "./EventBase"
2
+
3
+ export interface Forked extends EventBase<"forked"> {}
@@ -0,0 +1,3 @@
1
+ import type { EventBase } from "./EventBase.ts"
2
+
3
+ export interface InferenceRequested extends EventBase<"inference_requested"> {}
@@ -0,0 +1,6 @@
1
+ import type { JSONValue } from "../util/JSONValue.ts"
2
+ import type { EventBase } from "./EventBase.ts"
3
+
4
+ export interface Inferred extends EventBase<"inferred"> {
5
+ value: JSONValue
6
+ }
@@ -0,0 +1,40 @@
1
+ import type { Aborted } from "./Aborted.ts"
2
+ import type { Embedded } from "./Embedded.ts"
3
+ import type { EmbeddingRequested } from "./EmbeddingRequested.ts"
4
+ import type { Emitted } from "./Emitted.ts"
5
+ import type { Forked } from "./Forked.ts"
6
+ import type { InferenceRequested } from "./InferenceRequested.ts"
7
+ import type { Inferred } from "./Inferred.ts"
8
+ import type { MessageAppended } from "./MessageAppended.ts"
9
+ import type { MessageRemoved } from "./MessageRemoved.ts"
10
+ import type { MessagesSet } from "./MessagesSet.ts"
11
+ import type { ModelPushed } from "./ModelPushed.ts"
12
+ import type { ModelRemoved } from "./ModelRemoved.ts"
13
+ import type { Returned } from "./Returned.ts"
14
+ import type { SectionCleared } from "./SectionCleared.ts"
15
+ import type { Sectioned } from "./Sectioned.ts"
16
+ import type { Threw } from "./Threw.ts"
17
+ import type { ToolCalled } from "./ToolCalled.ts"
18
+ import type { ToolDisabled } from "./ToolDisabled.ts"
19
+ import type { ToolEnabled } from "./ToolEnabled.ts"
20
+
21
+ export type LEvent =
22
+ | Embedded
23
+ | EmbeddingRequested
24
+ | Emitted
25
+ | Inferred
26
+ | InferenceRequested
27
+ | MessageAppended
28
+ | MessagesSet
29
+ | Returned
30
+ | Threw
31
+ | ToolCalled
32
+ | ToolDisabled
33
+ | ToolEnabled
34
+ | Aborted
35
+ | MessageRemoved
36
+ | Forked
37
+ | ModelPushed
38
+ | ModelRemoved
39
+ | Sectioned
40
+ | SectionCleared
@@ -0,0 +1,6 @@
1
+ import type { Message } from "../Message.ts"
2
+ import type { EventBase } from "./EventBase.ts"
3
+
4
+ export interface MessageAppended<M extends Message = Message> extends EventBase<"message_appended"> {
5
+ message: M
6
+ }
@@ -0,0 +1,6 @@
1
+ import type { Message } from "../Message.ts"
2
+ import type { EventBase } from "./EventBase.ts"
3
+
4
+ export interface MessageRemoved extends EventBase<"message_removed"> {
5
+ message: Message
6
+ }
@@ -0,0 +1,6 @@
1
+ import type { Message } from "../Message.ts"
2
+ import type { EventBase } from "./EventBase.ts"
3
+
4
+ export interface MessagesSet extends EventBase<"messages_set"> {
5
+ messages: Array<Message>
6
+ }
@@ -0,0 +1,10 @@
1
+ import type { ModelType } from "../Model.ts"
2
+ import type { JSONKey } from "../util/JSONKey.ts"
3
+ import type { EventBase } from "./EventBase.ts"
4
+
5
+ export interface ModelPushed<K extends JSONKey = JSONKey, M extends ModelType = ModelType>
6
+ extends EventBase<"model_pushed">
7
+ {
8
+ modelKey: K
9
+ modelType: M
10
+ }
@@ -0,0 +1,10 @@
1
+ import type { ModelType } from "../Model.ts"
2
+ import type { JSONKey } from "../util/JSONKey.ts"
3
+ import type { EventBase } from "./EventBase.ts"
4
+
5
+ export interface ModelRemoved<K extends JSONKey = JSONKey, M extends ModelType = ModelType>
6
+ extends EventBase<"model_removed">
7
+ {
8
+ modelKey: K
9
+ modelType: M
10
+ }
@@ -0,0 +1,5 @@
1
+ import type { EventBase } from "./EventBase.ts"
2
+
3
+ export interface Returned<T = any> extends EventBase<"returned"> {
4
+ value: T
5
+ }
@@ -0,0 +1,6 @@
1
+ import type { JSONKey } from "../util/JSONKey.ts"
2
+ import type { EventBase } from "./EventBase.ts"
3
+
4
+ export interface SectionCleared<K extends JSONKey = JSONKey> extends EventBase<"section_cleared"> {
5
+ sectionKey: K
6
+ }
@@ -0,0 +1,6 @@
1
+ import type { JSONKey } from "../util/JSONKey.ts"
2
+ import type { EventBase } from "./EventBase.ts"
3
+
4
+ export interface Sectioned<K extends JSONKey = JSONKey> extends EventBase<"sectioned"> {
5
+ sectionKey: K
6
+ }
@@ -0,0 +1,5 @@
1
+ import type { EventBase } from "./EventBase.ts"
2
+
3
+ export interface Threw extends EventBase<"threw"> {
4
+ thrown: unknown
5
+ }
@@ -0,0 +1,7 @@
1
+ import type { JSONKey } from "../util/JSONKey.ts"
2
+ import type { EventBase } from "./EventBase.ts"
3
+
4
+ export interface ToolCalled<K extends JSONKey = JSONKey, A = any> extends EventBase<"tool_called"> {
5
+ tool: K
6
+ args: A
7
+ }
@@ -0,0 +1,6 @@
1
+ import type { JSONKey } from "../util/JSONKey.ts"
2
+ import type { EventBase } from "./EventBase.ts"
3
+
4
+ export interface ToolDisabled<K extends JSONKey = JSONKey> extends EventBase<"tool_disabled"> {
5
+ tool: K
6
+ }
@@ -0,0 +1,8 @@
1
+ import type { JSONKey } from "../util/JSONKey.ts"
2
+ import type { EventBase } from "./EventBase.ts"
3
+
4
+ export interface ToolEnabled<K extends JSONKey = JSONKey> extends EventBase<"tool_enabled"> {
5
+ tool: K
6
+ description: string
7
+ schema: object
8
+ }
@@ -0,0 +1,15 @@
1
+ import { type _ } from "../_.ts"
2
+ import type { Path, PathLike } from "../PathLike.ts"
3
+ import type { Expand } from "../util/Expand.ts"
4
+ import type { EventResolved } from "./EventResolved.ts"
5
+ import { isScopeDescendantEvent } from "./isScopeDescendantEvent.ts"
6
+
7
+ export function isScopeChildEvent<E extends EventResolved, const P extends PathLike.FromPath<E["scope"]>>(
8
+ event: E,
9
+ path: P,
10
+ ): event is Expand<Extract<E, { scope: Path.FromPathLike<P> }>> {
11
+ if (event.scope.length !== path.length) {
12
+ return false
13
+ }
14
+ return isScopeDescendantEvent(event, path as never)
15
+ }
@@ -0,0 +1,30 @@
1
+ import { type _, is_ } from "../_.ts"
2
+ import type { Path, PathLike } from "../PathLike.ts"
3
+ import type { Expand } from "../util/Expand.ts"
4
+ import type { JSONKey } from "../util/JSONKey.ts"
5
+ import type { EventResolved } from "./EventResolved.ts"
6
+
7
+ export function isScopeDescendantEvent<
8
+ E extends EventResolved,
9
+ const P extends PathLike.FromPath<Subscope<E["scope"]>>,
10
+ >(
11
+ event: E,
12
+ path: P,
13
+ ): event is Expand<Extract<E, { scope: Subscope.Select<E["scope"], Path.FromPathLike<P>> }>> {
14
+ for (let i = 0; i < path.length; i++) {
15
+ const currentMatchKey = path[i]!
16
+ const currentActualKey = event.scope[i]!
17
+ if (currentActualKey !== currentMatchKey || !is_(currentMatchKey)) {
18
+ return false
19
+ }
20
+ }
21
+ return true
22
+ }
23
+
24
+ export type Subscope<A extends Array<JSONKey>> = A extends
25
+ [infer E0 extends JSONKey, ...infer ERest extends Array<JSONKey>] ? [E0, ...([] | Subscope<ERest>)]
26
+ : []
27
+
28
+ export declare namespace Subscope {
29
+ export type Select<A extends Array<JSONKey>, S extends Array<JSONKey>> = Extract<A, [...S, ...Array<JSONKey>]>
30
+ }
package/index.ts ADDED
@@ -0,0 +1,41 @@
1
+ export * from "./Action.ts"
2
+ export * from "./actions/appendMessage.ts"
3
+ export * from "./Agent.ts"
4
+ export * from "./events/Aborted.ts"
5
+ export * from "./events/Embedded.ts"
6
+ export * from "./events/EmbeddingRequested.ts"
7
+ export * from "./events/Emitted.ts"
8
+ export * from "./events/EventBase.ts"
9
+ export * from "./events/EventHandler.ts"
10
+ export * from "./events/EventResolved.ts"
11
+ export * from "./events/EventResolved.ts"
12
+ export * from "./events/EventResolved.ts"
13
+ export * from "./events/InferenceRequested.ts"
14
+ export * from "./events/Inferred.ts"
15
+ export * from "./events/isScopeChildEvent.ts"
16
+ export * from "./events/isScopeDescendantEvent.ts"
17
+ export * from "./events/LEvent.ts"
18
+ export * from "./events/MessageAppended.ts"
19
+ export * from "./events/MessageRemoved.ts"
20
+ export * from "./events/MessagesSet.ts"
21
+ export * from "./events/ModelPushed.ts"
22
+ export * from "./events/ModelRemoved.ts"
23
+ export * from "./events/Returned.ts"
24
+ export * from "./events/Threw.ts"
25
+ export * from "./events/ToolCalled.ts"
26
+ export * from "./events/ToolDisabled.ts"
27
+ export * from "./events/ToolEnabled.ts"
28
+ export * from "./Exec.ts"
29
+ export * as L from "./L.ts"
30
+ export * from "./LiminalAssertionError.ts"
31
+ export * from "./LiminalConfig.ts"
32
+ export * from "./Message.ts"
33
+ export * from "./Model.ts"
34
+ export * from "./Scope.ts"
35
+ export * from "./Spec.ts"
36
+ export * from "./Tool.ts"
37
+ export * from "./types/non_factories.ts"
38
+ export * from "./util/JSONKey.ts"
39
+ export * from "./util/JSONObject.ts"
40
+ export * from "./util/JSONValue.ts"
41
+ export * as _util from "./util/util.ts"
package/package.json CHANGED
@@ -1,12 +1,35 @@
1
1
  {
2
2
  "name": "liminal",
3
- "version": "0.4.1",
4
- "description": "Deprecated",
5
- "repository": "",
6
- "homepage": "",
7
- "main": "lib/index.js",
8
- "license": "ISC",
9
- "scripts": {},
10
- "devDependencies": {},
11
- "dependencies": {}
3
+ "publishConfig": {
4
+ "access": "public"
5
+ },
6
+ "version": "0.5.2",
7
+ "license": "Apache-2.0",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/harrysolovay/liminal.git",
11
+ "directory": "liminal"
12
+ },
13
+ "type": "module",
14
+ "description": "Liminal is a model-agnostic library for conversation state management.",
15
+ "bin": {
16
+ "liminal": "./dist/cli/main.js"
17
+ },
18
+ "exports": {
19
+ ".": "./dist/index.js",
20
+ "./testing": "./dist/testing/index.js",
21
+ "./types": "./dist/types/index.js"
22
+ },
23
+ "dependencies": {
24
+ "standard-json-schema": "^0.1.1"
25
+ },
26
+ "peerDependencies": {
27
+ "@standard-schema/spec": "^1.0.0",
28
+ "conditional-type-checks": "^1.0.6"
29
+ },
30
+ "peerDependenciesMeta": {
31
+ "conditional-type-checks": {
32
+ "optional": true
33
+ }
34
+ }
12
35
  }
@@ -0,0 +1,17 @@
1
+ import type { IsExact } from "conditional-type-checks"
2
+ import type { Action } from "../Action.ts"
3
+ import type { AgentLike } from "../Agent.ts"
4
+ import type { Spec } from "../Spec.ts"
5
+ import type { Expand } from "../util/Expand.ts"
6
+
7
+ export interface AgentAssertions<S extends Spec> {
8
+ assertSpec<A extends Spec>(
9
+ ...[passes]: IsExact<S, Expand<A>> extends true ? [passes?: true] : [passes: false]
10
+ ): void
11
+ }
12
+
13
+ export function AgentAssertions<Y extends Action, R>(_agentLike: AgentLike<Y, R>): AgentAssertions<Y[""]> {
14
+ return {
15
+ assertSpec: () => {},
16
+ }
17
+ }
@@ -0,0 +1,19 @@
1
+ import type { EmbeddingModel } from "../Model.ts"
2
+
3
+ export interface TestEmbeddingModelConfig {
4
+ getEmbedding: () => Promise<Array<number>>
5
+ }
6
+
7
+ export const defaultTestingEmbeddingModelConfig: TestEmbeddingModelConfig = {
8
+ getEmbedding: () => Promise.resolve([]),
9
+ }
10
+
11
+ export function TestEmbeddingModel({
12
+ getEmbedding,
13
+ }: TestEmbeddingModelConfig = defaultTestingEmbeddingModelConfig): EmbeddingModel {
14
+ return {
15
+ type: "embedding",
16
+ vendor: "liminal_testing",
17
+ embed: getEmbedding,
18
+ }
19
+ }
@@ -0,0 +1,33 @@
1
+ import { assistant } from "../actions/actions_derived/messages.ts"
2
+ import type { LanguageModel } from "../Model.ts"
3
+ import type { JSONValue } from "../util/JSONValue.ts"
4
+
5
+ export interface TestLanguageModelConfig {
6
+ getObject: () => JSONValue
7
+ getText: () => string
8
+ }
9
+
10
+ export const defaultTestLanguageModelConfig: TestLanguageModelConfig = {
11
+ getObject: () => ({}),
12
+ getText: () => "",
13
+ }
14
+
15
+ export function TestLanguageModel({
16
+ getObject,
17
+ getText,
18
+ }: TestLanguageModelConfig = defaultTestLanguageModelConfig): LanguageModel {
19
+ return {
20
+ type: "language",
21
+ vendor: "liminal_testing",
22
+ async *infer(type) {
23
+ if (type) {
24
+ const object = getObject()
25
+ yield* assistant`${JSON.stringify(object)}`
26
+ return object
27
+ }
28
+ const text = getText()
29
+ yield* assistant`${text}`
30
+ return text
31
+ },
32
+ }
33
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./AgentAssertions.ts"
2
+ export * from "./takeFirstAction.ts"
3
+ export * from "./TestEmbeddingModel.ts"
4
+ export * from "./TestLanguageModel.ts"
@@ -0,0 +1,8 @@
1
+ import type { Action } from "../Action.ts"
2
+ import type { AgentLike } from "../Agent.ts"
3
+ import { unwrapDeferred } from "../util/unwrapDeferred.ts"
4
+
5
+ export async function takeFirstAction<Y extends Action>(f: AgentLike<Y>): Promise<Y | undefined> {
6
+ const { value } = await unwrapDeferred(f).next()
7
+ return value
8
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../tsconfig.base",
3
+ "compilerOptions": {
4
+ "noEmit": false,
5
+ "outDir": "dist"
6
+ },
7
+ "include": ["."]
8
+ }
@@ -0,0 +1,183 @@
1
+ import { assert } from "../util/assert.ts"
2
+ import { isJSONValue } from "../util/isJSONValue.ts"
3
+ import { jsonEquals } from "../util/jsonEquals.ts"
4
+ import type { JSONKey } from "../util/JSONKey.ts"
5
+ import type { JSONValue } from "../util/JSONValue.ts"
6
+ import type { JSONType } from "./JSONType.ts"
7
+ import type { Type } from "./Type.ts"
8
+ import { TypeVisitor } from "./TypeVisitor.ts"
9
+
10
+ export type AssertDiagnostics = Array<Diagnostic>
11
+
12
+ export type Diagnostic = ReturnType<typeof Diagnostic>
13
+ export function Diagnostic(path: AssertPath, type: Type, error: unknown) {
14
+ return {
15
+ path,
16
+ type,
17
+ error,
18
+ message,
19
+ formatPath,
20
+ }
21
+
22
+ function message() {
23
+ return error instanceof Error ? error.message : JSON.stringify(error)
24
+ }
25
+
26
+ function formatPath() {
27
+ let formatted = ""
28
+ for (let i = 0; i < path.length; i++) {
29
+ const key = path[i]!
30
+ if (typeof key === "string") {
31
+ try {
32
+ const int = parseInt(key)
33
+ if (Number.isInteger(int)) {
34
+ formatted += `[${int}]`
35
+ } else {
36
+ formatted += `.${key}`
37
+ }
38
+ } catch (_e: unknown) {
39
+ formatted += `.${key}`
40
+ }
41
+ } else {
42
+ formatted += `[${key}]`
43
+ }
44
+ }
45
+ return formatted
46
+ }
47
+ }
48
+
49
+ export type AssertPath = Array<JSONKey>
50
+
51
+ // Possibly: `nullUnionFieldsAsOptional?: boolean`
52
+ export interface AssertDiagnosticsConfig {}
53
+
54
+ export function AssertDiagnostics<T extends JSONValue, J extends JSONType>(
55
+ config: AssertDiagnosticsConfig,
56
+ type: Type<T, J>,
57
+ value: unknown,
58
+ ): Array<Diagnostic> {
59
+ const state = ValueVisitorState()
60
+ visit([config, false], type)(value, state)
61
+ return state.diagnostics
62
+ }
63
+
64
+ type ValueVisitorState = ReturnType<typeof ValueVisitorState>
65
+ function ValueVisitorState(
66
+ diagnostics: Array<Diagnostic> = [],
67
+ path: Array<number | string> = [],
68
+ ) {
69
+ return {
70
+ diagnostics,
71
+ path,
72
+ next,
73
+ }
74
+
75
+ function next(key?: JSONKey) {
76
+ return ValueVisitorState(diagnostics, [...path, ...key !== undefined ? [key] : []])
77
+ }
78
+ }
79
+
80
+ const visit: TypeVisitor<AssertDiagnosticsConfig, (value: unknown, vState: ValueVisitorState) => void> = TypeVisitor(
81
+ {
82
+ hook(next, tState, type) {
83
+ return (value, vState) => {
84
+ try {
85
+ next(tState, type)(value, vState)
86
+ } catch (error) {
87
+ vState.diagnostics.push(Diagnostic(vState.path, type, error))
88
+ }
89
+ }
90
+ },
91
+ null() {
92
+ return (value) => {
93
+ assert(value === null)
94
+ }
95
+ },
96
+ boolean() {
97
+ return (value) => {
98
+ assert(typeof value === "boolean")
99
+ }
100
+ },
101
+ integer() {
102
+ return (value) => {
103
+ assert(typeof value === "number" && Number.isInteger(value))
104
+ }
105
+ },
106
+ number() {
107
+ return (value) => {
108
+ assert(typeof value === "number")
109
+ }
110
+ },
111
+ string() {
112
+ return (value) => {
113
+ assert(typeof value === "string")
114
+ }
115
+ },
116
+ const(_tState, _type, _valueType, value_) {
117
+ return (value) => {
118
+ assert(isJSONValue(value) && jsonEquals(value_, value))
119
+ }
120
+ },
121
+ _array(tState, _type, element) {
122
+ const visitElement = visit(tState, element)
123
+ return (value, vState) => {
124
+ assert(Array.isArray(value))
125
+ value.forEach((e, i) => visitElement(e, vState.next(i)))
126
+ }
127
+ },
128
+ enum(_tState, _type, ...values) {
129
+ return (value) => {
130
+ assert(typeof value == "string")
131
+ assert(values.includes(value))
132
+ }
133
+ },
134
+ _union(tState, _type, ...members) {
135
+ return (value, vState) => {
136
+ assert(members.some((member) => {
137
+ const memberState = vState.next()
138
+ visit(tState, member)(value, memberState)
139
+ return !memberState.diagnostics.length
140
+ }))
141
+ }
142
+ },
143
+ _object(tState, _type, fields) {
144
+ return (value, vState) => {
145
+ assert(typeof value === "object" && value !== null)
146
+ if (Array.isArray(fields)) {
147
+ fields.forEach((v, i) => {
148
+ visitField(tState, vState, value, i, v)
149
+ })
150
+ } else {
151
+ Object.entries(fields).forEach(([k, v]) => {
152
+ visitField(tState, vState, value, k, v)
153
+ })
154
+ }
155
+ }
156
+ },
157
+ ref(tState, _type, getType) {
158
+ return (value, vState) => {
159
+ visit(tState, getType())(value, vState)
160
+ }
161
+ },
162
+ },
163
+ )
164
+
165
+ function visitField(
166
+ tState: AssertDiagnosticsConfig,
167
+ vState: ValueVisitorState,
168
+ value: object,
169
+ key: JSONKey,
170
+ type: Type,
171
+ ) {
172
+ assert(key in value)
173
+ const childValue = value[key as never]
174
+ assert(childValue !== undefined)
175
+ visit(tState, type)(childValue, vState.next(key))
176
+ }
177
+
178
+ // TODO: serialize signature
179
+ export function formatAssertDiagnostics(diagnostics: AssertDiagnostics) {
180
+ return diagnostics
181
+ .map((diagnostic) => `Error "${diagnostic.message()}"; encountered at ${diagnostic.formatPath()}`)
182
+ .join("\n")
183
+ }
@@ -0,0 +1,8 @@
1
+ import type { JSONIdentifiedType, JSONType } from "./JSONType.ts"
2
+
3
+ export const JSONSchema$schema = "http://json-schema.org/draft-07/schema#"
4
+
5
+ export type JSONRootType<J extends JSONType> = J & {
6
+ $schema: typeof JSONSchema$schema
7
+ $defs: Record<string, JSONIdentifiedType | undefined>
8
+ }