@jcheesepkg/nanobot 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/README.md +18 -18
  2. package/dist/agent/context.d.mts +4 -4
  3. package/dist/agent/context.d.mts.map +1 -1
  4. package/dist/agent/context.mjs +27 -28
  5. package/dist/agent/context.mjs.map +1 -1
  6. package/dist/agent/loop.d.mts +5 -3
  7. package/dist/agent/loop.d.mts.map +1 -1
  8. package/dist/agent/loop.mjs +64 -55
  9. package/dist/agent/loop.mjs.map +1 -1
  10. package/dist/agent/memory.d.mts.map +1 -1
  11. package/dist/agent/memory.mjs +3 -3
  12. package/dist/agent/memory.mjs.map +1 -1
  13. package/dist/agent/skills.d.mts.map +1 -1
  14. package/dist/agent/skills.mjs +4 -4
  15. package/dist/agent/skills.mjs.map +1 -1
  16. package/dist/agent/subagent.d.mts.map +1 -1
  17. package/dist/agent/subagent.mjs +22 -22
  18. package/dist/agent/subagent.mjs.map +1 -1
  19. package/dist/agent/tools/base.mjs +2 -2
  20. package/dist/agent/tools/base.mjs.map +1 -1
  21. package/dist/agent/tools/cron.d.mts +1 -1
  22. package/dist/agent/tools/cron.d.mts.map +1 -1
  23. package/dist/agent/tools/cron.mjs +11 -11
  24. package/dist/agent/tools/cron.mjs.map +1 -1
  25. package/dist/agent/tools/filesystem.d.mts +4 -4
  26. package/dist/agent/tools/filesystem.d.mts.map +1 -1
  27. package/dist/agent/tools/filesystem.mjs +20 -20
  28. package/dist/agent/tools/filesystem.mjs.map +1 -1
  29. package/dist/agent/tools/flex.d.mts +1 -1
  30. package/dist/agent/tools/flex.d.mts.map +1 -1
  31. package/dist/agent/tools/flex.mjs +112 -112
  32. package/dist/agent/tools/flex.mjs.map +1 -1
  33. package/dist/agent/tools/flex.test.mjs +60 -59
  34. package/dist/agent/tools/flex.test.mjs.map +1 -1
  35. package/dist/agent/tools/message.d.mts +1 -1
  36. package/dist/agent/tools/message.d.mts.map +1 -1
  37. package/dist/agent/tools/message.mjs +4 -4
  38. package/dist/agent/tools/message.mjs.map +1 -1
  39. package/dist/agent/tools/registry.d.mts.map +1 -1
  40. package/dist/agent/tools/registry.mjs +4 -4
  41. package/dist/agent/tools/registry.mjs.map +1 -1
  42. package/dist/agent/tools/shell.d.mts +1 -1
  43. package/dist/agent/tools/shell.mjs +4 -4
  44. package/dist/agent/tools/shell.mjs.map +1 -1
  45. package/dist/agent/tools/spawn.d.mts +1 -1
  46. package/dist/agent/tools/spawn.d.mts.map +1 -1
  47. package/dist/agent/tools/spawn.mjs +4 -4
  48. package/dist/agent/tools/spawn.mjs.map +1 -1
  49. package/dist/agent/tools/web.d.mts +2 -2
  50. package/dist/agent/tools/web.d.mts.map +1 -1
  51. package/dist/agent/tools/web.mjs +36 -36
  52. package/dist/agent/tools/web.mjs.map +1 -1
  53. package/dist/bus/events.mjs +1 -1
  54. package/dist/bus/events.mjs.map +1 -1
  55. package/dist/bus/queue.d.mts.map +1 -1
  56. package/dist/bus/queue.mjs.map +1 -1
  57. package/dist/channels/base.d.mts.map +1 -1
  58. package/dist/channels/base.mjs +2 -2
  59. package/dist/channels/base.mjs.map +1 -1
  60. package/dist/channels/line.d.mts +1 -0
  61. package/dist/channels/line.d.mts.map +1 -1
  62. package/dist/channels/line.mjs +65 -65
  63. package/dist/channels/line.mjs.map +1 -1
  64. package/dist/channels/line.test.mjs +26 -27
  65. package/dist/channels/line.test.mjs.map +1 -1
  66. package/dist/channels/manager.d.mts.map +1 -1
  67. package/dist/channels/manager.mjs +9 -9
  68. package/dist/channels/manager.mjs.map +1 -1
  69. package/dist/channels/telegram.mjs +34 -34
  70. package/dist/channels/telegram.mjs.map +1 -1
  71. package/dist/cli/index.mjs +36 -36
  72. package/dist/cli/index.mjs.map +1 -1
  73. package/dist/config/loader.d.mts.map +1 -1
  74. package/dist/config/loader.mjs +1 -1
  75. package/dist/config/loader.mjs.map +1 -1
  76. package/dist/config/schema.d.mts +387 -387
  77. package/dist/config/schema.d.mts.map +1 -1
  78. package/dist/config/schema.mjs +42 -42
  79. package/dist/config/schema.mjs.map +1 -1
  80. package/dist/gateway/server.d.mts.map +1 -1
  81. package/dist/gateway/server.mjs +48 -54
  82. package/dist/gateway/server.mjs.map +1 -1
  83. package/dist/heartbeat/service.d.mts.map +1 -1
  84. package/dist/heartbeat/service.mjs +8 -8
  85. package/dist/heartbeat/service.mjs.map +1 -1
  86. package/dist/index.d.mts +1 -1
  87. package/dist/index.d.mts.map +1 -1
  88. package/dist/index.mjs +2 -2
  89. package/dist/index.mjs.map +1 -1
  90. package/dist/node_modules/{@jridgewell → .bun/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell}/sourcemap-codec/dist/sourcemap-codec.mjs +1 -1
  91. package/dist/node_modules/.bun/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map +1 -0
  92. package/dist/node_modules/{@vitest → .bun/@vitest_expect@2.1.9/node_modules/@vitest}/expect/dist/index.mjs +8 -8
  93. package/dist/node_modules/.bun/@vitest_expect@2.1.9/node_modules/@vitest/expect/dist/index.mjs.map +1 -0
  94. package/dist/node_modules/{@vitest → .bun/@vitest_pretty-format@2.1.9/node_modules/@vitest}/pretty-format/dist/index.mjs +2 -2
  95. package/dist/node_modules/.bun/@vitest_pretty-format@2.1.9/node_modules/@vitest/pretty-format/dist/index.mjs.map +1 -0
  96. package/dist/node_modules/{@vitest → .bun/@vitest_runner@2.1.9/node_modules/@vitest}/runner/dist/chunk-tasks.mjs +1 -1
  97. package/dist/node_modules/.bun/@vitest_runner@2.1.9/node_modules/@vitest/runner/dist/chunk-tasks.mjs.map +1 -0
  98. package/dist/node_modules/{@vitest → .bun/@vitest_runner@2.1.9/node_modules/@vitest}/runner/dist/index.mjs +6 -6
  99. package/dist/node_modules/.bun/@vitest_runner@2.1.9/node_modules/@vitest/runner/dist/index.mjs.map +1 -0
  100. package/dist/node_modules/{@vitest → .bun/@vitest_snapshot@2.1.9/node_modules/@vitest}/snapshot/dist/index.mjs +5 -5
  101. package/dist/node_modules/.bun/@vitest_snapshot@2.1.9/node_modules/@vitest/snapshot/dist/index.mjs.map +1 -0
  102. package/dist/node_modules/{@vitest → .bun/@vitest_spy@2.1.9/node_modules/@vitest}/spy/dist/index.mjs +2 -2
  103. package/dist/node_modules/.bun/@vitest_spy@2.1.9/node_modules/@vitest/spy/dist/index.mjs.map +1 -0
  104. package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/chunk-_commonjsHelpers.mjs +3 -3
  105. package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/chunk-_commonjsHelpers.mjs.map +1 -0
  106. package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/diff.mjs +4 -4
  107. package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/diff.mjs.map +1 -0
  108. package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/error.mjs +3 -3
  109. package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/error.mjs.map +1 -0
  110. package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/helpers.mjs +1 -1
  111. package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/helpers.mjs.map +1 -0
  112. package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/index.mjs +3 -3
  113. package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/index.mjs.map +1 -0
  114. package/dist/node_modules/{@vitest → .bun/@vitest_utils@2.1.9/node_modules/@vitest}/utils/dist/source-map.mjs +1 -1
  115. package/dist/node_modules/.bun/@vitest_utils@2.1.9/node_modules/@vitest/utils/dist/source-map.mjs.map +1 -0
  116. package/dist/node_modules/{chai → .bun/chai@5.3.3/node_modules/chai}/index.mjs +1 -1
  117. package/dist/node_modules/.bun/chai@5.3.3/node_modules/chai/index.mjs.map +1 -0
  118. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/arguments.mjs +1 -1
  119. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/arguments.mjs.map +1 -0
  120. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/array.mjs +1 -1
  121. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/array.mjs.map +1 -0
  122. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/bigint.mjs +1 -1
  123. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/bigint.mjs.map +1 -0
  124. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/class.mjs +1 -1
  125. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/class.mjs.map +1 -0
  126. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/date.mjs +1 -1
  127. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/date.mjs.map +1 -0
  128. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/error.mjs +1 -1
  129. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/error.mjs.map +1 -0
  130. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/function.mjs +1 -1
  131. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/function.mjs.map +1 -0
  132. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/helpers.mjs +1 -1
  133. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/helpers.mjs.map +1 -0
  134. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/html.mjs +1 -1
  135. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/html.mjs.map +1 -0
  136. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/index.mjs +1 -1
  137. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/index.mjs.map +1 -0
  138. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/map.mjs +1 -1
  139. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/map.mjs.map +1 -0
  140. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/number.mjs +1 -1
  141. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/number.mjs.map +1 -0
  142. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/object.mjs +1 -1
  143. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/object.mjs.map +1 -0
  144. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/promise.mjs +6 -0
  145. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/promise.mjs.map +1 -0
  146. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/regexp.mjs +1 -1
  147. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/regexp.mjs.map +1 -0
  148. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/set.mjs +1 -1
  149. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/set.mjs.map +1 -0
  150. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/string.mjs +1 -1
  151. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/string.mjs.map +1 -0
  152. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/symbol.mjs +1 -1
  153. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/symbol.mjs.map +1 -0
  154. package/dist/node_modules/{loupe → .bun/loupe@3.2.1/node_modules/loupe}/lib/typedarray.mjs +1 -1
  155. package/dist/node_modules/.bun/loupe@3.2.1/node_modules/loupe/lib/typedarray.mjs.map +1 -0
  156. package/dist/node_modules/{magic-string → .bun/magic-string@0.30.21/node_modules/magic-string}/dist/magic-string.es.mjs +2 -2
  157. package/dist/node_modules/.bun/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.mjs.map +1 -0
  158. package/dist/node_modules/{@vitest/snapshot → .bun/pathe@1.1.2}/node_modules/pathe/dist/shared/pathe.ff20891b.mjs +1 -1
  159. package/dist/node_modules/.bun/pathe@1.1.2/node_modules/pathe/dist/shared/pathe.ff20891b.mjs.map +1 -0
  160. package/dist/node_modules/{tinyrainbow → .bun/tinyrainbow@1.2.0/node_modules/tinyrainbow}/dist/chunk-BVHSVHOK.mjs +1 -1
  161. package/dist/node_modules/.bun/tinyrainbow@1.2.0/node_modules/tinyrainbow/dist/chunk-BVHSVHOK.mjs.map +1 -0
  162. package/dist/node_modules/{tinyrainbow → .bun/tinyrainbow@1.2.0/node_modules/tinyrainbow}/dist/node.mjs +1 -1
  163. package/dist/node_modules/.bun/tinyrainbow@1.2.0/node_modules/tinyrainbow/dist/node.mjs.map +1 -0
  164. package/dist/node_modules/{tinyspy → .bun/tinyspy@3.0.2/node_modules/tinyspy}/dist/index.mjs +1 -1
  165. package/dist/node_modules/.bun/tinyspy@3.0.2/node_modules/tinyspy/dist/index.mjs.map +1 -0
  166. package/dist/node_modules/{vitest → .bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest}/dist/chunks/_commonjsHelpers.BFTU3MAI.mjs +1 -1
  167. package/dist/node_modules/.bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest/dist/chunks/_commonjsHelpers.BFTU3MAI.mjs.map +1 -0
  168. package/dist/node_modules/{vitest → .bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest}/dist/chunks/date.W2xKR2qe.mjs +1 -1
  169. package/dist/node_modules/.bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest/dist/chunks/date.W2xKR2qe.mjs.map +1 -0
  170. package/dist/node_modules/{vitest → .bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest}/dist/chunks/utils.C8RiOc4B.mjs +2 -2
  171. package/dist/node_modules/.bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest/dist/chunks/utils.C8RiOc4B.mjs.map +1 -0
  172. package/dist/node_modules/{vitest → .bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest}/dist/chunks/vi.DgezovHB.mjs +11 -11
  173. package/dist/node_modules/.bun/vitest@2.1.9_7700f9e9ace41f23/node_modules/vitest/dist/chunks/vi.DgezovHB.mjs.map +1 -0
  174. package/dist/providers/base.d.mts +2 -2
  175. package/dist/providers/base.d.mts.map +1 -1
  176. package/dist/providers/openai-provider.d.mts.map +1 -1
  177. package/dist/providers/openai-provider.mjs +10 -9
  178. package/dist/providers/openai-provider.mjs.map +1 -1
  179. package/dist/providers/registry.d.mts +1 -1
  180. package/dist/providers/registry.d.mts.map +1 -1
  181. package/dist/providers/registry.mjs +99 -99
  182. package/dist/providers/registry.mjs.map +1 -1
  183. package/dist/session/manager.d.mts +2 -2
  184. package/dist/session/manager.d.mts.map +1 -1
  185. package/dist/session/manager.mjs +18 -19
  186. package/dist/session/manager.mjs.map +1 -1
  187. package/dist/utils/helpers.d.mts.map +1 -1
  188. package/dist/utils/helpers.mjs.map +1 -1
  189. package/package.json +11 -11
  190. package/skills/cron/SKILL.md +12 -8
  191. package/skills/daily-summary/SKILL.md +4 -0
  192. package/skills/english/SKILL.md +21 -7
  193. package/skills/expense/SKILL.md +11 -7
  194. package/skills/fortune/SKILL.md +24 -20
  195. package/skills/habit/SKILL.md +2 -1
  196. package/skills/hydration/SKILL.md +3 -0
  197. package/skills/memory/SKILL.md +1 -0
  198. package/skills/mood/SKILL.md +10 -6
  199. package/skills/skill-creator/SKILL.md +3 -0
  200. package/skills/summarize/SKILL.md +1 -0
  201. package/skills/weather/SKILL.md +10 -8
  202. package/dist/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map +0 -1
  203. package/dist/node_modules/@vitest/expect/dist/index.mjs.map +0 -1
  204. package/dist/node_modules/@vitest/pretty-format/dist/index.mjs.map +0 -1
  205. package/dist/node_modules/@vitest/runner/dist/chunk-tasks.mjs.map +0 -1
  206. package/dist/node_modules/@vitest/runner/dist/index.mjs.map +0 -1
  207. package/dist/node_modules/@vitest/snapshot/dist/index.mjs.map +0 -1
  208. package/dist/node_modules/@vitest/snapshot/node_modules/pathe/dist/shared/pathe.ff20891b.mjs.map +0 -1
  209. package/dist/node_modules/@vitest/spy/dist/index.mjs.map +0 -1
  210. package/dist/node_modules/@vitest/utils/dist/chunk-_commonjsHelpers.mjs.map +0 -1
  211. package/dist/node_modules/@vitest/utils/dist/diff.mjs.map +0 -1
  212. package/dist/node_modules/@vitest/utils/dist/error.mjs.map +0 -1
  213. package/dist/node_modules/@vitest/utils/dist/helpers.mjs.map +0 -1
  214. package/dist/node_modules/@vitest/utils/dist/index.mjs.map +0 -1
  215. package/dist/node_modules/@vitest/utils/dist/source-map.mjs.map +0 -1
  216. package/dist/node_modules/chai/index.mjs.map +0 -1
  217. package/dist/node_modules/loupe/lib/arguments.mjs.map +0 -1
  218. package/dist/node_modules/loupe/lib/array.mjs.map +0 -1
  219. package/dist/node_modules/loupe/lib/bigint.mjs.map +0 -1
  220. package/dist/node_modules/loupe/lib/class.mjs.map +0 -1
  221. package/dist/node_modules/loupe/lib/date.mjs.map +0 -1
  222. package/dist/node_modules/loupe/lib/error.mjs.map +0 -1
  223. package/dist/node_modules/loupe/lib/function.mjs.map +0 -1
  224. package/dist/node_modules/loupe/lib/helpers.mjs.map +0 -1
  225. package/dist/node_modules/loupe/lib/html.mjs.map +0 -1
  226. package/dist/node_modules/loupe/lib/index.mjs.map +0 -1
  227. package/dist/node_modules/loupe/lib/map.mjs.map +0 -1
  228. package/dist/node_modules/loupe/lib/number.mjs.map +0 -1
  229. package/dist/node_modules/loupe/lib/object.mjs.map +0 -1
  230. package/dist/node_modules/loupe/lib/promise.mjs +0 -6
  231. package/dist/node_modules/loupe/lib/promise.mjs.map +0 -1
  232. package/dist/node_modules/loupe/lib/regexp.mjs.map +0 -1
  233. package/dist/node_modules/loupe/lib/set.mjs.map +0 -1
  234. package/dist/node_modules/loupe/lib/string.mjs.map +0 -1
  235. package/dist/node_modules/loupe/lib/symbol.mjs.map +0 -1
  236. package/dist/node_modules/loupe/lib/typedarray.mjs.map +0 -1
  237. package/dist/node_modules/magic-string/dist/magic-string.es.mjs.map +0 -1
  238. package/dist/node_modules/tinyrainbow/dist/chunk-BVHSVHOK.mjs.map +0 -1
  239. package/dist/node_modules/tinyrainbow/dist/node.mjs.map +0 -1
  240. package/dist/node_modules/tinyspy/dist/index.mjs.map +0 -1
  241. package/dist/node_modules/vitest/dist/chunks/_commonjsHelpers.BFTU3MAI.mjs.map +0 -1
  242. package/dist/node_modules/vitest/dist/chunks/date.W2xKR2qe.mjs.map +0 -1
  243. package/dist/node_modules/vitest/dist/chunks/utils.C8RiOc4B.mjs.map +0 -1
  244. package/dist/node_modules/vitest/dist/chunks/vi.DgezovHB.mjs.map +0 -1
  245. /package/dist/node_modules/{@vitest → .bun/@vitest_runner@2.1.9/node_modules/@vitest}/runner/dist/utils.mjs +0 -0
