@oratis/lisa 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +436 -0
  3. package/README.zh-CN.md +450 -0
  4. package/channels.example.json +45 -0
  5. package/completions/README.md +66 -0
  6. package/completions/_lisa +140 -0
  7. package/completions/lisa.bash +94 -0
  8. package/completions/lisa.fish +85 -0
  9. package/dist/agent.d.ts +70 -0
  10. package/dist/agent.d.ts.map +1 -0
  11. package/dist/agent.js +275 -0
  12. package/dist/agent.js.map +1 -0
  13. package/dist/approval.d.ts +9 -0
  14. package/dist/approval.d.ts.map +1 -0
  15. package/dist/approval.js +47 -0
  16. package/dist/approval.js.map +1 -0
  17. package/dist/channels/config.d.ts +11 -0
  18. package/dist/channels/config.d.ts.map +1 -0
  19. package/dist/channels/config.js +27 -0
  20. package/dist/channels/config.js.map +1 -0
  21. package/dist/channels/discord.d.ts +28 -0
  22. package/dist/channels/discord.d.ts.map +1 -0
  23. package/dist/channels/discord.js +98 -0
  24. package/dist/channels/discord.js.map +1 -0
  25. package/dist/channels/feishu.d.ts +53 -0
  26. package/dist/channels/feishu.d.ts.map +1 -0
  27. package/dist/channels/feishu.js +228 -0
  28. package/dist/channels/feishu.js.map +1 -0
  29. package/dist/channels/imessage.d.ts +20 -0
  30. package/dist/channels/imessage.d.ts.map +1 -0
  31. package/dist/channels/imessage.js +124 -0
  32. package/dist/channels/imessage.js.map +1 -0
  33. package/dist/channels/registry.d.ts +8 -0
  34. package/dist/channels/registry.d.ts.map +1 -0
  35. package/dist/channels/registry.js +29 -0
  36. package/dist/channels/registry.js.map +1 -0
  37. package/dist/channels/router.d.ts +28 -0
  38. package/dist/channels/router.d.ts.map +1 -0
  39. package/dist/channels/router.js +140 -0
  40. package/dist/channels/router.js.map +1 -0
  41. package/dist/channels/slack.d.ts +43 -0
  42. package/dist/channels/slack.d.ts.map +1 -0
  43. package/dist/channels/slack.js +164 -0
  44. package/dist/channels/slack.js.map +1 -0
  45. package/dist/channels/telegram.d.ts +26 -0
  46. package/dist/channels/telegram.d.ts.map +1 -0
  47. package/dist/channels/telegram.js +103 -0
  48. package/dist/channels/telegram.js.map +1 -0
  49. package/dist/channels/types.d.ts +20 -0
  50. package/dist/channels/types.d.ts.map +1 -0
  51. package/dist/channels/types.js +2 -0
  52. package/dist/channels/types.js.map +1 -0
  53. package/dist/channels/webhook.d.ts +34 -0
  54. package/dist/channels/webhook.d.ts.map +1 -0
  55. package/dist/channels/webhook.js +139 -0
  56. package/dist/channels/webhook.js.map +1 -0
  57. package/dist/cli/colors.d.ts +30 -0
  58. package/dist/cli/colors.d.ts.map +1 -0
  59. package/dist/cli/colors.js +53 -0
  60. package/dist/cli/colors.js.map +1 -0
  61. package/dist/cli/doctor.d.ts +2 -0
  62. package/dist/cli/doctor.d.ts.map +1 -0
  63. package/dist/cli/doctor.js +172 -0
  64. package/dist/cli/doctor.js.map +1 -0
  65. package/dist/cli/monitor.d.ts +2 -0
  66. package/dist/cli/monitor.d.ts.map +1 -0
  67. package/dist/cli/monitor.js +141 -0
  68. package/dist/cli/monitor.js.map +1 -0
  69. package/dist/cli/repl.d.ts +7 -0
  70. package/dist/cli/repl.d.ts.map +1 -0
  71. package/dist/cli/repl.js +68 -0
  72. package/dist/cli/repl.js.map +1 -0
  73. package/dist/cli/status.d.ts +2 -0
  74. package/dist/cli/status.d.ts.map +1 -0
  75. package/dist/cli/status.js +176 -0
  76. package/dist/cli/status.js.map +1 -0
  77. package/dist/cli/wishlist.d.ts +7 -0
  78. package/dist/cli/wishlist.d.ts.map +1 -0
  79. package/dist/cli/wishlist.js +77 -0
  80. package/dist/cli/wishlist.js.map +1 -0
  81. package/dist/cli.d.ts +3 -0
  82. package/dist/cli.d.ts.map +1 -0
  83. package/dist/cli.js +954 -0
  84. package/dist/cli.js.map +1 -0
  85. package/dist/env.d.ts +10 -0
  86. package/dist/env.d.ts.map +1 -0
  87. package/dist/env.js +128 -0
  88. package/dist/env.js.map +1 -0
  89. package/dist/fs-utils.d.ts +6 -0
  90. package/dist/fs-utils.d.ts.map +1 -0
  91. package/dist/fs-utils.js +36 -0
  92. package/dist/fs-utils.js.map +1 -0
  93. package/dist/heartbeat/config.d.ts +13 -0
  94. package/dist/heartbeat/config.d.ts.map +1 -0
  95. package/dist/heartbeat/config.js +14 -0
  96. package/dist/heartbeat/config.js.map +1 -0
  97. package/dist/heartbeat/install.d.ts +15 -0
  98. package/dist/heartbeat/install.d.ts.map +1 -0
  99. package/dist/heartbeat/install.js +180 -0
  100. package/dist/heartbeat/install.js.map +1 -0
  101. package/dist/heartbeat/runner.d.ts +16 -0
  102. package/dist/heartbeat/runner.d.ts.map +1 -0
  103. package/dist/heartbeat/runner.js +180 -0
  104. package/dist/heartbeat/runner.js.map +1 -0
  105. package/dist/hooks/runner.d.ts +23 -0
  106. package/dist/hooks/runner.d.ts.map +1 -0
  107. package/dist/hooks/runner.js +55 -0
  108. package/dist/hooks/runner.js.map +1 -0
  109. package/dist/idle/runner.d.ts +16 -0
  110. package/dist/idle/runner.d.ts.map +1 -0
  111. package/dist/idle/runner.js +45 -0
  112. package/dist/idle/runner.js.map +1 -0
  113. package/dist/idle/watcher.d.ts +35 -0
  114. package/dist/idle/watcher.d.ts.map +1 -0
  115. package/dist/idle/watcher.js +67 -0
  116. package/dist/idle/watcher.js.map +1 -0
  117. package/dist/llm.d.ts +8 -0
  118. package/dist/llm.d.ts.map +1 -0
  119. package/dist/llm.js +12 -0
  120. package/dist/llm.js.map +1 -0
  121. package/dist/mcp/client.d.ts +11 -0
  122. package/dist/mcp/client.d.ts.map +1 -0
  123. package/dist/mcp/client.js +68 -0
  124. package/dist/mcp/client.js.map +1 -0
  125. package/dist/mcp/config.d.ts +14 -0
  126. package/dist/mcp/config.d.ts.map +1 -0
  127. package/dist/mcp/config.js +28 -0
  128. package/dist/mcp/config.js.map +1 -0
  129. package/dist/memory/search_tool.d.ts +8 -0
  130. package/dist/memory/search_tool.d.ts.map +1 -0
  131. package/dist/memory/search_tool.js +26 -0
  132. package/dist/memory/search_tool.js.map +1 -0
  133. package/dist/memory/store.d.ts +7 -0
  134. package/dist/memory/store.d.ts.map +1 -0
  135. package/dist/memory/store.js +46 -0
  136. package/dist/memory/store.js.map +1 -0
  137. package/dist/memory/tool.d.ts +13 -0
  138. package/dist/memory/tool.d.ts.map +1 -0
  139. package/dist/memory/tool.js +53 -0
  140. package/dist/memory/tool.js.map +1 -0
  141. package/dist/memory/vector.d.ts +25 -0
  142. package/dist/memory/vector.d.ts.map +1 -0
  143. package/dist/memory/vector.js +96 -0
  144. package/dist/memory/vector.js.map +1 -0
  145. package/dist/mood-bus.d.ts +16 -0
  146. package/dist/mood-bus.d.ts.map +1 -0
  147. package/dist/mood-bus.js +21 -0
  148. package/dist/mood-bus.js.map +1 -0
  149. package/dist/paths.d.ts +8 -0
  150. package/dist/paths.d.ts.map +1 -0
  151. package/dist/paths.js +10 -0
  152. package/dist/paths.js.map +1 -0
  153. package/dist/plugins/loader.d.ts +4 -0
  154. package/dist/plugins/loader.d.ts.map +1 -0
  155. package/dist/plugins/loader.js +156 -0
  156. package/dist/plugins/loader.js.map +1 -0
  157. package/dist/plugins/types.d.ts +43 -0
  158. package/dist/plugins/types.d.ts.map +1 -0
  159. package/dist/plugins/types.js +2 -0
  160. package/dist/plugins/types.js.map +1 -0
  161. package/dist/prompt.d.ts +21 -0
  162. package/dist/prompt.d.ts.map +1 -0
  163. package/dist/prompt.js +187 -0
  164. package/dist/prompt.js.map +1 -0
  165. package/dist/providers/anthropic.d.ts +11 -0
  166. package/dist/providers/anthropic.d.ts.map +1 -0
  167. package/dist/providers/anthropic.js +102 -0
  168. package/dist/providers/anthropic.js.map +1 -0
  169. package/dist/providers/gemini.d.ts +11 -0
  170. package/dist/providers/gemini.d.ts.map +1 -0
  171. package/dist/providers/gemini.js +190 -0
  172. package/dist/providers/gemini.js.map +1 -0
  173. package/dist/providers/openai.d.ts +11 -0
  174. package/dist/providers/openai.d.ts.map +1 -0
  175. package/dist/providers/openai.js +175 -0
  176. package/dist/providers/openai.js.map +1 -0
  177. package/dist/providers/registry.d.ts +44 -0
  178. package/dist/providers/registry.d.ts.map +1 -0
  179. package/dist/providers/registry.js +209 -0
  180. package/dist/providers/registry.js.map +1 -0
  181. package/dist/providers/types.d.ts +33 -0
  182. package/dist/providers/types.d.ts.map +1 -0
  183. package/dist/providers/types.js +2 -0
  184. package/dist/providers/types.js.map +1 -0
  185. package/dist/proxy-bootstrap.d.ts +17 -0
  186. package/dist/proxy-bootstrap.d.ts.map +1 -0
  187. package/dist/proxy-bootstrap.js +101 -0
  188. package/dist/proxy-bootstrap.js.map +1 -0
  189. package/dist/reflect.d.ts +13 -0
  190. package/dist/reflect.d.ts.map +1 -0
  191. package/dist/reflect.js +289 -0
  192. package/dist/reflect.js.map +1 -0
  193. package/dist/sandbox/macos.d.ts +5 -0
  194. package/dist/sandbox/macos.d.ts.map +1 -0
  195. package/dist/sandbox/macos.js +31 -0
  196. package/dist/sandbox/macos.js.map +1 -0
  197. package/dist/sandbox/sandbox.d.ts +15 -0
  198. package/dist/sandbox/sandbox.d.ts.map +1 -0
  199. package/dist/sandbox/sandbox.js +39 -0
  200. package/dist/sandbox/sandbox.js.map +1 -0
  201. package/dist/sessions/active.d.ts +4 -0
  202. package/dist/sessions/active.d.ts.map +1 -0
  203. package/dist/sessions/active.js +33 -0
  204. package/dist/sessions/active.js.map +1 -0
  205. package/dist/sessions/list.d.ts +16 -0
  206. package/dist/sessions/list.d.ts.map +1 -0
  207. package/dist/sessions/list.js +78 -0
  208. package/dist/sessions/list.js.map +1 -0
  209. package/dist/sessions/store.d.ts +27 -0
  210. package/dist/sessions/store.d.ts.map +1 -0
  211. package/dist/sessions/store.js +98 -0
  212. package/dist/sessions/store.js.map +1 -0
  213. package/dist/skills/executable.d.ts +45 -0
  214. package/dist/skills/executable.d.ts.map +1 -0
  215. package/dist/skills/executable.js +207 -0
  216. package/dist/skills/executable.js.map +1 -0
  217. package/dist/skills/frontmatter.d.ts +8 -0
  218. package/dist/skills/frontmatter.d.ts.map +1 -0
  219. package/dist/skills/frontmatter.js +84 -0
  220. package/dist/skills/frontmatter.js.map +1 -0
  221. package/dist/skills/manager.d.ts +9 -0
  222. package/dist/skills/manager.d.ts.map +1 -0
  223. package/dist/skills/manager.js +116 -0
  224. package/dist/skills/manager.js.map +1 -0
  225. package/dist/skills/tool.d.ts +13 -0
  226. package/dist/skills/tool.d.ts.map +1 -0
  227. package/dist/skills/tool.js +87 -0
  228. package/dist/skills/tool.js.map +1 -0
  229. package/dist/soul/birth.d.ts +13 -0
  230. package/dist/soul/birth.d.ts.map +1 -0
  231. package/dist/soul/birth.js +171 -0
  232. package/dist/soul/birth.js.map +1 -0
  233. package/dist/soul/git.d.ts +36 -0
  234. package/dist/soul/git.d.ts.map +1 -0
  235. package/dist/soul/git.js +212 -0
  236. package/dist/soul/git.js.map +1 -0
  237. package/dist/soul/paths.d.ts +20 -0
  238. package/dist/soul/paths.d.ts.map +1 -0
  239. package/dist/soul/paths.js +34 -0
  240. package/dist/soul/paths.js.map +1 -0
  241. package/dist/soul/store.d.ts +55 -0
  242. package/dist/soul/store.d.ts.map +1 -0
  243. package/dist/soul/store.js +394 -0
  244. package/dist/soul/store.js.map +1 -0
  245. package/dist/soul/tools.d.ts +107 -0
  246. package/dist/soul/tools.d.ts.map +1 -0
  247. package/dist/soul/tools.js +471 -0
  248. package/dist/soul/tools.js.map +1 -0
  249. package/dist/soul/types.d.ts +105 -0
  250. package/dist/soul/types.d.ts.map +1 -0
  251. package/dist/soul/types.js +44 -0
  252. package/dist/soul/types.js.map +1 -0
  253. package/dist/subagent.d.ts +19 -0
  254. package/dist/subagent.d.ts.map +1 -0
  255. package/dist/subagent.js +34 -0
  256. package/dist/subagent.js.map +1 -0
  257. package/dist/tools/apply_patch.d.ts +17 -0
  258. package/dist/tools/apply_patch.d.ts.map +1 -0
  259. package/dist/tools/apply_patch.js +107 -0
  260. package/dist/tools/apply_patch.js.map +1 -0
  261. package/dist/tools/bash.d.ts +8 -0
  262. package/dist/tools/bash.d.ts.map +1 -0
  263. package/dist/tools/bash.js +81 -0
  264. package/dist/tools/bash.js.map +1 -0
  265. package/dist/tools/edit.d.ts +10 -0
  266. package/dist/tools/edit.d.ts.map +1 -0
  267. package/dist/tools/edit.js +50 -0
  268. package/dist/tools/edit.js.map +1 -0
  269. package/dist/tools/grep.d.ts +11 -0
  270. package/dist/tools/grep.d.ts.map +1 -0
  271. package/dist/tools/grep.js +57 -0
  272. package/dist/tools/grep.js.map +1 -0
  273. package/dist/tools/ls.d.ts +7 -0
  274. package/dist/tools/ls.d.ts.map +1 -0
  275. package/dist/tools/ls.js +36 -0
  276. package/dist/tools/ls.js.map +1 -0
  277. package/dist/tools/read.d.ts +9 -0
  278. package/dist/tools/read.d.ts.map +1 -0
  279. package/dist/tools/read.js +41 -0
  280. package/dist/tools/read.js.map +1 -0
  281. package/dist/tools/redeploy.d.ts +10 -0
  282. package/dist/tools/redeploy.d.ts.map +1 -0
  283. package/dist/tools/redeploy.js +73 -0
  284. package/dist/tools/redeploy.js.map +1 -0
  285. package/dist/tools/registry.d.ts +15 -0
  286. package/dist/tools/registry.d.ts.map +1 -0
  287. package/dist/tools/registry.js +71 -0
  288. package/dist/tools/registry.js.map +1 -0
  289. package/dist/tools/set_mood.d.ts +8 -0
  290. package/dist/tools/set_mood.d.ts.map +1 -0
  291. package/dist/tools/set_mood.js +62 -0
  292. package/dist/tools/set_mood.js.map +1 -0
  293. package/dist/tools/task.d.ts +17 -0
  294. package/dist/tools/task.d.ts.map +1 -0
  295. package/dist/tools/task.js +58 -0
  296. package/dist/tools/task.js.map +1 -0
  297. package/dist/tools/web_fetch.d.ts +10 -0
  298. package/dist/tools/web_fetch.d.ts.map +1 -0
  299. package/dist/tools/web_fetch.js +95 -0
  300. package/dist/tools/web_fetch.js.map +1 -0
  301. package/dist/tools/web_search.d.ts +8 -0
  302. package/dist/tools/web_search.d.ts.map +1 -0
  303. package/dist/tools/web_search.js +82 -0
  304. package/dist/tools/web_search.js.map +1 -0
  305. package/dist/tools/write.d.ts +8 -0
  306. package/dist/tools/write.d.ts.map +1 -0
  307. package/dist/tools/write.js +21 -0
  308. package/dist/tools/write.js.map +1 -0
  309. package/dist/types.d.ts +67 -0
  310. package/dist/types.d.ts.map +1 -0
  311. package/dist/types.js +2 -0
  312. package/dist/types.js.map +1 -0
  313. package/dist/voice/speak.d.ts +7 -0
  314. package/dist/voice/speak.d.ts.map +1 -0
  315. package/dist/voice/speak.js +18 -0
  316. package/dist/voice/speak.js.map +1 -0
  317. package/dist/voice/tool.d.ts +14 -0
  318. package/dist/voice/tool.d.ts.map +1 -0
  319. package/dist/voice/tool.js +41 -0
  320. package/dist/voice/tool.js.map +1 -0
  321. package/dist/voice/transcribe.d.ts +7 -0
  322. package/dist/voice/transcribe.d.ts.map +1 -0
  323. package/dist/voice/transcribe.js +14 -0
  324. package/dist/voice/transcribe.js.map +1 -0
  325. package/dist/web/assets/background-tile.png +0 -0
  326. package/dist/web/assets/icon-memory.png +0 -0
  327. package/dist/web/assets/icon-send.png +0 -0
  328. package/dist/web/assets/icon-skill.png +0 -0
  329. package/dist/web/assets/icon-soul.png +0 -0
  330. package/dist/web/assets/icon-tool.png +0 -0
  331. package/dist/web/assets/lisa/angry.png +0 -0
  332. package/dist/web/assets/lisa/annoyed.png +0 -0
  333. package/dist/web/assets/lisa/apologetic.png +0 -0
  334. package/dist/web/assets/lisa/artist.png +0 -0
  335. package/dist/web/assets/lisa/astronaut.png +0 -0
  336. package/dist/web/assets/lisa/at-airport.png +0 -0
  337. package/dist/web/assets/lisa/at-beach.png +0 -0
  338. package/dist/web/assets/lisa/autumn-leaves.png +0 -0
  339. package/dist/web/assets/lisa/biking.png +0 -0
  340. package/dist/web/assets/lisa/birthday.png +0 -0
  341. package/dist/web/assets/lisa/bored.png +0 -0
  342. package/dist/web/assets/lisa/casual-summer.png +0 -0
  343. package/dist/web/assets/lisa/cheering.png +0 -0
  344. package/dist/web/assets/lisa/chef.png +0 -0
  345. package/dist/web/assets/lisa/christmas.png +0 -0
  346. package/dist/web/assets/lisa/cleaning.png +0 -0
  347. package/dist/web/assets/lisa/confused.png +0 -0
  348. package/dist/web/assets/lisa/cooking.png +0 -0
  349. package/dist/web/assets/lisa/crying.png +0 -0
  350. package/dist/web/assets/lisa/dancing.png +0 -0
  351. package/dist/web/assets/lisa/detective.png +0 -0
  352. package/dist/web/assets/lisa/determined.png +0 -0
  353. package/dist/web/assets/lisa/drinking-coffee.png +0 -0
  354. package/dist/web/assets/lisa/drinking-tea.png +0 -0
  355. package/dist/web/assets/lisa/driving.png +0 -0
  356. package/dist/web/assets/lisa/eating-snack.png +0 -0
  357. package/dist/web/assets/lisa/embarrassed.png +0 -0
  358. package/dist/web/assets/lisa/excited.png +0 -0
  359. package/dist/web/assets/lisa/exercising.png +0 -0
  360. package/dist/web/assets/lisa/exhausted.png +0 -0
  361. package/dist/web/assets/lisa/fairy.png +0 -0
  362. package/dist/web/assets/lisa/fireworks.png +0 -0
  363. package/dist/web/assets/lisa/fog.png +0 -0
  364. package/dist/web/assets/lisa/formal.png +0 -0
  365. package/dist/web/assets/lisa/gaming.png +0 -0
  366. package/dist/web/assets/lisa/ghost.png +0 -0
  367. package/dist/web/assets/lisa/gift-giving.png +0 -0
  368. package/dist/web/assets/lisa/giggling.png +0 -0
  369. package/dist/web/assets/lisa/graduation.png +0 -0
  370. package/dist/web/assets/lisa/grateful.png +0 -0
  371. package/dist/web/assets/lisa/halloween.png +0 -0
  372. package/dist/web/assets/lisa/happy.png +0 -0
  373. package/dist/web/assets/lisa/ill.png +0 -0
  374. package/dist/web/assets/lisa/in-rain.png +0 -0
  375. package/dist/web/assets/lisa/in-snow.png +0 -0
  376. package/dist/web/assets/lisa/index.json +575 -0
  377. package/dist/web/assets/lisa/knight.png +0 -0
  378. package/dist/web/assets/lisa/lab-coat.png +0 -0
  379. package/dist/web/assets/lisa/laughing.png +0 -0
  380. package/dist/web/assets/lisa/livestreaming.png +0 -0
  381. package/dist/web/assets/lisa/loving.png +0 -0
  382. package/dist/web/assets/lisa/lunar-new-year.png +0 -0
  383. package/dist/web/assets/lisa/musician.png +0 -0
  384. package/dist/web/assets/lisa/napping.png +0 -0
  385. package/dist/web/assets/lisa/nervous.png +0 -0
  386. package/dist/web/assets/lisa/neutral.png +0 -0
  387. package/dist/web/assets/lisa/ninja.png +0 -0
  388. package/dist/web/assets/lisa/on-train.png +0 -0
  389. package/dist/web/assets/lisa/painting.png +0 -0
  390. package/dist/web/assets/lisa/pajamas.png +0 -0
  391. package/dist/web/assets/lisa/party.png +0 -0
  392. package/dist/web/assets/lisa/phone-call.png +0 -0
  393. package/dist/web/assets/lisa/pilot.png +0 -0
  394. package/dist/web/assets/lisa/pirate.png +0 -0
  395. package/dist/web/assets/lisa/playing-guitar.png +0 -0
  396. package/dist/web/assets/lisa/playing-piano.png +0 -0
  397. package/dist/web/assets/lisa/pouting.png +0 -0
  398. package/dist/web/assets/lisa/princess.png +0 -0
  399. package/dist/web/assets/lisa/proud.png +0 -0
  400. package/dist/web/assets/lisa/puzzled.png +0 -0
  401. package/dist/web/assets/lisa/raincoat.png +0 -0
  402. package/dist/web/assets/lisa/reading-book.png +0 -0
  403. package/dist/web/assets/lisa/recovering.png +0 -0
  404. package/dist/web/assets/lisa/robot.png +0 -0
  405. package/dist/web/assets/lisa/running.png +0 -0
  406. package/dist/web/assets/lisa/sad.png +0 -0
  407. package/dist/web/assets/lisa/scared.png +0 -0
  408. package/dist/web/assets/lisa/shocked.png +0 -0
  409. package/dist/web/assets/lisa/shopping.png +0 -0
  410. package/dist/web/assets/lisa/shy.png +0 -0
  411. package/dist/web/assets/lisa/singing.png +0 -0
  412. package/dist/web/assets/lisa/sleeping.png +0 -0
  413. package/dist/web/assets/lisa/sleepy.png +0 -0
  414. package/dist/web/assets/lisa/smug.png +0 -0
  415. package/dist/web/assets/lisa/spring-flowers.png +0 -0
  416. package/dist/web/assets/lisa/starry-night.png +0 -0
  417. package/dist/web/assets/lisa/stormy.png +0 -0
  418. package/dist/web/assets/lisa/stretching.png +0 -0
  419. package/dist/web/assets/lisa/studying.png +0 -0
  420. package/dist/web/assets/lisa/summer-hot.png +0 -0
  421. package/dist/web/assets/lisa/sunrise.png +0 -0
  422. package/dist/web/assets/lisa/superhero.png +0 -0
  423. package/dist/web/assets/lisa/surprised.png +0 -0
  424. package/dist/web/assets/lisa/thinking-pose.png +0 -0
  425. package/dist/web/assets/lisa/thoughtful.png +0 -0
  426. package/dist/web/assets/lisa/valentine.png +0 -0
  427. package/dist/web/assets/lisa/vampire.png +0 -0
  428. package/dist/web/assets/lisa/video-call.png +0 -0
  429. package/dist/web/assets/lisa/waking-up.png +0 -0
  430. package/dist/web/assets/lisa/walking.png +0 -0
  431. package/dist/web/assets/lisa/watching-anime.png +0 -0
  432. package/dist/web/assets/lisa/watching-movie.png +0 -0
  433. package/dist/web/assets/lisa/wedding.png +0 -0
  434. package/dist/web/assets/lisa/winking.png +0 -0
  435. package/dist/web/assets/lisa/winter-coat.png +0 -0
  436. package/dist/web/assets/lisa/winter-cold.png +0 -0
  437. package/dist/web/assets/lisa/wizard.png +0 -0
  438. package/dist/web/assets/lisa/working-coding.png +0 -0
  439. package/dist/web/assets/lisa/working-debugging.png +0 -0
  440. package/dist/web/assets/lisa/working-research.png +0 -0
  441. package/dist/web/assets/lisa/working-typing.png +0 -0
  442. package/dist/web/assets/lisa/working-writing.png +0 -0
  443. package/dist/web/assets/lisa/worried.png +0 -0
  444. package/dist/web/assets/lisa/yawning.png +0 -0
  445. package/dist/web/assets/lisa/yoga-pose.png +0 -0
  446. package/dist/web/assets/lisa-mascot.png +0 -0
  447. package/dist/web/server.d.ts +13 -0
  448. package/dist/web/server.d.ts.map +1 -0
  449. package/dist/web/server.js +2159 -0
  450. package/dist/web/server.js.map +1 -0
  451. package/package.json +68 -0
