phaibel 4.0.7

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 (905) hide show
  1. package/README.md +245 -0
  2. package/dist/agentary.txt +82 -0
  3. package/dist/client/index.d.ts +135 -0
  4. package/dist/client/index.d.ts.map +1 -0
  5. package/dist/client/index.js +260 -0
  6. package/dist/client/index.js.map +1 -0
  7. package/dist/commands/cal.d.ts +31 -0
  8. package/dist/commands/cal.d.ts.map +1 -0
  9. package/dist/commands/cal.js +281 -0
  10. package/dist/commands/cal.js.map +1 -0
  11. package/dist/commands/chat.d.ts +3 -0
  12. package/dist/commands/chat.d.ts.map +1 -0
  13. package/dist/commands/chat.js +762 -0
  14. package/dist/commands/chat.js.map +1 -0
  15. package/dist/commands/config.d.ts +4 -0
  16. package/dist/commands/config.d.ts.map +1 -0
  17. package/dist/commands/config.js +184 -0
  18. package/dist/commands/config.js.map +1 -0
  19. package/dist/commands/cron.d.ts +4 -0
  20. package/dist/commands/cron.d.ts.map +1 -0
  21. package/dist/commands/cron.js +165 -0
  22. package/dist/commands/cron.js.map +1 -0
  23. package/dist/commands/entity-type.d.ts +3 -0
  24. package/dist/commands/entity-type.d.ts.map +1 -0
  25. package/dist/commands/entity-type.js +279 -0
  26. package/dist/commands/entity-type.js.map +1 -0
  27. package/dist/commands/entity.d.ts +3 -0
  28. package/dist/commands/entity.d.ts.map +1 -0
  29. package/dist/commands/entity.js +262 -0
  30. package/dist/commands/entity.js.map +1 -0
  31. package/dist/commands/event.d.ts +4 -0
  32. package/dist/commands/event.d.ts.map +1 -0
  33. package/dist/commands/event.js +515 -0
  34. package/dist/commands/event.js.map +1 -0
  35. package/dist/commands/feral.d.ts +3 -0
  36. package/dist/commands/feral.d.ts.map +1 -0
  37. package/dist/commands/feral.js +272 -0
  38. package/dist/commands/feral.js.map +1 -0
  39. package/dist/commands/goal.d.ts +4 -0
  40. package/dist/commands/goal.d.ts.map +1 -0
  41. package/dist/commands/goal.js +14 -0
  42. package/dist/commands/goal.js.map +1 -0
  43. package/dist/commands/inbox.d.ts +13 -0
  44. package/dist/commands/inbox.d.ts.map +1 -0
  45. package/dist/commands/inbox.js +210 -0
  46. package/dist/commands/inbox.js.map +1 -0
  47. package/dist/commands/init.d.ts +4 -0
  48. package/dist/commands/init.d.ts.map +1 -0
  49. package/dist/commands/init.js +154 -0
  50. package/dist/commands/init.js.map +1 -0
  51. package/dist/commands/interview.d.ts +14 -0
  52. package/dist/commands/interview.d.ts.map +1 -0
  53. package/dist/commands/interview.js +343 -0
  54. package/dist/commands/interview.js.map +1 -0
  55. package/dist/commands/list.d.ts +11 -0
  56. package/dist/commands/list.d.ts.map +1 -0
  57. package/dist/commands/list.js +168 -0
  58. package/dist/commands/list.js.map +1 -0
  59. package/dist/commands/note.d.ts +4 -0
  60. package/dist/commands/note.d.ts.map +1 -0
  61. package/dist/commands/note.js +548 -0
  62. package/dist/commands/note.js.map +1 -0
  63. package/dist/commands/pamp.d.ts +4 -0
  64. package/dist/commands/pamp.d.ts.map +1 -0
  65. package/dist/commands/pamp.js +323 -0
  66. package/dist/commands/pamp.js.map +1 -0
  67. package/dist/commands/person.d.ts +4 -0
  68. package/dist/commands/person.d.ts.map +1 -0
  69. package/dist/commands/person.js +185 -0
  70. package/dist/commands/person.js.map +1 -0
  71. package/dist/commands/project.d.ts +4 -0
  72. package/dist/commands/project.d.ts.map +1 -0
  73. package/dist/commands/project.js +70 -0
  74. package/dist/commands/project.js.map +1 -0
  75. package/dist/commands/recurrence.d.ts +17 -0
  76. package/dist/commands/recurrence.d.ts.map +1 -0
  77. package/dist/commands/recurrence.js +496 -0
  78. package/dist/commands/recurrence.js.map +1 -0
  79. package/dist/commands/remember.d.ts +4 -0
  80. package/dist/commands/remember.d.ts.map +1 -0
  81. package/dist/commands/remember.js +70 -0
  82. package/dist/commands/remember.js.map +1 -0
  83. package/dist/commands/research.d.ts +4 -0
  84. package/dist/commands/research.d.ts.map +1 -0
  85. package/dist/commands/research.js +14 -0
  86. package/dist/commands/research.js.map +1 -0
  87. package/dist/commands/service.d.ts +14 -0
  88. package/dist/commands/service.d.ts.map +1 -0
  89. package/dist/commands/service.js +313 -0
  90. package/dist/commands/service.js.map +1 -0
  91. package/dist/commands/setup.d.ts +4 -0
  92. package/dist/commands/setup.d.ts.map +1 -0
  93. package/dist/commands/setup.js +42 -0
  94. package/dist/commands/setup.js.map +1 -0
  95. package/dist/commands/shell.d.ts +3 -0
  96. package/dist/commands/shell.d.ts.map +1 -0
  97. package/dist/commands/shell.js +346 -0
  98. package/dist/commands/shell.js.map +1 -0
  99. package/dist/commands/skill.d.ts +4 -0
  100. package/dist/commands/skill.d.ts.map +1 -0
  101. package/dist/commands/skill.js +84 -0
  102. package/dist/commands/skill.js.map +1 -0
  103. package/dist/commands/sync.d.ts +4 -0
  104. package/dist/commands/sync.d.ts.map +1 -0
  105. package/dist/commands/sync.js +68 -0
  106. package/dist/commands/sync.js.map +1 -0
  107. package/dist/commands/time.d.ts +3 -0
  108. package/dist/commands/time.d.ts.map +1 -0
  109. package/dist/commands/time.js +12 -0
  110. package/dist/commands/time.js.map +1 -0
  111. package/dist/commands/today.d.ts +4 -0
  112. package/dist/commands/today.d.ts.map +1 -0
  113. package/dist/commands/today.js +112 -0
  114. package/dist/commands/today.js.map +1 -0
  115. package/dist/commands/todo.d.ts +4 -0
  116. package/dist/commands/todo.d.ts.map +1 -0
  117. package/dist/commands/todo.js +678 -0
  118. package/dist/commands/todo.js.map +1 -0
  119. package/dist/commands/todont.d.ts +19 -0
  120. package/dist/commands/todont.d.ts.map +1 -0
  121. package/dist/commands/todont.js +209 -0
  122. package/dist/commands/todont.js.map +1 -0
  123. package/dist/commands/week.d.ts +4 -0
  124. package/dist/commands/week.d.ts.map +1 -0
  125. package/dist/commands/week.js +267 -0
  126. package/dist/commands/week.js.map +1 -0
  127. package/dist/config.d.ts +16 -0
  128. package/dist/config.d.ts.map +1 -0
  129. package/dist/config.js +141 -0
  130. package/dist/config.js.map +1 -0
  131. package/dist/context/mentions.d.ts +21 -0
  132. package/dist/context/mentions.d.ts.map +1 -0
  133. package/dist/context/mentions.js +146 -0
  134. package/dist/context/mentions.js.map +1 -0
  135. package/dist/context/reader.d.ts +54 -0
  136. package/dist/context/reader.d.ts.map +1 -0
  137. package/dist/context/reader.js +133 -0
  138. package/dist/context/reader.js.map +1 -0
  139. package/dist/dobbai.txt +55 -0
  140. package/dist/dobbi.txt +55 -0
  141. package/dist/dobbie-bundle.cjs +73313 -0
  142. package/dist/dobbie.txt +55 -0
  143. package/dist/entities/embedding-index.d.ts +26 -0
  144. package/dist/entities/embedding-index.d.ts.map +1 -0
  145. package/dist/entities/embedding-index.js +200 -0
  146. package/dist/entities/embedding-index.js.map +1 -0
  147. package/dist/entities/entity-index.d.ts +74 -0
  148. package/dist/entities/entity-index.d.ts.map +1 -0
  149. package/dist/entities/entity-index.js +369 -0
  150. package/dist/entities/entity-index.js.map +1 -0
  151. package/dist/entities/entity-summary.d.ts +6 -0
  152. package/dist/entities/entity-summary.d.ts.map +1 -0
  153. package/dist/entities/entity-summary.js +36 -0
  154. package/dist/entities/entity-summary.js.map +1 -0
  155. package/dist/entities/entity-type-config.d.ts +83 -0
  156. package/dist/entities/entity-type-config.d.ts.map +1 -0
  157. package/dist/entities/entity-type-config.js +134 -0
  158. package/dist/entities/entity-type-config.js.map +1 -0
  159. package/dist/entities/entity-types-defaults.d.ts +5 -0
  160. package/dist/entities/entity-types-defaults.d.ts.map +1 -0
  161. package/dist/entities/entity-types-defaults.js +59 -0
  162. package/dist/entities/entity-types-defaults.js.map +1 -0
  163. package/dist/entities/entity-validator.d.ts +21 -0
  164. package/dist/entities/entity-validator.d.ts.map +1 -0
  165. package/dist/entities/entity-validator.js +102 -0
  166. package/dist/entities/entity-validator.js.map +1 -0
  167. package/dist/entities/entity.d.ts +180 -0
  168. package/dist/entities/entity.d.ts.map +1 -0
  169. package/dist/entities/entity.js +357 -0
  170. package/dist/entities/entity.js.map +1 -0
  171. package/dist/entities/spawner.d.ts +67 -0
  172. package/dist/entities/spawner.d.ts.map +1 -0
  173. package/dist/entities/spawner.js +294 -0
  174. package/dist/entities/spawner.js.map +1 -0
  175. package/dist/feral/agent/agent-brain.d.ts +22 -0
  176. package/dist/feral/agent/agent-brain.d.ts.map +1 -0
  177. package/dist/feral/agent/agent-brain.js +5 -0
  178. package/dist/feral/agent/agent-brain.js.map +1 -0
  179. package/dist/feral/agent/agent.d.ts +27 -0
  180. package/dist/feral/agent/agent.d.ts.map +1 -0
  181. package/dist/feral/agent/agent.js +12 -0
  182. package/dist/feral/agent/agent.js.map +1 -0
  183. package/dist/feral/agent/chatgpt-brain.d.ts +14 -0
  184. package/dist/feral/agent/chatgpt-brain.d.ts.map +1 -0
  185. package/dist/feral/agent/chatgpt-brain.js +73 -0
  186. package/dist/feral/agent/chatgpt-brain.js.map +1 -0
  187. package/dist/feral/agent/index.d.ts +10 -0
  188. package/dist/feral/agent/index.d.ts.map +1 -0
  189. package/dist/feral/agent/index.js +13 -0
  190. package/dist/feral/agent/index.js.map +1 -0
  191. package/dist/feral/agent/model-schema.d.ts +37 -0
  192. package/dist/feral/agent/model-schema.d.ts.map +1 -0
  193. package/dist/feral/agent/model-schema.js +43 -0
  194. package/dist/feral/agent/model-schema.js.map +1 -0
  195. package/dist/feral/agent/process-agent.d.ts +20 -0
  196. package/dist/feral/agent/process-agent.d.ts.map +1 -0
  197. package/dist/feral/agent/process-agent.js +81 -0
  198. package/dist/feral/agent/process-agent.js.map +1 -0
  199. package/dist/feral/agent/protoflow-agent.d.ts +20 -0
  200. package/dist/feral/agent/protoflow-agent.d.ts.map +1 -0
  201. package/dist/feral/agent/protoflow-agent.js +99 -0
  202. package/dist/feral/agent/protoflow-agent.js.map +1 -0
  203. package/dist/feral/agent/render-prompt.d.ts +12 -0
  204. package/dist/feral/agent/render-prompt.d.ts.map +1 -0
  205. package/dist/feral/agent/render-prompt.js +26 -0
  206. package/dist/feral/agent/render-prompt.js.map +1 -0
  207. package/dist/feral/bootstrap.d.ts +31 -0
  208. package/dist/feral/bootstrap.d.ts.map +1 -0
  209. package/dist/feral/bootstrap.js +241 -0
  210. package/dist/feral/bootstrap.js.map +1 -0
  211. package/dist/feral/catalog/agent-catalog-source.d.ts +9 -0
  212. package/dist/feral/catalog/agent-catalog-source.d.ts.map +1 -0
  213. package/dist/feral/catalog/agent-catalog-source.js +115 -0
  214. package/dist/feral/catalog/agent-catalog-source.js.map +1 -0
  215. package/dist/feral/catalog/built-in-catalog-source.d.ts +14 -0
  216. package/dist/feral/catalog/built-in-catalog-source.d.ts.map +1 -0
  217. package/dist/feral/catalog/built-in-catalog-source.js +25 -0
  218. package/dist/feral/catalog/built-in-catalog-source.js.map +1 -0
  219. package/dist/feral/catalog/catalog-node.d.ts +22 -0
  220. package/dist/feral/catalog/catalog-node.d.ts.map +1 -0
  221. package/dist/feral/catalog/catalog-node.js +14 -0
  222. package/dist/feral/catalog/catalog-node.js.map +1 -0
  223. package/dist/feral/catalog/catalog.d.ts +17 -0
  224. package/dist/feral/catalog/catalog.d.ts.map +1 -0
  225. package/dist/feral/catalog/catalog.js +27 -0
  226. package/dist/feral/catalog/catalog.js.map +1 -0
  227. package/dist/feral/catalog/entity-catalog-source.d.ts +13 -0
  228. package/dist/feral/catalog/entity-catalog-source.d.ts.map +1 -0
  229. package/dist/feral/catalog/entity-catalog-source.js +327 -0
  230. package/dist/feral/catalog/entity-catalog-source.js.map +1 -0
  231. package/dist/feral/catalog/feral-catalog-config.d.ts +26 -0
  232. package/dist/feral/catalog/feral-catalog-config.d.ts.map +1 -0
  233. package/dist/feral/catalog/feral-catalog-config.js +32 -0
  234. package/dist/feral/catalog/feral-catalog-config.js.map +1 -0
  235. package/dist/feral/catalog/introspect-catalog-source.d.ts +5 -0
  236. package/dist/feral/catalog/introspect-catalog-source.d.ts.map +1 -0
  237. package/dist/feral/catalog/introspect-catalog-source.js +83 -0
  238. package/dist/feral/catalog/introspect-catalog-source.js.map +1 -0
  239. package/dist/feral/catalog/json-catalog-source.d.ts +14 -0
  240. package/dist/feral/catalog/json-catalog-source.d.ts.map +1 -0
  241. package/dist/feral/catalog/json-catalog-source.js +26 -0
  242. package/dist/feral/catalog/json-catalog-source.js.map +1 -0
  243. package/dist/feral/catalog/mcp-catalog-source.d.ts +13 -0
  244. package/dist/feral/catalog/mcp-catalog-source.d.ts.map +1 -0
  245. package/dist/feral/catalog/mcp-catalog-source.js +28 -0
  246. package/dist/feral/catalog/mcp-catalog-source.js.map +1 -0
  247. package/dist/feral/catalog/output-catalog-source.d.ts +5 -0
  248. package/dist/feral/catalog/output-catalog-source.d.ts.map +1 -0
  249. package/dist/feral/catalog/output-catalog-source.js +32 -0
  250. package/dist/feral/catalog/output-catalog-source.js.map +1 -0
  251. package/dist/feral/catalog/pamp-catalog-source.d.ts +9 -0
  252. package/dist/feral/catalog/pamp-catalog-source.d.ts.map +1 -0
  253. package/dist/feral/catalog/pamp-catalog-source.js +42 -0
  254. package/dist/feral/catalog/pamp-catalog-source.js.map +1 -0
  255. package/dist/feral/catalog/slack-catalog-source.d.ts +10 -0
  256. package/dist/feral/catalog/slack-catalog-source.d.ts.map +1 -0
  257. package/dist/feral/catalog/slack-catalog-source.js +96 -0
  258. package/dist/feral/catalog/slack-catalog-source.js.map +1 -0
  259. package/dist/feral/catalog/system-catalog-source.d.ts +5 -0
  260. package/dist/feral/catalog/system-catalog-source.d.ts.map +1 -0
  261. package/dist/feral/catalog/system-catalog-source.js +74 -0
  262. package/dist/feral/catalog/system-catalog-source.js.map +1 -0
  263. package/dist/feral/configuration/configuration-description.d.ts +24 -0
  264. package/dist/feral/configuration/configuration-description.d.ts.map +1 -0
  265. package/dist/feral/configuration/configuration-description.js +5 -0
  266. package/dist/feral/configuration/configuration-description.js.map +1 -0
  267. package/dist/feral/configuration/configuration-manager.d.ts +12 -0
  268. package/dist/feral/configuration/configuration-manager.d.ts.map +1 -0
  269. package/dist/feral/configuration/configuration-manager.js +41 -0
  270. package/dist/feral/configuration/configuration-manager.js.map +1 -0
  271. package/dist/feral/configuration/configuration-value.d.ts +16 -0
  272. package/dist/feral/configuration/configuration-value.d.ts.map +1 -0
  273. package/dist/feral/configuration/configuration-value.js +22 -0
  274. package/dist/feral/configuration/configuration-value.js.map +1 -0
  275. package/dist/feral/context/context.d.ts +28 -0
  276. package/dist/feral/context/context.d.ts.map +1 -0
  277. package/dist/feral/context/context.js +44 -0
  278. package/dist/feral/context/context.js.map +1 -0
  279. package/dist/feral/engine/process-engine.d.ts +23 -0
  280. package/dist/feral/engine/process-engine.d.ts.map +1 -0
  281. package/dist/feral/engine/process-engine.js +134 -0
  282. package/dist/feral/engine/process-engine.js.map +1 -0
  283. package/dist/feral/errors.d.ts +28 -0
  284. package/dist/feral/errors.d.ts.map +1 -0
  285. package/dist/feral/errors.js +58 -0
  286. package/dist/feral/errors.js.map +1 -0
  287. package/dist/feral/events/event-dispatcher.d.ts +9 -0
  288. package/dist/feral/events/event-dispatcher.d.ts.map +1 -0
  289. package/dist/feral/events/event-dispatcher.js +27 -0
  290. package/dist/feral/events/event-dispatcher.js.map +1 -0
  291. package/dist/feral/events/events.d.ts +41 -0
  292. package/dist/feral/events/events.d.ts.map +1 -0
  293. package/dist/feral/events/events.js +5 -0
  294. package/dist/feral/events/events.js.map +1 -0
  295. package/dist/feral/events/subscribers/cycle-detection-subscriber.d.ts +7 -0
  296. package/dist/feral/events/subscribers/cycle-detection-subscriber.d.ts.map +1 -0
  297. package/dist/feral/events/subscribers/cycle-detection-subscriber.js +21 -0
  298. package/dist/feral/events/subscribers/cycle-detection-subscriber.js.map +1 -0
  299. package/dist/feral/events/subscribers/logger-subscriber.d.ts +6 -0
  300. package/dist/feral/events/subscribers/logger-subscriber.d.ts.map +1 -0
  301. package/dist/feral/events/subscribers/logger-subscriber.js +23 -0
  302. package/dist/feral/events/subscribers/logger-subscriber.js.map +1 -0
  303. package/dist/feral/events/subscribers/profiler-subscriber.d.ts +8 -0
  304. package/dist/feral/events/subscribers/profiler-subscriber.d.ts.map +1 -0
  305. package/dist/feral/events/subscribers/profiler-subscriber.js +27 -0
  306. package/dist/feral/events/subscribers/profiler-subscriber.js.map +1 -0
  307. package/dist/feral/feral-tool-registry.d.ts +18 -0
  308. package/dist/feral/feral-tool-registry.d.ts.map +1 -0
  309. package/dist/feral/feral-tool-registry.js +78 -0
  310. package/dist/feral/feral-tool-registry.js.map +1 -0
  311. package/dist/feral/index.d.ts +88 -0
  312. package/dist/feral/index.d.ts.map +1 -0
  313. package/dist/feral/index.js +89 -0
  314. package/dist/feral/index.js.map +1 -0
  315. package/dist/feral/node-code/abstract-node-code.d.ts +38 -0
  316. package/dist/feral/node-code/abstract-node-code.d.ts.map +1 -0
  317. package/dist/feral/node-code/abstract-node-code.js +127 -0
  318. package/dist/feral/node-code/abstract-node-code.js.map +1 -0
  319. package/dist/feral/node-code/data/calculation-node-code.d.ts +11 -0
  320. package/dist/feral/node-code/data/calculation-node-code.d.ts.map +1 -0
  321. package/dist/feral/node-code/data/calculation-node-code.js +65 -0
  322. package/dist/feral/node-code/data/calculation-node-code.js.map +1 -0
  323. package/dist/feral/node-code/data/clean-llm-json-node-code.d.ts +11 -0
  324. package/dist/feral/node-code/data/clean-llm-json-node-code.d.ts.map +1 -0
  325. package/dist/feral/node-code/data/clean-llm-json-node-code.js +47 -0
  326. package/dist/feral/node-code/data/clean-llm-json-node-code.js.map +1 -0
  327. package/dist/feral/node-code/data/counter-node-code.d.ts +11 -0
  328. package/dist/feral/node-code/data/counter-node-code.d.ts.map +1 -0
  329. package/dist/feral/node-code/data/counter-node-code.js +29 -0
  330. package/dist/feral/node-code/data/counter-node-code.js.map +1 -0
  331. package/dist/feral/node-code/data/http-node-code.d.ts +11 -0
  332. package/dist/feral/node-code/data/http-node-code.d.ts.map +1 -0
  333. package/dist/feral/node-code/data/http-node-code.js +66 -0
  334. package/dist/feral/node-code/data/http-node-code.js.map +1 -0
  335. package/dist/feral/node-code/data/json-decode-node-code.d.ts +11 -0
  336. package/dist/feral/node-code/data/json-decode-node-code.d.ts.map +1 -0
  337. package/dist/feral/node-code/data/json-decode-node-code.js +34 -0
  338. package/dist/feral/node-code/data/json-decode-node-code.js.map +1 -0
  339. package/dist/feral/node-code/data/json-encode-node-code.d.ts +11 -0
  340. package/dist/feral/node-code/data/json-encode-node-code.d.ts.map +1 -0
  341. package/dist/feral/node-code/data/json-encode-node-code.js +30 -0
  342. package/dist/feral/node-code/data/json-encode-node-code.js.map +1 -0
  343. package/dist/feral/node-code/data/llm-chat-node-code.d.ts +11 -0
  344. package/dist/feral/node-code/data/llm-chat-node-code.d.ts.map +1 -0
  345. package/dist/feral/node-code/data/llm-chat-node-code.js +93 -0
  346. package/dist/feral/node-code/data/llm-chat-node-code.js.map +1 -0
  347. package/dist/feral/node-code/data/log-node-code.d.ts +13 -0
  348. package/dist/feral/node-code/data/log-node-code.d.ts.map +1 -0
  349. package/dist/feral/node-code/data/log-node-code.js +44 -0
  350. package/dist/feral/node-code/data/log-node-code.js.map +1 -0
  351. package/dist/feral/node-code/data/random-value-node-code.d.ts +11 -0
  352. package/dist/feral/node-code/data/random-value-node-code.d.ts.map +1 -0
  353. package/dist/feral/node-code/data/random-value-node-code.js +43 -0
  354. package/dist/feral/node-code/data/random-value-node-code.js.map +1 -0
  355. package/dist/feral/node-code/data/read-file-node-code.d.ts +11 -0
  356. package/dist/feral/node-code/data/read-file-node-code.d.ts.map +1 -0
  357. package/dist/feral/node-code/data/read-file-node-code.js +50 -0
  358. package/dist/feral/node-code/data/read-file-node-code.js.map +1 -0
  359. package/dist/feral/node-code/data/set-context-table-node-code.d.ts +11 -0
  360. package/dist/feral/node-code/data/set-context-table-node-code.d.ts.map +1 -0
  361. package/dist/feral/node-code/data/set-context-table-node-code.js +34 -0
  362. package/dist/feral/node-code/data/set-context-table-node-code.js.map +1 -0
  363. package/dist/feral/node-code/data/set-context-value-node-code.d.ts +11 -0
  364. package/dist/feral/node-code/data/set-context-value-node-code.d.ts.map +1 -0
  365. package/dist/feral/node-code/data/set-context-value-node-code.js +43 -0
  366. package/dist/feral/node-code/data/set-context-value-node-code.js.map +1 -0
  367. package/dist/feral/node-code/data/weather-node-code.d.ts +11 -0
  368. package/dist/feral/node-code/data/weather-node-code.d.ts.map +1 -0
  369. package/dist/feral/node-code/data/weather-node-code.js +88 -0
  370. package/dist/feral/node-code/data/weather-node-code.js.map +1 -0
  371. package/dist/feral/node-code/entity/complete-entity-node-code.d.ts +11 -0
  372. package/dist/feral/node-code/entity/complete-entity-node-code.d.ts.map +1 -0
  373. package/dist/feral/node-code/entity/complete-entity-node-code.js +72 -0
  374. package/dist/feral/node-code/entity/complete-entity-node-code.js.map +1 -0
  375. package/dist/feral/node-code/entity/create-entity-node-code.d.ts +11 -0
  376. package/dist/feral/node-code/entity/create-entity-node-code.d.ts.map +1 -0
  377. package/dist/feral/node-code/entity/create-entity-node-code.js +109 -0
  378. package/dist/feral/node-code/entity/create-entity-node-code.js.map +1 -0
  379. package/dist/feral/node-code/entity/create-entity-type-node-code.d.ts +11 -0
  380. package/dist/feral/node-code/entity/create-entity-type-node-code.d.ts.map +1 -0
  381. package/dist/feral/node-code/entity/create-entity-type-node-code.js +131 -0
  382. package/dist/feral/node-code/entity/create-entity-type-node-code.js.map +1 -0
  383. package/dist/feral/node-code/entity/create-recurring-task-node-code.d.ts +15 -0
  384. package/dist/feral/node-code/entity/create-recurring-task-node-code.d.ts.map +1 -0
  385. package/dist/feral/node-code/entity/create-recurring-task-node-code.js +146 -0
  386. package/dist/feral/node-code/entity/create-recurring-task-node-code.js.map +1 -0
  387. package/dist/feral/node-code/entity/delete-entity-node-code.d.ts +11 -0
  388. package/dist/feral/node-code/entity/delete-entity-node-code.d.ts.map +1 -0
  389. package/dist/feral/node-code/entity/delete-entity-node-code.js +60 -0
  390. package/dist/feral/node-code/entity/delete-entity-node-code.js.map +1 -0
  391. package/dist/feral/node-code/entity/delete-entity-type-node-code.d.ts +11 -0
  392. package/dist/feral/node-code/entity/delete-entity-type-node-code.d.ts.map +1 -0
  393. package/dist/feral/node-code/entity/delete-entity-type-node-code.js +51 -0
  394. package/dist/feral/node-code/entity/delete-entity-type-node-code.js.map +1 -0
  395. package/dist/feral/node-code/entity/find-entity-node-code.d.ts +13 -0
  396. package/dist/feral/node-code/entity/find-entity-node-code.d.ts.map +1 -0
  397. package/dist/feral/node-code/entity/find-entity-node-code.js +59 -0
  398. package/dist/feral/node-code/entity/find-entity-node-code.js.map +1 -0
  399. package/dist/feral/node-code/entity/link-entities-node-code.d.ts +11 -0
  400. package/dist/feral/node-code/entity/link-entities-node-code.d.ts.map +1 -0
  401. package/dist/feral/node-code/entity/link-entities-node-code.js +64 -0
  402. package/dist/feral/node-code/entity/link-entities-node-code.js.map +1 -0
  403. package/dist/feral/node-code/entity/list-entities-node-code.d.ts +11 -0
  404. package/dist/feral/node-code/entity/list-entities-node-code.d.ts.map +1 -0
  405. package/dist/feral/node-code/entity/list-entities-node-code.js +44 -0
  406. package/dist/feral/node-code/entity/list-entities-node-code.js.map +1 -0
  407. package/dist/feral/node-code/entity/list-entity-types-node-code.d.ts +11 -0
  408. package/dist/feral/node-code/entity/list-entity-types-node-code.d.ts.map +1 -0
  409. package/dist/feral/node-code/entity/list-entity-types-node-code.js +22 -0
  410. package/dist/feral/node-code/entity/list-entity-types-node-code.js.map +1 -0
  411. package/dist/feral/node-code/entity/load-vault-context-node-code.d.ts +11 -0
  412. package/dist/feral/node-code/entity/load-vault-context-node-code.d.ts.map +1 -0
  413. package/dist/feral/node-code/entity/load-vault-context-node-code.js +66 -0
  414. package/dist/feral/node-code/entity/load-vault-context-node-code.js.map +1 -0
  415. package/dist/feral/node-code/entity/search-entities-node-code.d.ts +13 -0
  416. package/dist/feral/node-code/entity/search-entities-node-code.d.ts.map +1 -0
  417. package/dist/feral/node-code/entity/search-entities-node-code.js +66 -0
  418. package/dist/feral/node-code/entity/search-entities-node-code.js.map +1 -0
  419. package/dist/feral/node-code/entity/set-entity-field-node-code.d.ts +11 -0
  420. package/dist/feral/node-code/entity/set-entity-field-node-code.d.ts.map +1 -0
  421. package/dist/feral/node-code/entity/set-entity-field-node-code.js +65 -0
  422. package/dist/feral/node-code/entity/set-entity-field-node-code.js.map +1 -0
  423. package/dist/feral/node-code/entity/sort-entities-node-code.d.ts +11 -0
  424. package/dist/feral/node-code/entity/sort-entities-node-code.d.ts.map +1 -0
  425. package/dist/feral/node-code/entity/sort-entities-node-code.js +67 -0
  426. package/dist/feral/node-code/entity/sort-entities-node-code.js.map +1 -0
  427. package/dist/feral/node-code/entity/update-entity-node-code.d.ts +13 -0
  428. package/dist/feral/node-code/entity/update-entity-node-code.d.ts.map +1 -0
  429. package/dist/feral/node-code/entity/update-entity-node-code.js +131 -0
  430. package/dist/feral/node-code/entity/update-entity-node-code.js.map +1 -0
  431. package/dist/feral/node-code/entity/update-entity-type-node-code.d.ts +11 -0
  432. package/dist/feral/node-code/entity/update-entity-type-node-code.d.ts.map +1 -0
  433. package/dist/feral/node-code/entity/update-entity-type-node-code.js +118 -0
  434. package/dist/feral/node-code/entity/update-entity-type-node-code.js.map +1 -0
  435. package/dist/feral/node-code/flow/array-iterator-node-code.d.ts +11 -0
  436. package/dist/feral/node-code/flow/array-iterator-node-code.d.ts.map +1 -0
  437. package/dist/feral/node-code/flow/array-iterator-node-code.js +91 -0
  438. package/dist/feral/node-code/flow/array-iterator-node-code.js.map +1 -0
  439. package/dist/feral/node-code/flow/comparator-node-code.d.ts +11 -0
  440. package/dist/feral/node-code/flow/comparator-node-code.d.ts.map +1 -0
  441. package/dist/feral/node-code/flow/comparator-node-code.js +55 -0
  442. package/dist/feral/node-code/flow/comparator-node-code.js.map +1 -0
  443. package/dist/feral/node-code/flow/context-value-result-node-code.d.ts +11 -0
  444. package/dist/feral/node-code/flow/context-value-result-node-code.d.ts.map +1 -0
  445. package/dist/feral/node-code/flow/context-value-result-node-code.js +22 -0
  446. package/dist/feral/node-code/flow/context-value-result-node-code.js.map +1 -0
  447. package/dist/feral/node-code/flow/noop-node-code.d.ts +11 -0
  448. package/dist/feral/node-code/flow/noop-node-code.d.ts.map +1 -0
  449. package/dist/feral/node-code/flow/noop-node-code.js +19 -0
  450. package/dist/feral/node-code/flow/noop-node-code.js.map +1 -0
  451. package/dist/feral/node-code/flow/start-node-code.d.ts +11 -0
  452. package/dist/feral/node-code/flow/start-node-code.d.ts.map +1 -0
  453. package/dist/feral/node-code/flow/start-node-code.js +19 -0
  454. package/dist/feral/node-code/flow/start-node-code.js.map +1 -0
  455. package/dist/feral/node-code/flow/stop-node-code.d.ts +11 -0
  456. package/dist/feral/node-code/flow/stop-node-code.d.ts.map +1 -0
  457. package/dist/feral/node-code/flow/stop-node-code.js +19 -0
  458. package/dist/feral/node-code/flow/stop-node-code.js.map +1 -0
  459. package/dist/feral/node-code/flow/sub-process-node-code.d.ts +11 -0
  460. package/dist/feral/node-code/flow/sub-process-node-code.d.ts.map +1 -0
  461. package/dist/feral/node-code/flow/sub-process-node-code.js +53 -0
  462. package/dist/feral/node-code/flow/sub-process-node-code.js.map +1 -0
  463. package/dist/feral/node-code/flow/throw-exception-node-code.d.ts +11 -0
  464. package/dist/feral/node-code/flow/throw-exception-node-code.d.ts.map +1 -0
  465. package/dist/feral/node-code/flow/throw-exception-node-code.js +20 -0
  466. package/dist/feral/node-code/flow/throw-exception-node-code.js.map +1 -0
  467. package/dist/feral/node-code/genai/data-synthesis-prep-node-code.d.ts +15 -0
  468. package/dist/feral/node-code/genai/data-synthesis-prep-node-code.d.ts.map +1 -0
  469. package/dist/feral/node-code/genai/data-synthesis-prep-node-code.js +44 -0
  470. package/dist/feral/node-code/genai/data-synthesis-prep-node-code.js.map +1 -0
  471. package/dist/feral/node-code/genai/generate-html-node-code.d.ts +13 -0
  472. package/dist/feral/node-code/genai/generate-html-node-code.d.ts.map +1 -0
  473. package/dist/feral/node-code/genai/generate-html-node-code.js +47 -0
  474. package/dist/feral/node-code/genai/generate-html-node-code.js.map +1 -0
  475. package/dist/feral/node-code/genai/generate-markdown-node-code.d.ts +27 -0
  476. package/dist/feral/node-code/genai/generate-markdown-node-code.d.ts.map +1 -0
  477. package/dist/feral/node-code/genai/generate-markdown-node-code.js +81 -0
  478. package/dist/feral/node-code/genai/generate-markdown-node-code.js.map +1 -0
  479. package/dist/feral/node-code/genai/hydrate-model-node-code.d.ts +21 -0
  480. package/dist/feral/node-code/genai/hydrate-model-node-code.d.ts.map +1 -0
  481. package/dist/feral/node-code/genai/hydrate-model-node-code.js +83 -0
  482. package/dist/feral/node-code/genai/hydrate-model-node-code.js.map +1 -0
  483. package/dist/feral/node-code/genai/merge-strings-node-code.d.ts +14 -0
  484. package/dist/feral/node-code/genai/merge-strings-node-code.d.ts.map +1 -0
  485. package/dist/feral/node-code/genai/merge-strings-node-code.js +34 -0
  486. package/dist/feral/node-code/genai/merge-strings-node-code.js.map +1 -0
  487. package/dist/feral/node-code/genai/model-to-output-node-code.d.ts +18 -0
  488. package/dist/feral/node-code/genai/model-to-output-node-code.d.ts.map +1 -0
  489. package/dist/feral/node-code/genai/model-to-output-node-code.js +49 -0
  490. package/dist/feral/node-code/genai/model-to-output-node-code.js.map +1 -0
  491. package/dist/feral/node-code/genai/openai-node-code.d.ts +14 -0
  492. package/dist/feral/node-code/genai/openai-node-code.d.ts.map +1 -0
  493. package/dist/feral/node-code/genai/openai-node-code.js +66 -0
  494. package/dist/feral/node-code/genai/openai-node-code.js.map +1 -0
  495. package/dist/feral/node-code/genai/write-entity-node-code.d.ts +22 -0
  496. package/dist/feral/node-code/genai/write-entity-node-code.d.ts.map +1 -0
  497. package/dist/feral/node-code/genai/write-entity-node-code.js +46 -0
  498. package/dist/feral/node-code/genai/write-entity-node-code.js.map +1 -0
  499. package/dist/feral/node-code/genai/write-file-node-code.d.ts +13 -0
  500. package/dist/feral/node-code/genai/write-file-node-code.d.ts.map +1 -0
  501. package/dist/feral/node-code/genai/write-file-node-code.js +59 -0
  502. package/dist/feral/node-code/genai/write-file-node-code.js.map +1 -0
  503. package/dist/feral/node-code/genai/write-to-redis-node-code.d.ts +23 -0
  504. package/dist/feral/node-code/genai/write-to-redis-node-code.d.ts.map +1 -0
  505. package/dist/feral/node-code/genai/write-to-redis-node-code.js +48 -0
  506. package/dist/feral/node-code/genai/write-to-redis-node-code.js.map +1 -0
  507. package/dist/feral/node-code/input/prompt-input-node-code.d.ts +11 -0
  508. package/dist/feral/node-code/input/prompt-input-node-code.d.ts.map +1 -0
  509. package/dist/feral/node-code/input/prompt-input-node-code.js +70 -0
  510. package/dist/feral/node-code/input/prompt-input-node-code.js.map +1 -0
  511. package/dist/feral/node-code/input/prompt-select-node-code.d.ts +11 -0
  512. package/dist/feral/node-code/input/prompt-select-node-code.d.ts.map +1 -0
  513. package/dist/feral/node-code/input/prompt-select-node-code.js +65 -0
  514. package/dist/feral/node-code/input/prompt-select-node-code.js.map +1 -0
  515. package/dist/feral/node-code/mcp/mcp-call-tool-node-code.d.ts +12 -0
  516. package/dist/feral/node-code/mcp/mcp-call-tool-node-code.d.ts.map +1 -0
  517. package/dist/feral/node-code/mcp/mcp-call-tool-node-code.js +44 -0
  518. package/dist/feral/node-code/mcp/mcp-call-tool-node-code.js.map +1 -0
  519. package/dist/feral/node-code/node-code-factory.d.ts +20 -0
  520. package/dist/feral/node-code/node-code-factory.d.ts.map +1 -0
  521. package/dist/feral/node-code/node-code-factory.js +32 -0
  522. package/dist/feral/node-code/node-code-factory.js.map +1 -0
  523. package/dist/feral/node-code/node-code.d.ts +22 -0
  524. package/dist/feral/node-code/node-code.d.ts.map +1 -0
  525. package/dist/feral/node-code/node-code.js +9 -0
  526. package/dist/feral/node-code/node-code.js.map +1 -0
  527. package/dist/feral/node-code/output/agent-speak-node-code.d.ts +11 -0
  528. package/dist/feral/node-code/output/agent-speak-node-code.d.ts.map +1 -0
  529. package/dist/feral/node-code/output/agent-speak-node-code.js +56 -0
  530. package/dist/feral/node-code/output/agent-speak-node-code.js.map +1 -0
  531. package/dist/feral/node-code/output/dobbai-speak-node-code.d.ts +11 -0
  532. package/dist/feral/node-code/output/dobbai-speak-node-code.d.ts.map +1 -0
  533. package/dist/feral/node-code/output/dobbai-speak-node-code.js +56 -0
  534. package/dist/feral/node-code/output/dobbai-speak-node-code.js.map +1 -0
  535. package/dist/feral/node-code/output/dobbi-speak-node-code.d.ts +15 -0
  536. package/dist/feral/node-code/output/dobbi-speak-node-code.d.ts.map +1 -0
  537. package/dist/feral/node-code/output/dobbi-speak-node-code.js +60 -0
  538. package/dist/feral/node-code/output/dobbi-speak-node-code.js.map +1 -0
  539. package/dist/feral/node-code/output/dobbie-speak-node-code.d.ts +11 -0
  540. package/dist/feral/node-code/output/dobbie-speak-node-code.d.ts.map +1 -0
  541. package/dist/feral/node-code/output/dobbie-speak-node-code.js +56 -0
  542. package/dist/feral/node-code/output/dobbie-speak-node-code.js.map +1 -0
  543. package/dist/feral/node-code/pamp/pamp-await-reply-node-code.d.ts +11 -0
  544. package/dist/feral/node-code/pamp/pamp-await-reply-node-code.d.ts.map +1 -0
  545. package/dist/feral/node-code/pamp/pamp-await-reply-node-code.js +51 -0
  546. package/dist/feral/node-code/pamp/pamp-await-reply-node-code.js.map +1 -0
  547. package/dist/feral/node-code/pamp/pamp-check-inbox-node-code.d.ts +11 -0
  548. package/dist/feral/node-code/pamp/pamp-check-inbox-node-code.d.ts.map +1 -0
  549. package/dist/feral/node-code/pamp/pamp-check-inbox-node-code.js +37 -0
  550. package/dist/feral/node-code/pamp/pamp-check-inbox-node-code.js.map +1 -0
  551. package/dist/feral/node-code/pamp/pamp-send-node-code.d.ts +11 -0
  552. package/dist/feral/node-code/pamp/pamp-send-node-code.d.ts.map +1 -0
  553. package/dist/feral/node-code/pamp/pamp-send-node-code.js +48 -0
  554. package/dist/feral/node-code/pamp/pamp-send-node-code.js.map +1 -0
  555. package/dist/feral/node-code/pamp/pamp-share-entity-node-code.d.ts +11 -0
  556. package/dist/feral/node-code/pamp/pamp-share-entity-node-code.d.ts.map +1 -0
  557. package/dist/feral/node-code/pamp/pamp-share-entity-node-code.js +45 -0
  558. package/dist/feral/node-code/pamp/pamp-share-entity-node-code.js.map +1 -0
  559. package/dist/feral/node-code/slack/slack-block-builder-node-code.d.ts +18 -0
  560. package/dist/feral/node-code/slack/slack-block-builder-node-code.d.ts.map +1 -0
  561. package/dist/feral/node-code/slack/slack-block-builder-node-code.js +100 -0
  562. package/dist/feral/node-code/slack/slack-block-builder-node-code.js.map +1 -0
  563. package/dist/feral/node-code/slack/slack-post-webhook-node-code.d.ts +13 -0
  564. package/dist/feral/node-code/slack/slack-post-webhook-node-code.d.ts.map +1 -0
  565. package/dist/feral/node-code/slack/slack-post-webhook-node-code.js +47 -0
  566. package/dist/feral/node-code/slack/slack-post-webhook-node-code.js.map +1 -0
  567. package/dist/feral/node-code/slack/slack-process-slash-command-node-code.d.ts +14 -0
  568. package/dist/feral/node-code/slack/slack-process-slash-command-node-code.d.ts.map +1 -0
  569. package/dist/feral/node-code/slack/slack-process-slash-command-node-code.js +39 -0
  570. package/dist/feral/node-code/slack/slack-process-slash-command-node-code.js.map +1 -0
  571. package/dist/feral/node-code/system/cli-command-node-code.d.ts +11 -0
  572. package/dist/feral/node-code/system/cli-command-node-code.d.ts.map +1 -0
  573. package/dist/feral/node-code/system/cli-command-node-code.js +50 -0
  574. package/dist/feral/node-code/system/cli-command-node-code.js.map +1 -0
  575. package/dist/feral/node-code/system/introspect-node-code.d.ts +12 -0
  576. package/dist/feral/node-code/system/introspect-node-code.d.ts.map +1 -0
  577. package/dist/feral/node-code/system/introspect-node-code.js +98 -0
  578. package/dist/feral/node-code/system/introspect-node-code.js.map +1 -0
  579. package/dist/feral/node-code/system/list-catalog-nodes-node-code.d.ts +10 -0
  580. package/dist/feral/node-code/system/list-catalog-nodes-node-code.d.ts.map +1 -0
  581. package/dist/feral/node-code/system/list-catalog-nodes-node-code.js +33 -0
  582. package/dist/feral/node-code/system/list-catalog-nodes-node-code.js.map +1 -0
  583. package/dist/feral/node-code/system/list-processes-node-code.d.ts +10 -0
  584. package/dist/feral/node-code/system/list-processes-node-code.d.ts.map +1 -0
  585. package/dist/feral/node-code/system/list-processes-node-code.js +22 -0
  586. package/dist/feral/node-code/system/list-processes-node-code.js.map +1 -0
  587. package/dist/feral/process/edge.d.ts +18 -0
  588. package/dist/feral/process/edge.d.ts.map +1 -0
  589. package/dist/feral/process/edge.js +32 -0
  590. package/dist/feral/process/edge.js.map +1 -0
  591. package/dist/feral/process/json-process-source.d.ts +18 -0
  592. package/dist/feral/process/json-process-source.d.ts.map +1 -0
  593. package/dist/feral/process/json-process-source.js +55 -0
  594. package/dist/feral/process/json-process-source.js.map +1 -0
  595. package/dist/feral/process/node.d.ts +14 -0
  596. package/dist/feral/process/node.d.ts.map +1 -0
  597. package/dist/feral/process/node.js +5 -0
  598. package/dist/feral/process/node.js.map +1 -0
  599. package/dist/feral/process/process-factory.d.ts +18 -0
  600. package/dist/feral/process/process-factory.d.ts.map +1 -0
  601. package/dist/feral/process/process-factory.js +30 -0
  602. package/dist/feral/process/process-factory.js.map +1 -0
  603. package/dist/feral/process/process-json-hydrator.d.ts +53 -0
  604. package/dist/feral/process/process-json-hydrator.d.ts.map +1 -0
  605. package/dist/feral/process/process-json-hydrator.js +48 -0
  606. package/dist/feral/process/process-json-hydrator.js.map +1 -0
  607. package/dist/feral/process/process.d.ts +17 -0
  608. package/dist/feral/process/process.d.ts.map +1 -0
  609. package/dist/feral/process/process.js +5 -0
  610. package/dist/feral/process/process.js.map +1 -0
  611. package/dist/feral/result/result.d.ts +30 -0
  612. package/dist/feral/result/result.d.ts.map +1 -0
  613. package/dist/feral/result/result.js +28 -0
  614. package/dist/feral/result/result.js.map +1 -0
  615. package/dist/feral/runner/runner.d.ts +13 -0
  616. package/dist/feral/runner/runner.d.ts.map +1 -0
  617. package/dist/feral/runner/runner.js +28 -0
  618. package/dist/feral/runner/runner.js.map +1 -0
  619. package/dist/feral/security/file-access-guard.d.ts +18 -0
  620. package/dist/feral/security/file-access-guard.d.ts.map +1 -0
  621. package/dist/feral/security/file-access-guard.js +69 -0
  622. package/dist/feral/security/file-access-guard.js.map +1 -0
  623. package/dist/feral/slack/block-builder.d.ts +61 -0
  624. package/dist/feral/slack/block-builder.d.ts.map +1 -0
  625. package/dist/feral/slack/block-builder.js +206 -0
  626. package/dist/feral/slack/block-builder.js.map +1 -0
  627. package/dist/feral/slack/blocks.d.ts +86 -0
  628. package/dist/feral/slack/blocks.d.ts.map +1 -0
  629. package/dist/feral/slack/blocks.js +181 -0
  630. package/dist/feral/slack/blocks.js.map +1 -0
  631. package/dist/feral/slack/composition.d.ts +54 -0
  632. package/dist/feral/slack/composition.d.ts.map +1 -0
  633. package/dist/feral/slack/composition.js +114 -0
  634. package/dist/feral/slack/composition.js.map +1 -0
  635. package/dist/feral/slack/elements.d.ts +123 -0
  636. package/dist/feral/slack/elements.d.ts.map +1 -0
  637. package/dist/feral/slack/elements.js +269 -0
  638. package/dist/feral/slack/elements.js.map +1 -0
  639. package/dist/feral/slack/index.d.ts +12 -0
  640. package/dist/feral/slack/index.d.ts.map +1 -0
  641. package/dist/feral/slack/index.js +20 -0
  642. package/dist/feral/slack/index.js.map +1 -0
  643. package/dist/feral/slack/mapping-factory.d.ts +24 -0
  644. package/dist/feral/slack/mapping-factory.d.ts.map +1 -0
  645. package/dist/feral/slack/mapping-factory.js +45 -0
  646. package/dist/feral/slack/mapping-factory.js.map +1 -0
  647. package/dist/feral/slack/messages.d.ts +34 -0
  648. package/dist/feral/slack/messages.d.ts.map +1 -0
  649. package/dist/feral/slack/messages.js +53 -0
  650. package/dist/feral/slack/messages.js.map +1 -0
  651. package/dist/feral/slack/slack-facade.d.ts +20 -0
  652. package/dist/feral/slack/slack-facade.d.ts.map +1 -0
  653. package/dist/feral/slack/slack-facade.js +41 -0
  654. package/dist/feral/slack/slack-facade.js.map +1 -0
  655. package/dist/feral/slack/slack-markdown-formatter.d.ts +22 -0
  656. package/dist/feral/slack/slack-markdown-formatter.d.ts.map +1 -0
  657. package/dist/feral/slack/slack-markdown-formatter.js +36 -0
  658. package/dist/feral/slack/slack-markdown-formatter.js.map +1 -0
  659. package/dist/feral/slack/slash-command-input.d.ts +23 -0
  660. package/dist/feral/slack/slash-command-input.d.ts.map +1 -0
  661. package/dist/feral/slack/slash-command-input.js +45 -0
  662. package/dist/feral/slack/slash-command-input.js.map +1 -0
  663. package/dist/feral/slack/types.d.ts +64 -0
  664. package/dist/feral/slack/types.d.ts.map +1 -0
  665. package/dist/feral/slack/types.js +44 -0
  666. package/dist/feral/slack/types.js.map +1 -0
  667. package/dist/feral/trace/process-trace.d.ts +44 -0
  668. package/dist/feral/trace/process-trace.d.ts.map +1 -0
  669. package/dist/feral/trace/process-trace.js +44 -0
  670. package/dist/feral/trace/process-trace.js.map +1 -0
  671. package/dist/index.d.ts +5 -0
  672. package/dist/index.d.ts.map +1 -0
  673. package/dist/index.js +157 -0
  674. package/dist/index.js.map +1 -0
  675. package/dist/llm/providers/claude.d.ts +11 -0
  676. package/dist/llm/providers/claude.d.ts.map +1 -0
  677. package/dist/llm/providers/claude.js +45 -0
  678. package/dist/llm/providers/claude.js.map +1 -0
  679. package/dist/llm/providers/index.d.ts +5 -0
  680. package/dist/llm/providers/index.d.ts.map +1 -0
  681. package/dist/llm/providers/index.js +20 -0
  682. package/dist/llm/providers/index.js.map +1 -0
  683. package/dist/llm/providers/openai.d.ts +12 -0
  684. package/dist/llm/providers/openai.d.ts.map +1 -0
  685. package/dist/llm/providers/openai.js +62 -0
  686. package/dist/llm/providers/openai.js.map +1 -0
  687. package/dist/llm/router.d.ts +32 -0
  688. package/dist/llm/router.d.ts.map +1 -0
  689. package/dist/llm/router.js +100 -0
  690. package/dist/llm/router.js.map +1 -0
  691. package/dist/llm/types.d.ts +18 -0
  692. package/dist/llm/types.d.ts.map +1 -0
  693. package/dist/llm/types.js +2 -0
  694. package/dist/llm/types.js.map +1 -0
  695. package/dist/markdown/parser.d.ts +26 -0
  696. package/dist/markdown/parser.d.ts.map +1 -0
  697. package/dist/markdown/parser.js +58 -0
  698. package/dist/markdown/parser.js.map +1 -0
  699. package/dist/pamp/client.d.ts +39 -0
  700. package/dist/pamp/client.d.ts.map +1 -0
  701. package/dist/pamp/client.js +336 -0
  702. package/dist/pamp/client.js.map +1 -0
  703. package/dist/pamp/crypto.d.ts +23 -0
  704. package/dist/pamp/crypto.d.ts.map +1 -0
  705. package/dist/pamp/crypto.js +130 -0
  706. package/dist/pamp/crypto.js.map +1 -0
  707. package/dist/pamp/envelope.d.ts +23 -0
  708. package/dist/pamp/envelope.d.ts.map +1 -0
  709. package/dist/pamp/envelope.js +67 -0
  710. package/dist/pamp/envelope.js.map +1 -0
  711. package/dist/pamp/index.d.ts +6 -0
  712. package/dist/pamp/index.d.ts.map +1 -0
  713. package/dist/pamp/index.js +9 -0
  714. package/dist/pamp/index.js.map +1 -0
  715. package/dist/pamp/storage.d.ts +20 -0
  716. package/dist/pamp/storage.d.ts.map +1 -0
  717. package/dist/pamp/storage.js +160 -0
  718. package/dist/pamp/storage.js.map +1 -0
  719. package/dist/pamp/types.d.ts +80 -0
  720. package/dist/pamp/types.d.ts.map +1 -0
  721. package/dist/pamp/types.js +7 -0
  722. package/dist/pamp/types.js.map +1 -0
  723. package/dist/paths.d.ts +24 -0
  724. package/dist/paths.d.ts.map +1 -0
  725. package/dist/paths.js +70 -0
  726. package/dist/paths.js.map +1 -0
  727. package/dist/personalities.d.ts +20 -0
  728. package/dist/personalities.d.ts.map +1 -0
  729. package/dist/personalities.js +181 -0
  730. package/dist/personalities.js.map +1 -0
  731. package/dist/phaibel.txt +82 -0
  732. package/dist/responses.d.ts +34 -0
  733. package/dist/responses.d.ts.map +1 -0
  734. package/dist/responses.js +467 -0
  735. package/dist/responses.js.map +1 -0
  736. package/dist/schemas/index.d.ts +154 -0
  737. package/dist/schemas/index.d.ts.map +1 -0
  738. package/dist/schemas/index.js +73 -0
  739. package/dist/schemas/index.js.map +1 -0
  740. package/dist/service/api-router.d.ts +7 -0
  741. package/dist/service/api-router.d.ts.map +1 -0
  742. package/dist/service/api-router.js +478 -0
  743. package/dist/service/api-router.js.map +1 -0
  744. package/dist/service/context/provider.d.ts +76 -0
  745. package/dist/service/context/provider.d.ts.map +1 -0
  746. package/dist/service/context/provider.js +140 -0
  747. package/dist/service/context/provider.js.map +1 -0
  748. package/dist/service/cron/feedback-analysis.d.ts +2 -0
  749. package/dist/service/cron/feedback-analysis.d.ts.map +1 -0
  750. package/dist/service/cron/feedback-analysis.js +100 -0
  751. package/dist/service/cron/feedback-analysis.js.map +1 -0
  752. package/dist/service/cron/pamp-checker.d.ts +7 -0
  753. package/dist/service/cron/pamp-checker.d.ts.map +1 -0
  754. package/dist/service/cron/pamp-checker.js +29 -0
  755. package/dist/service/cron/pamp-checker.js.map +1 -0
  756. package/dist/service/cron/process-evaluator.d.ts +6 -0
  757. package/dist/service/cron/process-evaluator.d.ts.map +1 -0
  758. package/dist/service/cron/process-evaluator.js +126 -0
  759. package/dist/service/cron/process-evaluator.js.map +1 -0
  760. package/dist/service/cron/process-lifecycle.d.ts +6 -0
  761. package/dist/service/cron/process-lifecycle.d.ts.map +1 -0
  762. package/dist/service/cron/process-lifecycle.js +202 -0
  763. package/dist/service/cron/process-lifecycle.js.map +1 -0
  764. package/dist/service/cron/scheduler.d.ts +36 -0
  765. package/dist/service/cron/scheduler.d.ts.map +1 -0
  766. package/dist/service/cron/scheduler.js +232 -0
  767. package/dist/service/cron/scheduler.js.map +1 -0
  768. package/dist/service/daemon.d.ts +24 -0
  769. package/dist/service/daemon.d.ts.map +1 -0
  770. package/dist/service/daemon.js +181 -0
  771. package/dist/service/daemon.js.map +1 -0
  772. package/dist/service/index.d.ts +11 -0
  773. package/dist/service/index.d.ts.map +1 -0
  774. package/dist/service/index.js +255 -0
  775. package/dist/service/index.js.map +1 -0
  776. package/dist/service/protocol.d.ts +119 -0
  777. package/dist/service/protocol.d.ts.map +1 -0
  778. package/dist/service/protocol.js +17 -0
  779. package/dist/service/protocol.js.map +1 -0
  780. package/dist/service/queue/manager.d.ts +66 -0
  781. package/dist/service/queue/manager.d.ts.map +1 -0
  782. package/dist/service/queue/manager.js +206 -0
  783. package/dist/service/queue/manager.js.map +1 -0
  784. package/dist/service/queue/processor.d.ts +53 -0
  785. package/dist/service/queue/processor.d.ts.map +1 -0
  786. package/dist/service/queue/processor.js +288 -0
  787. package/dist/service/queue/processor.js.map +1 -0
  788. package/dist/service/queue/queue-persistence.d.ts +27 -0
  789. package/dist/service/queue/queue-persistence.d.ts.map +1 -0
  790. package/dist/service/queue/queue-persistence.js +53 -0
  791. package/dist/service/queue/queue-persistence.js.map +1 -0
  792. package/dist/service/server.d.ts +28 -0
  793. package/dist/service/server.d.ts.map +1 -0
  794. package/dist/service/server.js +101 -0
  795. package/dist/service/server.js.map +1 -0
  796. package/dist/service/task/builder.d.ts +43 -0
  797. package/dist/service/task/builder.d.ts.map +1 -0
  798. package/dist/service/task/builder.js +100 -0
  799. package/dist/service/task/builder.js.map +1 -0
  800. package/dist/service/task/types.d.ts +2 -0
  801. package/dist/service/task/types.d.ts.map +1 -0
  802. package/dist/service/task/types.js +3 -0
  803. package/dist/service/task/types.js.map +1 -0
  804. package/dist/service/web-client.html +1569 -0
  805. package/dist/service/web-server.d.ts +18 -0
  806. package/dist/service/web-server.d.ts.map +1 -0
  807. package/dist/service/web-server.js +395 -0
  808. package/dist/service/web-server.js.map +1 -0
  809. package/dist/shell/banner.d.ts +11 -0
  810. package/dist/shell/banner.d.ts.map +1 -0
  811. package/dist/shell/banner.js +66 -0
  812. package/dist/shell/banner.js.map +1 -0
  813. package/dist/shell/status-poller.d.ts +27 -0
  814. package/dist/shell/status-poller.d.ts.map +1 -0
  815. package/dist/shell/status-poller.js +77 -0
  816. package/dist/shell/status-poller.js.map +1 -0
  817. package/dist/shell/tui.d.ts +32 -0
  818. package/dist/shell/tui.d.ts.map +1 -0
  819. package/dist/shell/tui.js +69 -0
  820. package/dist/shell/tui.js.map +1 -0
  821. package/dist/skills/mcp-manager.d.ts +30 -0
  822. package/dist/skills/mcp-manager.d.ts.map +1 -0
  823. package/dist/skills/mcp-manager.js +104 -0
  824. package/dist/skills/mcp-manager.js.map +1 -0
  825. package/dist/skills/skill-config.d.ts +13 -0
  826. package/dist/skills/skill-config.d.ts.map +1 -0
  827. package/dist/skills/skill-config.js +23 -0
  828. package/dist/skills/skill-config.js.map +1 -0
  829. package/dist/state/manager.d.ts +73 -0
  830. package/dist/state/manager.d.ts.map +1 -0
  831. package/dist/state/manager.js +201 -0
  832. package/dist/state/manager.js.map +1 -0
  833. package/dist/tools/daily.d.ts +2 -0
  834. package/dist/tools/daily.d.ts.map +1 -0
  835. package/dist/tools/daily.js +310 -0
  836. package/dist/tools/daily.js.map +1 -0
  837. package/dist/tools/events.d.ts +2 -0
  838. package/dist/tools/events.d.ts.map +1 -0
  839. package/dist/tools/events.js +132 -0
  840. package/dist/tools/events.js.map +1 -0
  841. package/dist/tools/goals.d.ts +2 -0
  842. package/dist/tools/goals.d.ts.map +1 -0
  843. package/dist/tools/goals.js +128 -0
  844. package/dist/tools/goals.js.map +1 -0
  845. package/dist/tools/index.d.ts +10 -0
  846. package/dist/tools/index.d.ts.map +1 -0
  847. package/dist/tools/index.js +13 -0
  848. package/dist/tools/index.js.map +1 -0
  849. package/dist/tools/notes.d.ts +2 -0
  850. package/dist/tools/notes.d.ts.map +1 -0
  851. package/dist/tools/notes.js +88 -0
  852. package/dist/tools/notes.js.map +1 -0
  853. package/dist/tools/project.d.ts +2 -0
  854. package/dist/tools/project.d.ts.map +1 -0
  855. package/dist/tools/project.js +112 -0
  856. package/dist/tools/project.js.map +1 -0
  857. package/dist/tools/research.d.ts +2 -0
  858. package/dist/tools/research.d.ts.map +1 -0
  859. package/dist/tools/research.js +64 -0
  860. package/dist/tools/research.js.map +1 -0
  861. package/dist/tools/summarize.d.ts +2 -0
  862. package/dist/tools/summarize.d.ts.map +1 -0
  863. package/dist/tools/summarize.js +31 -0
  864. package/dist/tools/summarize.js.map +1 -0
  865. package/dist/tools/tasks.d.ts +2 -0
  866. package/dist/tools/tasks.d.ts.map +1 -0
  867. package/dist/tools/tasks.js +90 -0
  868. package/dist/tools/tasks.js.map +1 -0
  869. package/dist/tools/time.d.ts +2 -0
  870. package/dist/tools/time.d.ts.map +1 -0
  871. package/dist/tools/time.js +21 -0
  872. package/dist/tools/time.js.map +1 -0
  873. package/dist/tools/types.d.ts +56 -0
  874. package/dist/tools/types.d.ts.map +1 -0
  875. package/dist/tools/types.js +17 -0
  876. package/dist/tools/types.js.map +1 -0
  877. package/dist/ui/breadcrumb.d.ts +11 -0
  878. package/dist/ui/breadcrumb.d.ts.map +1 -0
  879. package/dist/ui/breadcrumb.js +35 -0
  880. package/dist/ui/breadcrumb.js.map +1 -0
  881. package/dist/ui/entity-prompt.d.ts +52 -0
  882. package/dist/ui/entity-prompt.d.ts.map +1 -0
  883. package/dist/ui/entity-prompt.js +130 -0
  884. package/dist/ui/entity-prompt.js.map +1 -0
  885. package/dist/utils/chat-logger.d.ts +28 -0
  886. package/dist/utils/chat-logger.d.ts.map +1 -0
  887. package/dist/utils/chat-logger.js +85 -0
  888. package/dist/utils/chat-logger.js.map +1 -0
  889. package/dist/utils/debug.d.ts +14 -0
  890. package/dist/utils/debug.d.ts.map +1 -0
  891. package/dist/utils/debug.js +31 -0
  892. package/dist/utils/debug.js.map +1 -0
  893. package/dist/utils/execution-logger.d.ts +21 -0
  894. package/dist/utils/execution-logger.d.ts.map +1 -0
  895. package/dist/utils/execution-logger.js +46 -0
  896. package/dist/utils/execution-logger.js.map +1 -0
  897. package/dist/utils/ics-parser.d.ts +14 -0
  898. package/dist/utils/ics-parser.d.ts.map +1 -0
  899. package/dist/utils/ics-parser.js +57 -0
  900. package/dist/utils/ics-parser.js.map +1 -0
  901. package/dist/utils/json-parser.d.ts +10 -0
  902. package/dist/utils/json-parser.d.ts.map +1 -0
  903. package/dist/utils/json-parser.js +164 -0
  904. package/dist/utils/json-parser.js.map +1 -0
  905. package/package.json +66 -0