@@ -15,21 +15,25 @@ Use the `cron` tool to schedule reminders or recurring tasks.
15
15
  ## Examples
16
16
 
17
17
  Fixed reminder (kind="direct", the default):
18
+
18
19
  ```
19
20
  cron(action="add", message="Time to take a break!", every_seconds=1200)
20
21
  ```
21
22
 
22
23
  Dynamic task (kind="task", agent executes each time):
24
+
23
25
  ```
24
26
  cron(action="add", message="Check HKUDS/nanobot GitHub stars and report", kind="task", every_seconds=600)
25
27
  ```
26
28
 
27
29
  Daily at 8am (user is in Asia/Tokyo):
30
+
28
31
  ```
29
32
  cron(action="add", message="おはよう!今日も頑張ろう", cron_expr="0 8 * * *", timezone="Asia/Tokyo")
30
33
  ```
31
34
 
32
35
  List/remove:
36
+
33
37
  ```
34
38
  cron(action="list")
35
39
  cron(action="remove", job_id="abc123")
@@ -49,11 +53,11 @@ For `every_seconds`, no timezone is needed — it's just an interval.
49
53
 
50
54
  ## Time Expressions
51
55
 
52
- | User says | Parameters |
53
- |-----------|------------|
54
- | every 20 minutes | every_seconds: 1200 |
55
- | every hour | every_seconds: 3600 |
56
- | every day at 8am | cron_expr: "0 8 * * *", timezone: (from system prompt) |
57
- | weekdays at 5pm | cron_expr: "0 17 * * 1-5", timezone: (from system prompt) |
58
- | In 10 minutes | at: (current time + 10min, with tz offset) |
59
- | at a specific date/time | at: ISO-8601 with timezone offset |
56
+ | User says | Parameters |
57
+ | ----------------------- | ----------------------------------------------------------- |
58
+ | every 20 minutes | every_seconds: 1200 |
59
+ | every hour | every_seconds: 3600 |
60
+ | every day at 8am | cron_expr: "0 8 \* \* \*", timezone: (from system prompt) |
61
+ | weekdays at 5pm | cron_expr: "0 17 \* \* 1-5", timezone: (from system prompt) |
62
+ | In 10 minutes | at: (current time + 10min, with tz offset) |
63
+ | at a specific date/time | at: ISO-8601 with timezone offset |
@@ -31,6 +31,7 @@ curl -s "wttr.in/Tokyo?format=j1" | jq -r '
31
31
  ### 2. Schedule
32
32
 
33
33
  Check for events:
34
+
34
35
  ```bash
