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,1569 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Phaibel</title>
7
+ <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🤖</text></svg>">
8
+ <style>
9
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
10
+
11
+ :root {
12
+ --bg: #1a1a2e;
13
+ --panel: #16213e;
14
+ --border: #0f3460;
15
+ --text: #e0e0e0;
16
+ --dim: #8888aa;
17
+ --cyan: #00d4ff;
18
+ --cyan-dim: #0099bb;
19
+ --green: #00e676;
20
+ --yellow: #ffd740;
21
+ --red: #ff5252;
22
+ --orange: #ff9100;
23
+ }
24
+
25
+ body {
26
+ font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
27
+ background: var(--bg);
28
+ color: var(--text);
29
+ height: 100vh;
30
+ overflow: hidden;
31
+ }
32
+
33
+ .app {
34
+ display: grid;
35
+ grid-template-columns: 1fr 2fr;
36
+ grid-template-rows: auto 1fr;
37
+ height: 100vh;
38
+ gap: 1px;
39
+ background: var(--border);
40
+ }
41
+
42
+ .header {
43
+ grid-column: 1 / -1;
44
+ background: var(--panel);
45
+ padding: 10px 20px;
46
+ display: flex;
47
+ align-items: center;
48
+ gap: 20px;
49
+ border-bottom: 1px solid var(--border);
50
+ }
51
+
52
+ .header h1 {
53
+ font-size: 16px;
54
+ font-weight: 600;
55
+ color: var(--cyan);
56
+ letter-spacing: 2px;
57
+ text-transform: uppercase;
58
+ flex-shrink: 0;
59
+ }
60
+
61
+ .header-stats {
62
+ display: flex;
63
+ gap: 16px;
64
+ flex: 1;
65
+ align-items: center;
66
+ flex-wrap: wrap;
67
+ }
68
+
69
+ .stat {
70
+ font-size: 10px;
71
+ color: var(--dim);
72
+ white-space: nowrap;
73
+ }
74
+
75
+ .stat-label {
76
+ text-transform: uppercase;
77
+ letter-spacing: 0.5px;
78
+ margin-right: 4px;
79
+ }
80
+
81
+ .stat-value {
82
+ color: var(--text);
83
+ font-weight: 600;
84
+ }
85
+
86
+ .header-right {
87
+ display: flex;
88
+ align-items: center;
89
+ gap: 14px;
90
+ flex-shrink: 0;
91
+ }
92
+
93
+ .ws-status {
94
+ font-size: 11px;
95
+ color: var(--dim);
96
+ white-space: nowrap;
97
+ }
98
+
99
+ .ws-status .dot {
100
+ display: inline-block;
101
+ width: 6px;
102
+ height: 6px;
103
+ border-radius: 50%;
104
+ background: var(--green);
105
+ margin-right: 6px;
106
+ }
107
+
108
+ .panel {
109
+ background: var(--panel);
110
+ display: flex;
111
+ flex-direction: column;
112
+ overflow: hidden;
113
+ }
114
+
115
+ .panel-title {
116
+ padding: 12px 16px;
117
+ font-size: 12px;
118
+ font-weight: 600;
119
+ text-transform: uppercase;
120
+ letter-spacing: 1.5px;
121
+ color: var(--cyan);
122
+ border-bottom: 1px solid var(--border);
123
+ flex-shrink: 0;
124
+ }
125
+
126
+ .panel-section-title {
127
+ font-size: 12px;
128
+ font-weight: 600;
129
+ text-transform: uppercase;
130
+ letter-spacing: 1.5px;
131
+ color: var(--cyan);
132
+ padding-bottom: 8px;
133
+ border-bottom: 1px solid var(--border);
134
+ margin-bottom: 8px;
135
+ }
136
+
137
+ .panel-body {
138
+ flex: 1;
139
+ overflow-y: auto;
140
+ padding: 12px 16px;
141
+ }
142
+
143
+ .panel-body::-webkit-scrollbar { width: 4px; }
144
+ .panel-body::-webkit-scrollbar-track { background: transparent; }
145
+ .panel-body::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
146
+
147
+ /* ── Today panel ─────────────────────────────────── */
148
+
149
+ .task-item {
150
+ display: flex;
151
+ align-items: flex-start;
152
+ gap: 10px;
153
+ padding: 8px 0;
154
+ border-bottom: 1px solid rgba(255,255,255,0.04);
155
+ }
156
+
157
+ .task-item:last-child { border-bottom: none; }
158
+
159
+ .task-check {
160
+ width: 16px;
161
+ height: 16px;
162
+ border: 1.5px solid var(--dim);
163
+ border-radius: 3px;
164
+ flex-shrink: 0;
165
+ margin-top: 2px;
166
+ cursor: pointer;
167
+ transition: border-color 0.15s;
168
+ }
169
+
170
+ .task-check:hover { border-color: var(--cyan); }
171
+
172
+ .task-info { flex: 1; min-width: 0; }
173
+
174
+ .task-title {
175
+ font-size: 13px;
176
+ line-height: 1.4;
177
+ word-break: break-word;
178
+ }
179
+
180
+ .task-meta {
181
+ font-size: 10px;
182
+ color: var(--dim);
183
+ margin-top: 2px;
184
+ }
185
+
186
+ .badge {
187
+ display: inline-block;
188
+ font-size: 9px;
189
+ padding: 1px 5px;
190
+ border-radius: 3px;
191
+ font-weight: 600;
192
+ text-transform: uppercase;
193
+ letter-spacing: 0.5px;
194
+ }
195
+
196
+ .badge-critical { background: var(--red); color: #fff; }
197
+ .badge-high { background: var(--orange); color: #1a1a2e; }
198
+ .badge-medium { background: var(--yellow); color: #1a1a2e; }
199
+ .badge-low { background: var(--dim); color: #1a1a2e; }
200
+
201
+ .empty-state {
202
+ color: var(--dim);
203
+ font-size: 12px;
204
+ text-align: center;
205
+ padding: 32px 16px;
206
+ line-height: 1.6;
207
+ }
208
+
209
+ /* ── Calendar panel ──────────────────────────────── */
210
+
211
+ .day-group { margin-bottom: 16px; }
212
+
213
+ .day-header {
214
+ font-size: 11px;
215
+ font-weight: 600;
216
+ text-transform: uppercase;
217
+ letter-spacing: 1px;
218
+ color: var(--cyan-dim);
219
+ padding-bottom: 6px;
220
+ border-bottom: 1px solid rgba(255,255,255,0.06);
221
+ margin-bottom: 6px;
222
+ }
223
+
224
+ .day-header.today { color: var(--cyan); }
225
+
226
+ .event-item {
227
+ padding: 6px 0;
228
+ font-size: 13px;
229
+ }
230
+
231
+ .event-time {
232
+ font-size: 10px;
233
+ color: var(--dim);
234
+ }
235
+
236
+ .event-location {
237
+ font-size: 10px;
238
+ color: var(--dim);
239
+ font-style: italic;
240
+ }
241
+
242
+ .event-cal {
243
+ display: inline-block;
244
+ font-size: 9px;
245
+ padding: 1px 5px;
246
+ border-radius: 3px;
247
+ background: rgba(0, 212, 255, 0.12);
248
+ color: var(--cyan-dim);
249
+ font-weight: 600;
250
+ letter-spacing: 0.3px;
251
+ margin-left: 6px;
252
+ vertical-align: middle;
253
+ }
254
+
255
+ .day-empty {
256
+ font-size: 11px;
257
+ color: var(--dim);
258
+ padding: 4px 0;
259
+ font-style: italic;
260
+ }
261
+
262
+ /* ── Scheduler panel ────────────────────────────────── */
263
+
264
+ .sched-item {
265
+ display: flex;
266
+ align-items: center;
267
+ gap: 8px;
268
+ padding: 5px 0;
269
+ border-bottom: 1px solid rgba(255,255,255,0.04);
270
+ font-size: 12px;
271
+ }
272
+
273
+ .sched-item:last-child { border-bottom: none; }
274
+
275
+ .sched-dot {
276
+ width: 7px;
277
+ height: 7px;
278
+ border-radius: 50%;
279
+ flex-shrink: 0;
280
+ }
281
+
282
+ .sched-dot.on { background: var(--green); }
283
+ .sched-dot.off { background: var(--dim); opacity: 0.4; }
284
+
285
+ .sched-name {
286
+ flex: 1;
287
+ min-width: 0;
288
+ white-space: nowrap;
289
+ overflow: hidden;
290
+ text-overflow: ellipsis;
291
+ }
292
+
293
+ .sched-detail {
294
+ font-size: 10px;
295
+ color: var(--dim);
296
+ text-align: right;
297
+ white-space: nowrap;
298
+ }
299
+
300
+ .sched-error {
301
+ color: var(--red);
302
+ }
303
+
304
+ .sched-actions {
305
+ display: flex;
306
+ gap: 4px;
307
+ flex-shrink: 0;
308
+ }
309
+
310
+ .sched-btn {
311
+ background: rgba(255,255,255,0.06);
312
+ border: 1px solid rgba(255,255,255,0.1);
313
+ color: var(--dim);
314
+ font-size: 10px;
315
+ padding: 1px 6px;
316
+ border-radius: 3px;
317
+ cursor: pointer;
318
+ white-space: nowrap;
319
+ }
320
+
321
+ .sched-btn:hover {
322
+ background: rgba(255,255,255,0.12);
323
+ color: var(--text);
324
+ }
325
+
326
+ /* ── Chat panel ──────────────────────────────────── */
327
+
328
+ .chat-panel {
329
+ display: flex;
330
+ flex-direction: column;
331
+ }
332
+
333
+ .chat-messages {
334
+ flex: 1;
335
+ overflow-y: auto;
336
+ padding: 12px 16px;
337
+ }
338
+
339
+ .chat-messages::-webkit-scrollbar { width: 4px; }
340
+ .chat-messages::-webkit-scrollbar-track { background: transparent; }
341
+ .chat-messages::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
342
+
343
+ .chat-msg {
344
+ margin-bottom: 12px;
345
+ line-height: 1.5;
346
+ }
347
+
348
+ .chat-msg.user {
349
+ text-align: right;
350
+ }
351
+
352
+ .chat-msg.user .chat-bubble {
353
+ background: var(--border);
354
+ display: inline-block;
355
+ padding: 8px 12px;
356
+ border-radius: 12px 12px 2px 12px;
357
+ max-width: 85%;
358
+ text-align: left;
359
+ font-size: 13px;
360
+ }
361
+
362
+ .chat-msg.bot .chat-bubble {
363
+ background: rgba(0, 212, 255, 0.08);
364
+ border: 1px solid rgba(0, 212, 255, 0.15);
365
+ display: inline-block;
366
+ padding: 8px 12px;
367
+ border-radius: 12px 12px 12px 2px;
368
+ max-width: 85%;
369
+ font-size: 13px;
370
+ }
371
+
372
+ /* ── Markdown inside bot bubbles ──────────────────── */
373
+
374
+ .chat-bubble p { margin: 0 0 8px 0; }
375
+ .chat-bubble p:last-child { margin-bottom: 0; }
376
+
377
+ .chat-bubble ul, .chat-bubble ol {
378
+ margin: 4px 0 8px 0;
379
+ padding-left: 20px;
380
+ }
381
+ .chat-bubble li { margin-bottom: 2px; }
382
+
383
+ .chat-bubble h1, .chat-bubble h2, .chat-bubble h3,
384
+ .chat-bubble h4, .chat-bubble h5, .chat-bubble h6 {
385
+ margin: 8px 0 4px 0;
386
+ color: var(--cyan);
387
+ font-size: 13px;
388
+ }
389
+ .chat-bubble h1 { font-size: 15px; }
390
+ .chat-bubble h2 { font-size: 14px; }
391
+
392
+ .chat-bubble code {
393
+ background: rgba(255,255,255,0.08);
394
+ padding: 1px 4px;
395
+ border-radius: 3px;
396
+ font-size: 12px;
397
+ }
398
+
399
+ .chat-bubble pre {
400
+ background: var(--bg);
401
+ border: 1px solid var(--border);
402
+ border-radius: 4px;
403
+ padding: 8px 10px;
404
+ margin: 6px 0;
405
+ overflow-x: auto;
406
+ font-size: 12px;
407
+ }
408
+ .chat-bubble pre code {
409
+ background: none;
410
+ padding: 0;
411
+ border-radius: 0;
412
+ }
413
+
414
+ .chat-bubble blockquote {
415
+ border-left: 3px solid var(--cyan-dim);
416
+ padding-left: 10px;
417
+ margin: 6px 0;
418
+ color: var(--dim);
419
+ }
420
+
421
+ .chat-bubble strong { color: #fff; }
422
+
423
+ .chat-bubble a {
424
+ color: var(--cyan);
425
+ text-decoration: none;
426
+ }
427
+ .chat-bubble a:hover { text-decoration: underline; }
428
+
429
+ .chat-bubble hr {
430
+ border: none;
431
+ border-top: 1px solid var(--border);
432
+ margin: 8px 0;
433
+ }
434
+
435
+ .chat-bubble table {
436
+ border-collapse: collapse;
437
+ margin: 6px 0;
438
+ font-size: 12px;
439
+ }
440
+ .chat-bubble th, .chat-bubble td {
441
+ border: 1px solid var(--border);
442
+ padding: 3px 8px;
443
+ }
444
+ .chat-bubble th { background: rgba(255,255,255,0.05); }
445
+
446
+ .chat-msg.thinking .chat-bubble {
447
+ color: var(--dim);
448
+ font-style: italic;
449
+ font-size: 11px;
450
+ border: none;
451
+ background: none;
452
+ }
453
+
454
+ .chat-msg.error .chat-bubble {
455
+ color: var(--red);
456
+ font-size: 12px;
457
+ border-color: rgba(255, 82, 82, 0.2);
458
+ background: rgba(255, 82, 82, 0.05);
459
+ }
460
+
461
+ .chat-id-label {
462
+ font-size: 9px;
463
+ color: var(--dim);
464
+ margin-top: 4px;
465
+ letter-spacing: 0.5px;
466
+ }
467
+
468
+ .chat-msg.question .chat-bubble {
469
+ background: rgba(0, 212, 255, 0.08);
470
+ border: 1px solid rgba(0, 212, 255, 0.25);
471
+ display: inline-block;
472
+ padding: 10px 14px;
473
+ border-radius: 12px 12px 12px 2px;
474
+ max-width: 85%;
475
+ font-size: 13px;
476
+ }
477
+
478
+ .chat-msg.question .question-text {
479
+ margin-bottom: 10px;
480
+ color: var(--cyan);
481
+ font-weight: 600;
482
+ }
483
+
484
+ .chat-msg.question .question-options {
485
+ display: flex;
486
+ flex-wrap: wrap;
487
+ gap: 6px;
488
+ }
489
+
490
+ .chat-msg.question .question-option-btn {
491
+ background: var(--border);
492
+ color: var(--text);
493
+ border: 1px solid var(--cyan-dim);
494
+ font-family: inherit;
495
+ font-size: 12px;
496
+ padding: 5px 12px;
497
+ border-radius: 4px;
498
+ cursor: pointer;
499
+ transition: background 0.15s, border-color 0.15s;
500
+ }
501
+
502
+ .chat-msg.question .question-option-btn:hover {
503
+ background: rgba(0, 212, 255, 0.15);
504
+ border-color: var(--cyan);
505
+ }
506
+
507
+ .chat-msg.question .question-option-btn:disabled {
508
+ opacity: 0.4;
509
+ cursor: not-allowed;
510
+ }
511
+
512
+ .chat-msg.question .question-input-wrap {
513
+ display: flex;
514
+ gap: 6px;
515
+ }
516
+
517
+ .chat-msg.question .question-input {
518
+ flex: 1;
519
+ background: var(--bg);
520
+ border: 1px solid var(--border);
521
+ color: var(--text);
522
+ font-family: inherit;
523
+ font-size: 12px;
524
+ padding: 6px 10px;
525
+ border-radius: 4px;
526
+ outline: none;
527
+ }
528
+
529
+ .chat-msg.question .question-input:focus { border-color: var(--cyan); }
530
+
531
+ .chat-msg.question .question-submit-btn {
532
+ background: var(--cyan);
533
+ color: var(--bg);
534
+ border: none;
535
+ font-family: inherit;
536
+ font-size: 11px;
537
+ font-weight: 600;
538
+ padding: 6px 12px;
539
+ border-radius: 4px;
540
+ cursor: pointer;
541
+ }
542
+
543
+ .chat-msg.question .question-submit-btn:disabled {
544
+ opacity: 0.4;
545
+ cursor: not-allowed;
546
+ }
547
+
548
+ .chat-process {
549
+ margin-bottom: 12px;
550
+ }
551
+
552
+ .process-toggle {
553
+ font-size: 11px;
554
+ color: var(--cyan-dim);
555
+ cursor: pointer;
556
+ user-select: none;
557
+ padding: 4px 0;
558
+ }
559
+
560
+ .process-toggle:hover { color: var(--cyan); }
561
+
562
+ .process-diagram {
563
+ background: var(--bg);
564
+ border: 1px solid var(--border);
565
+ border-radius: 6px;
566
+ padding: 12px;
567
+ margin-top: 6px;
568
+ overflow-x: auto;
569
+ }
570
+
571
+ .process-diagram svg {
572
+ max-width: 100%;
573
+ height: auto;
574
+ }
575
+
576
+ .chat-input-wrap {
577
+ padding: 12px 16px;
578
+ border-top: 1px solid var(--border);
579
+ flex-shrink: 0;
580
+ }
581
+
582
+ .chat-input-wrap form {
583
+ display: flex;
584
+ gap: 8px;
585
+ }
586
+
587
+ .chat-input {
588
+ flex: 1;
589
+ background: var(--bg);
590
+ border: 1px solid var(--border);
591
+ color: var(--text);
592
+ font-family: inherit;
593
+ font-size: 13px;
594
+ padding: 8px 12px;
595
+ border-radius: 6px;
596
+ outline: none;
597
+ transition: border-color 0.15s;
598
+ }
599
+
600
+ .chat-input:focus { border-color: var(--cyan); }
601
+ .chat-input::placeholder { color: var(--dim); }
602
+
603
+ .chat-send {
604
+ background: var(--cyan);
605
+ color: var(--bg);
606
+ border: none;
607
+ font-family: inherit;
608
+ font-size: 12px;
609
+ font-weight: 600;
610
+ padding: 8px 16px;
611
+ border-radius: 6px;
612
+ cursor: pointer;
613
+ transition: opacity 0.15s;
614
+ }
615
+
616
+ .chat-send:hover { opacity: 0.85; }
617
+ .chat-send:disabled { opacity: 0.4; cursor: not-allowed; }
618
+
619
+ .chat-mic {
620
+ background: transparent;
621
+ border: 1px solid var(--border);
622
+ color: var(--dim);
623
+ font-size: 16px;
624
+ width: 36px;
625
+ height: 36px;
626
+ border-radius: 6px;
627
+ cursor: pointer;
628
+ display: flex;
629
+ align-items: center;
630
+ justify-content: center;
631
+ flex-shrink: 0;
632
+ transition: border-color 0.15s, color 0.15s, background 0.15s;
633
+ }
634
+
635
+ .chat-mic:hover { border-color: var(--cyan); color: var(--text); }
636
+
637
+ .chat-mic.listening {
638
+ border-color: var(--red);
639
+ color: var(--red);
640
+ background: rgba(255, 82, 82, 0.1);
641
+ animation: mic-pulse 1.2s ease-in-out infinite;
642
+ }
643
+
644
+ .chat-mic.unsupported { display: none; }
645
+
646
+ @keyframes mic-pulse {
647
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(255, 82, 82, 0.3); }
648
+ 50% { box-shadow: 0 0 0 6px rgba(255, 82, 82, 0); }
649
+ }
650
+
651
+ /* ── Reaction buttons ───────────────────────────── */
652
+
653
+ .chat-reactions {
654
+ display: flex;
655
+ gap: 4px;
656
+ margin-top: 4px;
657
+ }
658
+
659
+ .reaction-btn {
660
+ background: rgba(255,255,255,0.06);
661
+ border: 1px solid rgba(255,255,255,0.1);
662
+ color: var(--dim);
663
+ font-size: 12px;
664
+ width: 28px;
665
+ height: 24px;
666
+ border-radius: 4px;
667
+ cursor: pointer;
668
+ display: flex;
669
+ align-items: center;
670
+ justify-content: center;
671
+ transition: background 0.15s, border-color 0.15s, color 0.15s;
672
+ }
673
+
674
+ .reaction-btn:hover { background: rgba(255,255,255,0.12); color: var(--text); }
675
+
676
+ .reaction-btn.selected {
677
+ border-color: var(--cyan);
678
+ color: var(--cyan);
679
+ background: rgba(0, 212, 255, 0.1);
680
+ cursor: default;
681
+ }
682
+
683
+ .reaction-btn:disabled { opacity: 0.4; cursor: default; }
684
+
685
+ .reaction-details-wrap {
686
+ display: flex;
687
+ gap: 4px;
688
+ margin-top: 4px;
689
+ }
690
+
691
+ .reaction-details-input {
692
+ flex: 1;
693
+ background: var(--bg);
694
+ border: 1px solid var(--border);
695
+ color: var(--text);
696
+ font-family: inherit;
697
+ font-size: 11px;
698
+ padding: 4px 8px;
699
+ border-radius: 4px;
700
+ outline: none;
701
+ }
702
+
703
+ .reaction-details-input:focus { border-color: var(--cyan); }
704
+
705
+ .reaction-details-submit {
706
+ background: var(--cyan);
707
+ color: var(--bg);
708
+ border: none;
709
+ font-family: inherit;
710
+ font-size: 10px;
711
+ font-weight: 600;
712
+ padding: 4px 8px;
713
+ border-radius: 4px;
714
+ cursor: pointer;
715
+ }
716
+
717
+ /* ── Responsive ──────────────────────────────────── */
718
+
719
+ @media (max-width: 700px) {
720
+ .app {
721
+ grid-template-columns: 1fr;
722
+ grid-template-rows: auto auto 1fr;
723
+ }
724
+ }
725
+ </style>
726
+ </head>
727
+ <body>
728
+
729
+ <div class="app">
730
+ <div class="header">
731
+ <h1 id="header-agent-name">Phaibel</h1>
732
+ <div class="header-stats" id="header-stats">
733
+ <div class="stat"><span class="stat-label">Vault</span><span class="stat-value" id="stat-vault">--</span></div>
734
+ <div class="stat"><span class="stat-label">Queue</span><span class="stat-value" id="stat-queue">--</span></div>
735
+ <div class="stat"><span class="stat-label">Graph</span><span class="stat-value" id="stat-graph">--</span></div>
736
+ <div class="stat"><span class="stat-label">Mem</span><span class="stat-value" id="stat-mem">--</span></div>
737
+ <div class="stat"><span class="stat-label">Uptime</span><span class="stat-value" id="stat-uptime">--</span></div>
738
+ </div>
739
+ <div class="header-right">
740
+ <div class="ws-status" id="ws-status"><span class="dot"></span>Connected</div>
741
+ </div>
742
+ </div>
743
+
744
+ <!-- Left: Timeline + Scheduler -->
745
+ <div class="panel">
746
+ <div class="panel-body" id="left-body">
747
+ <div id="timeline-body">
748
+ <div class="empty-state">Loading…</div>
749
+ </div>
750
+ <div class="panel-section-title" style="margin-top: 16px;">Scheduler</div>
751
+ <div id="scheduler-body">
752
+ <div class="empty-state">Loading scheduler…</div>
753
+ </div>
754
+ </div>
755
+ </div>
756
+
757
+ <!-- Chat -->
758
+ <div class="panel chat-panel">
759
+ <div class="panel-title">Chat</div>
760
+ <div class="chat-messages" id="chat-messages">
761
+ <div class="chat-msg bot">
762
+ <div class="chat-bubble">Ready to serve.</div>
763
+ </div>
764
+ </div>
765
+ <div class="chat-input-wrap">
766
+ <form id="chat-form">
767
+ <button class="chat-mic" id="chat-mic" type="button" title="Voice input">&#x1F3A4;</button>
768
+ <input class="chat-input" id="chat-input" type="text"
769
+ placeholder="Ask me anything…" autocomplete="off">
770
+ <button class="chat-send" id="chat-send" type="submit">Send</button>
771
+ </form>
772
+ </div>
773
+ </div>
774
+ </div>
775
+
776
+ <script src="https://cdn.jsdelivr.net/npm/marked@15/marked.min.js"></script>
777
+ <script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
778
+ <script>mermaid.initialize({ startOnLoad: false, theme: 'dark', themeVariables: { primaryColor: '#0f3460', primaryTextColor: '#e0e0e0', primaryBorderColor: '#00d4ff', lineColor: '#00d4ff', secondaryColor: '#16213e', tertiaryColor: '#1a1a2e', fontFamily: 'monospace' } });</script>
779
+ <script>
780
+ (function() {
781
+ const timelineBody = document.getElementById('timeline-body');
782
+ const schedulerBody = document.getElementById('scheduler-body');
783
+ const chatMessages = document.getElementById('chat-messages');
784
+ const chatForm = document.getElementById('chat-form');
785
+ const chatInput = document.getElementById('chat-input');
786
+ const chatSend = document.getElementById('chat-send');
787
+ const wsStatusEl = document.getElementById('ws-status');
788
+ const statVault = document.getElementById('stat-vault');
789
+ const statQueue = document.getElementById('stat-queue');
790
+ const statGraph = document.getElementById('stat-graph');
791
+ const statMem = document.getElementById('stat-mem');
792
+ const statUptime = document.getElementById('stat-uptime');
793
+
794
+ const chatMic = document.getElementById('chat-mic');
795
+
796
+ let ws = null;
797
+ let thinkingEl = null;
798
+ let currentChatId = null;
799
+ let calendarNames = {}; // id → name
800
+
801
+ // ── Speech-to-Text ──────────────────────────────────────────
802
+
803
+ const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
804
+ let recognition = null;
805
+ let micListening = false;
806
+
807
+ if (SpeechRecognition) {
808
+ recognition = new SpeechRecognition();
809
+ recognition.lang = 'en-US';
810
+ recognition.continuous = false;
811
+ recognition.interimResults = true;
812
+
813
+ let finalTranscript = '';
814
+
815
+ recognition.onstart = () => {
816
+ micListening = true;
817
+ chatMic.classList.add('listening');
818
+ chatMic.title = 'Listening… click to stop';
819
+ };
820
+
821
+ recognition.onend = () => {
822
+ micListening = false;
823
+ chatMic.classList.remove('listening');
824
+ chatMic.title = 'Voice input';
825
+ // If we got a final transcript and the input has text, auto-submit
826
+ if (finalTranscript && chatInput.value.trim()) {
827
+ chatForm.dispatchEvent(new Event('submit'));
828
+ }
829
+ finalTranscript = '';
830
+ };
831
+
832
+ recognition.onresult = (event) => {
833
+ let interim = '';
834
+ finalTranscript = '';
835
+ for (let i = event.resultIndex; i < event.results.length; i++) {
836
+ const t = event.results[i][0].transcript;
837
+ if (event.results[i].isFinal) {
838
+ finalTranscript += t;
839
+ } else {
840
+ interim += t;
841
+ }
842
+ }
843
+ // Show interim results in the input as they come
844
+ if (finalTranscript) {
845
+ chatInput.value = finalTranscript;
846
+ } else {
847
+ chatInput.value = interim;
848
+ }
849
+ };
850
+
851
+ recognition.onerror = (event) => {
852
+ micListening = false;
853
+ chatMic.classList.remove('listening');
854
+ chatMic.title = 'Voice input';
855
+ if (event.error !== 'aborted' && event.error !== 'no-speech') {
856
+ console.warn('Speech recognition error:', event.error);
857
+ }
858
+ };
859
+
860
+ chatMic.addEventListener('click', () => {
861
+ if (chatInput.disabled) return;
862
+ if (micListening) {
863
+ recognition.stop();
864
+ } else {
865
+ chatInput.value = '';
866
+ recognition.start();
867
+ }
868
+ });
869
+ } else {
870
+ chatMic.classList.add('unsupported');
871
+ }
872
+
873
+ // ── Data fetching ──────────────────────────────────────────
874
+
875
+ async function fetchCalendarNames() {
876
+ try {
877
+ const res = await fetch('/api/calendars');
878
+ const cals = await res.json();
879
+ calendarNames = {};
880
+ for (const c of cals) calendarNames[c.id] = c.name;
881
+ } catch { /* ignore */ }
882
+ }
883
+
884
+ function getValidDate(due) {
885
+ if (!due || typeof due !== 'string') return null;
886
+ if (due.startsWith('{')) return null;
887
+ if (!/^\d{4}-\d{2}-\d{2}/.test(due)) return null;
888
+ return due.slice(0, 10);
889
+ }
890
+
891
+ async function fetchTimeline() {
892
+ try {
893
+ const [taskRes, eventRes] = await Promise.all([
894
+ fetch('/api/entities/task'),
895
+ fetch('/api/entities/event'),
896
+ ]);
897
+ const tasks = await taskRes.json();
898
+ const events = await eventRes.json();
899
+
900
+ const now = new Date();
901
+ const dates = [];
902
+ for (let i = 0; i < 3; i++) {
903
+ const d = new Date(now);
904
+ d.setDate(d.getDate() + i);
905
+ dates.push(d.toISOString().split('T')[0]);
906
+ }
907
+ const todayStr = dates[0];
908
+
909
+ // Buckets: overdue, today, tomorrow, day-after
910
+ const overdue = [];
911
+ const buckets = { [dates[0]]: [], [dates[1]]: [], [dates[2]]: [] };
912
+
913
+ // Assign tasks to buckets
914
+ for (const e of tasks) {
915
+ if (e.meta.status === 'done') continue;
916
+ const due = getValidDate(e.meta.dueDate);
917
+ const item = {
918
+ kind: 'task',
919
+ id: e.meta.id,
920
+ title: e.meta.title,
921
+ status: e.meta.status || 'open',
922
+ priority: e.meta.priority || 'medium',
923
+ dueDate: due,
924
+ };
925
+ if (!due) {
926
+ // No date → today bucket
927
+ buckets[dates[0]].push(item);
928
+ } else if (due < todayStr) {
929
+ overdue.push(item);
930
+ } else if (buckets[due]) {
931
+ buckets[due].push(item);
932
+ }
933
+ // Future beyond 2 days → skip
934
+ }
935
+
936
+ // Assign events to buckets
937
+ for (const e of events) {
938
+ const eventDate = ((e.meta.startDate || '') + '').split('T')[0];
939
+ if (!buckets[eventDate]) continue;
940
+ buckets[eventDate].push({
941
+ kind: 'event',
942
+ title: e.meta.title,
943
+ startDate: e.meta.startDate,
944
+ endDate: e.meta.endDate,
945
+ location: e.meta.location || null,
946
+ calendarId: e.meta.calendarId || null,
947
+ });
948
+ }
949
+
950
+ renderTimeline(overdue, buckets, dates);
951
+ } catch {
952
+ timelineBody.innerHTML = '<div class="empty-state">Failed to load timeline.</div>';
953
+ }
954
+ }
955
+
956
+ async function fetchScheduler() {
957
+ try {
958
+ const res = await fetch('/api/scheduler');
959
+ const data = await res.json();
960
+ renderScheduler(data);
961
+ } catch {
962
+ schedulerBody.innerHTML = '<div class="empty-state">Failed to load scheduler.</div>';
963
+ }
964
+ }
965
+
966
+ window.schedToggle = async function(jobName) {
967
+ try {
968
+ const res = await fetch('/api/scheduler/' + encodeURIComponent(jobName) + '/toggle', { method: 'POST' });
969
+ const data = await res.json();
970
+ if (data.jobs) renderScheduler(data);
971
+ else await fetchScheduler();
972
+ } catch { await fetchScheduler(); }
973
+ };
974
+
975
+ window.schedRun = async function(jobName) {
976
+ try {
977
+ const res = await fetch('/api/scheduler/' + encodeURIComponent(jobName) + '/run', { method: 'POST' });
978
+ const data = await res.json();
979
+ if (data.jobs) renderScheduler(data);
980
+ else await fetchScheduler();
981
+ } catch { await fetchScheduler(); }
982
+ };
983
+
984
+ async function fetchStatus() {
985
+ try {
986
+ const res = await fetch('/api/status');
987
+ const data = await res.json();
988
+ statVault.textContent = data.vaultRoot || '--';
989
+ statQueue.textContent = String(data.queueSize ?? 0);
990
+ statGraph.textContent = (data.graph ? data.graph.nodes + 'n / ' + data.graph.edges + 'e' : '--');
991
+ statMem.textContent = (data.memory ? data.memory.rss + ' MB' : '--');
992
+ statUptime.textContent = formatUptime(data.uptime || 0);
993
+ // Update agent name in header if available
994
+ if (data.agentName) {
995
+ document.getElementById('header-agent-name').textContent = data.agentName;
996
+ }
997
+ } catch { /* ignore */ }
998
+ }
999
+
1000
+ function formatUptime(seconds) {
1001
+ if (seconds < 60) return seconds + 's';
1002
+ if (seconds < 3600) return Math.floor(seconds / 60) + 'm';
1003
+ const h = Math.floor(seconds / 3600);
1004
+ const m = Math.floor((seconds % 3600) / 60);
1005
+ return h + 'h ' + m + 'm';
1006
+ }
1007
+
1008
+ // ── Rendering ──────────────────────────────────────────────
1009
+
1010
+ function renderTimeline(overdue, buckets, dates) {
1011
+ const dayNames = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
1012
+ const priorityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
1013
+ const sections = [];
1014
+
1015
+ // A) Overdue
1016
+ if (overdue.length > 0) {
1017
+ overdue.sort((a, b) => (a.dueDate || '').localeCompare(b.dueDate || ''));
1018
+ sections.push(renderSection('Overdue', null, overdue, true));
1019
+ }
1020
+
1021
+ // B) Today, Tomorrow, Day After
1022
+ const labels = ['Today', null, null];
1023
+ for (let i = 0; i < dates.length; i++) {
1024
+ const date = dates[i];
1025
+ const d = new Date(date + 'T12:00:00');
1026
+ const label = labels[i] || dayNames[d.getDay()];
1027
+ const items = buckets[date] || [];
1028
+
1029
+ // Sort: events by time first, then tasks by priority
1030
+ items.sort((a, b) => {
1031
+ // Events before tasks
1032
+ if (a.kind === 'event' && b.kind !== 'event') return -1;
1033
+ if (a.kind !== 'event' && b.kind === 'event') return 1;
1034
+ // Events: by start time
1035
+ if (a.kind === 'event' && b.kind === 'event') {
1036
+ return (a.startDate || '').localeCompare(b.startDate || '');
1037
+ }
1038
+ // Tasks: by priority
1039
+ const pa = priorityOrder[a.priority] ?? 2;
1040
+ const pb = priorityOrder[b.priority] ?? 2;
1041
+ return pa - pb;
1042
+ });
1043
+
1044
+ sections.push(renderSection(label, date, items, i === 0));
1045
+ }
1046
+
1047
+ const html = sections.join('');
1048
+ timelineBody.innerHTML = html || '<div class="empty-state">Nothing on the horizon. All clear!</div>';
1049
+
1050
+ // Wire up task checkboxes
1051
+ timelineBody.querySelectorAll('.task-check').forEach(el => {
1052
+ el.addEventListener('click', async () => {
1053
+ const item = el.closest('.task-item');
1054
+ const id = item.dataset.taskId;
1055
+ if (!id) return;
1056
+ item.style.opacity = '0.4';
1057
+ try {
1058
+ const res = await fetch('/api/entities/task/' + encodeURIComponent(id), {
1059
+ method: 'PATCH',
1060
+ headers: { 'Content-Type': 'application/json' },
1061
+ body: JSON.stringify({ status: 'done' }),
1062
+ });
1063
+ if (res.ok) {
1064
+ item.remove();
1065
+ } else {
1066
+ item.style.opacity = '1';
1067
+ }
1068
+ } catch {
1069
+ item.style.opacity = '1';
1070
+ }
1071
+ });
1072
+ });
1073
+ }
1074
+
1075
+ function renderSection(label, date, items, isHighlight) {
1076
+ const headerClass = isHighlight ? ' today' : '';
1077
+ const dateStr = date ? ' · ' + date : '';
1078
+ let body;
1079
+
1080
+ if (items.length === 0) {
1081
+ body = '<div class="day-empty">Nothing scheduled</div>';
1082
+ } else {
1083
+ body = items.map(item => {
1084
+ if (item.kind === 'event') {
1085
+ const time = item.startDate ? formatTime(item.startDate) : '';
1086
+ const calName = item.calendarId && calendarNames[item.calendarId] ? calendarNames[item.calendarId] : '';
1087
+ return `<div class="event-item">
1088
+ ${time ? '<span class="event-time">' + time + '</span> ' : ''}
1089
+ ${esc(item.title)}${calName ? '<span class="event-cal">' + esc(calName) + '</span>' : ''}
1090
+ ${item.location ? '<div class="event-location">' + esc(item.location) + '</div>' : ''}
1091
+ </div>`;
1092
+ } else {
1093
+ return `<div class="task-item" data-task-id="${esc(item.id)}">
1094
+ <div class="task-check" title="Mark done"></div>
1095
+ <div class="task-info">
1096
+ <div class="task-title">${esc(item.title)}</div>
1097
+ <div class="task-meta">
1098
+ <span class="badge badge-${item.priority}">${item.priority}</span>
1099
+ ${item.dueDate ? ' · due ' + item.dueDate : ''}
1100
+ </div>
1101
+ </div>
1102
+ </div>`;
1103
+ }
1104
+ }).join('');
1105
+ }
1106
+
1107
+ return `<div class="day-group">
1108
+ <div class="day-header${headerClass}">${label}${dateStr}</div>
1109
+ ${body}
1110
+ </div>`;
1111
+ }
1112
+
1113
+ function renderScheduler(data) {
1114
+ if (!data.jobs || data.jobs.length === 0) {
1115
+ schedulerBody.innerHTML = '<div class="empty-state">No scheduler jobs configured.</div>';
1116
+ return;
1117
+ }
1118
+
1119
+ schedulerBody.innerHTML = data.jobs.map(j => {
1120
+ const dot = j.enabled ? 'on' : 'off';
1121
+ let detail;
1122
+ if (j.running) {
1123
+ detail = 'running…';
1124
+ } else if (!j.enabled) {
1125
+ detail = 'disabled';
1126
+ } else if (j.lastRunAt) {
1127
+ detail = timeAgo(j.lastRunAt);
1128
+ if (j.lastError) {
1129
+ detail += ' · <span class="sched-error">' + esc(j.lastError.slice(0, 40)) + '</span>';
1130
+ } else if (j.lastResult) {
1131
+ detail += ' · ' + esc(j.lastResult.slice(0, 40));
1132
+ }
1133
+ } else if (j.nextRunAt) {
1134
+ detail = 'next ' + timeAgo(j.nextRunAt).replace(' ago', '');
1135
+ } else {
1136
+ detail = 'every ' + formatInterval(j.intervalMinutes);
1137
+ }
1138
+ const toggleLabel = j.enabled ? 'disable' : 'enable';
1139
+ const runBtn = j.enabled
1140
+ ? `<button class="sched-btn" onclick="schedRun('${esc(j.name)}')"${j.running ? ' disabled' : ''}>run</button>`
1141
+ : '';
1142
+ return `<div class="sched-item">
1143
+ <span class="sched-dot ${dot}"></span>
1144
+ <span class="sched-name">${esc(j.name)}</span>
1145
+ <span class="sched-detail">${detail}</span>
1146
+ <span class="sched-actions">
1147
+ <button class="sched-btn" onclick="schedToggle('${esc(j.name)}')">${toggleLabel}</button>
1148
+ ${runBtn}
1149
+ </span>
1150
+ </div>`;
1151
+ }).join('');
1152
+ }
1153
+
1154
+ function formatInterval(minutes) {
1155
+ if (minutes < 60) return minutes + 'm';
1156
+ if (minutes < 1440) return Math.floor(minutes / 60) + 'h';
1157
+ return Math.floor(minutes / 1440) + 'd';
1158
+ }
1159
+
1160
+ function timeAgo(isoString) {
1161
+ try {
1162
+ const diff = Date.now() - new Date(isoString).getTime();
1163
+ if (diff < 0) return 'just now';
1164
+ const secs = Math.floor(diff / 1000);
1165
+ if (secs < 60) return secs + 's ago';
1166
+ const mins = Math.floor(secs / 60);
1167
+ if (mins < 60) return mins + 'm ago';
1168
+ const hrs = Math.floor(mins / 60);
1169
+ if (hrs < 24) return hrs + 'h ago';
1170
+ const days = Math.floor(hrs / 24);
1171
+ return days + 'd ago';
1172
+ } catch { return 'unknown'; }
1173
+ }
1174
+
1175
+ // ── WebSocket ──────────────────────────────────────────────
1176
+
1177
+ function connectWs() {
1178
+ const proto = location.protocol === 'https:' ? 'wss:' : 'ws:';
1179
+ ws = new WebSocket(proto + '//' + location.host);
1180
+
1181
+ ws.onopen = () => {
1182
+ wsStatusEl.innerHTML = '<span class="dot"></span>Connected';
1183
+ };
1184
+
1185
+ ws.onclose = () => {
1186
+ wsStatusEl.innerHTML = '<span class="dot" style="background:var(--red)"></span>Disconnected';
1187
+ // Reconnect after 3s
1188
+ setTimeout(connectWs, 3000);
1189
+ };
1190
+
1191
+ ws.onmessage = (evt) => {
1192
+ let msg;
1193
+ try { msg = JSON.parse(evt.data); } catch { return; }
1194
+
1195
+ try {
1196
+ switch (msg.type) {
1197
+ case 'chat.start':
1198
+ currentChatId = msg.chatId || null;
1199
+ break;
1200
+ case 'chat.thinking':
1201
+ showThinking(msg.status);
1202
+ break;
1203
+ case 'chat.question':
1204
+ clearThinking();
1205
+ showQuestion(msg.question, msg.options);
1206
+ break;
1207
+ case 'chat.process':
1208
+ clearThinking();
1209
+ showProcessDiagram(msg.process);
1210
+ break;
1211
+ case 'chat.response':
1212
+ clearThinking();
1213
+ if (msg.chatId) currentChatId = msg.chatId;
1214
+ addMessage('bot', msg.message, currentChatId);
1215
+ currentChatId = null;
1216
+ unlockChat();
1217
+ break;
1218
+ case 'chat.error':
1219
+ clearThinking();
1220
+ addMessage('error', msg.error);
1221
+ currentChatId = null;
1222
+ unlockChat();
1223
+ break;
1224
+ case 'refresh':
1225
+ if (msg.panel === 'today' || msg.panel === 'calendar') fetchTimeline();
1226
+ break;
1227
+ }
1228
+ } catch (err) {
1229
+ console.error('WS message handler error:', err);
1230
+ clearThinking();
1231
+ addMessage('error', 'Client error: ' + (err.message || err));
1232
+ unlockChat();
1233
+ }
1234
+ };
1235
+ }
1236
+
1237
+ // ── Chat UI ────────────────────────────────────────────────
1238
+
1239
+ chatForm.addEventListener('submit', (e) => {
1240
+ e.preventDefault();
1241
+ const text = chatInput.value.trim();
1242
+ if (!text || !ws || ws.readyState !== WebSocket.OPEN) return;
1243
+
1244
+ addMessage('user', text);
1245
+ ws.send(JSON.stringify({ type: 'chat', message: text }));
1246
+ chatInput.value = '';
1247
+ chatSend.disabled = true;
1248
+ chatInput.disabled = true;
1249
+ });
1250
+
1251
+ function addMessage(role, text, chatId) {
1252
+ const div = document.createElement('div');
1253
+ div.className = 'chat-msg ' + role;
1254
+ const bubble = document.createElement('div');
1255
+ bubble.className = 'chat-bubble';
1256
+ if (role === 'bot') {
1257
+ bubble.innerHTML = renderMarkdown(text || '');
1258
+ } else {
1259
+ bubble.textContent = text || '';
1260
+ }
1261
+ div.appendChild(bubble);
1262
+ if (chatId && role === 'bot') {
1263
+ const idLabel = document.createElement('div');
1264
+ idLabel.className = 'chat-id-label';
1265
+ idLabel.textContent = chatId;
1266
+ div.appendChild(idLabel);
1267
+
1268
+ // Reaction buttons
1269
+ const reactions = document.createElement('div');
1270
+ reactions.className = 'chat-reactions';
1271
+
1272
+ const upBtn = document.createElement('button');
1273
+ upBtn.className = 'reaction-btn';
1274
+ upBtn.innerHTML = '+';
1275
+ upBtn.title = 'Helpful';
1276
+
1277
+ const downBtn = document.createElement('button');
1278
+ downBtn.className = 'reaction-btn';
1279
+ downBtn.innerHTML = '&minus;';
1280
+ downBtn.title = 'Not helpful';
1281
+
1282
+ function sendReaction(reaction, details) {
1283
+ if (ws && ws.readyState === WebSocket.OPEN) {
1284
+ ws.send(JSON.stringify({
1285
+ type: 'chat.reaction',
1286
+ chatId: chatId,
1287
+ reaction: reaction,
1288
+ details: details || undefined,
1289
+ }));
1290
+ }
1291
+ }
1292
+
1293
+ upBtn.addEventListener('click', function() {
1294
+ upBtn.classList.add('selected');
1295
+ upBtn.disabled = true;
1296
+ downBtn.disabled = true;
1297
+ sendReaction('positive');
1298
+ });
1299
+
1300
+ downBtn.addEventListener('click', function() {
1301
+ downBtn.classList.add('selected');
1302
+ upBtn.disabled = true;
1303
+ downBtn.disabled = true;
1304
+
1305
+ var detailsWrap = document.createElement('div');
1306
+ detailsWrap.className = 'reaction-details-wrap';
1307
+ var detailsInput = document.createElement('input');
1308
+ detailsInput.className = 'reaction-details-input';
1309
+ detailsInput.type = 'text';
1310
+ detailsInput.placeholder = 'What went wrong? (optional, Enter to send)';
1311
+ var detailsSubmit = document.createElement('button');
1312
+ detailsSubmit.className = 'reaction-details-submit';
1313
+ detailsSubmit.textContent = 'Send';
1314
+
1315
+ function submitDetails() {
1316
+ sendReaction('negative', detailsInput.value.trim());
1317
+ detailsWrap.remove();
1318
+ }
1319
+
1320
+ detailsSubmit.addEventListener('click', submitDetails);
1321
+ detailsInput.addEventListener('keydown', function(e) {
1322
+ if (e.key === 'Enter') { e.preventDefault(); submitDetails(); }
1323
+ if (e.key === 'Escape') { sendReaction('negative'); detailsWrap.remove(); }
1324
+ });
1325
+
1326
+ detailsWrap.appendChild(detailsInput);
1327
+ detailsWrap.appendChild(detailsSubmit);
1328
+ div.appendChild(detailsWrap);
1329
+ setTimeout(function() { detailsInput.focus(); }, 50);
1330
+ });
1331
+
1332
+ reactions.appendChild(upBtn);
1333
+ reactions.appendChild(downBtn);
1334
+ div.appendChild(reactions);
1335
+ }
1336
+ chatMessages.appendChild(div);
1337
+ chatMessages.scrollTop = chatMessages.scrollHeight;
1338
+ }
1339
+
1340
+ function unlockChat() {
1341
+ chatSend.disabled = false;
1342
+ chatInput.disabled = false;
1343
+ chatInput.focus();
1344
+ }
1345
+
1346
+ function renderMarkdown(text) {
1347
+ try {
1348
+ if (typeof marked !== 'undefined' && marked.parse) {
1349
+ return marked.parse(text, { breaks: true, gfm: true });
1350
+ }
1351
+ } catch (err) {
1352
+ console.warn('marked.parse failed:', err);
1353
+ }
1354
+ // Fallback: escape HTML and convert newlines to <br>
1355
+ return esc(text).replace(/\n/g, '<br>');
1356
+ }
1357
+
1358
+ function showThinking(status) {
1359
+ if (!thinkingEl) {
1360
+ thinkingEl = document.createElement('div');
1361
+ thinkingEl.className = 'chat-msg thinking';
1362
+ thinkingEl.innerHTML = '<div class="chat-bubble"></div>';
1363
+ chatMessages.appendChild(thinkingEl);
1364
+ }
1365
+ thinkingEl.querySelector('.chat-bubble').textContent = status;
1366
+ chatMessages.scrollTop = chatMessages.scrollHeight;
1367
+ }
1368
+
1369
+ function clearThinking() {
1370
+ if (thinkingEl) {
1371
+ thinkingEl.remove();
1372
+ thinkingEl = null;
1373
+ }
1374
+ }
1375
+
1376
+ // ── Question UI ────────────────────────────────────────────
1377
+
1378
+ function showQuestion(question, options) {
1379
+ const div = document.createElement('div');
1380
+ div.className = 'chat-msg question';
1381
+ const bubble = document.createElement('div');
1382
+ bubble.className = 'chat-bubble';
1383
+
1384
+ const qText = document.createElement('div');
1385
+ qText.className = 'question-text';
1386
+ qText.textContent = question || 'A question for you:';
1387
+ bubble.appendChild(qText);
1388
+
1389
+ function sendAnswer(answer) {
1390
+ // Show user's answer as a message
1391
+ addMessage('user', answer);
1392
+ // Send to server
1393
+ if (ws && ws.readyState === WebSocket.OPEN) {
1394
+ ws.send(JSON.stringify({ type: 'chat.answer', answer: answer }));
1395
+ }
1396
+ // Show thinking again while process resumes
1397
+ showThinking('Resuming…');
1398
+ }
1399
+
1400
+ if (options && options.length > 0) {
1401
+ const optWrap = document.createElement('div');
1402
+ optWrap.className = 'question-options';
1403
+ options.forEach(function(opt) {
1404
+ const btn = document.createElement('button');
1405
+ btn.className = 'question-option-btn';
1406
+ btn.textContent = opt;
1407
+ btn.addEventListener('click', function() {
1408
+ // Disable all buttons
1409
+ optWrap.querySelectorAll('button').forEach(function(b) { b.disabled = true; });
1410
+ sendAnswer(opt);
1411
+ });
1412
+ optWrap.appendChild(btn);
1413
+ });
1414
+ bubble.appendChild(optWrap);
1415
+ } else {
1416
+ const inputWrap = document.createElement('div');
1417
+ inputWrap.className = 'question-input-wrap';
1418
+ const input = document.createElement('input');
1419
+ input.className = 'question-input';
1420
+ input.type = 'text';
1421
+ input.placeholder = 'Type your answer…';
1422
+ const submitBtn = document.createElement('button');
1423
+ submitBtn.className = 'question-submit-btn';
1424
+ submitBtn.textContent = 'Send';
1425
+
1426
+ function submitAnswer() {
1427
+ const val = input.value.trim();
1428
+ if (!val) return;
1429
+ input.disabled = true;
1430
+ submitBtn.disabled = true;
1431
+ sendAnswer(val);
1432
+ }
1433
+
1434
+ submitBtn.addEventListener('click', submitAnswer);
1435
+ input.addEventListener('keydown', function(e) {
1436
+ if (e.key === 'Enter') { e.preventDefault(); submitAnswer(); }
1437
+ });
1438
+
1439
+ inputWrap.appendChild(input);
1440
+ inputWrap.appendChild(submitBtn);
1441
+ bubble.appendChild(inputWrap);
1442
+
1443
+ // Auto-focus the question input
1444
+ setTimeout(function() { input.focus(); }, 50);
1445
+ }
1446
+
1447
+ div.appendChild(bubble);
1448
+ chatMessages.appendChild(div);
1449
+ chatMessages.scrollTop = chatMessages.scrollHeight;
1450
+ }
1451
+
1452
+ // ── Process diagram ────────────────────────────────────────
1453
+
1454
+ let mermaidCounter = 0;
1455
+
1456
+ function processToMermaid(proc) {
1457
+ const nodes = proc.nodes || [];
1458
+ if (nodes.length === 0) return null;
1459
+
1460
+ const lines = ['graph LR'];
1461
+
1462
+ // Define node shapes
1463
+ for (const n of nodes) {
1464
+ const label = n.catalog_node_key || n.key;
1465
+ if (label === 'start') {
1466
+ lines.push(' ' + n.key + '([start])');
1467
+ } else if (label === 'stop') {
1468
+ lines.push(' ' + n.key + '([stop])');
1469
+ } else {
1470
+ lines.push(' ' + n.key + '[' + label + ']');
1471
+ }
1472
+ }
1473
+
1474
+ // Define edges
1475
+ for (const n of nodes) {
1476
+ if (!n.edges) continue;
1477
+ for (const [status, target] of Object.entries(n.edges)) {
1478
+ if (status === 'ok') {
1479
+ lines.push(' ' + n.key + ' --> ' + target);
1480
+ } else {
1481
+ lines.push(' ' + n.key + ' -->|' + status + '| ' + target);
1482
+ }
1483
+ }
1484
+ }
1485
+
1486
+ return lines.join('\n');
1487
+ }
1488
+
1489
+ async function showProcessDiagram(proc) {
1490
+ if (typeof mermaid === 'undefined') return;
1491
+
1492
+ const mermaidSrc = processToMermaid(proc);
1493
+ if (!mermaidSrc) return;
1494
+
1495
+ const id = 'mermaid-' + (++mermaidCounter);
1496
+ const wrapper = document.createElement('div');
1497
+ wrapper.className = 'chat-process';
1498
+
1499
+ const toggle = document.createElement('div');
1500
+ toggle.className = 'process-toggle';
1501
+ toggle.textContent = '▶ Process diagram';
1502
+
1503
+ const diagram = document.createElement('div');
1504
+ diagram.className = 'process-diagram';
1505
+ diagram.style.display = 'none';
1506
+ diagram.id = id;
1507
+
1508
+ const pre = document.createElement('pre');
1509
+ pre.className = 'mermaid';
1510
+ pre.textContent = mermaidSrc;
1511
+ diagram.appendChild(pre);
1512
+
1513
+ toggle.addEventListener('click', async () => {
1514
+ const showing = diagram.style.display !== 'none';
1515
+ if (showing) {
1516
+ diagram.style.display = 'none';
1517
+ toggle.textContent = '▶ Process diagram';
1518
+ } else {
1519
+ diagram.style.display = 'block';
1520
+ toggle.textContent = '▼ Process diagram';
1521
+ // Render mermaid if not yet rendered
1522
+ if (!diagram.dataset.rendered) {
1523
+ try {
1524
+ await mermaid.run({ nodes: [pre] });
1525
+ diagram.dataset.rendered = '1';
1526
+ } catch (err) {
1527
+ console.warn('Mermaid render failed:', err);
1528
+ pre.textContent = mermaidSrc;
1529
+ }
1530
+ }
1531
+ }
1532
+ chatMessages.scrollTop = chatMessages.scrollHeight;
1533
+ });
1534
+
1535
+ wrapper.appendChild(toggle);
1536
+ wrapper.appendChild(diagram);
1537
+ chatMessages.appendChild(wrapper);
1538
+ chatMessages.scrollTop = chatMessages.scrollHeight;
1539
+ }
1540
+
1541
+ // ── Helpers ────────────────────────────────────────────────
1542
+
1543
+ function esc(s) {
1544
+ const d = document.createElement('div');
1545
+ d.textContent = s || '';
1546
+ return d.innerHTML;
1547
+ }
1548
+
1549
+ function formatTime(iso) {
1550
+ try {
1551
+ const d = new Date(iso);
1552
+ return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
1553
+ } catch { return ''; }
1554
+ }
1555
+
1556
+ // ── Init ───────────────────────────────────────────────────
1557
+
1558
+ fetchCalendarNames().then(() => fetchTimeline());
1559
+ fetchStatus();
1560
+ fetchScheduler();
1561
+ connectWs();
1562
+
1563
+ // Poll status and scheduler every 30s
1564
+ setInterval(fetchStatus, 30000);
1565
+ setInterval(fetchScheduler, 30000);
1566
+ })();
1567
+ </script>
1568
+ </body>
1569
+ </html>