@@ -0,0 +1,762 @@
1
+ // ─────────────────────────────────────────────────────────────────────────────
2
+ // Feral Autonomous Chat — Two-Phase Pipeline
3
+ // ─────────────────────────────────────────────────────────────────────────────
4
+ //
5
+ // Phase 1 (Process Reuse): Present ALL known processes to the LLM and let it
6
+ // pick one if it clearly fits, or choose "custom" to build from scratch.
7
+ //
8
+ // Phase 2 (Custom Pipeline): Only runs when Phase 1 chose "custom" (or no
9
+ // processes exist). A multi-step LLM pipeline that:
10
+ // 1. Selects catalog nodes relevant to the user's request
11
+ // 2. Generates a Feral process JSON using those nodes
12
+ // 3. Runs the process, checks completion, iterates if needed
13
+ // 4. Synthesizes a natural response
14
+ // ─────────────────────────────────────────────────────────────────────────────
15
+ import chalk from 'chalk';
16
+ import ora from 'ora';
17
+ import inquirer from 'inquirer';
18
+ import { bootstrapFeral } from '../feral/bootstrap.js';
19
+ import { hydrateProcessFromString } from '../feral/process/process-json-hydrator.js';
20
+ import { getModelForCapability, createSystemPrompt } from '../llm/router.js';
21
+ import { debug } from '../utils/debug.js';
22
+ import { ChatLogger, generateChatId } from '../utils/chat-logger.js';
23
+ import { parseJsonResponse } from '../utils/json-parser.js';
24
+ import { writeExecutionLog } from '../utils/execution-logger.js';
25
+ import { loadEntityTypes } from '../entities/entity-type-config.js';
26
+ import { listEntities } from '../entities/entity.js';
27
+ import { getUserName } from '../state/manager.js';
28
+ import { getVaultContext } from '../context/reader.js';
29
+ // ─────────────────────────────────────────────────────────────────────────────
30
+ // IN-MEMORY PROCESS SOURCE
31
+ // ─────────────────────────────────────────────────────────────────────────────
32
+ class InMemoryProcessSource {
33
+ processes = [];
34
+ add(process) {
35
+ this.processes.push(process);
36
+ }
37
+ getProcesses() {
38
+ return this.processes;
39
+ }
40
+ }
41
+ // ─────────────────────────────────────────────────────────────────────────────
42
+ // EXAMPLE PROCESSES (for the LLM prompt)
43
+ // ─────────────────────────────────────────────────────────────────────────────
44
+ const EXAMPLE_PROCESSES = [
45
+ {
46
+ description: 'Simple linear process: list tasks then sort them',
47
+ json: {
48
+ schema_version: 1,
49
+ key: 'tasks.list',
50
+ description: 'List all tasks, sorted by priority and due date',
51
+ context: {},
52
+ nodes: [
53
+ { key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'list' } },
54
+ { key: 'list', catalog_node_key: 'list_tasks', configuration: {}, edges: { ok: 'sort' } },
55
+ { key: 'sort', catalog_node_key: 'sort_tasks', configuration: {}, edges: { ok: 'done' } },
56
+ { key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
57
+ ],
58
+ },
59
+ },
60
+ {
61
+ description: 'Create multiple entities: a goal and a todont from user input',
62
+ json: {
63
+ schema_version: 1,
64
+ key: 'multi.create',
65
+ description: 'Create a goal and a todont based on user input',
66
+ context: {},
67
+ nodes: [
68
+ { key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'create_goal' } },
69
+ { key: 'create_goal', catalog_node_key: 'create_goal', configuration: { entity_title: 'Run 10 miles', entity_body: 'Train progressively to run 10 miles by mid-March' }, edges: { ok: 'create_todont', already_exists: 'create_todont', error: 'create_todont' } },
70
+ { key: 'create_todont', catalog_node_key: 'create_todont', configuration: { entity_title: 'No pizza or beer', entity_body: 'Avoid pizza and beer while training for the 10-mile run' }, edges: { ok: 'done', already_exists: 'done', error: 'done' } },
71
+ { key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
72
+ ],
73
+ },
74
+ },
75
+ {
76
+ description: 'If/else branch: find a task, check its priority, and take different actions based on whether it is high priority',
77
+ json: {
78
+ schema_version: 1,
79
+ key: 'task.priority.check',
80
+ description: 'Find a task by title, then branch on its priority — set high-priority tasks to in-progress, leave others as-is',
81
+ context: {},
82
+ nodes: [
83
+ { key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'find' } },
84
+ { key: 'find', catalog_node_key: 'find_task', configuration: {}, edges: { ok: 'check_priority', error: 'done' } },
85
+ { key: 'check_priority', catalog_node_key: 'context_value_comparator', configuration: { left_context_path: 'priority', right_value: 'high' }, edges: { true: 'set_in_progress', false: 'done' } },
86
+ { key: 'set_in_progress', catalog_node_key: 'set_task_status', configuration: { value: 'in-progress' }, edges: { ok: 'done', error: 'done' } },
87
+ { key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
88
+ ],
89
+ },
90
+ },
91
+ {
92
+ description: 'Tag filter: list only tasks that have a specific tag',
93
+ json: {
94
+ schema_version: 1,
95
+ key: 'tasks.by_tag',
96
+ description: 'List all tasks with the "home" tag',
97
+ context: {},
98
+ nodes: [
99
+ { key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'list' } },
100
+ { key: 'list', catalog_node_key: 'list_tasks', configuration: { tags: 'home' }, edges: { ok: 'done' } },
101
+ { key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
102
+ ],
103
+ },
104
+ },
105
+ {
106
+ description: 'Complete a task: find it by title and mark it as done',
107
+ json: {
108
+ schema_version: 1,
109
+ key: 'task.complete',
110
+ description: 'Mark a task as done',
111
+ context: {},
112
+ nodes: [
113
+ { key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'complete' } },
114
+ { key: 'complete', catalog_node_key: 'complete_task', configuration: { entity_title: 'Buy groceries' }, edges: { ok: 'done', not_found: 'done', error: 'done' } },
115
+ { key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
116
+ ],
117
+ },
118
+ },
119
+ {
120
+ description: 'Link two entities: connect a task to a goal',
121
+ json: {
122
+ schema_version: 1,
123
+ key: 'link.task_to_goal',
124
+ description: 'Link a task to a related goal',
125
+ context: {},
126
+ nodes: [
127
+ { key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'link' } },
128
+ { key: 'link', catalog_node_key: 'link_entities', configuration: { source_entity_type: 'task', source_entity_title: 'Fix the fence', target_entity_type: 'goal', target_entity_title: 'Home improvement', label: 'contributes-to' }, edges: { ok: 'done', not_found: 'done', error: 'done' } },
129
+ { key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
130
+ ],
131
+ },
132
+ },
133
+ {
134
+ description: 'Create a new content type for something not yet tracked',
135
+ json: {
136
+ schema_version: 1,
137
+ key: 'type.create',
138
+ description: 'Create a recipe content type',
139
+ context: {},
140
+ nodes: [
141
+ { key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'create_type' } },
142
+ { key: 'create_type', catalog_node_key: 'create_content_type', configuration: { type_name: 'recipe', description: 'A cooking recipe with ingredients, instructions, prep time, and servings' }, edges: { ok: 'done', already_exists: 'done', error: 'done' } },
143
+ { key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
144
+ ],
145
+ },
146
+ },
147
+ {
148
+ description: 'While loop: list tasks, iterate over each one, and use LLM to add a summary to each task body',
149
+ json: {
150
+ schema_version: 1,
151
+ key: 'tasks.summarize',
152
+ description: 'Loop through all tasks and ask the LLM to generate a one-line summary for each',
153
+ context: {},
154
+ nodes: [
155
+ { key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'list' } },
156
+ { key: 'list', catalog_node_key: 'list_tasks', configuration: {}, edges: { ok: 'iterate' } },
157
+ { key: 'iterate', catalog_node_key: 'array_iterator', configuration: { source_context_path: 'entities', cursor_context_path: '_cursor', spread_fields: 'true' }, edges: { ok: 'summarize', done: 'done' } },
158
+ { key: 'summarize', catalog_node_key: 'llm_chat', configuration: { capability: 'summarize', prompt: 'Write a one-line summary for a task titled "{title}".', response_context_path: 'summary' }, edges: { ok: 'iterate', error: 'iterate' } },
159
+ { key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
160
+ ],
161
+ },
162
+ },
163
+ ];
164
+ // ─────────────────────────────────────────────────────────────────────────────
165
+ // CORE: feralChatHeadless — headless pipeline, returns the response string
166
+ // ─────────────────────────────────────────────────────────────────────────────
167
+ export async function feralChatHeadless(userInput, onStatus, onProcess, onQuestion, onChatId) {
168
+ const status = (s) => onStatus?.(s);
169
+ const chatId = generateChatId();
170
+ const logger = new ChatLogger(chatId);
171
+ // Fire the chat ID callback immediately so callers can display/send it
172
+ onChatId?.(chatId);
173
+ status('Thinking…');
174
+ try {
175
+ return await _feralChatHeadlessInner(userInput, status, onProcess, onQuestion, logger, chatId);
176
+ }
177
+ catch (error) {
178
+ await logger.log('error', { message: error instanceof Error ? error.message : String(error) });
179
+ throw error;
180
+ }
181
+ finally {
182
+ logger.close();
183
+ }
184
+ }
185
+ async function _feralChatHeadlessInner(userInput, status, onProcess, onQuestion, logger, chatId) {
186
+ // ── Bootstrap Feral + load entity types + vault context ────────
187
+ const inMemorySource = new InMemoryProcessSource();
188
+ const [runtime, entityTypes, userName] = await Promise.all([
189
+ bootstrapFeral([inMemorySource]),
190
+ loadEntityTypes().catch(() => []),
191
+ getUserName().catch(() => 'friend'),
192
+ ]);
193
+ await logger.log('start', { chatId, userInput });
194
+ // Load vault context (.vault.md chain)
195
+ // Scrub any secrets that may have been accidentally pasted into .vault.md files
196
+ const vaultContext = scrubSecrets(await getVaultContext().catch(() => ''));
197
+ // Build global variables block for the LLM
198
+ const today = new Date().toISOString().split('T')[0];
199
+ const globalsBlock = [
200
+ `- user_name: ${userName}`,
201
+ `- current_date: ${today}`,
202
+ ].join('\n');
203
+ const allNodes = runtime.catalog.getAllCatalogNodes();
204
+ // Build catalog summary for LLM
205
+ const catalogSummary = allNodes
206
+ .filter(n => !n.key.startsWith('speak_')) // skip output variants
207
+ .map(n => `- ${n.key}: ${n.description || n.name} [group: ${n.group}]`)
208
+ .join('\n');
209
+ debug('chat', `Catalog has ${allNodes.length} nodes, sending ${catalogSummary.split('\n').length} to LLM`);
210
+ const llm = await getModelForCapability('reason');
211
+ // ── PHASE 1: Process reuse ─────────────────────────────────────────
212
+ // Show the LLM ALL known processes and let it pick one, or choose "custom".
213
+ const allProcesses = runtime.processFactory.getAllProcesses()
214
+ .filter(p => p.key !== 'chat.generated');
215
+ if (allProcesses.length > 0) {
216
+ status('Checking process library…');
217
+ const processSummary = allProcesses
218
+ .map(p => `- ${p.key}: ${p.description}`)
219
+ .join('\n');
220
+ const phase1Response = await llm.chat([{
221
+ role: 'user',
222
+ content: `The user said: "${userInput}"
223
+
224
+ AVAILABLE PROCESSES:
225
+ ${processSummary}
226
+
227
+ You can either:
228
+ 1. REUSE an existing process if it clearly fits the request
229
+ 2. Choose CUSTOM to build a new process from scratch
230
+
231
+ Return JSON:
232
+ If reuse: { "action": "reuse", "process_key": "the.key", "context_overrides": {}, "reasoning": "why" }
233
+ If custom: { "action": "custom", "reasoning": "why no existing process fits" }
234
+
235
+ Return ONLY the JSON object, no markdown fences.`,
236
+ }], {
237
+ systemPrompt: 'You are the process matcher for Phaibel. Determine if an existing reusable process can handle the user\'s request. Be conservative — only reuse if the process clearly fits. Better to build custom than force-fit.',
238
+ temperature: 0.2,
239
+ });
240
+ debug('chat', `Phase 1 response: ${phase1Response}`);
241
+ try {
242
+ const matchResult = parseJsonResponse(phase1Response);
243
+ await logger.log('process_match', { ...matchResult });
244
+ if (matchResult.action === 'reuse' && matchResult.process_key) {
245
+ status('Running matched process…');
246
+ debug('chat', `Matched process: ${matchResult.process_key}`);
247
+ let contextResult;
248
+ let success = true;
249
+ try {
250
+ const ctx = await runtime.runner.run(matchResult.process_key, {
251
+ user_input: userInput,
252
+ ...(matchResult.context_overrides || {}),
253
+ ...(onQuestion ? { _askQuestion: onQuestion } : {}),
254
+ });
255
+ contextResult = ctx.getAll();
256
+ }
257
+ catch (error) {
258
+ debug('chat', `Matched process execution failed: ${error}`);
259
+ contextResult = { _error: error instanceof Error ? error.message : String(error) };
260
+ success = false;
261
+ }
262
+ const filteredResult = Object.entries(contextResult)
263
+ .filter(([k]) => !k.startsWith('_') && k !== 'user_input')
264
+ .reduce((acc, [k, v]) => {
265
+ acc[k] = typeof v === 'string' && v.length > 2000 ? v.slice(0, 2000) + '…' : v;
266
+ return acc;
267
+ }, {});
268
+ const scrubbedResult = scrubSecrets(filteredResult);
269
+ await logger.log('process_result', { iteration: 1, results: scrubbedResult, source: 'reuse' });
270
+ const matchedProcess = allProcesses.find(p => p.key === matchResult.process_key);
271
+ // Synthesize response
272
+ const finalResponse = await synthesizeResponse(llm, userInput, matchResult.reasoning, [scrubbedResult], [], vaultContext);
273
+ await logger.log('response', { response: finalResponse });
274
+ // Fire-and-forget execution log
275
+ writeExecutionLog({
276
+ timestamp: new Date().toISOString(),
277
+ chat_id: chatId,
278
+ user_input: userInput,
279
+ process_source: 'reuse',
280
+ process_key: matchResult.process_key,
281
+ process_json: matchedProcess ? { key: matchedProcess.key, description: matchedProcess.description } : {},
282
+ context_result: scrubbedResult,
283
+ success,
284
+ outcome_summary: finalResponse.slice(0, 500),
285
+ iterations: 1,
286
+ }).catch(err => debug('chat', `Execution log write failed: ${err}`));
287
+ return finalResponse;
288
+ }
289
+ }
290
+ catch {
291
+ debug('chat', 'Phase 1 parse failed, falling through to custom pipeline');
292
+ }
293
+ }
294
+ // ── PHASE 2: Custom process pipeline ─────────────────────────────
295
+ // Only runs if Phase 1 chose "custom", no processes exist, or parse failed.
296
+ // ── STEP 1: Select catalog nodes ─────────────────────────────────
297
+ status('Selecting capabilities…');
298
+ const step1Response = await llm.chat([{
299
+ role: 'user',
300
+ content: `The user said: "${userInput}"
301
+
302
+ GLOBAL VARIABLES:
303
+ ${globalsBlock}
304
+
305
+ ${vaultContext ? `VAULT CONTEXT (from .vault.md files — project goals, notes, and preferences):\n${vaultContext}\n` : ''}ENTITY TYPES:
306
+ The agent manages these entity types. When the user mentions something that maps to an entity, prefer creating it:
307
+ ${entityTypes.map(t => {
308
+ const fieldDesc = t.fields.length > 0
309
+ ? ` Fields: ${t.fields.map(f => `${f.key}${f.type === 'enum' && f.values ? ` (${f.values.join('|')})` : ''}`).join(', ')}.`
310
+ : '';
311
+ return `- ${t.name} (plural: ${t.plural})${t.description ? ` — ${t.description}` : ''}.${fieldDesc}`;
312
+ }).join('\n')}
313
+
314
+ Each entity type has create_*, list_*, find_*, update_*, delete_*, complete_* catalog nodes, plus set_${'{type}'}_{field} nodes for each field.
315
+ For example: create_task, list_tasks, find_note, set_task_status, complete_task, etc.
316
+
317
+ IMPORTANT CAPABILITIES:
318
+ - To filter entities by tag, use the "tags" config on list_* or search_* nodes (comma-separated tag names).
319
+ - To mark an entity as done/complete, use the complete_* node (e.g. complete_task).
320
+ - To create a NEW content type the user mentions (e.g. "recipe", "habit", "bookmark"), use "create_content_type".
321
+ - To link two entities together (e.g. a task relates to a goal), use "link_entities".
322
+ - To add tags to an existing entity, use the add_tag_* nodes (e.g. add_tag_task).
323
+
324
+ When the user's request implies creating entities, ALWAYS select the appropriate create_* nodes.
325
+ CRITICAL: Match the entity type precisely. An "event" is NOT a "task" — use create_event for events/appointments/meetings and create_task for todos/action items. Each entity type exists for a reason; never substitute one for another.
326
+ When the user mentions multiple entities, select multiple create_* nodes.
327
+ When the user refers to a content type that doesn't exist yet, select "create_content_type".
328
+
329
+ Here are all available catalog nodes in the Feral process engine. Each node performs a specific action:
330
+
331
+ ${catalogSummary}
332
+
333
+ IMPORTANT RULES:
334
+ - Every process MUST start with "start" and end with "stop"
335
+ - Always include "start" and "stop" in your selection
336
+ - The "llm_chat" node sends a prompt to an LLM. It supports {context_key} interpolation in prompts
337
+ - Only select nodes that are directly useful for fulfilling the user's request
338
+ - Prefer entity nodes (list_*, find_*, create_*, complete_*) for data operations — act, don't just advise
339
+ - Prefer system nodes (get_time, get_date, etc.) for system information
340
+ - When the user wants to CREATE something, use the create_* nodes — don't just use llm_chat to give advice
341
+ - When the user wants to mark something as done/complete, use complete_* nodes (e.g. complete_task)
342
+ - When the user asks about entities by tag, use list_* or search_* with the "tags" config
343
+ - When the user mentions a content type that doesn't exist, select "create_content_type"
344
+ - When the user wants to relate or connect entities, select "link_entities"
345
+ - PROACTIVELY link related entities when the context makes the connection clear (e.g. user says "add a task for my goal X" → create task AND link it to the goal)
346
+ - Consider the "About You" section in vault context — use it to personalise responses and infer intent
347
+
348
+ Return a JSON object with this exact structure:
349
+ {
350
+ "reasoning": "Why these nodes were selected",
351
+ "nodes": ["start", "stop", "node_key_1", "node_key_2"]
352
+ }
353
+
354
+ Return ONLY the JSON object, no markdown fences.`,
355
+ }], {
356
+ systemPrompt: 'You are the reasoning engine for Phaibel, a Personal Digital Agent. It manages a vault of linked content (tasks, events, notes, goals, people, etc.) stored as Markdown files. Content can be linked in a knowledge graph. Your job is to select the minimal set of catalog nodes to fulfill the user\'s request. Always include "start" and "stop". Prefer creating concrete entities over giving advice. Look for opportunities to link related content.',
357
+ temperature: 0.3,
358
+ });
359
+ debug('chat', `Step 1 response: ${step1Response}`);
360
+ let nodeSelection;
361
+ try {
362
+ nodeSelection = parseJsonResponse(step1Response);
363
+ }
364
+ catch (err) {
365
+ debug('chat', `Step 1 raw response: ${step1Response}`);
366
+ throw new Error(`Failed to parse node selection from LLM: ${err instanceof Error ? err.message : err}`);
367
+ }
368
+ await logger.log('node_selection', { reasoning: nodeSelection.reasoning, nodes: nodeSelection.nodes });
369
+ // Ensure start/stop are included
370
+ if (!nodeSelection.nodes.includes('start'))
371
+ nodeSelection.nodes.unshift('start');
372
+ if (!nodeSelection.nodes.includes('stop'))
373
+ nodeSelection.nodes.push('stop');
374
+ // Gather selected node details + their config descriptions
375
+ const selectedNodes = nodeSelection.nodes
376
+ .map(key => {
377
+ try {
378
+ return runtime.catalog.getCatalogNode(key);
379
+ }
380
+ catch {
381
+ return null;
382
+ }
383
+ })
384
+ .filter(Boolean);
385
+ const selectedNodeDetails = selectedNodes
386
+ .map(n => {
387
+ const config = Object.keys(n.configuration).length > 0
388
+ ? ` config: ${JSON.stringify(n.configuration)}`
389
+ : '';
390
+ return `- ${n.key} (${n.group}): ${n.description || n.name}${config}`;
391
+ })
392
+ .join('\n');
393
+ // Get config descriptions for the selected node codes
394
+ const nodeCodeDetails = [];
395
+ for (const n of selectedNodes) {
396
+ if (!n)
397
+ continue;
398
+ try {
399
+ const nodeCode = runtime.nodeCodeFactory.getNodeCode(n.nodeCodeKey);
400
+ const Ctor = nodeCode.constructor;
401
+ const Ctor2 = nodeCode.constructor;
402
+ // Filter out secret config keys — they should never appear in LLM prompts
403
+ const configs = (Ctor.configDescriptions ?? []).filter(c => !c.isSecret);
404
+ const results = Ctor2.resultDescriptions ?? [];
405
+ if (configs.length > 0 || results.length > 0) {
406
+ const configStr = configs.map(c => ` - ${c.key} (${c.type}${c.isOptional ? ', optional' : ''}${c.default != null ? `, default: ${JSON.stringify(c.default)}` : ''}): ${c.description}`).join('\n');
407
+ const resultStr = results.map(r => ` → "${r.status}": ${r.description}`).join('\n');
408
+ nodeCodeDetails.push(`${n.key} (nodeCode: ${n.nodeCodeKey}):\n Configuration:\n${configStr}\n Results (edge keys):\n${resultStr}`);
409
+ }
410
+ }
411
+ catch {
412
+ // Skip if node code not found
413
+ }
414
+ }
415
+ // ── STEP 1.5: Information gathering (skipped in headless mode) ──
416
+ // In headless mode we don't prompt for follow-ups — proceed with what we have
417
+ const gatheredInfoStr = '';
418
+ // ── Gather existing entity titles for nodes that reference them ──
419
+ // When find_*, link_*, update_*, complete_*, set_* nodes are selected,
420
+ // the LLM needs to know exact titles to avoid hallucinating them.
421
+ const refNodePattern = /^(find_|link_|update_|complete_|set_|add_tag_|search_)/;
422
+ const referencedTypes = new Set();
423
+ for (const key of nodeSelection.nodes) {
424
+ if (refNodePattern.test(key)) {
425
+ // Extract entity type from node key (e.g. "find_task" → "task", "link_entities" → all)
426
+ const parts = key.split('_');
427
+ if (key === 'link_entities') {
428
+ // link_entities can reference any type — add all
429
+ for (const et of entityTypes)
430
+ referencedTypes.add(et.name);
431
+ }
432
+ else if (parts.length >= 2) {
433
+ const typeName = parts.slice(1).join('_');
434
+ // Validate it's a known entity type (or plural form)
435
+ const match = entityTypes.find(et => et.name === typeName || et.plural === typeName);
436
+ if (match)
437
+ referencedTypes.add(match.name);
438
+ }
439
+ }
440
+ }
441
+ let existingEntitiesBlock = '';
442
+ if (referencedTypes.size > 0) {
443
+ const blocks = [];
444
+ for (const typeName of referencedTypes) {
445
+ try {
446
+ const entities = await listEntities(typeName);
447
+ if (entities.length > 0) {
448
+ const titles = entities
449
+ .slice(0, 50)
450
+ .map(e => ` - "${e.meta.title || e.meta.id}"`)
451
+ .join('\n');
452
+ blocks.push(`${typeName}:\n${titles}`);
453
+ }
454
+ }
455
+ catch {
456
+ // Entity type dir may not exist
457
+ }
458
+ }
459
+ if (blocks.length > 0) {
460
+ existingEntitiesBlock = `\nEXISTING ENTITIES IN VAULT (use these exact titles when referencing existing entities):\n${blocks.join('\n')}\n`;
461
+ }
462
+ }
463
+ // ── ORCHESTRATION LOOP ────────────────────────────────────────────
464
+ // Iteratively: generate process → run → check completion → repeat
465
+ const MAX_ITERATIONS = 3;
466
+ const allResults = [];
467
+ const allReasonings = [];
468
+ const allProcessKeys = [];
469
+ let remainingWork = userInput;
470
+ const examplesStr = EXAMPLE_PROCESSES.map((ex, i) => `Example ${i + 1}: ${ex.description}\n${JSON.stringify(ex.json, null, 2)}`).join('\n\n');
471
+ for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
472
+ // ── STEP 2: Generate process ─────────────────────────────────
473
+ status(`Designing process${iteration > 0 ? ` (step ${iteration + 1})` : ''}…`);
474
+ const previousResultsStr = allResults.length > 0
475
+ ? `\n\nRESULTS FROM PREVIOUS STEPS:\n${JSON.stringify(allResults, null, 2)}`
476
+ : '';
477
+ const step2Response = await llm.chat([{
478
+ role: 'user',
479
+ content: `Build a Feral process to handle: "${remainingWork}"
480
+ ${gatheredInfoStr}${previousResultsStr}${existingEntitiesBlock}
481
+ GLOBAL VARIABLES:
482
+ ${globalsBlock}
483
+
484
+ ${vaultContext ? `VAULT CONTEXT (from .vault.md files — project goals, notes, and preferences):\n${vaultContext}\n` : ''}SELECTED CATALOG NODES (you must only use nodes from this list):
485
+ ${selectedNodeDetails}
486
+
487
+ NODE CONFIGURATION DETAILS:
488
+ ${nodeCodeDetails.join('\n\n')}
489
+
490
+ PROCESS FORMAT RULES:
491
+ 1. schema_version MUST be 1
492
+ 2. key should be "chat.generated"
493
+ 3. First node MUST have key "start" with catalog_node_key "start"
494
+ 4. Last node MUST have key "done" with catalog_node_key "stop" and empty edges {}
495
+ 5. "edges" maps result status strings to the next node key
496
+ 6. Most nodes produce "ok" and "error" results
497
+ 7. Use {context_key} syntax in configuration values to interpolate context values
498
+ 8. The context starts with: user_input = "${userInput}"
499
+ 9. Keep the process as simple as possible — prefer fewer nodes
500
+ 10. For entity creation, ALWAYS set entity_title and entity_body in the configuration with concrete values
501
+ 11. Use the vault context to inform entity content — respect project goals and conventions
502
+ 12. To filter by tag, set "tags" in configuration (comma-separated), e.g. { "tags": "year-of-the-house" }
503
+ 13. To link entities, use link_entities with source_entity_type, source_entity_title, target_entity_type, target_entity_title, and label
504
+ 14. To complete/finish an entity, use the complete_* catalog node (e.g. complete_task)
505
+ 15. ONLY use configuration keys that appear in the NODE CONFIGURATION DETAILS above — do not invent keys
506
+ 16. When referencing existing entities (find_*, link_*, update_*, complete_*, set_*), use EXACT titles from the EXISTING ENTITIES list — do NOT guess or paraphrase entity titles
507
+ 17. CRITICAL: Use the correct entity type catalog node. An event (appointment, meeting, scheduled activity) MUST use create_event, NOT create_task. A task (action item, todo) MUST use create_task, NOT create_event. Never substitute one entity type for another.
508
+
509
+ EXAMPLE PROCESSES:
510
+ ${examplesStr}
511
+
512
+ Return a JSON object with this exact structure:
513
+ {
514
+ "reasoning": "One short sentence",
515
+ "process": { ... the process JSON ... }
516
+ }
517
+
518
+ IMPORTANT: Keep "reasoning" to ONE sentence. The process JSON is what matters.
519
+
520
+ Return ONLY the JSON object, no markdown fences.`,
521
+ }], {
522
+ systemPrompt: 'You are the process designer for Phaibel, a Personal Digital Agent that manages a vault of linked content. Generate a valid process JSON that solves the user\'s request using the provided catalog nodes. The process executes immediately — create real entities, set real values, link real content. Be precise with catalog_node_key values — they must match exactly. Prefer action over advice.',
523
+ temperature: 0.3,
524
+ maxTokens: 16384,
525
+ });
526
+ debug('chat', `Step 2 response (iteration ${iteration + 1}): ${step2Response}`);
527
+ let processDesign;
528
+ try {
529
+ processDesign = parseJsonResponse(step2Response);
530
+ }
531
+ catch (err) {
532
+ debug('chat', `Step 2 raw response: ${step2Response}`);
533
+ throw new Error(`Failed to parse process design from LLM: ${err instanceof Error ? err.message : err}`);
534
+ }
535
+ allReasonings.push(processDesign.reasoning);
536
+ await logger.log('process_design', { iteration: iteration + 1, reasoning: processDesign.reasoning, process: processDesign.process });
537
+ // Emit process JSON for visualization
538
+ onProcess?.(processDesign.process);
539
+ // Detect duplicate process — if the LLM generated the same process
540
+ // as a previous iteration, it's looping and we should stop
541
+ const processFingerprint = JSON.stringify(processDesign.process);
542
+ if (allProcessKeys.includes(processFingerprint)) {
543
+ debug('chat', `Duplicate process detected at iteration ${iteration + 1}, breaking loop`);
544
+ break;
545
+ }
546
+ allProcessKeys.push(processFingerprint);
547
+ // ── STEP 3: Execute the generated process ────────────────────
548
+ status(`Running process${iteration > 0 ? ` (step ${iteration + 1})` : ''}…`);
549
+ let processJsonStr;
550
+ try {
551
+ processJsonStr = JSON.stringify(processDesign.process);
552
+ }
553
+ catch {
554
+ throw new Error('Generated process is not valid JSON');
555
+ }
556
+ const process = hydrateProcessFromString(processJsonStr);
557
+ inMemorySource.add(process);
558
+ let contextResult;
559
+ try {
560
+ const ctx = await runtime.runner.run(process.key, {
561
+ user_input: userInput,
562
+ ...(onQuestion ? { _askQuestion: onQuestion } : {}),
563
+ });
564
+ contextResult = ctx.getAll();
565
+ }
566
+ catch (error) {
567
+ debug('chat', `Process execution failed: ${error instanceof Error ? error.stack ?? error.message : error}`);
568
+ contextResult = { _error: error instanceof Error ? error.message : String(error) };
569
+ }
570
+ // Filter internal keys and scrub any secrets from context results
571
+ // Keep 'error' and '_error' visible so completion checker knows about failures
572
+ const iterationResult = Object.entries(contextResult)
573
+ .filter(([k]) => k === '_error' || (!k.startsWith('_') && k !== 'user_input'))
574
+ .reduce((acc, [k, v]) => {
575
+ acc[k] = typeof v === 'string' && v.length > 2000 ? v.slice(0, 2000) + '…' : v;
576
+ return acc;
577
+ }, {});
578
+ allResults.push(scrubSecrets(iterationResult));
579
+ await logger.log('process_result', { iteration: iteration + 1, results: iterationResult });
580
+ // ── STEP 4: Check completion ──────────────────────────────────
581
+ if (iteration < MAX_ITERATIONS - 1) {
582
+ status('Checking if task is complete…');
583
+ const completionResponse = await llm.chat([{
584
+ role: 'user',
585
+ content: `The user originally said: "${userInput}"
586
+
587
+ We have completed ${iteration + 1} step(s) so far.
588
+
589
+ Step reasoning: ${allReasonings.join(' → ')}
590
+
591
+ Results from all steps:
592
+ ${JSON.stringify(allResults, null, 2)}
593
+
594
+ Is the user's ENTIRE request fulfilled? Consider:
595
+ - Did we create ALL entities the user mentioned?
596
+ - Did we perform ALL actions the user asked for?
597
+ - Are there remaining items that still need to be done?
598
+
599
+ Return a JSON object with EXACTLY this structure:
600
+ If COMPLETE: { "status": "complete" }
601
+ If MORE WORK NEEDED: { "status": "more_work", "remaining": "Description of what still needs to be done" }
602
+
603
+ Return ONLY the JSON object, no markdown fences.`,
604
+ }], {
605
+ systemPrompt: 'You are a task completion checker for Phaibel, a Personal Digital Agent. Be thorough — if the user asked for multiple things (e.g., create a goal AND avoid pizza), make sure ALL parts have been addressed. Also check: should any entities be linked together? Was anything implied but not explicitly created?',
606
+ temperature: 0.2,
607
+ });
608
+ debug('chat', `Completion check (iteration ${iteration + 1}): ${completionResponse}`);
609
+ let completion;
610
+ try {
611
+ completion = parseJsonResponse(completionResponse);
612
+ }
613
+ catch {
614
+ debug('chat', 'Could not parse completion response, assuming complete');
615
+ break;
616
+ }
617
+ await logger.log('completion_check', { iteration: iteration + 1, status: completion.status, remaining: completion.remaining || null });
618
+ if (completion.status === 'complete') {
619
+ debug('chat', 'Task complete, exiting orchestration loop');
620
+ break;
621
+ }
622
+ // Update the remaining work for the next iteration
623
+ remainingWork = completion.remaining || userInput;
624
+ debug('chat', `More work needed: ${remainingWork}`);
625
+ }
626
+ }
627
+ // ── STEP 5: Synthesize response ──────────────────────────────────
628
+ status('Composing response…');
629
+ const nodesUsed = selectedNodes
630
+ .filter(Boolean)
631
+ .map(n => `- ${n.key}: ${n.description || n.name}`);
632
+ const finalResponse = await synthesizeResponse(llm, userInput, nodeSelection.reasoning, allResults, nodesUsed, vaultContext);
633
+ await logger.log('response', { response: finalResponse });
634
+ // Fire-and-forget execution log
635
+ const lastProcessDesign = allReasonings.length > 0
636
+ ? { reasoning: allReasonings, iterations: allReasonings.length }
637
+ : {};
638
+ writeExecutionLog({
639
+ timestamp: new Date().toISOString(),
640
+ chat_id: chatId,
641
+ user_input: userInput,
642
+ process_source: 'custom',
643
+ process_key: 'chat.generated',
644
+ process_json: lastProcessDesign,
645
+ context_result: allResults.length > 0 ? allResults[allResults.length - 1] : {},
646
+ success: !allResults.some(r => r._error),
647
+ outcome_summary: finalResponse.slice(0, 500),
648
+ iterations: allReasonings.length,
649
+ }).catch(err => debug('chat', `Execution log write failed: ${err}`));
650
+ return finalResponse;
651
+ }
652
+ // ─────────────────────────────────────────────────────────────────────────────
653
+ // SYNTHESIS HELPER
654
+ // ─────────────────────────────────────────────────────────────────────────────
655
+ async function synthesizeResponse(llm, userInput, reasoning, results, nodesUsed, vaultContext) {
656
+ const synthesisPrompt = `The user said: "${userInput}"
657
+
658
+ WHAT WAS DONE:
659
+ Reasoning: ${reasoning}
660
+
661
+ ${results.length} process step(s) executed.
662
+
663
+ ${nodesUsed.length > 0 ? `Nodes used:\n${nodesUsed.join('\n')}\n` : ''}Results:
664
+ ${JSON.stringify(results, null, 2)}
665
+
666
+ ${results.some(r => r._error) ? `Note: Some steps encountered errors.` : ''}
667
+
668
+ RESPONSE GUIDELINES:
669
+ - Summarise what was done concretely (created X, linked Y to Z, completed W)
670
+ - If entities were created or updated, name them so the user can find them
671
+ - If entities were linked, mention the relationship
672
+ - Keep it concise — a few sentences, not paragraphs
673
+ - If there were errors, acknowledge honestly and suggest alternatives
674
+ - If the results suggest follow-up actions, briefly mention them`;
675
+ const response = await llm.chat([{ role: 'user', content: synthesisPrompt }], {
676
+ systemPrompt: createSystemPrompt(vaultContext || ''),
677
+ temperature: 0.7,
678
+ });
679
+ return response.trim();
680
+ }
681
+ // ─────────────────────────────────────────────────────────────────────────────
682
+ // CORE: feralChat — CLI wrapper with ora spinner
683
+ // ─────────────────────────────────────────────────────────────────────────────
684
+ export async function feralChat(userInput) {
685
+ const spinner = ora({ text: chalk.dim('Thinking…'), color: 'cyan' }).start();
686
+ try {
687
+ const response = await feralChatHeadless(userInput, (s) => { spinner.text = chalk.dim(s); }, undefined, undefined, (chatId) => { spinner.text = chalk.dim(`[${chatId}] Thinking…`); });
688
+ spinner.stop();
689
+ console.log(chalk.cyan(`\n ${response.split('\n').join('\n ')}\n`));
690
+ }
691
+ catch (error) {
692
+ spinner.stop();
693
+ const msg = error instanceof Error ? error.message : String(error);
694
+ debug('chat', `Autonomous chat failed: ${msg}`);
695
+ if (msg.includes('credit balance') || msg.includes('too low') || msg.includes('billing')) {
696
+ console.log(chalk.red('\n The AI provider is out of credits.'));
697
+ console.log(chalk.dim(' Top up at: https://console.anthropic.com/settings/billing\n'));
698
+ }
699
+ else {
700
+ console.log(chalk.yellow(`\n Hmm, something went wrong: ${msg}`));
701
+ console.log(chalk.dim(' Try rephrasing, or use a specific command like "todo", "note", "today".\n'));
702
+ }
703
+ }
704
+ }
705
+ // ─────────────────────────────────────────────────────────────────────────────
706
+ // HELPERS
707
+ // ─────────────────────────────────────────────────────────────────────────────
708
+ // Patterns that look like API keys / tokens — redact before sending to LLM
709
+ const SECRET_PATTERNS = [
710
+ /sk-[a-zA-Z0-9_-]{20,}/g, // OpenAI keys
711
+ /sk-ant-[a-zA-Z0-9_-]{20,}/g, // Anthropic keys
712
+ /ghp_[a-zA-Z0-9]{36,}/g, // GitHub PATs
713
+ /ghu_[a-zA-Z0-9]{36,}/g, // GitHub user tokens
714
+ /xox[bsarp]-[a-zA-Z0-9\-]{10,}/g, // Slack tokens
715
+ ];
716
+ const SECRET_KEYS = new Set([
717
+ 'apiKey', 'api_key', 'apikey',
718
+ 'secret', 'token', 'password',
719
+ 'authorization', 'credential',
720
+ ]);
721
+ /**
722
+ * Deep-scrub secret-shaped values from an object before it's sent to an LLM.
723
+ */
724
+ function scrubSecrets(obj) {
725
+ if (typeof obj === 'string') {
726
+ let s = obj;
727
+ for (const pat of SECRET_PATTERNS) {
728
+ s = s.replace(pat, '[REDACTED]');
729
+ }
730
+ return s;
731
+ }
732
+ if (Array.isArray(obj)) {
733
+ return obj.map(scrubSecrets);
734
+ }
735
+ if (obj && typeof obj === 'object') {
736
+ const out = {};
737
+ for (const [k, v] of Object.entries(obj)) {
738
+ if (SECRET_KEYS.has(k.toLowerCase())) {
739
+ out[k] = '[REDACTED]';
740
+ }
741
+ else {
742
+ out[k] = scrubSecrets(v);
743
+ }
744
+ }
745
+ return out;
746
+ }
747
+ return obj;
748
+ }
749
+ /**
750
+ * Ask a follow-up question using inquirer.
751
+ * Inquirer manages its own stdin/stdout lifecycle, avoiding conflicts
752
+ * with the shell's paused readline interface.
753
+ */
754
+ async function askFollowUp(question) {
755
+ const { answer } = await inquirer.prompt([{
756
+ type: 'input',
757
+ name: 'answer',
758
+ message: question,
759
+ }]);
760
+ return answer;
761
+ }
762
+ //# sourceMappingURL=chat.js.map