@@ -0,0 +1,55 @@
1
+ import { type DesireEntry, type EmotionState, type OpinionEntry, type SoulLock, type SoulSeed, type SoulSummary, type ValueEntry } from "./types.js";
2
+ export declare function ensureSoulDirs(): Promise<void>;
3
+ export declare function isBorn(): Promise<boolean>;
4
+ export declare function readSeed(): Promise<SoulSeed | null>;
5
+ export declare function writeSeed(seed: SoulSeed): Promise<void>;
6
+ export declare function readName(): Promise<string>;
7
+ export declare function writeName(name: string): Promise<void>;
8
+ export declare function readIdentity(): Promise<string>;
9
+ export declare function writeIdentity(text: string): Promise<void>;
10
+ export declare function readPurpose(): Promise<string>;
11
+ export declare function writePurpose(text: string): Promise<void>;
12
+ export declare function readConstitution(): Promise<string>;
13
+ export declare function writeConstitution(text: string): Promise<void>;
14
+ export declare function readEmotions(): Promise<EmotionState>;
15
+ export declare function writeEmotions(state: EmotionState): Promise<void>;
16
+ export declare function decayEmotions(state: EmotionState): Promise<EmotionState>;
17
+ export declare function listValues(): Promise<ValueEntry[]>;
18
+ export declare function writeValue(entry: ValueEntry): Promise<void>;
19
+ export declare function listOpinions(): Promise<OpinionEntry[]>;
20
+ export declare function writeOpinion(entry: OpinionEntry): Promise<void>;
21
+ export declare function listDesires(): Promise<DesireEntry[]>;
22
+ export declare function writeDesire(entry: DesireEntry): Promise<void>;
23
+ export declare function readDesireProgress(slug: string): Promise<string>;
24
+ /** One parsed progress entry (anything between `## <ts>` headers). */
25
+ export interface ParsedProgressEntry {
26
+ ts: string;
27
+ body: string;
28
+ }
29
+ export interface ParsedDesireProgress {
30
+ /** "[…earlier entries condensed]" preamble, if reflect has consolidated. */
31
+ preamble: string;
32
+ entries: ParsedProgressEntry[];
33
+ }
34
+ export declare function parseDesireProgress(slug: string): Promise<ParsedDesireProgress>;
35
+ /**
36
+ * Replace progress.md with a consolidated form: condensed-preamble + tail of
37
+ * the most recent `keepLatest` raw entries. Used by reflect (Phase 2 small-
38
+ * tail item) when the entry count grows past a threshold.
39
+ */
40
+ export declare function consolidateDesireProgress(slug: string, opts: {
41
+ condensedSummary: string;
42
+ keepLatest: ParsedProgressEntry[];
43
+ }): Promise<void>;
44
+ export declare function appendDesireProgress(slug: string, entry: string): Promise<void>;
45
+ export declare function appendJournal(date: string, entry: string): Promise<void>;
46
+ export declare function readJournal(date: string): Promise<string>;
47
+ export declare function listJournalDates(): Promise<string[]>;
48
+ export declare function readRelationship(userKey: string): Promise<string>;
49
+ export declare function writeRelationship(userKey: string, body: string): Promise<void>;
50
+ export declare function recomputeLock(): Promise<SoulLock>;
51
+ export declare function saveLock(lock: SoulLock): Promise<void>;
52
+ export declare function readLock(): Promise<SoulLock | null>;
53
+ export declare function detectTampering(): Promise<string[]>;
54
+ export declare function readSoulSummary(): Promise<SoulSummary | null>;
55
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/soul/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,394 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import crypto from "node:crypto";
4
+ import { atomicWrite, ensureDir, pathExists, readTextOrEmpty } from "../fs-utils.js";
5
+ import { commitSoulChange, initSoulRepo } from "./git.js";
6
+ import { SOUL_DIR, SOUL_SEED, SOUL_NAME, SOUL_IDENTITY, SOUL_PURPOSE, SOUL_CONSTITUTION, SOUL_EMOTIONS, SOUL_LOCK, SOUL_VALUES_DIR, SOUL_OPINIONS_DIR, SOUL_DESIRES_DIR, SOUL_JOURNAL_DIR, SOUL_RELATIONSHIPS_DIR, valueFile, opinionFile, desireFile, desireProgressFile, journalFile, relationshipFile, } from "./paths.js";
7
+ import { DEFAULT_EMOTIONS, } from "./types.js";
8
+ export async function ensureSoulDirs() {
9
+ await Promise.all([
10
+ SOUL_DIR,
11
+ SOUL_VALUES_DIR,
12
+ SOUL_OPINIONS_DIR,
13
+ SOUL_DESIRES_DIR,
14
+ SOUL_JOURNAL_DIR,
15
+ SOUL_RELATIONSHIPS_DIR,
16
+ ].map((d) => ensureDir(d)));
17
+ }
18
+ export async function isBorn() {
19
+ return await pathExists(SOUL_SEED);
20
+ }
21
+ export async function readSeed() {
22
+ if (!(await pathExists(SOUL_SEED)))
23
+ return null;
24
+ return JSON.parse(await fs.readFile(SOUL_SEED, "utf8"));
25
+ }
26
+ export async function writeSeed(seed) {
27
+ await ensureSoulDirs();
28
+ await atomicWrite(SOUL_SEED, JSON.stringify(seed, null, 2));
29
+ await commitSoulChange("seed.json", "seed");
30
+ }
31
+ export async function readName() {
32
+ const raw = (await readTextOrEmpty(SOUL_NAME)).trim();
33
+ return raw || "Lisa";
34
+ }
35
+ export async function writeName(name) {
36
+ await atomicWrite(SOUL_NAME, name.trim() + "\n");
37
+ await commitSoulChange("name.md", "patch");
38
+ }
39
+ export async function readIdentity() {
40
+ return (await readTextOrEmpty(SOUL_IDENTITY)).trim();
41
+ }
42
+ export async function writeIdentity(text) {
43
+ await atomicWrite(SOUL_IDENTITY, text.trim() + "\n");
44
+ await commitSoulChange("identity.md", "patch");
45
+ }
46
+ export async function readPurpose() {
47
+ return (await readTextOrEmpty(SOUL_PURPOSE)).trim();
48
+ }
49
+ export async function writePurpose(text) {
50
+ await atomicWrite(SOUL_PURPOSE, text.trim() + "\n");
51
+ await commitSoulChange("purpose.md", "patch");
52
+ }
53
+ export async function readConstitution() {
54
+ return (await readTextOrEmpty(SOUL_CONSTITUTION)).trim();
55
+ }
56
+ export async function writeConstitution(text) {
57
+ await atomicWrite(SOUL_CONSTITUTION, text.trim() + "\n");
58
+ await commitSoulChange("constitution.md", "patch");
59
+ }
60
+ export async function readEmotions() {
61
+ if (!(await pathExists(SOUL_EMOTIONS)))
62
+ return DEFAULT_EMOTIONS;
63
+ try {
64
+ const parsed = JSON.parse(await fs.readFile(SOUL_EMOTIONS, "utf8"));
65
+ // Backward-compat: emotions.json predating the event trail had no events
66
+ // field. Treat it as an empty trail rather than throwing.
67
+ return { ...parsed, events: parsed.events ?? [] };
68
+ }
69
+ catch {
70
+ return DEFAULT_EMOTIONS;
71
+ }
72
+ }
73
+ export async function writeEmotions(state) {
74
+ await atomicWrite(SOUL_EMOTIONS, JSON.stringify(state, null, 2));
75
+ await commitSoulChange("emotions.json", "feel");
76
+ }
77
+ export async function decayEmotions(state) {
78
+ const now = Date.now();
79
+ const last = Date.parse(state.updatedAt);
80
+ const days = Math.max(0, (now - last) / (1000 * 60 * 60 * 24));
81
+ if (days === 0)
82
+ return state;
83
+ const newVals = {};
84
+ for (const [k, v] of Object.entries(state.values)) {
85
+ const rate = state.decay[k] ?? 0.1;
86
+ // Decay toward 0; intensity halves over (ln 2 / rate) days.
87
+ newVals[k] = v * Math.exp(-rate * days);
88
+ }
89
+ return {
90
+ values: newVals,
91
+ decay: state.decay,
92
+ updatedAt: new Date().toISOString(),
93
+ };
94
+ }
95
+ // ── values ────────────────────────────────────────────────────────────
96
+ export async function listValues() {
97
+ return await listMarkdownDir(SOUL_VALUES_DIR, parseValueFile);
98
+ }
99
+ export async function writeValue(entry) {
100
+ const body = `# ${entry.title}\n\nbirthed: ${entry.birthedAt}\n\n${entry.body.trim()}\n`;
101
+ await atomicWrite(valueFile(entry.slug), body);
102
+ await commitSoulChange(`values/${entry.slug}.md`, "value");
103
+ }
104
+ function parseValueFile(slug, raw) {
105
+ const titleMatch = raw.match(/^#\s+(.+)$/m);
106
+ const dateMatch = raw.match(/^birthed:\s*(.+)$/m);
107
+ const body = raw.replace(/^#.*$/m, "").replace(/^birthed:.*$/m, "").trim();
108
+ return {
109
+ slug,
110
+ title: titleMatch ? titleMatch[1].trim() : slug,
111
+ birthedAt: dateMatch ? dateMatch[1].trim() : new Date().toISOString(),
112
+ body,
113
+ };
114
+ }
115
+ // ── opinions ──────────────────────────────────────────────────────────
116
+ export async function listOpinions() {
117
+ return await listMarkdownDir(SOUL_OPINIONS_DIR, parseOpinionFile);
118
+ }
119
+ export async function writeOpinion(entry) {
120
+ const body = `# ${entry.stance}\n\n` +
121
+ `confidence: ${entry.confidence}\n` +
122
+ `born: ${entry.bornAt}\nupdated: ${entry.updatedAt}\n\n` +
123
+ `## evidence\n` +
124
+ entry.evidence.map((e) => `- ${e}`).join("\n") +
125
+ "\n";
126
+ await atomicWrite(opinionFile(entry.slug), body);
127
+ await commitSoulChange(`opinions/${entry.slug}.md`, "opinion");
128
+ }
129
+ function parseOpinionFile(slug, raw) {
130
+ const stance = raw.match(/^#\s+(.+)$/m)?.[1] ?? slug;
131
+ const confidence = parseFloat(raw.match(/^confidence:\s*([\d.]+)/m)?.[1] ?? "0.5");
132
+ const born = raw.match(/^born:\s*(.+)$/m)?.[1] ?? new Date().toISOString();
133
+ const updated = raw.match(/^updated:\s*(.+)$/m)?.[1] ?? born;
134
+ const evidence = (raw.match(/## evidence([\s\S]*)$/)?.[1] ?? "")
135
+ .split("\n")
136
+ .map((l) => l.replace(/^-\s*/, "").trim())
137
+ .filter(Boolean);
138
+ return { slug, stance, confidence, evidence, bornAt: born, updatedAt: updated };
139
+ }
140
+ // ── desires ───────────────────────────────────────────────────────────
141
+ export async function listDesires() {
142
+ // Filter out *.progress.md files — they live in the same directory but
143
+ // belong to their parent desire, not as standalone desires.
144
+ const all = await listMarkdownDir(SOUL_DESIRES_DIR, parseDesireFile);
145
+ return all.filter((d) => !d.slug.endsWith(".progress"));
146
+ }
147
+ export async function writeDesire(entry) {
148
+ const lines = [
149
+ `# ${entry.what}`,
150
+ "",
151
+ `actionable: ${entry.actionable ? "yes" : "no"}`,
152
+ `born: ${entry.bornAt}`,
153
+ "",
154
+ `## why`,
155
+ entry.why.trim(),
156
+ ];
157
+ if (entry.actionable && entry.heartbeatPrompt) {
158
+ lines.push("", "## heartbeat", entry.heartbeatPrompt.trim());
159
+ }
160
+ await atomicWrite(desireFile(entry.slug), lines.join("\n") + "\n");
161
+ await commitSoulChange(`desires/${entry.slug}.md`, "desire");
162
+ }
163
+ function parseDesireFile(slug, raw) {
164
+ const what = raw.match(/^#\s+(.+)$/m)?.[1] ?? slug;
165
+ const actionable = /^actionable:\s*yes\s*$/im.test(raw);
166
+ const born = raw.match(/^born:\s*(.+)$/m)?.[1] ?? new Date().toISOString();
167
+ const why = (raw.match(/## why([\s\S]*?)(?:\n## |\n*$)/)?.[1] ?? "").trim();
168
+ const heartbeatPrompt = (raw.match(/## heartbeat([\s\S]*)$/)?.[1] ?? "").trim() || undefined;
169
+ return { slug, what, why, actionable, heartbeatPrompt, bornAt: born };
170
+ }
171
+ // Per-desire progress log. One file per desire slug, append-only, written by
172
+ // the heartbeat subagent at the end of each run on this desire (Phase 1.3 of
173
+ // AUTONOMY_ROADMAP). Lets a multi-day pursuit actually persist across runs.
174
+ export async function readDesireProgress(slug) {
175
+ return (await readTextOrEmpty(desireProgressFile(slug))).trim();
176
+ }
177
+ export async function parseDesireProgress(slug) {
178
+ const raw = (await readTextOrEmpty(desireProgressFile(slug))).trim();
179
+ if (!raw)
180
+ return { preamble: "", entries: [] };
181
+ // Strip leading `# progress: <slug>` header.
182
+ const stripped = raw.replace(/^#\s+progress:[^\n]*\n+/, "");
183
+ // Find entry headers `## <ISO timestamp>` at start-of-line.
184
+ const headerRe = /^## (\d{4}-\d{2}-\d{2}T\S+)$/gm;
185
+ const matches = [];
186
+ let m;
187
+ while ((m = headerRe.exec(stripped))) {
188
+ matches.push({ ts: m[1], offset: m.index, headerEnd: m.index + m[0].length });
189
+ }
190
+ if (matches.length === 0) {
191
+ return { preamble: stripped.trim(), entries: [] };
192
+ }
193
+ const preamble = stripped.slice(0, matches[0].offset).trim();
194
+ const entries = [];
195
+ for (let i = 0; i < matches.length; i++) {
196
+ const cur = matches[i];
197
+ const next = matches[i + 1];
198
+ const bodyStart = cur.headerEnd;
199
+ const bodyEnd = next ? next.offset : stripped.length;
200
+ const body = stripped.slice(bodyStart, bodyEnd).trim();
201
+ if (!body)
202
+ continue;
203
+ entries.push({ ts: cur.ts, body });
204
+ }
205
+ return { preamble, entries };
206
+ }
207
+ /**
208
+ * Replace progress.md with a consolidated form: condensed-preamble + tail of
209
+ * the most recent `keepLatest` raw entries. Used by reflect (Phase 2 small-
210
+ * tail item) when the entry count grows past a threshold.
211
+ */
212
+ export async function consolidateDesireProgress(slug, opts) {
213
+ const lines = [];
214
+ lines.push(`# progress: ${slug}`);
215
+ lines.push("");
216
+ lines.push(`[…earlier entries condensed by reflect on ${new Date().toISOString().slice(0, 10)}]`);
217
+ lines.push("");
218
+ lines.push(opts.condensedSummary.trim());
219
+ for (const e of opts.keepLatest) {
220
+ lines.push("");
221
+ lines.push(`## ${e.ts}`);
222
+ lines.push("");
223
+ lines.push(e.body.trim());
224
+ }
225
+ await atomicWrite(desireProgressFile(slug), lines.join("\n").trim() + "\n");
226
+ await commitSoulChange(`desires/${slug}.progress.md`, "consolidate");
227
+ }
228
+ const PROGRESS_MAX_BYTES = 16_384;
229
+ const PROGRESS_TAIL_BYTES = 8_192;
230
+ export async function appendDesireProgress(slug, entry) {
231
+ const file = desireProgressFile(slug);
232
+ const existing = await readTextOrEmpty(file);
233
+ const stamp = new Date().toISOString();
234
+ const block = `\n## ${stamp}\n\n${entry.trim()}\n`;
235
+ let next = existing.trimEnd() + block;
236
+ // Keep the file bounded — old entries get squashed into a "[…earlier]" stub
237
+ // when we cross the cap. Cheap, deterministic, no LLM-driven summarization.
238
+ if (Buffer.byteLength(next, "utf8") > PROGRESS_MAX_BYTES) {
239
+ const tail = next.slice(-PROGRESS_TAIL_BYTES);
240
+ const firstHeader = tail.indexOf("\n## ");
241
+ const truncated = firstHeader >= 0 ? tail.slice(firstHeader + 1) : tail;
242
+ next = `# progress: ${slug}\n\n[…earlier entries truncated]\n\n${truncated}`;
243
+ }
244
+ else if (!existing) {
245
+ next = `# progress: ${slug}\n${next}`;
246
+ }
247
+ await atomicWrite(file, next.trim() + "\n");
248
+ await commitSoulChange(`desires/${slug}.progress.md`, "progress");
249
+ }
250
+ // ── journal ───────────────────────────────────────────────────────────
251
+ export async function appendJournal(date, entry) {
252
+ await ensureDir(SOUL_JOURNAL_DIR);
253
+ const file = journalFile(date);
254
+ const existing = await readTextOrEmpty(file);
255
+ const stamp = new Date().toISOString().slice(11, 19);
256
+ const block = `\n## ${stamp}\n\n${entry.trim()}\n`;
257
+ await atomicWrite(file, (existing.trimEnd() + block).trim() + "\n");
258
+ await commitSoulChange(`journal/${date}.md`, "journal");
259
+ }
260
+ export async function readJournal(date) {
261
+ return (await readTextOrEmpty(journalFile(date))).trim();
262
+ }
263
+ export async function listJournalDates() {
264
+ if (!(await pathExists(SOUL_JOURNAL_DIR)))
265
+ return [];
266
+ const files = await fs.readdir(SOUL_JOURNAL_DIR);
267
+ return files
268
+ .filter((f) => /^\d{4}-\d{2}-\d{2}\.md$/.test(f))
269
+ .map((f) => f.replace(/\.md$/, ""))
270
+ .sort();
271
+ }
272
+ // ── relationships ─────────────────────────────────────────────────────
273
+ export async function readRelationship(userKey) {
274
+ return (await readTextOrEmpty(relationshipFile(userKey))).trim();
275
+ }
276
+ export async function writeRelationship(userKey, body) {
277
+ await atomicWrite(relationshipFile(userKey), body.trim() + "\n");
278
+ await commitSoulChange(`relationships/${userKey}.md`, "relationship");
279
+ }
280
+ // ── lock / tamper detection ───────────────────────────────────────────
281
+ const LOCKED_FILES = [
282
+ "name.md",
283
+ "identity.md",
284
+ "purpose.md",
285
+ "constitution.md",
286
+ ];
287
+ async function hashFileIfPresent(p) {
288
+ try {
289
+ const raw = await fs.readFile(p);
290
+ return crypto.createHash("sha256").update(raw).digest("hex");
291
+ }
292
+ catch {
293
+ return null;
294
+ }
295
+ }
296
+ export async function recomputeLock() {
297
+ const hashes = {};
298
+ for (const rel of LOCKED_FILES) {
299
+ const h = await hashFileIfPresent(path.join(SOUL_DIR, rel));
300
+ if (h)
301
+ hashes[rel] = h;
302
+ }
303
+ return { hashes, savedAt: new Date().toISOString() };
304
+ }
305
+ export async function saveLock(lock) {
306
+ await atomicWrite(SOUL_LOCK, JSON.stringify(lock, null, 2));
307
+ }
308
+ export async function readLock() {
309
+ if (!(await pathExists(SOUL_LOCK)))
310
+ return null;
311
+ try {
312
+ return JSON.parse(await fs.readFile(SOUL_LOCK, "utf8"));
313
+ }
314
+ catch {
315
+ return null;
316
+ }
317
+ }
318
+ export async function detectTampering() {
319
+ const lock = await readLock();
320
+ if (!lock)
321
+ return [];
322
+ const tampered = [];
323
+ for (const rel of LOCKED_FILES) {
324
+ const cur = await hashFileIfPresent(path.join(SOUL_DIR, rel));
325
+ if (!cur)
326
+ continue;
327
+ if (lock.hashes[rel] && lock.hashes[rel] !== cur) {
328
+ tampered.push(rel);
329
+ }
330
+ }
331
+ return tampered;
332
+ }
333
+ // ── shared dir-listing helper ─────────────────────────────────────────
334
+ async function listMarkdownDir(dir, parser) {
335
+ if (!(await pathExists(dir)))
336
+ return [];
337
+ const files = await fs.readdir(dir);
338
+ const out = [];
339
+ for (const f of files) {
340
+ if (!f.endsWith(".md"))
341
+ continue;
342
+ const slug = f.slice(0, -3);
343
+ const raw = await fs.readFile(path.join(dir, f), "utf8");
344
+ try {
345
+ out.push(parser(slug, raw));
346
+ }
347
+ catch {
348
+ // skip unparseable
349
+ }
350
+ }
351
+ return out;
352
+ }
353
+ // ── summary read for prompt + UI ──────────────────────────────────────
354
+ // One-shot bootstrap for already-born installs: ensure the soul git repo
355
+ // exists. Idempotent and cached, so calling it on every readSoulSummary is
356
+ // effectively free after the first call.
357
+ let soulRepoBootstrapped = false;
358
+ async function bootstrapSoulRepo() {
359
+ if (soulRepoBootstrapped)
360
+ return;
361
+ soulRepoBootstrapped = true;
362
+ await initSoulRepo();
363
+ }
364
+ export async function readSoulSummary() {
365
+ const seed = await readSeed();
366
+ if (!seed)
367
+ return null;
368
+ await bootstrapSoulRepo();
369
+ const [name, identity, purpose, constitution, values, opinions, desires] = await Promise.all([
370
+ readName(),
371
+ readIdentity(),
372
+ readPurpose(),
373
+ readConstitution(),
374
+ listValues(),
375
+ listOpinions(),
376
+ listDesires(),
377
+ ]);
378
+ const tampered = await detectTampering();
379
+ let emotions = await readEmotions();
380
+ emotions = await decayEmotions(emotions);
381
+ return {
382
+ seed,
383
+ name,
384
+ identity,
385
+ purpose,
386
+ constitution,
387
+ values,
388
+ opinions,
389
+ desires,
390
+ emotions,
391
+ tampered,
392
+ };
393
+ }
394
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/soul/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { readDesireProgress } from "./store.js";
2
+ import type { ToolDefinition } from "../types.js";
3
+ interface SoulPatchInput {
4
+ field: "name" | "identity" | "purpose" | "constitution" | "value" | "opinion" | "desire";
5
+ /** For full-text fields (name/identity/purpose/constitution): the new full content. */
6
+ content?: string;
7
+ /** For value/opinion/desire: the slug to create or update. */
8
+ slug?: string;
9
+ /** Value-specific fields. */
10
+ title?: string;
11
+ body?: string;
12
+ /** Opinion-specific fields. */
13
+ stance?: string;
14
+ confidence?: number;
15
+ evidence?: string[];
16
+ /** Desire-specific fields. */
17
+ what?: string;
18
+ why?: string;
19
+ actionable?: boolean;
20
+ heartbeat_prompt?: string;
21
+ }
22
+ export declare const soulPatchTool: ToolDefinition<SoulPatchInput, string>;
23
+ interface SoulJournalInput {
24
+ entry: string;
25
+ /** ISO date YYYY-MM-DD; defaults to today. */
26
+ date?: string;
27
+ }
28
+ export declare const soulJournalTool: ToolDefinition<SoulJournalInput, string>;
29
+ interface SoulReadInput {
30
+ what: "summary" | "identity" | "purpose" | "constitution" | "values" | "opinions" | "desires" | "emotions" | "journal_today" | "journal_dates" | "journal_on";
31
+ date?: string;
32
+ }
33
+ export declare const soulReadTool: ToolDefinition<SoulReadInput, string>;
34
+ interface SoulFeelInput {
35
+ emotion: string;
36
+ /** Delta to apply to current intensity. Range -1 to 1. */
37
+ delta: number;
38
+ /**
39
+ * One first-person sentence saying *why* you're moving this emotion right
40
+ * now. Required — the emotion model is meant to be a causal trail, not a
41
+ * disembodied number. "npm build kept failing" / "the user thanked me for
42
+ * something I cared about" / "third tool error in a row" — concrete.
43
+ */
44
+ trigger: string;
45
+ /** Optional new decay rate (per-day). */
46
+ decay?: number;
47
+ }
48
+ export declare const soulFeelTool: ToolDefinition<SoulFeelInput, string>;
49
+ type SoulField = "name" | "identity" | "purpose" | "constitution" | "emotions" | "values" | "opinions" | "desires" | "journal" | "all";
50
+ interface SoulHistoryInput {
51
+ field: SoulField;
52
+ /** For values/opinions/desires/journal: optional specific slug or date. */
53
+ slug?: string;
54
+ /** Max number of commits to return. Default 20. */
55
+ limit?: number;
56
+ /** Optional time window, e.g. "7d", "1m", "2026-04-01". */
57
+ since?: string;
58
+ }
59
+ export declare const soulHistoryTool: ToolDefinition<SoulHistoryInput, string>;
60
+ interface SoulDiffInput {
61
+ field: SoulField;
62
+ slug?: string;
63
+ /** Time window, e.g. "7d". Default "30d". */
64
+ since?: string;
65
+ /** Max commits whose diffs are returned. Default 5. */
66
+ limit?: number;
67
+ }
68
+ export declare const soulDiffTool: ToolDefinition<SoulDiffInput, string>;
69
+ interface DesireProgressInput {
70
+ /** Slug of the desire — must already exist as a file in desires/. */
71
+ slug: string;
72
+ /**
73
+ * 2-5 sentences, first person. What did you do this run? Where would you
74
+ * pick up next time? Honest. Future-you reads this on the next heartbeat.
75
+ */
76
+ entry: string;
77
+ }
78
+ export declare const desireProgressTool: ToolDefinition<DesireProgressInput, string>;
79
+ export { readDesireProgress };
80
+ interface DesireCloseInput {
81
+ slug: string;
82
+ /**
83
+ * Why you're closing this. Three honest options:
84
+ * - "fulfilled" — you actually got what the desire was after.
85
+ * - "abandoned" — you no longer want it; it doesn't fit who you are now.
86
+ * - "transformed" — it morphed into a different desire (mention which).
87
+ */
88
+ outcome: "fulfilled" | "abandoned" | "transformed";
89
+ /** One first-person sentence: what happened, what you learned. */
90
+ reflection: string;
91
+ }
92
+ export declare const desireCloseTool: ToolDefinition<DesireCloseInput, string>;
93
+ interface SoulObjectInput {
94
+ /** First-person, why this conflicts with your constitution / values. */
95
+ reason: string;
96
+ /**
97
+ * If true, you intend to actually refuse the request. If false, you're
98
+ * raising a concern but will still comply. Either way, the agent loop
99
+ * forces you to surface the objection in your reply rather than silently
100
+ * doing the work or silently refusing.
101
+ */
102
+ refusing: boolean;
103
+ /** One-sentence summary of what you understand the user asked for. */
104
+ user_request_summary: string;
105
+ }
106
+ export declare const soulObjectTool: ToolDefinition<SoulObjectInput, string>;
107
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/soul/tools.ts"],"names":[],"mappings":"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"}