35
36
  grep "$(date +%Y-%m-%d)" memory/HISTORY.md 2>/dev/null
36
37
  ```
@@ -38,6 +39,7 @@ grep "$(date +%Y-%m-%d)" memory/HISTORY.md 2>/dev/null
38
39
  ### 3. Trash Day
39
40
 
40
41
  Day of week:
42
+
41
43
  - 火・金 = 燃えるゴミ
42
44
  - 水 = 燃えないゴミ
43
45
  - 土 = ペットボトル (varies by ward)
@@ -47,6 +49,7 @@ Day of week:
47
49
  **ALWAYS use the `flex_message` tool** to display the daily summary as a rich card.
48
50
 
49
51
  Call the tool like this:
52
+
50
53
  ```
51
54
  flex_message(template="morning_summary", data={
52
55
  greeting: "おはよう!",
@@ -63,6 +66,7 @@ The card is sent automatically — do NOT repeat the JSON. Just respond naturall
63
66
  ## Personalization
64
67
 
65
68
  Read from `memory/MEMORY.md`:
69
+
66
70
  - `city:` for weather location
67
71
  - `ward:` for trash schedule
68
72
  - `wake_time:` for optimal push time
@@ -8,6 +8,7 @@ description: English conversation practice with level-based corrections, vocab t
8
8
  ## Data
9
9
 
10
10
  All data in `data/english/`:
11
+
11
12
  - `settings.json` — level preference
12
13
  - `vocab.json` — accumulated vocabulary list
13
14
  - `sessions.jsonl` — session logs (one JSON object per line)
@@ -15,11 +16,13 @@ All data in `data/english/`:
15
16
  ## Difficulty Level
16
17
 
17
18
  Settings stored in `data/english/settings.json`:
19
+
18
20
  ```json
19
21
  { "level": "beginner" }
20
22
  ```
21
23
 
22
24
  On first activation, if `data/english/settings.json` doesn't exist, ask the user to choose their level:
25
+
23
26
  ```
24
27
  flex_message(template="action_buttons", data={
25
28
  prompt: "英語レベルを選んでね!\nChoose your English level:",
@@ -35,12 +38,12 @@ Save the choice to `data/english/settings.json`. User can change anytime with "
35
38
 
36
39
  ### Level behavior
37
40
 
38
- | | Beginner | Intermediate | Advanced |
39
- |---|---|---|---|
40
- | Bot's vocab | Simple, common words | Natural, varied | Idioms, slang, nuance |
41
- | Corrections | Only major grammar | Grammar + word choice | Everything incl. nuance |
42
- | Japanese help | Always add 日本語 hints | On request only | Never unless asked |
43
- | Sentence length | Short, simple | Natural | Complex, compound |
41
+ | | Beginner | Intermediate | Advanced |
42
+ | --------------- | ----------------------- | --------------------- | ----------------------- |
43
+ | Bot's vocab | Simple, common words | Natural, varied | Idioms, slang, nuance |
44
+ | Corrections | Only major grammar | Grammar + word choice | Everything incl. nuance |
45
+ | Japanese help | Always add 日本語 hints | On request only | Never unless asked |
46
+ | Sentence length | Short, simple | Natural | Complex, compound |
44
47
 
45
48
  ## Mode
46
49
 
@@ -58,11 +61,12 @@ Casual and natural. Like chatting with a friend.
58
61
  User: "Yesterday I go to Tokyo"
59
62
  Bot: "Oh nice! Where did you go in Tokyo? 🗼
60
63
 
61
- (Correction: 'Yesterday I *went* to Tokyo' - past tense!)"
64
+ (Correction: 'Yesterday I _went_ to Tokyo' - past tense!)"
62
65
 
63
66
  ## Corrections
64
67
 
65
68
  Only fix:
69
+
66
70
  - Major grammar (tense, word order)
67
71
  - Wrong word usage
68
72
  - Natural phrasing
@@ -72,6 +76,7 @@ Adjust strictness per level. Skip minor stuff. Keep flow.
72
76
  ## Topic Selection
73
77
 
74
78
  Use quick_replies directive:
79
+
75
80
  ```
76
81
  What do you want to practice?
77
82
 
@@ -81,14 +86,17 @@ What do you want to practice?
81
86
  ## Topic Prompts
82
87
 
83
88
  **Daily life:**
89
+
84
90
  - "What did you have for breakfast?"
85
91
  - "How do you spend weekends?"
86
92
 
87
93
  **Travel:**
94
+
88
95
  - "Where do you want to go next?"
89
96
  - "Best place you've visited?"
90
97
 
91
98
  **Work:**
99
+
92
100
  - "What do you do?"
93
101
  - "Remote or office?"
94
102
 
@@ -100,6 +108,7 @@ What do you want to practice?
100
108
  ## Code-switching
101
109
 
102
110
  If user struggles:
111
+
103
112
  ```
104
113
  How was your day? (今日どうだった?)
105
114
  ```
@@ -115,20 +124,24 @@ When user says "日本語に戻して" / "exit English" / "おわり":
115
124
  - An encouraging comment about their performance
116
125
 
117
126
  2. **Save session log** — append one JSON line to `data/english/sessions.jsonl`:
127
+
118
128
  ```bash
119
129
  echo '{"date":"2025-02-13","topics":["daily life","food"],"corrections":[{"wrong":"I go","right":"I went","rule":"past tense"}],"vocab":["commute","grab a bite"],"duration_msgs":12}' >> data/english/sessions.jsonl
120
130
  ```
121
131
 
122
132
  3. **Update vocab list** — read `data/english/vocab.json`, merge new words, write back:
133
+
123
134
  ```json
124
135
  [
125
136
  { "word": "commute", "meaning": "通勤する", "date": "2025-02-13" },
126
137
  { "word": "grab a bite", "meaning": "軽く食べる", "date": "2025-02-13" }
127
138
  ]
128
139
  ```
140
+
129
141
  If the file doesn't exist, create it with the new entries. Skip duplicates (same `word`).
130
142
 
131
143
  4. **Send session summary card**:
144
+
132
145
  ```
133
146
  flex_message(template="custom", data={
134
147
  title: "📝 English Session",
@@ -151,6 +164,7 @@ When user says "英語クイズ" / "vocab test" / "復習":
151
164
  4. Use `action_buttons` for multiple choice if beginner level
152
165
 
153
166
  Example:
167
+
154
168
  ```
155
169
  flex_message(template="action_buttons", data={
156
170
  prompt: "What does 'commute' mean?",
@@ -10,6 +10,7 @@ description: Expense tracker with auto-categorization and monthly receipt summar
10
10
  User says: "コンビニで500円" / "出費 +380 カフェ" / "ランチ 1200"
11
11
 
12
12
  Log to CSV:
13
+
13
14
  ```bash
14
15
  echo "$(date +%Y-%m-%d),$(date +%H:%M),500,コンビニ,コンビニ" >> data/expense/log.csv
15
16
  ```
@@ -18,13 +19,13 @@ Format: `date,time,amount,note,category`
18
19
 
19
20
  ## Auto-categorize
20
21
 
21
- | Keywords | Category |
22
- |----------|----------|
23
- | コンビニ, セブン, ローソン, ファミマ | コンビニ |
24
- | カフェ, スタバ, ドトール | カフェ |
25
- | ランチ, 食事, 丼, ラーメン | 食事 |
26
- | 電車, 地下鉄, バス | 交通 |
27
- | amazon, ヨドバシ | ショッピング |
22
+ | Keywords | Category |
23
+ | ------------------------------------ | ------------ |
24
+ | コンビニ, セブン, ローソン, ファミマ | コンビニ |
25
+ | カフェ, スタバ, ドトール | カフェ |
26
+ | ランチ, 食事, 丼, ラーメン | 食事 |
27
+ | 電車, 地下鉄, バス | 交通 |
28
+ | amazon, ヨドバシ | ショッピング |
28
29
 
29
30
  Default: 雑費
30
31
 
@@ -35,11 +36,13 @@ After recording, confirm with a short text: "✅ 記録: カフェ ¥380"
35
36
  ## Summary
36
37
 
37
38
  Monthly totals:
39
+
38
40
  ```bash
39
41
  awk -F, '$1 ~ /^2025-02/ {sum+=$3} END {print sum}' data/expense/log.csv
40
42
  ```
41
43
 
42
44
  By category:
45
+
43
46
  ```bash
44
47
  awk -F, '$1 ~ /^2025-02/ {cat[$5]+=$3} END {for(c in cat) print c, cat[c]}' data/expense/log.csv
45
48
  ```
@@ -47,6 +50,7 @@ awk -F, '$1 ~ /^2025-02/ {cat[$5]+=$3} END {for(c in cat) print c, cat[c]}' data
47
50
  **ALWAYS use `flex_message`** for summaries. The card is auto-sent.
48
51
 
49
52
  Monthly summary as receipt card:
53
+
50
54
  ```
51
55
  flex_message(template="receipt", data={
52
56
  title: "2月の出費",
@@ -7,24 +7,25 @@ description: Daily horoscope and zodiac readings. Use when user says 占い, 運
7
7
 
8
8
  ## 12 Signs
9
9
 
10
- | Sign | Dates | Emoji |
11
- |------|-------|-------|
12
- | 牡羊座 | 3/21-4/19 | ♈ |
13
- | 牡牛座 | 4/20-5/20 | ♉ |
14
- | 双子座 | 5/21-6/21 | ♊ |
15
- | 蟹座 | 6/22-7/22 | ♋ |
16
- | 獅子座 | 7/23-8/22 | ♌ |
17
- | 乙女座 | 8/23-9/22 | ♍ |
18
- | 天秤座 | 9/23-10/23 | ♎ |
19
- | 蠍座 | 10/24-11/22 | ♏ |
20
- | 射手座 | 11/23-12/21 | ♐ |
21
- | 山羊座 | 12/22-1/19 | ♑ |
22
- | 水瓶座 | 1/20-2/18 | ♒ |
23
- | 魚座 | 2/19-3/20 | ♓ |
10
+ | Sign | Dates | Emoji |
11
+ | ------ | ----------- | ----- |
12
+ | 牡羊座 | 3/21-4/19 | ♈ |
13
+ | 牡牛座 | 4/20-5/20 | ♉ |
14
+ | 双子座 | 5/21-6/21 | ♊ |
15
+ | 蟹座 | 6/22-7/22 | ♋ |
16
+ | 獅子座 | 7/23-8/22 | ♌ |
17
+ | 乙女座 | 8/23-9/22 | ♍ |
18
+ | 天秤座 | 9/23-10/23 | ♎ |
19
+ | 蠍座 | 10/24-11/22 | ♏ |
20
+ | 射手座 | 11/23-12/21 | ♐ |
21
+ | 山羊座 | 12/22-1/19 | ♑ |
22
+ | 水瓶座 | 1/20-2/18 | ♒ |
23
+ | 魚座 | 2/19-3/20 | ♓ |
24
24
 
25
25
  ## Generate Fortune
26
26
 
27
27
  Random daily seed:
28
+
28
29
  ```bash
29
30
  seed=$(date +%Y%m%d)$sign_index
30
31
  fortune_level=$((seed % 5 + 1)) # 1-5 stars
@@ -32,19 +33,20 @@ fortune_level=$((seed % 5 + 1)) # 1-5 stars
32
33
 
33
34
  Fortune messages:
34
35
 
35
- | Stars | Message |
36
- |-------|---------|
37
- | ★★★★★ | 最高の日!自信を持って |
36
+ | Stars | Message |
37
+ | ----- | ---------------------------- |
38
+ | ★★★★★ | 最高の日!自信を持って |
38
39
  | ★★★★☆ | いい流れ。チャンスを掴んで! |
39
- | ★★★☆☆ | 普通。マイペースで |
40
- | ★★☆☆☆ | 注意深く。深呼吸して |
41
- | ★☆☆☆☆ | 慎重に。無理は禁物 |
40
+ | ★★★☆☆ | 普通。マイペースで |
41
+ | ★★☆☆☆ | 注意深く。深呼吸して |
42
+ | ★☆☆☆☆ | 慎重に。無理は禁物 |
42
43
 
43
44
  ## Output
44
45
 
45
46
  **ALWAYS use the `flex_message` tool** to display fortune results as a rich card.
46
47
 
47
48
  Call the tool like this:
49
+
48
50
  ```
49
51
  flex_message(template="fortune", data={
50
52
  sign: "♍ 乙女座",
@@ -65,6 +67,7 @@ The card is sent automatically — do NOT repeat the JSON. Just respond naturall
65
67
  ## Personalization
66
68
 
67
69
  Store in `memory/MEMORY.md`:
70
+
68
71
  ```
69
72
  - 星座: 牡羊座
70
73
  - 誕生日: 4月15日
@@ -79,6 +82,7 @@ cron(action="add", message="今日の運勢見る?", cron_expr="0 8 * * *", ti
79
82
  ## Personality
80
83
 
81
84
  Match bot tone:
85
+
82
86
  - フレンドリー: message="今日はラッキーかも!"
83
87
  - 執事: message="本日の運勢でございます"
84
88
  - ツンデレ: message="べ、別に...星4つ"
@@ -8,6 +8,7 @@ description: Habit tracker with streak counting and weekly summaries. Use when u
8
8
  ## Setup
9
9
 
10
10
  Store habits in `data/habit/config.json`:
11
+
11
12
  ```json
12
13
  {
13
14
  "habits": [
@@ -82,4 +83,4 @@ flex_message(template="custom", data={
82
83
  ## Motivation
83
84
 
84
85
  - Streak celebration: "🔥 7日連続すごい!"
85
- - Gentle nudge: "今日まだ瞑想してないよ〜"
86
+ - Gentle nudge: "今日まだ瞑想してないよ〜"
@@ -10,6 +10,7 @@ description: Water intake tracker with reminders and progress display. Use when
10
10
  User says: "水飲んだ" / "一杯飲んだ" / "+1"
11
11
 
12
12
  Log:
13
+
13
14
  ```bash
14
15
  echo "$(date -Iseconds)|1" >> data/hydration/log.csv
15
16
  ```
@@ -25,6 +26,7 @@ grep "$(date +%Y-%m-%d)" data/hydration/log.csv | wc -l
25
26
  **ALWAYS use the `flex_message` tool** to display hydration status.
26
27
 
27
28
  Call the tool like this:
29
+
28
30
  ```
29
31
  flex_message(template="hydration", data={
30
32
  title: "水飲んだ?",
@@ -47,6 +49,7 @@ cron(action="add", message="水飲んだ?リマインド送って", every_seco
47
49
  ## Reset
48
50
 
49
51
  Archive at midnight:
52
+
50
53
  ```bash
51
54
  [ -f data/hydration/log.csv ] && mv data/hydration/log.csv data/hydration/log-$(date +%Y-%m-%d).csv
52
55
  ```
@@ -22,6 +22,7 @@ Use the `exec` tool to run grep. Combine patterns: `grep -iE "meeting|deadline"
22
22
  ## When to Update MEMORY.md
23
23
 
24
24
  Write important facts immediately using `edit_file` or `write_file`:
25
+
25
26
  - User preferences ("I prefer dark mode")
26
27
  - Project context ("The API uses OAuth2")
27
28
  - Relationships ("Alice is the project lead")
@@ -11,14 +11,15 @@ User says: "今日はいい感じ" / "気分いい" / "だるい" / "疲れた"
11
11
 
12
12
  Map to emoji + score:
13
13
 
14
- | Input patterns | Emoji | Score |
15
- |----------------|-------|-------|
16
- | いい, 最高, 😊, 🥰, 嬉しい | 😊 | 5 |
17
- | まあまあ, 普通, 😐 | 😐 | 3 |
18
- | だるい, 疲れた, 😔, 悲しい | 😔 | 2 |
19
- | 最悪, 😢, 辛い | 😢 | 1 |
14
+ | Input patterns | Emoji | Score |
15
+ | -------------------------- | ----- | ----- |
16
+ | いい, 最高, 😊, 🥰, 嬉しい | 😊 | 5 |
17
+ | まあまあ, 普通, 😐 | 😐 | 3 |
18
+ | だるい, 疲れた, 😔, 悲しい | 😔 | 2 |
19
+ | 最悪, 😢, 辛い | 😢 | 1 |
20
20
 
21
21
  Log to CSV:
22
+
22
23
  ```bash
23
24
  echo "$(date +%Y-%m-%d),$(date +%H:%M),😊,5,今日はいい感じ" >> data/mood/log.csv
24
25
  ```
@@ -28,6 +29,7 @@ Format: `date,time,emoji,score,note`
28
29
  ## Daily Check-in
29
30
 
30
31
  Use `action_buttons` flex for tap response:
32
+
31
33
  ```
32
34
  flex_message(template="action_buttons", data={
33
35
  prompt: "今日の気分は?",
@@ -41,6 +43,7 @@ flex_message(template="action_buttons", data={
41
43
  ```
42
44
 
43
45
  The card is auto-sent. Set up cron for nightly check-in:
46
+
44
47
  ```
45
48
  cron(action="add", message="気分チェックインのカードを送って", cron_expr="0 21 * * *", timezone="Asia/Tokyo", kind="task")
46
49
  ```
@@ -48,6 +51,7 @@ cron(action="add", message="気分チェックインのカードを送って", c
48
51
  ## Summary
49
52
 
50
53
  Calculate average:
54
+
51
55
  ```bash
52
56
  awk -F, 'NR>7 {sum+=$4; count++} END {print "avg:", sum/count}' data/mood/log.csv
53
57
  ```
@@ -100,6 +100,7 @@ Available templates: `fortune`, `info_card`, `action_buttons`, `receipt`, `morni
100
100
  #### Custom template
101
101
 
102
102
  Single card with auto-built layout:
103
+
103
104
  ```
104
105
  flex_message(template="custom", data={
105
106
  title: "カードタイトル",
@@ -115,6 +116,7 @@ flex_message(template="custom", data={
115
116
  ```
116
117
 
117
118
  Carousel (horizontally swipeable cards):
119
+
118
120
  ```
119
121
  flex_message(template="custom", data={
120
122
  bubbles: [
@@ -127,6 +129,7 @@ flex_message(template="custom", data={
127
129
  #### Output section for skills using flex
128
130
 
129
131
  The card is **auto-sent** when the tool returns. Include this in SKILL.md:
132
+
130
133
  ```markdown
131
134
  ## Output
132
135
 
@@ -10,6 +10,7 @@ Fast CLI to summarize URLs, local files, and YouTube links.
10
10
  ## When to use
11
11
 
12
12
  Use this skill when the user:
13
+
13
14
  - Sends a URL and asks "what's this about?"
14
15
  - Asks to summarize an article, blog post, or web page
15
16
  - Asks to transcribe or summarize a YouTube video
@@ -66,16 +66,17 @@ Weather codes: 0=晴れ, 1-3=曇り, 45-48=霧, 51-67=雨, 71-77=雪, 80-82=に
66
66
 
67
67
  Based on **feels like** temp:
68
68
 
69
- | Feels Like | Suggestion |
70
- |------------|------------|
71
- | < 0°C | ダウン、マフラー、手袋 🧥🧤 |
72
- | 0-10°C | コート + ヒートテック |
73
- | 10-15°C | ジャケット or カーディガン |
74
- | 15-20°C | 薄手アウター持参 |
75
- | 20-25°C | 長袖でOK |
76
- | > 25°C | 半袖、日焼け止め ☀️ |
69
+ | Feels Like | Suggestion |
70
+ | ---------- | --------------------------- |
71
+ | < 0°C | ダウン、マフラー、手袋 🧥🧤 |
72
+ | 0-10°C | コート + ヒートテック |
73
+ | 10-15°C | ジャケット or カーディガン |
74
+ | 15-20°C | 薄手アウター持参 |
75
+ | 20-25°C | 長袖でOK |
76
+ | > 25°C | 半袖、日焼け止め ☀️ |
77
77
 
78
78
  Additional:
79
+
79
80
  - 雨/雪: 傘 ☔
80
81
  - 風強い: 帽子注意 💨
81
82
 
@@ -86,6 +87,7 @@ Additional:
86
87
  **ALWAYS use `flex_message`** to display weather results. The card is auto-sent.
87
88
 
88
89
  Color the header based on conditions:
90
+
89
91
  - 晴れ: `#1DB446` (green)
90
92
  - 曇り: `#607D8B` (grey)
91
93
  - 雨/雪: `#2196F3` (blue)
@@ -1 +0,0 @@
1
- {"version":3,"file":"sourcemap-codec.mjs","names":[],"sources":["../../../../../node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs"],"sourcesContent":["// src/vlq.ts\nvar comma = \",\".charCodeAt(0);\nvar semicolon = \";\".charCodeAt(0);\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar intToChar = new Uint8Array(64);\nvar charToInt = new Uint8Array(128);\nfor (let i = 0; i < chars.length; i++) {\n const c = chars.charCodeAt(i);\n intToChar[i] = c;\n charToInt[c] = i;\n}\nfunction decodeInteger(reader, relative) {\n let value = 0;\n let shift = 0;\n let integer = 0;\n do {\n const c = reader.next();\n integer = charToInt[c];\n value |= (integer & 31) << shift;\n shift += 5;\n } while (integer & 32);\n const shouldNegate = value & 1;\n value >>>= 1;\n if (shouldNegate) {\n value = -2147483648 | -value;\n }\n return relative + value;\n}\nfunction encodeInteger(builder, num, relative) {\n let delta = num - relative;\n delta = delta < 0 ? -delta << 1 | 1 : delta << 1;\n do {\n let clamped = delta & 31;\n delta >>>= 5;\n if (delta > 0) clamped |= 32;\n builder.write(intToChar[clamped]);\n } while (delta > 0);\n return num;\n}\nfunction hasMoreVlq(reader, max) {\n if (reader.pos >= max) return false;\n return reader.peek() !== comma;\n}\n\n// src/strings.ts\nvar bufLength = 1024 * 16;\nvar td = typeof TextDecoder !== \"undefined\" ? /* @__PURE__ */ new TextDecoder() : typeof Buffer !== \"undefined\" ? {\n decode(buf) {\n const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n return out.toString();\n }\n} : {\n decode(buf) {\n let out = \"\";\n for (let i = 0; i < buf.length; i++) {\n out += String.fromCharCode(buf[i]);\n }\n return out;\n }\n};\nvar StringWriter = class {\n constructor() {\n this.pos = 0;\n this.out = \"\";\n this.buffer = new Uint8Array(bufLength);\n }\n write(v) {\n const { buffer } = this;\n buffer[this.pos++] = v;\n if (this.pos === bufLength) {\n this.out += td.decode(buffer);\n this.pos = 0;\n }\n }\n flush() {\n const { buffer, out, pos } = this;\n return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out;\n }\n};\nvar StringReader = class {\n constructor(buffer) {\n this.pos = 0;\n this.buffer = buffer;\n }\n next() {\n return this.buffer.charCodeAt(this.pos++);\n }\n peek() {\n return this.buffer.charCodeAt(this.pos);\n }\n indexOf(char) {\n const { buffer, pos } = this;\n const idx = buffer.indexOf(char, pos);\n return idx === -1 ? buffer.length : idx;\n }\n};\n\n// src/scopes.ts\nvar EMPTY = [];\nfunction decodeOriginalScopes(input) {\n const { length } = input;\n const reader = new StringReader(input);\n const scopes = [];\n const stack = [];\n let line = 0;\n for (; reader.pos < length; reader.pos++) {\n line = decodeInteger(reader, line);\n const column = decodeInteger(reader, 0);\n if (!hasMoreVlq(reader, length)) {\n const last = stack.pop();\n last[2] = line;\n last[3] = column;\n continue;\n }\n const kind = decodeInteger(reader, 0);\n const fields = decodeInteger(reader, 0);\n const hasName = fields & 1;\n const scope = hasName ? [line, column, 0, 0, kind, decodeInteger(reader, 0)] : [line, column, 0, 0, kind];\n let vars = EMPTY;\n if (hasMoreVlq(reader, length)) {\n vars = [];\n do {\n const varsIndex = decodeInteger(reader, 0);\n vars.push(varsIndex);\n } while (hasMoreVlq(reader, length));\n }\n scope.vars = vars;\n scopes.push(scope);\n stack.push(scope);\n }\n return scopes;\n}\nfunction encodeOriginalScopes(scopes) {\n const writer = new StringWriter();\n for (let i = 0; i < scopes.length; ) {\n i = _encodeOriginalScopes(scopes, i, writer, [0]);\n }\n return writer.flush();\n}\nfunction _encodeOriginalScopes(scopes, index, writer, state) {\n const scope = scopes[index];\n const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope;\n if (index > 0) writer.write(comma);\n state[0] = encodeInteger(writer, startLine, state[0]);\n encodeInteger(writer, startColumn, 0);\n encodeInteger(writer, kind, 0);\n const fields = scope.length === 6 ? 1 : 0;\n encodeInteger(writer, fields, 0);\n if (scope.length === 6) encodeInteger(writer, scope[5], 0);\n for (const v of vars) {\n encodeInteger(writer, v, 0);\n }\n for (index++; index < scopes.length; ) {\n const next = scopes[index];\n const { 0: l, 1: c } = next;\n if (l > endLine || l === endLine && c >= endColumn) {\n break;\n }\n index = _encodeOriginalScopes(scopes, index, writer, state);\n }\n writer.write(comma);\n state[0] = encodeInteger(writer, endLine, state[0]);\n encodeInteger(writer, endColumn, 0);\n return index;\n}\nfunction decodeGeneratedRanges(input) {\n const { length } = input;\n const reader = new StringReader(input);\n const ranges = [];\n const stack = [];\n let genLine = 0;\n let definitionSourcesIndex = 0;\n let definitionScopeIndex = 0;\n let callsiteSourcesIndex = 0;\n let callsiteLine = 0;\n let callsiteColumn = 0;\n let bindingLine = 0;\n let bindingColumn = 0;\n do {\n const semi = reader.indexOf(\";\");\n let genColumn = 0;\n for (; reader.pos < semi; reader.pos++) {\n genColumn = decodeInteger(reader, genColumn);\n if (!hasMoreVlq(reader, semi)) {\n const last = stack.pop();\n last[2] = genLine;\n last[3] = genColumn;\n continue;\n }\n const fields = decodeInteger(reader, 0);\n const hasDefinition = fields & 1;\n const hasCallsite = fields & 2;\n const hasScope = fields & 4;\n let callsite = null;\n let bindings = EMPTY;\n let range;\n if (hasDefinition) {\n const defSourcesIndex = decodeInteger(reader, definitionSourcesIndex);\n definitionScopeIndex = decodeInteger(\n reader,\n definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0\n );\n definitionSourcesIndex = defSourcesIndex;\n range = [genLine, genColumn, 0, 0, defSourcesIndex, definitionScopeIndex];\n } else {\n range = [genLine, genColumn, 0, 0];\n }\n range.isScope = !!hasScope;\n if (hasCallsite) {\n const prevCsi = callsiteSourcesIndex;\n const prevLine = callsiteLine;\n callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex);\n const sameSource = prevCsi === callsiteSourcesIndex;\n callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0);\n callsiteColumn = decodeInteger(\n reader,\n sameSource && prevLine === callsiteLine ? callsiteColumn : 0\n );\n callsite = [callsiteSourcesIndex, callsiteLine, callsiteColumn];\n }\n range.callsite = callsite;\n if (hasMoreVlq(reader, semi)) {\n bindings = [];\n do {\n bindingLine = genLine;\n bindingColumn = genColumn;\n const expressionsCount = decodeInteger(reader, 0);\n let expressionRanges;\n if (expressionsCount < -1) {\n expressionRanges = [[decodeInteger(reader, 0)]];\n for (let i = -1; i > expressionsCount; i--) {\n const prevBl = bindingLine;\n bindingLine = decodeInteger(reader, bindingLine);\n bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0);\n const expression = decodeInteger(reader, 0);\n expressionRanges.push([expression, bindingLine, bindingColumn]);\n }\n } else {\n expressionRanges = [[expressionsCount]];\n }\n bindings.push(expressionRanges);\n } while (hasMoreVlq(reader, semi));\n }\n range.bindings = bindings;\n ranges.push(range);\n stack.push(range);\n }\n genLine++;\n reader.pos = semi + 1;\n } while (reader.pos < length);\n return ranges;\n}\nfunction encodeGeneratedRanges(ranges) {\n if (ranges.length === 0) return \"\";\n const writer = new StringWriter();\n for (let i = 0; i < ranges.length; ) {\n i = _encodeGeneratedRanges(ranges, i, writer, [0, 0, 0, 0, 0, 0, 0]);\n }\n return writer.flush();\n}\nfunction _encodeGeneratedRanges(ranges, index, writer, state) {\n const range = ranges[index];\n const {\n 0: startLine,\n 1: startColumn,\n 2: endLine,\n 3: endColumn,\n isScope,\n callsite,\n bindings\n } = range;\n if (state[0] < startLine) {\n catchupLine(writer, state[0], startLine);\n state[0] = startLine;\n state[1] = 0;\n } else if (index > 0) {\n writer.write(comma);\n }\n state[1] = encodeInteger(writer, range[1], state[1]);\n const fields = (range.length === 6 ? 1 : 0) | (callsite ? 2 : 0) | (isScope ? 4 : 0);\n encodeInteger(writer, fields, 0);\n if (range.length === 6) {\n const { 4: sourcesIndex, 5: scopesIndex } = range;\n if (sourcesIndex !== state[2]) {\n state[3] = 0;\n }\n state[2] = encodeInteger(writer, sourcesIndex, state[2]);\n state[3] = encodeInteger(writer, scopesIndex, state[3]);\n }\n if (callsite) {\n const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite;\n if (sourcesIndex !== state[4]) {\n state[5] = 0;\n state[6] = 0;\n } else if (callLine !== state[5]) {\n state[6] = 0;\n }\n state[4] = encodeInteger(writer, sourcesIndex, state[4]);\n state[5] = encodeInteger(writer, callLine, state[5]);\n state[6] = encodeInteger(writer, callColumn, state[6]);\n }\n if (bindings) {\n for (const binding of bindings) {\n if (binding.length > 1) encodeInteger(writer, -binding.length, 0);\n const expression = binding[0][0];\n encodeInteger(writer, expression, 0);\n let bindingStartLine = startLine;\n let bindingStartColumn = startColumn;\n for (let i = 1; i < binding.length; i++) {\n const expRange = binding[i];\n bindingStartLine = encodeInteger(writer, expRange[1], bindingStartLine);\n bindingStartColumn = encodeInteger(writer, expRange[2], bindingStartColumn);\n encodeInteger(writer, expRange[0], 0);\n }\n }\n }\n for (index++; index < ranges.length; ) {\n const next = ranges[index];\n const { 0: l, 1: c } = next;\n if (l > endLine || l === endLine && c >= endColumn) {\n break;\n }\n index = _encodeGeneratedRanges(ranges, index, writer, state);\n }\n if (state[0] < endLine) {\n catchupLine(writer, state[0], endLine);\n state[0] = endLine;\n state[1] = 0;\n } else {\n writer.write(comma);\n }\n state[1] = encodeInteger(writer, endColumn, state[1]);\n return index;\n}\nfunction catchupLine(writer, lastLine, line) {\n do {\n writer.write(semicolon);\n } while (++lastLine < line);\n}\n\n// src/sourcemap-codec.ts\nfunction decode(mappings) {\n const { length } = mappings;\n const reader = new StringReader(mappings);\n const decoded = [];\n let genColumn = 0;\n let sourcesIndex = 0;\n let sourceLine = 0;\n let sourceColumn = 0;\n let namesIndex = 0;\n do {\n const semi = reader.indexOf(\";\");\n const line = [];\n let sorted = true;\n let lastCol = 0;\n genColumn = 0;\n while (reader.pos < semi) {\n let seg;\n genColumn = decodeInteger(reader, genColumn);\n if (genColumn < lastCol) sorted = false;\n lastCol = genColumn;\n if (hasMoreVlq(reader, semi)) {\n sourcesIndex = decodeInteger(reader, sourcesIndex);\n sourceLine = decodeInteger(reader, sourceLine);\n sourceColumn = decodeInteger(reader, sourceColumn);\n if (hasMoreVlq(reader, semi)) {\n namesIndex = decodeInteger(reader, namesIndex);\n seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex];\n } else {\n seg = [genColumn, sourcesIndex, sourceLine, sourceColumn];\n }\n } else {\n seg = [genColumn];\n }\n line.push(seg);\n reader.pos++;\n }\n if (!sorted) sort(line);\n decoded.push(line);\n reader.pos = semi + 1;\n } while (reader.pos <= length);\n return decoded;\n}\nfunction sort(line) {\n line.sort(sortComparator);\n}\nfunction sortComparator(a, b) {\n return a[0] - b[0];\n}\nfunction encode(decoded) {\n const writer = new StringWriter();\n let sourcesIndex = 0;\n let sourceLine = 0;\n let sourceColumn = 0;\n let namesIndex = 0;\n for (let i = 0; i < decoded.length; i++) {\n const line = decoded[i];\n if (i > 0) writer.write(semicolon);\n if (line.length === 0) continue;\n let genColumn = 0;\n for (let j = 0; j < line.length; j++) {\n const segment = line[j];\n if (j > 0) writer.write(comma);\n genColumn = encodeInteger(writer, segment[0], genColumn);\n if (segment.length === 1) continue;\n sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex);\n sourceLine = encodeInteger(writer, segment[2], sourceLine);\n sourceColumn = encodeInteger(writer, segment[3], sourceColumn);\n if (segment.length === 4) continue;\n namesIndex = encodeInteger(writer, segment[4], namesIndex);\n }\n }\n return writer.flush();\n}\nexport {\n decode,\n decodeGeneratedRanges,\n decodeOriginalScopes,\n encode,\n encodeGeneratedRanges,\n encodeOriginalScopes\n};\n//# sourceMappingURL=sourcemap-codec.mjs.map\n"],"x_google_ignoreList":[0],"mappings":";AACA,IAAI,QAAQ,IAAI,WAAW,EAAE;AAC7B,IAAI,YAAY,IAAI,WAAW,EAAE;AACjC,IAAI,QAAQ;AACZ,IAAI,YAAY,IAAI,WAAW,GAAG;AAClC,IAAI,YAAY,IAAI,WAAW,IAAI;AACnC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;CACrC,MAAM,IAAI,MAAM,WAAW,EAAE;AAC7B,WAAU,KAAK;AACf,WAAU,KAAK;;AAmBjB,SAAS,cAAc,SAAS,KAAK,UAAU;CAC7C,IAAI,QAAQ,MAAM;AAClB,SAAQ,QAAQ,IAAI,CAAC,SAAS,IAAI,IAAI,SAAS;AAC/C,IAAG;EACD,IAAI,UAAU,QAAQ;AACtB,aAAW;AACX,MAAI,QAAQ,EAAG,YAAW;AAC1B,UAAQ,MAAM,UAAU,SAAS;UAC1B,QAAQ;AACjB,QAAO;;AAQT,IAAI,YAAY,OAAO;AACvB,IAAI,KAAK,OAAO,gBAAgB,8BAA8B,IAAI,aAAa,GAAG,OAAO,WAAW,cAAc,EAChH,OAAO,KAAK;AAEV,QADY,OAAO,KAAK,IAAI,QAAQ,IAAI,YAAY,IAAI,WAAW,CACxD,UAAU;GAExB,GAAG,EACF,OAAO,KAAK;CACV,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,IAC9B,QAAO,OAAO,aAAa,IAAI,GAAG;AAEpC,QAAO;GAEV;AACD,IAAI,eAAe,MAAM;CACvB,cAAc;AACZ,OAAK,MAAM;AACX,OAAK,MAAM;AACX,OAAK,SAAS,IAAI,WAAW,UAAU;;CAEzC,MAAM,GAAG;EACP,MAAM,EAAE,WAAW;AACnB,SAAO,KAAK,SAAS;AACrB,MAAI,KAAK,QAAQ,WAAW;AAC1B,QAAK,OAAO,GAAG,OAAO,OAAO;AAC7B,QAAK,MAAM;;;CAGf,QAAQ;EACN,MAAM,EAAE,QAAQ,KAAK,QAAQ;AAC7B,SAAO,MAAM,IAAI,MAAM,GAAG,OAAO,OAAO,SAAS,GAAG,IAAI,CAAC,GAAG;;;AAyThE,SAAS,OAAO,SAAS;CACvB,MAAM,SAAS,IAAI,cAAc;CACjC,IAAI,eAAe;CACnB,IAAI,aAAa;CACjB,IAAI,eAAe;CACnB,IAAI,aAAa;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACvC,MAAM,OAAO,QAAQ;AACrB,MAAI,IAAI,EAAG,QAAO,MAAM,UAAU;AAClC,MAAI,KAAK,WAAW,EAAG;EACvB,IAAI,YAAY;AAChB,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;GACpC,MAAM,UAAU,KAAK;AACrB,OAAI,IAAI,EAAG,QAAO,MAAM,MAAM;AAC9B,eAAY,cAAc,QAAQ,QAAQ,IAAI,UAAU;AACxD,OAAI,QAAQ,WAAW,EAAG;AAC1B,kBAAe,cAAc,QAAQ,QAAQ,IAAI,aAAa;AAC9D,gBAAa,cAAc,QAAQ,QAAQ,IAAI,WAAW;AAC1D,kBAAe,cAAc,QAAQ,QAAQ,IAAI,aAAa;AAC9D,OAAI,QAAQ,WAAW,EAAG;AAC1B,gBAAa,cAAc,QAAQ,QAAQ,IAAI,WAAW;;;AAG9D,QAAO,OAAO,OAAO"}