@geminixiang/mikan 1.0.0-beta.88 → 1.0.0-beta.89

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 (249) hide show
  1. package/CHANGELOG.md +33 -1370
  2. package/README.md +2 -2
  3. package/dist/adapters/commands/session-view.d.ts.map +1 -1
  4. package/dist/adapters/commands/session-view.js +4 -4
  5. package/dist/adapters/commands/session-view.js.map +1 -1
  6. package/dist/adapters/discord/bot.d.ts +4 -1
  7. package/dist/adapters/discord/bot.d.ts.map +1 -1
  8. package/dist/adapters/discord/bot.js +6 -3
  9. package/dist/adapters/discord/bot.js.map +1 -1
  10. package/dist/adapters/discord/context.d.ts.map +1 -1
  11. package/dist/adapters/discord/context.js +3 -1
  12. package/dist/adapters/discord/context.js.map +1 -1
  13. package/dist/adapters/discord/types.d.ts +1 -0
  14. package/dist/adapters/discord/types.d.ts.map +1 -1
  15. package/dist/adapters/discord/types.js.map +1 -1
  16. package/dist/adapters/github/activity.d.ts.map +1 -1
  17. package/dist/adapters/github/activity.js +7 -13
  18. package/dist/adapters/github/activity.js.map +1 -1
  19. package/dist/adapters/github/bot.d.ts +4 -1
  20. package/dist/adapters/github/bot.d.ts.map +1 -1
  21. package/dist/adapters/github/bot.js +3 -3
  22. package/dist/adapters/github/bot.js.map +1 -1
  23. package/dist/adapters/github/context.d.ts.map +1 -1
  24. package/dist/adapters/github/context.js +3 -1
  25. package/dist/adapters/github/context.js.map +1 -1
  26. package/dist/adapters/github/types.d.ts +0 -3
  27. package/dist/adapters/github/types.d.ts.map +1 -1
  28. package/dist/adapters/github/types.js.map +1 -1
  29. package/dist/adapters/intake.d.ts.map +1 -1
  30. package/dist/adapters/intake.js +12 -2
  31. package/dist/adapters/intake.js.map +1 -1
  32. package/dist/adapters/shared.d.ts +2 -1
  33. package/dist/adapters/shared.d.ts.map +1 -1
  34. package/dist/adapters/shared.js +7 -2
  35. package/dist/adapters/shared.js.map +1 -1
  36. package/dist/adapters/slack/assistant.d.ts +2 -4
  37. package/dist/adapters/slack/assistant.d.ts.map +1 -1
  38. package/dist/adapters/slack/assistant.js +10 -16
  39. package/dist/adapters/slack/assistant.js.map +1 -1
  40. package/dist/adapters/slack/bot.d.ts +5 -1
  41. package/dist/adapters/slack/bot.d.ts.map +1 -1
  42. package/dist/adapters/slack/bot.js +15 -11
  43. package/dist/adapters/slack/bot.js.map +1 -1
  44. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  45. package/dist/adapters/slack/response-lifecycle.js +1 -1
  46. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  47. package/dist/adapters/slack/task-status.d.ts.map +1 -1
  48. package/dist/adapters/slack/task-status.js +1 -2
  49. package/dist/adapters/slack/task-status.js.map +1 -1
  50. package/dist/adapters/telegram/bot.d.ts +4 -1
  51. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  52. package/dist/adapters/telegram/bot.js +3 -3
  53. package/dist/adapters/telegram/bot.js.map +1 -1
  54. package/dist/adapters/telegram/context.d.ts.map +1 -1
  55. package/dist/adapters/telegram/context.js +3 -1
  56. package/dist/adapters/telegram/context.js.map +1 -1
  57. package/dist/adapters/types.d.ts +3 -1
  58. package/dist/adapters/types.d.ts.map +1 -1
  59. package/dist/adapters/types.js.map +1 -1
  60. package/dist/adapters/web/admin/client-assets.js +1 -1
  61. package/dist/adapters/web/admin/client-assets.js.map +1 -1
  62. package/dist/adapters/web/admin/portal.d.ts +0 -1
  63. package/dist/adapters/web/admin/portal.d.ts.map +1 -1
  64. package/dist/adapters/web/admin/portal.js +26 -42
  65. package/dist/adapters/web/admin/portal.js.map +1 -1
  66. package/dist/adapters/web/admin/types.d.ts +0 -2
  67. package/dist/adapters/web/admin/types.d.ts.map +1 -1
  68. package/dist/adapters/web/admin/types.js.map +1 -1
  69. package/dist/adapters/web/login/portal.d.ts.map +1 -1
  70. package/dist/adapters/web/login/portal.js +0 -8
  71. package/dist/adapters/web/login/portal.js.map +1 -1
  72. package/dist/adapters/web/server.d.ts.map +1 -1
  73. package/dist/adapters/web/server.js +0 -1
  74. package/dist/adapters/web/server.js.map +1 -1
  75. package/dist/adapters/web/session-view/portal.d.ts +1 -2
  76. package/dist/adapters/web/session-view/portal.d.ts.map +1 -1
  77. package/dist/adapters/web/session-view/portal.js +38 -328
  78. package/dist/adapters/web/session-view/portal.js.map +1 -1
  79. package/dist/adapters/web/session-view/types.d.ts +4 -6
  80. package/dist/adapters/web/session-view/types.d.ts.map +1 -1
  81. package/dist/adapters/web/session-view/types.js.map +1 -1
  82. package/dist/env-manifest.d.ts +0 -4
  83. package/dist/env-manifest.d.ts.map +1 -1
  84. package/dist/env-manifest.js +5 -8
  85. package/dist/env-manifest.js.map +1 -1
  86. package/dist/events/index.d.ts +2 -9
  87. package/dist/events/index.d.ts.map +1 -1
  88. package/dist/events/index.js +0 -1
  89. package/dist/events/index.js.map +1 -1
  90. package/dist/events/scheduler.d.ts +0 -1
  91. package/dist/events/scheduler.d.ts.map +1 -1
  92. package/dist/events/scheduler.js +2 -7
  93. package/dist/events/scheduler.js.map +1 -1
  94. package/dist/harness/execution-env.d.ts +1 -1
  95. package/dist/harness/execution-env.d.ts.map +1 -1
  96. package/dist/harness/execution-env.js +32 -32
  97. package/dist/harness/execution-env.js.map +1 -1
  98. package/dist/harness/index.d.ts +2 -3
  99. package/dist/harness/index.d.ts.map +1 -1
  100. package/dist/harness/index.js +0 -1
  101. package/dist/harness/index.js.map +1 -1
  102. package/dist/harness/mcp-result.d.ts +4 -3
  103. package/dist/harness/mcp-result.d.ts.map +1 -1
  104. package/dist/harness/mcp-result.js +27 -13
  105. package/dist/harness/mcp-result.js.map +1 -1
  106. package/dist/harness/mcp.d.ts.map +1 -1
  107. package/dist/harness/mcp.js +2 -4
  108. package/dist/harness/mcp.js.map +1 -1
  109. package/dist/harness/presenter.d.ts.map +1 -1
  110. package/dist/harness/presenter.js +20 -25
  111. package/dist/harness/presenter.js.map +1 -1
  112. package/dist/harness/prompt.d.ts +0 -1
  113. package/dist/harness/prompt.d.ts.map +1 -1
  114. package/dist/harness/prompt.js +3 -32
  115. package/dist/harness/prompt.js.map +1 -1
  116. package/dist/harness/run-events.d.ts.map +1 -1
  117. package/dist/harness/run-events.js +4 -12
  118. package/dist/harness/run-events.js.map +1 -1
  119. package/dist/harness/runner.d.ts.map +1 -1
  120. package/dist/harness/runner.js +35 -38
  121. package/dist/harness/runner.js.map +1 -1
  122. package/dist/harness/session.d.ts +36 -40
  123. package/dist/harness/session.d.ts.map +1 -1
  124. package/dist/harness/session.js +371 -473
  125. package/dist/harness/session.js.map +1 -1
  126. package/dist/harness/subagent.d.ts +5 -5
  127. package/dist/harness/subagent.d.ts.map +1 -1
  128. package/dist/harness/subagent.js +40 -45
  129. package/dist/harness/subagent.js.map +1 -1
  130. package/dist/harness/tools/codemode.d.ts.map +1 -1
  131. package/dist/harness/tools/codemode.js +32 -17
  132. package/dist/harness/tools/codemode.js.map +1 -1
  133. package/dist/harness/tools/history.d.ts +20 -0
  134. package/dist/harness/tools/history.d.ts.map +1 -0
  135. package/dist/harness/tools/history.js +293 -0
  136. package/dist/harness/tools/history.js.map +1 -0
  137. package/dist/harness/tools/pi-tools.d.ts +1 -1
  138. package/dist/harness/tools/pi-tools.d.ts.map +1 -1
  139. package/dist/harness/tools/pi-tools.js +47 -21
  140. package/dist/harness/tools/pi-tools.js.map +1 -1
  141. package/dist/harness/tools/secret-redaction.d.ts.map +1 -1
  142. package/dist/harness/tools/secret-redaction.js +46 -2
  143. package/dist/harness/tools/secret-redaction.js.map +1 -1
  144. package/dist/harness/tools/tool-search.d.ts +0 -2
  145. package/dist/harness/tools/tool-search.d.ts.map +1 -1
  146. package/dist/harness/tools/tool-search.js +3 -12
  147. package/dist/harness/tools/tool-search.js.map +1 -1
  148. package/dist/harness/types.d.ts +58 -16
  149. package/dist/harness/types.d.ts.map +1 -1
  150. package/dist/harness/types.js.map +1 -1
  151. package/dist/index.d.ts +3 -7
  152. package/dist/index.d.ts.map +1 -1
  153. package/dist/index.js +0 -3
  154. package/dist/index.js.map +1 -1
  155. package/dist/log.d.ts +0 -3
  156. package/dist/log.d.ts.map +1 -1
  157. package/dist/log.js +0 -15
  158. package/dist/log.js.map +1 -1
  159. package/dist/main.js +2 -2
  160. package/dist/main.js.map +1 -1
  161. package/dist/memory-capture/index.js +0 -1
  162. package/dist/memory-capture/index.js.map +1 -1
  163. package/dist/migrations/index.d.ts.map +1 -1
  164. package/dist/migrations/index.js +2 -0
  165. package/dist/migrations/index.js.map +1 -1
  166. package/dist/migrations/session-files.d.ts +3 -2
  167. package/dist/migrations/session-files.d.ts.map +1 -1
  168. package/dist/migrations/session-files.js.map +1 -1
  169. package/dist/migrations/session-v4.d.ts +77 -0
  170. package/dist/migrations/session-v4.d.ts.map +1 -0
  171. package/dist/migrations/session-v4.js +177 -0
  172. package/dist/migrations/session-v4.js.map +1 -0
  173. package/dist/migrations/sessions-sqlite.d.ts +3 -0
  174. package/dist/migrations/sessions-sqlite.d.ts.map +1 -0
  175. package/dist/migrations/sessions-sqlite.js +215 -0
  176. package/dist/migrations/sessions-sqlite.js.map +1 -0
  177. package/dist/migrations/sessions-v3.d.ts +2 -2
  178. package/dist/migrations/sessions-v3.d.ts.map +1 -1
  179. package/dist/migrations/sessions-v3.js +8 -19
  180. package/dist/migrations/sessions-v3.js.map +1 -1
  181. package/dist/migrations/types.d.ts +0 -5
  182. package/dist/migrations/types.d.ts.map +1 -1
  183. package/dist/migrations/types.js.map +1 -1
  184. package/dist/observability/sentry.d.ts +2 -9
  185. package/dist/observability/sentry.d.ts.map +1 -1
  186. package/dist/observability/sentry.js +12 -64
  187. package/dist/observability/sentry.js.map +1 -1
  188. package/dist/observability/types.d.ts +0 -16
  189. package/dist/observability/types.d.ts.map +1 -1
  190. package/dist/observability/types.js.map +1 -1
  191. package/dist/office/index.d.ts +1 -4
  192. package/dist/office/index.d.ts.map +1 -1
  193. package/dist/office/index.js +2 -14
  194. package/dist/office/index.js.map +1 -1
  195. package/dist/office/projection.d.ts.map +1 -1
  196. package/dist/office/projection.js +0 -1
  197. package/dist/office/projection.js.map +1 -1
  198. package/dist/office/types.d.ts +1 -2
  199. package/dist/office/types.d.ts.map +1 -1
  200. package/dist/office/types.js.map +1 -1
  201. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  202. package/dist/runtime/conversation-runtime.js +2 -16
  203. package/dist/runtime/conversation-runtime.js.map +1 -1
  204. package/dist/runtime/session-lifecycle.d.ts +1 -2
  205. package/dist/runtime/session-lifecycle.d.ts.map +1 -1
  206. package/dist/runtime/session-lifecycle.js +7 -16
  207. package/dist/runtime/session-lifecycle.js.map +1 -1
  208. package/dist/runtime/types.d.ts +0 -1
  209. package/dist/runtime/types.d.ts.map +1 -1
  210. package/dist/runtime/types.js.map +1 -1
  211. package/dist/sandbox/provisioner.d.ts.map +1 -1
  212. package/dist/sandbox/provisioner.js +3 -4
  213. package/dist/sandbox/provisioner.js.map +1 -1
  214. package/dist/sessions/chat-history-sync.d.ts +8 -6
  215. package/dist/sessions/chat-history-sync.d.ts.map +1 -1
  216. package/dist/sessions/chat-history-sync.js +70 -143
  217. package/dist/sessions/chat-history-sync.js.map +1 -1
  218. package/dist/sessions/compaction-summary.d.ts +4 -0
  219. package/dist/sessions/compaction-summary.d.ts.map +1 -0
  220. package/dist/sessions/compaction-summary.js +16 -0
  221. package/dist/sessions/compaction-summary.js.map +1 -0
  222. package/dist/sessions/session-key.d.ts +1 -0
  223. package/dist/sessions/session-key.d.ts.map +1 -1
  224. package/dist/sessions/session-key.js +3 -0
  225. package/dist/sessions/session-key.js.map +1 -1
  226. package/dist/sessions/session-store.d.ts +47 -29
  227. package/dist/sessions/session-store.d.ts.map +1 -1
  228. package/dist/sessions/session-store.js +578 -484
  229. package/dist/sessions/session-store.js.map +1 -1
  230. package/dist/sessions/types.d.ts +60 -46
  231. package/dist/sessions/types.d.ts.map +1 -1
  232. package/dist/sessions/types.js +1 -1
  233. package/dist/sessions/types.js.map +1 -1
  234. package/dist/settings/apply.js +2 -2
  235. package/dist/settings/apply.js.map +1 -1
  236. package/dist/types.d.ts +10 -3
  237. package/dist/types.d.ts.map +1 -1
  238. package/dist/types.js.map +1 -1
  239. package/dist/vault/index.d.ts.map +1 -1
  240. package/dist/vault/index.js +0 -3
  241. package/dist/vault/index.js.map +1 -1
  242. package/dist/vault/types.d.ts +0 -3
  243. package/dist/vault/types.d.ts.map +1 -1
  244. package/dist/vault/types.js.map +1 -1
  245. package/package.json +8 -6
  246. package/dist/sessions/store.d.ts +0 -17
  247. package/dist/sessions/store.d.ts.map +0 -1
  248. package/dist/sessions/store.js +0 -211
  249. package/dist/sessions/store.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -9,6 +9,38 @@ any release.
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [1.0.0-beta.89]
13
+
14
+ ### Breaking
15
+
16
+ - **Pi is upgraded to 1.0, and conversations now run on `@earendil-works/pi-durable`.** Pi 1.0 removed the harness, sessions, compaction, and coding tools from `pi-agent-core`; pi-durable is their first-party successor (see [ADR 0017](docs/adr/0017-pi-durable-harness.md)). Each office now keeps all its sessions in one SQLite storage, `sessions.db` in its State dir (see [ADR 0018](docs/adr/0018-one-durable-storage-per-office.md)); this needs Node 24.15 or later, whose built-in `node:sqlite` prints an experimental warning on load. Run `mikan migrate` before starting this version: it imports each office's v4 session files into that storage, the current main session as the top-level session and earlier main sessions and threads beside it, and moves the office's `sessions/` directory to `sessions-v4/`. An imported session keeps what the model could still see (the newest compaction summary and everything after it), its name, ID, and mikan's bookkeeping; history an earlier compaction had already hidden stays only in the archived files. Every office must be in `office-registry.json`. A tool call that was still running at upgrade is closed with an error result instead of being retried, and a run left unfinished is not resumed.
17
+ - `/new` resets the session in place: the model starts from an empty context, and the earlier history stays readable to the `history` tool and the session view instead of moving to a new session file.
18
+ - Library API: `createManagedSessionFile`, `createManagedSessionFileAtPath`, `createNewSessionFile`, `extractSessionSuffix`, `extractSessionUuid`, `getThreadSessionFile`, `openManagedSession`, `resolveManagedSessionFile`, `resolveSessionFile`, `tryResolveCurrentSession`, `tryResolveThreadSession`, `isPlatformHistorySession`, `CURRENT_SESSION_VERSION`, `MikanSessionHeader`, and `ChatSyncReport` are removed with session files; `SessionHeader` holds only `id`, `createdAt`, and `parentSessionId`; `registerThreadSession` and `hasMaterializedChatSession` are asynchronous, and `ResolvedSessionScope` no longer has `contextFile`.
19
+ - Library API: `SessionEntry` is mikan's own union of `message`, `custom`, and `compaction` entries, with IDs qualified by the session ID; `BranchSummaryEntry`, `CompactionEntry`, and `CustomEntry` are no longer exported. `SessionStore.createHarness` is replaced by `bindHarness`; `appendCustomMessageEntry`, the tree-era `getBranch`, `getLeafId`, `getEntry`, and `isPersisted`, and `SessionEntry.parentId` are removed; `SessionStore.getContextEntries()` returns the entries still in the model's context; and `MikanAgentSession.compactWhenNearLimit`/`cancelIdleCompaction`/`foldExternalUsage` are gone. `HarnessEvent` no longer mirrors pi-agent-core's `AgentEvent`: it drops `agent_start`/`agent_end`/`turn_start`/`turn_end`, replaces `message_update` with `text_delta`, and tool events carry `details` and a `{ content, details }` result. `MikanAgentSession.messages` and `reloadFromSession` are removed: the session keeps no transcript copy, so read the context through `SessionStore`, and a run's own messages through `lastRunMessages`. Harness tools use pi-durable's `execute(args, api, context)`; plain `AgentTool`s are still adapted.
20
+
21
+ ### Added
22
+
23
+ - Slack and Discord mark a message with ⏳ when it waits behind a task that is still running, so a queued message no longer looks ignored.
24
+ - The agent gets a `history` tool, in every conversation, that lists the conversation's sessions (earlier ones replaced by `/new` and its threads), searches or reads them including tool calls and their output that `log.jsonl` does not keep, and searches the chat log; a query matches entries containing all of its words, and a Chinese or Japanese word also matches when most of its character pairs appear, so `暫時代號` finds `暫時註記:代號`. The system prompt tells the agent to answer from its own context when it can, and to look up a result its context lacks, such as a command's output from another session, instead of guessing or rerunning the command. It never reaches another conversation.
25
+ - `SENTRY_TRACES_SAMPLE_RATE` (0 to 1, default 1) sets how many traces go to Sentry when OTLP traces are not configured; an invalid value stops startup.
26
+
27
+ ### Changed
28
+
29
+ - A new thread starts from what caused it. A thread under a channel answer, or under the message that triggered it, forks that run, so it carries the run's context up to its end, including tool calls and their output: asked what a command printed, the agent reads it instead of guessing or running it again. Any other thread starts from its root and its own replies, instead of ten earlier top-level messages copied from the chat log. Each run records the message that started it, and the chat log records each run answer with that message and its session.
30
+ - Chat history never appears as the agent's own turn: synced messages from other people, other bots, and mikan's notices enter a session as attributed chat lines, and an answer a run posted is left to its own session, so a Discord or Telegram reply answered in another session no longer leaks into the channel session.
31
+ - Compaction is Pi's: it runs in the background as the context grows and blocks the next request only near the limit, so mikan no longer starts its own compaction after a reply. Compaction summary requests now count toward a run's LLM-call and token budgets, and a request over the LLM-call budget is never sent.
32
+ - A run left unfinished by a crash or restart is aborted before the next message in that conversation instead of answering first.
33
+ - A thread session is named after the first line of its root message, cut to 80 characters, instead of the whole message; existing thread sessions take the short name on their next run.
34
+
35
+ ### Fixed
36
+
37
+ - A one-shot event whose time passed while mikan was restarting or stopped now fires when mikan starts, instead of being deleted without running.
38
+ - Tool results that report `isError` reach the model as errors, so a failing codemode script is no longer recorded as a success.
39
+ - A run stopped before the model wrote anything no longer stores a made-up aborted answer, and its reply is never taken from the previous run.
40
+ - Compaction entries in the session view and subagent parent context show the summary itself, without Pi's wrapper text, and a subagent's parent context keeps the messages Pi retained after compaction.
41
+ - A run Pi settles with a model error is recorded as failed instead of completed.
42
+ - The usage summary's context size follows Pi's rule, the newest successful answer after the latest compaction, so it no longer reports the pre-compaction size, and it is omitted until a new answer measures it.
43
+
12
44
  ## [1.0.0-beta.88]
13
45
 
14
46
  ### Added
@@ -612,1373 +644,4 @@ any release.
612
644
 
613
645
  ### Changed
614
646
 
615
- - Dispatch Slack extension commands when users type the command name without a leading slash, so documented Agent Project Manager commands work in ordinary messages.
616
- - Update `@earendil-works/pi-agent-core` and `@earendil-works/pi-ai` to 0.83.0.
617
- - Clarify Agent Project Manager onboarding, initial behavior, and the distinction between commands and natural-language tasks across all translated guides.
618
-
619
- ### Fixed
620
-
621
- - Stabilize Slack end-to-end coverage for extension command dispatch, Agent Project Manager, and long-message threads.
622
-
623
- ### Tests
624
-
625
- - Add regression coverage for slashless extension command routing and conversation runtime dispatch.
626
-
627
- ## [1.0.0-beta.41]
628
-
629
- ### Added
630
-
631
- - Add Slack App and Agent manifests plus support for `assistant_view` and `agent_view` lifecycle events, including thread-aware assistant context and optional socket-event tracing.
632
- - Add Discord Components V2 responses with native sections, separators, containers, and markdown-table rendering suited to Discord's width model.
633
- - Add rich Telegram responses through platform-native formatting.
634
- - Show the current activity of running subagents in progress dashboards.
635
- - Add an end-user Agent Project Manager guide in English, Japanese, Simplified Chinese, and Traditional Chinese.
636
-
637
- ### Changed
638
-
639
- - Pace progressive redraws by elapsed time instead of response volume, and edit overflow messages rather than repeatedly posting replacements.
640
- - Split Slack streamed text at the 12,000-character API limit, decline unsupported native streams before starting them, and hand off a truncated final tail exactly once.
641
- - Report package-installed extensions in `/extensions` and return a clear compatibility error when an extension requires a newer mikan version.
642
-
643
- ### Fixed
644
-
645
- - Preserve final-source preparation during progressive replacement and cut truncated Slack messages at line boundaries.
646
- - Distinguish Slack length-limit failures from other send errors instead of treating every failure as oversized content.
647
- - Prevent desktop automation helpers from sending into a Slack thread's main composer.
648
-
649
- ### Tests
650
-
651
- - Add coverage for Slack assistant lifecycle and stream limits, Discord Components V2 and table formatting, progressive overflow editing, rich Telegram context, subagent activity reporting, and extension compatibility reporting.
652
-
653
- ## [1.0.0-beta.40]
654
-
655
- ### Added
656
-
657
- - Add deterministic extension callback schedules that run host-side without an agent run, model call, or token spend; schedules persist across restarts and use host-authoritative storage.
658
- - Add extension APIs for reading conversation or thread history, listing active platform users, opening direct-message conversations, and posting threaded notifications.
659
- - Add declarative extension secrets with activation-time validation, CLI visibility, admin portal provisioning, and purge support.
660
- - Add a production-ready agent project manager example built as an Event → Workflow → Task pipeline with SQLite persistence, scheduled heartbeats, threaded polling, delivery tracking, and Slack end-to-end coverage.
661
-
662
- ### Changed
663
-
664
- - Make proactive extension messaging default to the conversation's platform, removing ambiguity in multi-platform deployments.
665
- - Make `api.notify` return the posted message ID and allow `api.fetchHistory` to read replies beneath that message, enabling poll-only follow-up workflows without webhooks.
666
- - Make `mikan ext remove --purge` sweep an extension's schedules, secrets, data directories, and optional workspace event files while reporting leftovers for non-purge removals.
667
- - Enable stricter TypeScript and lint enforcement for indexed access, type-only imports, Node.js import protocols, dependency cycles, explicit `any`, nesting depth, function size, and parameter count.
668
- - Consolidate duplicated authorities and thin wrappers into their owning modules, and refresh repository documentation for the office architecture.
669
-
670
- ### Tests
671
-
672
- - Add coverage for callback schedule persistence and dispatch, extension secrets, platform reads, threaded notifications, purge behavior, and the agent project manager pipeline.
673
-
674
- ## [1.0.0-beta.39]
675
-
676
- ### Fixed
677
-
678
- - Slack mentions now actually notify people: the adapter resolves response-source `<@userName>` (and display-name) mentions to Slack's native `<@U…>` id form on every outgoing path, including streamed responses. Previously mentions rendered as literal text and never pinged anyone; scheduled-event texts that hard-require raw user ids as a workaround can go back to plain `<@userName>`. The system prompt now also names the Users table as the one source of mention handles and forbids borrowing handles from other platforms (a GitHub username is not a Slack mention).
679
- - Discord slash commands register again: the `/sandbox` option description had grown past Discord's 100-character limit, which made Discord reject the whole registration batch at startup. A manifest test now enforces the budget for every command, argument, and Telegram menu description.
680
- - Fix `generate_image` losing its generated file at the upload step (`sh: … cannot open /workspace/<file>: No such file`): the tool wrote the image host-side into the workspace base and then handed a bare filename to the attach upload path, which reads through the sandbox — where the base is no longer mounted since the office layout migration. The image is now written into the conversation's own office directory (guest-visible) and uploaded directly by host path, with no sandbox round-trip, under every door policy. Image-generation provider errors now also name the model id that was sent.
681
- - The Slack e2e workflow works again after the door-policy and office-key changes: the runner's settings opt into the trusted door policy explicitly (host mode is refused under the isolated default by design), local-delivery verification reads the office-key log path, and one recall prompt was disambiguated.
682
-
683
- ### Changed
684
-
685
- - The Conversation office is now a first-class module: `src/office/` owns identity, the Workspace/Office layout values, the registry journal, and the boot migration. Option bags across the runtime carry one `office` value instead of parallel address/directory fields, the attachment convention has a single owner on the shared adapter surface, and `ChannelStore` is gone. No behavior or on-disk layout change.
686
- - Embedders can now construct the runtime from the public surface: `createWorkspace`, `createOfficeAddress`, and `officeKey` (plus the `Office`/`Workspace` types) are exported, and `createConversationRuntime` takes a `workspace` value in place of the `workingDir` string.
687
- - Repository layout for contributors: run-it assets live under `deploy/` (pm2, docker, examples), the test suite lives at `src/test/`, and tool configs live in `.config/` (root keeps `package.json` and `tsconfig.json`). The build config moved to `src/tsconfig.build.json`.
688
-
689
- ## [1.0.0-beta.38]
690
-
691
- ### Fixed
692
-
693
- - Align the conversation-skill symlink guard with what the host actually reads: symlinked entries are skipped per skill — with the skipped paths named in the host log and surfaced to the agent in its prompt — instead of one symlink anywhere disqualifying the whole tree, and symlinks inside vendored `node_modules` or dot directories (which the loader never reads) no longer disqualify anything. Offices whose skills vanished because a skill vendored npm dependencies (`.bin` symlinks) get them back.
694
-
695
- ## [1.0.0-beta.37]
696
-
697
- ### Fixed
698
-
699
- - Stop discarding preserved container contents on mount drift: a drifted managed container is now committed and re-created from its snapshot with the desired mounts — writable layer intact — instead of being rebuilt from the base image. This closes the gap that recreated layout-migrated containers from scratch on their first message after upgrade (stored mount signatures went stale as shared sources changed overnight). `MIKAN_SKIP_CONTAINER_PRESERVATION=1` restores plain recreation.
700
- - Stop treating ordinary directory activity as mount drift: directory mount sources are now fingerprinted by identity (a replacement directory is drift) instead of size and mtime, so event-file churn and children being created no longer force container rebuilds. File sources keep content fingerprints — atomic replacement leaves a stale inode in the container and must recreate it.
701
- - Door-policy changes now preserve container contents through the rebuild; the portal and `/pi-sandbox door` copy no longer warn about a reset.
702
-
703
- ## [1.0.0-beta.36]
704
-
705
- ### Added
706
-
707
- - Make the office door policy configurable: the Admin portal gains a per-office selector (global default / isolated / trusted shared-support / trusted full) plus a global-default selector, and the existing `/pi-sandbox` command gains `door <default|isolated|shared|full>` — both write the explicit `sandbox.workspace` settings and retire the legacy `image.workspaceMount` key on save.
708
- - Door-policy changes follow the same clear-or-refuse contract as model changes (the system prompt bakes the workspace projection), and the sandbox container is rebuilt with the new mounts on the office's next message.
709
-
710
- ## [1.0.0-beta.35]
711
-
712
- Completes the office storage migration introduced in 1.0.0-beta.34: sandbox containers now survive it with everything installed inside them intact. Upgrading directly from 1.0.0-beta.33 or earlier to this release keeps container contents; deployments that already booted 1.0.0-beta.34 had their containers recreated by that release.
713
-
714
- ### Added
715
-
716
- - Preserve managed sandbox containers through the office layout migration: each container still mounting legacy paths is committed to a snapshot and re-created with translated workspace, state, and vault mounts, keeping its writable layer — software installed inside survives the upgrade.
717
- - Migrate containers off the boot path: on demand before a conversation's next message and via a background sweep after the platforms start, so boot stays fast and nothing blocks on the one-time cost.
718
- - Resume interrupted container migrations safely: the pre-removal mounts ride on the snapshot image, a crash at any point resumes without data loss, and snapshots are reclaimed once a container naturally returns to the base image.
719
- - Add the `MIKAN_SKIP_CONTAINER_PRESERVATION` escape hatch to fall back to plain container removal.
720
-
721
- ### Tests
722
-
723
- - Cover translate, no-op, resume, orphan-resume, snapshot reclamation, and disarmed paths on a stateful docker mock, plus bind-translator unit tests; rehearsed against real docker including the crash-resume path.
724
-
725
- ## [1.0.0-beta.34]
726
-
727
- **One-way storage migration.** On first boot this release renames every conversation's workspace directory, credential vault, and host state tree to platform-scoped office keys, journaled with crash recovery. Back up the state dir and workspace before upgrading; earlier versions cannot read the migrated layout, so there is no downgrade. Managed sandbox containers for migrated conversations are recreated, which resets software installed inside them once (a preservation path is planned for a follow-up release).
728
-
729
- ### Added
730
-
731
- - Isolate every conversation as an office keyed by platform and conversation id, ending all cross-platform collisions on shared raw ids: runtime state, workspace files, chat logs, attachments, credential vaults, settings, extension data, and scheduled-event scoping are now platform-scoped.
732
- - Migrate legacy directories automatically at boot: ownership is verified against each enabled platform's id format, ambiguous or unrecognized directories fail closed as needs-owner, and repositories or build output sitting in a trusted workspace root are skipped in place.
733
- - Add the `mikan office` CLI: `list` shows the office inventory and pending migrations; `claim` assigns an owner platform to a legacy directory the format check cannot decide.
734
- - Record every office in a host-only registry at creation, giving Admin and CLI surfaces a durable raw-id ↔ office mapping.
735
-
736
- ### Changed
737
-
738
- - Scope the Admin portal by office: conversation lists show platforms, cross-platform targets name theirs explicitly, and all paths, settings, projections, and vault links resolve from the full office address.
739
- - Show office-key paths (`/workspace/v1-slack-…`) in agent prompts and workspace listings; transcripts from before the upgrade may reference old paths until the agent re-lists.
740
- - Breaking for embedders: `createRunner`, `MessagingEventHandler`, settings, package, and extension APIs now carry an `OfficeAddress`.
741
-
742
- ### Fixed
743
-
744
- - Preserve Session Dream memory writes after the migration; the write grant previously derived the memory path from the raw conversation id and would have refused every dream.
745
- - Stop `mikan ext` from resolving conversation state against the wrong state dir when `--state-dir` differs from the environment default.
746
- - Keep thread sessions anchored to their main-session lineage via `parentSessionId`.
747
-
748
- ### Tests
749
-
750
- - Add migration-engine coverage for claiming, crash recovery, ambiguity, reappeared directories, vault and state-tree moves, and format verification; rehearsed end-to-end against a production-shaped 327-entry workspace (285 offices migrated in ~2.4s, zero manual claims, checksums identical).
751
- - Keep state-writing tests out of the developer's real `~/.mikan` with a suite-wide temporary state dir.
752
-
753
- ## [1.0.0-beta.33]
754
-
755
- ### Changed
756
-
757
- - Give every built-in subagent profile a 100,000-token allowance and honor larger token budgets requested by the parent model.
758
-
759
- ### Fixed
760
-
761
- - Disable Sentry's faulty OpenAI integration to prevent instrumentation failures in model-provider requests.
762
-
763
- ### Tests
764
-
765
- - Add regression coverage for subagent profile token defaults, model-requested increases, tool schema behavior, and disabled OpenAI instrumentation.
766
-
767
- ## [1.0.0-beta.32]
768
-
769
- ### Changed
770
-
771
- - Raise the autonomous event and trigger run cost stop-loss from $2 to $10 while retaining the 10-minute and 50-call limits.
772
- - Allow session memory dreams to make up to 10 LLM calls and remove their fixed cost cap while retaining the two-minute limit.
773
-
774
- ### Fixed
775
-
776
- - Prevent large conversations from becoming permanently unable to reset or rotate when preserving memory necessarily exceeds a fixed cost threshold.
777
-
778
- ## [1.0.0-beta.31]
779
-
780
- ### Changed
781
-
782
- - Allow attachments to use each sandbox executor's standard file reader while retaining workspace path containment.
783
-
784
- ### Fixed
785
-
786
- - Restore HTML, image, and document uploads from managed sandboxes that cannot provide atomic symlink-free traversal.
787
-
788
- ### Tests
789
-
790
- - Add end-to-end regression coverage for staging and uploading workspace files through the regular executor transport.
791
-
792
- ## [1.0.0-beta.30]
793
-
794
- ### Added
795
-
796
- - Add role-based subagent profiles for software engineering, DevOps, data science, account management, business development, creative production, advertising operations, and bounded general work.
797
- - Add a generated cross-module hardening report covering module boundaries, coupling, and verification evidence.
798
-
799
- ### Changed
800
-
801
- - Stabilize exported module interfaces and route executor-dependent file staging through the active execution transport.
802
- - Deepen progressive response rendering and keep Slack E2E turns bound to the runner lifecycle.
803
-
804
- ### Fixed
805
-
806
- - Prevent extension packages, attachment bridges, vault keys, sandbox paths, and event inputs from escaping their intended boundaries.
807
- - Close runner construction, cached-runner invalidation, Gondolin projection, and automatic Session Dream settlement races.
808
- - Validate model identifiers, event timezones, package refreshes, and shared-history watermarks consistently.
809
- - Keep reset history bounded by reset time and exclude queued future turns from session history.
810
- - Prevent Slack from posting bare working-indicator updates.
811
-
812
- ### Security
813
-
814
- - Harden Git package materialization, extension subpaths, filesystem bridges, and sandbox path validation against traversal and symlink escapes.
815
-
816
- ### Tests
817
-
818
- - Add regression coverage for declaration surfaces, session history boundaries, runtime races, event validation, package materialization, and Slack runner integration.
819
-
820
- ## [1.0.0-beta.29]
821
-
822
- ### Added
823
-
824
- - Add Git-sourced extension packages with global and conversation scopes, package mount resolution, CLI inspection, and admin portal management.
825
- - Add native Slack markdown-block responses and the `slack_blockkit` tool for interactive Block Kit messages.
826
- - Add interactive Block Kit APIs for extensions, with a poll extension example.
827
- - Add named subagent profiles, built-in workflow specialists, per-profile tool grants, and a bounded Slack progress dashboard.
828
- - Preserve durable memory with Session Dream before biweekly shared-channel session rotation, using the same conversation-scoped maintenance path as `/new`.
829
-
830
- ### Changed
831
-
832
- - Run Gondolin runtimes inside the mikan process instead of detached workers. Restarts now boot fresh VMs on demand, and shutdown closes every VM so projected files sync back first.
833
- - Remove Gondolin runtime inventories, worker heartbeats, and the `stateDir` argument from `configureGondolinRuntime`.
834
- - Render standard GFM response prose as native Slack markdown blocks while keeping progressive response updates behind a single lifecycle.
835
-
836
- ### Fixed
837
-
838
- - Keep the current session active and preserve saved memory when Session Dream cannot finish.
839
- - Bound subagent cancellation, invocation modes, profile labels, and Block Kit payloads; clamp long labels with an ellipsis instead of rejecting calls.
840
- - Show the selected subagent profile and its tool grant consistently in progress output.
841
- - Render the Slack subagent dashboard as a response source rather than escaped mrkdwn.
842
- - Isolate Git test fixtures from an ambient `GIT_DIR`.
843
-
844
- ### Tests
845
-
846
- - Add coverage for extension packages, extension Block Kit APIs, native Slack rendering, subagent profiles and progress, Session Dream rotation, and in-process Gondolin lifecycle behavior.
847
-
848
- ## [1.0.0-beta.28]
849
-
850
- ### Removed
851
-
852
- - Remove Gondolin remote-worker and fleet support. `sandbox.gondolin.remote`, `gondolin:remote`, and `--worker-token` are no longer supported; use the local `gondolin:default` sandbox instead.
853
-
854
- ### Fixed
855
-
856
- - Preserve Slack mrkdwn links whose labels contain spaces when rendering Block Kit responses.
857
- - Reuse the existing Slack progress message when streaming the final response, preventing duplicate or partially completed bot messages.
858
-
859
- ## [1.0.0-beta.27]
860
-
861
- ### Added
862
-
863
- - Preserve concrete long-term memory before `/new` creates a fresh DM session, while keeping transient context and pre-reset platform history out of the new model context.
864
-
865
- ### Changed
866
-
867
- - Serialize workspace-mutating tools and memory-maintenance runs so file updates, resets, and incoming messages have deterministic ordering.
868
- - Align extension context and message hooks with the active agent lifecycle, including per-run system prompt rewrites that preserve dynamically rebuilt memory, skills, and sandbox context.
869
-
870
- ### Fixed
871
-
872
- - Keep extension-rewritten messages consistent across tool execution, persistence, provider context, and lifecycle events.
873
- - Account for compaction model usage in run budgets and reject corrupted session trees instead of silently accepting broken history.
874
- - Wait for active runs before resetting sessions, and prevent old runs from writing after `/new`.
875
- - Keep long Slack continuations in their thread and preserve mrkdwn links when rendering Block Kit text.
876
-
877
- ### Tests
878
-
879
- - Add real Slack coverage for memory-preserving `/pi-new`, long threaded responses, and Block Kit markdown links.
880
- - Add regression coverage for harness message identity, dynamic prompts, compaction budgets, session integrity, runtime settlement, and mutation-tool ordering.
881
-
882
- ## [1.0.0-beta.26]
883
-
884
- ### Fixed
885
-
886
- - Make the subagent tool schema compatible with OpenAI by exposing an object at the function parameter root.
887
-
888
- ### Tests
889
-
890
- - Add regression coverage for OpenAI-compatible subagent function schemas.
891
-
892
- ## [1.0.0-beta.25]
893
-
894
- ### Changed
895
-
896
- - Temporarily remove the Agent Sandbox runtime, SDK, Kubernetes client, Helm deployment, runtime images, and related release workflow from the npm release.
897
- - Restore the Gondolin, Gondolin remote-worker, and Firecracker sandbox implementations while Agent Sandbox packaging is redesigned separately.
898
-
899
- ### Fixed
900
-
901
- - Restore global npm installation and CLI startup after the broken Agent Sandbox dependencies in `1.0.0-beta.23` and `1.0.0-beta.24`.
902
-
903
- ### Tests
904
-
905
- - Add a real `npm install -g --prefix` smoke test for the packed tarball, enforce a 2 MiB size ceiling, and gate CI and npm publishing on the result.
906
-
907
- ## [1.0.0-beta.24]
908
-
909
- ### Fixed
910
-
911
- - Bundle the vendored Agent Sandbox SDK in the npm package so global installs no longer fail on a missing repository-local tarball.
912
- - Reuse mikan's direct Kubernetes client dependency as an SDK peer instead of recursively bundling a duplicate dependency tree, keeping the published tarball under 1 MiB.
913
-
914
- ### Tests
915
-
916
- - Add a pack-install smoke test that imports the bundled SDK, runs the packed CLI, enforces a 2 MiB size ceiling, and gates both CI and npm publishing.
917
-
918
- ## [1.0.0-beta.23]
919
-
920
- ### Added
921
-
922
- - Add Kubernetes Agent Sandbox execution with mandatory `kata-qemu` isolation, a pinned TypeScript client, managed idle cleanup, and shared workspace support.
923
- - Add a Helm chart with GKE Standard, Linux k3s, Colima, and router-only profiles; GKE supports Filestore CSI on an explicitly configured VPC.
924
- - Publish mikan, the Agent Sandbox runtime, and the pinned router source build to GHCR through a release-aware image workflow.
925
- - Expose detailed subagent input, output, cache, reasoning, and cost usage while retaining the existing summary aliases.
926
-
927
- ### Changed
928
-
929
- - Replace Gondolin and Firecracker sandbox modes with `agent-sandbox:<warm-pool>`.
930
- - Make Helm the supported Kubernetes deployment interface; the default and Colima profiles use host execution, while GKE and k3s profiles require Kata and RWX storage.
931
- - Include delegated subagent usage in parent run statistics and budget accounting.
932
-
933
- ### Removed
934
-
935
- - Remove the standalone `mikan-worker`, remote worker fleet, dial-home gateway, Gondolin runtime, Firecracker executor, worker CI, and worker release binaries. Existing Gondolin deployments must move to the Agent Sandbox Helm deployment; no automatic deployment or state migration is provided.
936
-
937
- ### Security
938
-
939
- - Require Kata rather than silently falling back to runc, restrict the optional router to the configured mikan namespace with a NetworkPolicy, and keep generated PVCs by default on Helm uninstall.
940
- - Update transitive `js-yaml` to 4.3.0 to address the merge-key chain denial-of-service advisory.
941
-
942
- ### Tests
943
-
944
- - Add Agent Sandbox unit coverage, Helm profile assertions, pinned router image builds, and full GKE validation covering Kata, Filestore RWX, browser recording, aborts, recovery, Slack, and LLM tool execution.
945
- - Add coverage for detailed subagent usage, compatibility aliases, failure paths, extension results, and parent budget accounting.
946
-
947
- ## [1.0.0-beta.22]
948
-
949
- ### Added
950
-
951
- - Let subagents opt into a normalized reference snapshot of the active parent conversation with `parentContext`, while keeping fresh isolated context as the default.
952
-
953
- ### Changed
954
-
955
- - Raise default subagent limits from 8 to 100 turns, $0.50 to $10, and 2 to 10 minutes; return concrete budget or timeout reasons.
956
- - Apply the process-wide subagent concurrency ceiling to both tool- and extension-initiated runs, with cancellation while queued and usage attribution only to the active parent run.
957
- - Use collision-safe hashed keys for credential authorization and runtime resources. Exact legacy host and shared-container credentials remain readable, but users of ambiguous legacy managed-sandbox keys may need to run `/login` again.
958
- - Reject unsupported vault file mounts and mounts that overlap workspace or other credential targets.
959
- - Extract workspace projection and session lifecycle responsibilities into focused modules without intended runtime behavior changes.
960
-
961
- ### Fixed
962
-
963
- - Reject session keys belonging to another conversation and unsafe conversation or thread identifiers.
964
- - Prevent session pointers and thread files from escaping their owning directory or resolving through symlinks.
965
- - Process Slack messages posted by known human users through user tokens even when Slack includes the posting app's `bot_id`; bot-authored messages remain ignored.
966
- - Clearly report subagent budget exhaustion instead of returning a generic incomplete status.
967
-
968
- ### Tests
969
-
970
- - Add Slack E2E coverage for DMs, idle stop, thread isolation, busy queues, images, and multi-file uploads.
971
- - Add unit coverage for session identity and path safety, collision-safe sandbox identities, vault mount policy, session lifecycle, normalized subagent context, shared slots, cancellation, and budget reporting.
972
-
973
- ## [1.0.0-beta.21]
974
-
975
- ### Added
976
-
977
- - Fold each subagent's tokens and cost into the parent run's tally (`MikanAgentSession.recordExternalUsage`), so delegated spend counts against the parent run's budget instead of staying invisible to it.
978
- - Add a process-wide subagent fan-out ceiling shared across conversations.
979
- - Add `mikan --help` and a generated `mikan env` inventory from the daemon environment manifest.
980
- - Make the working-directory argument optional, defaulting to `<state-dir>/workspace`.
981
- - Add a public Gondolin runtime bootstrap seam for embedders.
982
-
983
- ### Changed
984
-
985
- - Subagent runs never reject: request validation failures (unknown tools, invalid budgets, empty tasks, nested runs) now resolve to `failed` results, so one bad request in a `tasks`/`dag` batch can no longer orphan in-flight sibling subagents.
986
- - Cap parallel `tasks[]` batches at 4 concurrent subagents (the same limit as DAG mode) and run DAG waves through a slot pool instead of chunk barriers.
987
- - Report a subagent final response with no text as `failed` instead of `completed` with empty output.
988
- - Enforce parent budgets immediately when subagent usage is folded into the parent run.
989
- - Apply one state-directory precedence rule across boot, extensions, Sentry, and runtime readers.
990
- - Refuse model and sandbox settings updates while a conversation is busy, and invalidate affected cached runners consistently.
991
- - Drive PM2 environment configuration from `~/.mikan/mikan.env` instead of inline secrets.
992
-
993
- ### Fixed
994
-
995
- - Harden Gondolin dial-home reconnects after transport failures and stale sessions.
996
- - Reject invalid one-shot event timestamps consistently across all event writers.
997
- - Apply global model settings to idle conversations and report busy conversations as stale.
998
-
999
- ### Security
1000
-
1001
- - Keep PM2 secrets in an owner-only file outside repository trees and make the PM2 template supervision-only.
1002
-
1003
- ### Tests
1004
-
1005
- - Add coverage for subagent accounting and concurrency, CLI and environment manifests, settings mutation, Gondolin reconnects and contracts, event formatting, and worker state layout.
1006
-
1007
- ## [1.0.0-beta.20]
1008
-
1009
- ### Fixed
1010
-
1011
- - Validate subagent `outputSchema` correctly when it arrives as plain JSON Schema (the only form tool calls can carry), instead of throwing `ValueCheckUnknownTypeError` because it lacks TypeBox's `Kind` metadata.
1012
-
1013
- ### Tests
1014
-
1015
- - Add coverage for plain JSON Schema hydration, nested objects, arrays, unions, and validation failures.
1016
-
1017
- ## [1.0.0-beta.19]
1018
-
1019
- ### Added
1020
-
1021
- - Add fresh in-memory subagents for the main agent and extensions, with explicit tools, budgets, structured output, parallel batches, and bounded DAG orchestration.
1022
- - Stream debounced subagent node progress through the shared Slack, Discord, and Telegram response lifecycle.
1023
-
1024
- ### Changed
1025
-
1026
- - Let final responses at the LLM-call cap complete without tripping the run budget when no continuation is required.
1027
-
1028
- ### Fixed
1029
-
1030
- - Install worker binaries from the newest GitHub release that contains a matching asset, including prereleases.
1031
- - Restore generic Google Workspace CLI credential mounts in sandbox vaults.
1032
-
1033
- ### Tests
1034
-
1035
- - Add coverage for subagent isolation, recursion guards, budgets, structured output, parallel execution, DAG validation and dependency flow, and platform-neutral progress rendering.
1036
-
1037
- ## [1.0.0-beta.18]
1038
-
1039
- ### Added
1040
-
1041
- - Add an idempotent Debian and Ubuntu worker-host initialization script.
1042
- - Add persistent `mikan-worker` installation as a delegated systemd service.
1043
- - Add NFS export detection with OS-specific setup guidance for `gondolin:remote` workspaces.
1044
- - Ship host-side vault credential files securely to remote workers without placing them in the shared workspace.
1045
- - Add bounded shared-workspace health probes and worker degradation reporting.
1046
-
1047
- ### Changed
1048
-
1049
- - Require each Gondolin remote gateway and static worker to declare its shared `workspaceRoot`.
1050
- - Exclude workers with unhealthy shared workspaces from new placements and restore them after a healthy heartbeat.
1051
-
1052
- ### Fixed
1053
-
1054
- - Fail remote execution with actionable diagnostics instead of hanging on dead shared-workspace mounts.
1055
- - Create runtime cgroups beneath the worker's delegated cgroup and report missing `Delegate=yes` configuration.
1056
- - Verify downloaded worker binaries against the matching release checksum filename.
1057
- - Validate `gondolin:remote` only after gateway and worker transports are configured.
1058
-
1059
- ### Security
1060
-
1061
- - Materialize remote credential files as owner-only, read-only runtime files outside shared workspaces.
1062
-
1063
- ### Tests
1064
-
1065
- - Add coverage for worker host services, cgroup delegation, workspace health, credential delivery, NFS advice, remote validation, and idle execution deadlines.
1066
-
1067
- ## [1.0.0-beta.17]
1068
-
1069
- ### Added
1070
-
1071
- - Add `gondolin:remote` for scheduling sandbox runtimes across a fleet of Linux/KVM workers.
1072
- - Add a standalone `mikan-worker` daemon with mutual TLS, fenced leases, crash recovery, capacity-aware placement, draining, and sticky conversation assignment.
1073
- - Add dial-home worker enrollment through one-time join tokens and a mikan-hosted gateway.
1074
- - Add private workspace projection, vault injection, resource limits, lifecycle reconciliation, and drift recovery to Gondolin runtimes.
1075
- - Add worker installation, enrollment, operations, and remote quickstart documentation with a one-command end-to-end smoke test.
1076
- - Publish `mikan-worker` binaries and checksums with GitHub releases.
1077
-
1078
- ### Changed
1079
-
1080
- - Rename the preview sandbox mode from `microvm:default` to `gondolin:default` and the image build command to `npm run gondolin:image:build`.
1081
-
1082
- ### Fixed
1083
-
1084
- - Project mounted files correctly into Gondolin guests.
1085
- - Refresh rotated credentials when Gondolin runtimes are recreated.
1086
-
1087
- ### Security
1088
-
1089
- - Authenticate remote workers with mutual TLS and fence stale workers through expiring leases.
1090
- - Keep enrollment tokens one-time and store worker credentials privately.
1091
-
1092
- ### Tests
1093
-
1094
- - Add coverage for Gondolin lifecycle, workspace isolation, vaults, resource controls, fleet scheduling, gateways, enrollment, workers, leases, and remote execution.
1095
-
1096
- ## [1.0.0-beta.16]
1097
-
1098
- ### Added
1099
-
1100
- - Add a preview `gondolin:default` sandbox backed by Gondolin and QEMU.
1101
- - Add a curated microVM guest image build with Node.js, Python, uv, Git, ripgrep, fd, jq, SSH, and build tools.
1102
- - Manage one process-local microVM per conversation with idle shutdown and recreation on demand.
1103
-
1104
- ### Changed
1105
-
1106
- - Broaden the coverage gate across all source modules.
1107
-
1108
- ### Fixed
1109
-
1110
- - Keep top-level Slack file uploads out of threads.
1111
-
1112
- ### Tests
1113
-
1114
- - Add coverage for microVM execution and lifecycle, events, logging, disabled vaults, channel storage, and core file and shell tools.
1115
-
1116
- ## [1.0.0-beta.15]
1117
-
1118
- ### Added
1119
-
1120
- - Add native image generation with automatic upload through the active model provider.
1121
- - Add extension chat commands via `api.registerCommand`: deterministic `/name` dispatch with no model call; built-ins and first registrations win.
1122
- - Add an extension disposal lifecycle (`api.onDispose` or an `activate` return value), run when a harness instance is discarded (`/pi-new`, idle eviction, session rotation).
1123
- - Add `api.triggerRun(text)` to fire an immediate autonomous agent run, `api.uploadFile(path, title)` for proactive file uploads, and an explicit `conversationId` option on `api.notify` for cross-conversation posting.
1124
- - Add `agent_error` and `budget_exceeded` extension hooks so monitoring extensions see failed turns and tripped run budgets.
1125
- - Pass a `RunOrigin` (platform, triggering message id, user identity, attachments) to extension hook events, making `api.react` and per-user extension policy usable.
1126
- - Let `before_agent_start` extensions rewrite the user prompt or block the turn before the model runs; blocked turns leave no trace in the transcript or session store.
1127
- - Let `tool_result` extensions rewrite tool output (content and error flag) before the model and the session store see it, enabling secret redaction and output truncation.
1128
-
1129
- ### Changed
1130
-
1131
- - Dispatch `before_agent_start` and `tool_result` hooks with chaining semantics (each handler sees earlier handlers' rewrites; any `block` wins) instead of first-result-wins.
1132
-
1133
- ### Fixed
1134
-
1135
- - Dispose cached runners when models switch or environment credentials refresh.
1136
-
1137
- ### Tests
1138
-
1139
- - Add coverage for image generation, extension lifecycle and hook rewrites, and runner disposal.
1140
-
1141
- ## [1.0.0-beta.14]
1142
-
1143
- ### Added
1144
-
1145
- - Add GitHub inline review-thread intake and a `github_review_reply` tool.
1146
- - Add `github_sync`, `github_read`, and `github_issue` tools for repository refresh and issue or pull request operations.
1147
- - Add host-side Cloud Build log retrieval using GCP ADC or Workload Identity Federation.
1148
- - Add a minimal embedder example that runs without portal services.
1149
-
1150
- ### Changed
1151
-
1152
- - Update eligible GitHub pull request head branches in place instead of opening duplicate pull requests.
1153
- - Drive platform command registration and routing from a shared command manifest.
1154
- - Use one cross-platform stop grammar, including `/stop` in GitHub conversations.
1155
- - Route sandbox file reads and writes through executors with staged, shell-safe transport.
1156
- - Keep sandbox settings nested through configuration resolution and updates.
1157
-
1158
- ### Fixed
1159
-
1160
- - Preserve raw session keys when using Slack's Force Stop button.
1161
- - Spill large bash output into the runtime workspace so sandboxed agents can read it.
1162
- - Keep malformed event files visible in the admin portal for deletion.
1163
- - Unify platform formatting guidance across adapter and conversation contexts.
1164
-
1165
- ### Security
1166
-
1167
- - Keep Cloud Build credentials host-side and outside agent sandboxes.
1168
- - Centralize runtime identity and sandbox path sanitization.
1169
-
1170
- ### Tests
1171
-
1172
- - Add coverage for GitHub tool operations, review threads, Cloud Build logs, executor file transport, command manifests, runtime embedding, and session serialization.
1173
-
1174
- ## [1.0.0-beta.13]
1175
-
1176
- ### Added
1177
-
1178
- - Add the `max` thinking level to commands, configuration, and the admin portal.
1179
- - Add quickstart and extension development guides across all supported locales.
1180
-
1181
- ### Changed
1182
-
1183
- - Update pi agent dependencies to 0.80.6.
1184
- - Load platform-specific tool packs only for their configured adapters.
1185
- - Improve `github_checks` output and guidance for external CI providers.
1186
- - Synchronize configuration, platform, sandbox, session, skill, event, portal, and deployment documentation across locales.
1187
-
1188
- ### Fixed
1189
-
1190
- - Fix broken CLI tables and dead documentation links across locales.
1191
-
1192
- ### Security
1193
-
1194
- - Derive ambient shared-vault access from each platform's declared trust model and sandbox topology.
1195
-
1196
- ### Tests
1197
-
1198
- - Add coverage for platform tool-pack isolation, external CI checks, and vault trust policy.
1199
-
1200
- ## [1.0.0-beta.12]
1201
-
1202
- ### Added
1203
-
1204
- - Let `github_checks` fetch the log tail for a failing GitHub Actions job by job ID.
1205
-
1206
- ### Changed
1207
-
1208
- - Require GitHub App Actions read permission for job log inspection.
1209
-
1210
- ### Fixed
1211
-
1212
- - Treat skipped and neutral GitHub checks separately from failures in check summaries.
1213
-
1214
- ### Tests
1215
-
1216
- - Add coverage for job log retrieval and check conclusion classification.
1217
- - Use collision-resistant temporary directories across parallel tests.
1218
-
1219
- ## [1.0.0-beta.11]
1220
-
1221
- ### Added
1222
-
1223
- - Add a read-only `github_checks` tool for inspecting branch and pull request check runs.
1224
-
1225
- ### Changed
1226
-
1227
- - Make `github_pr` idempotent so pushing an existing branch updates its open pull request.
1228
- - Teach the GitHub agent workflow to inspect CI, fix failures, and push updates.
1229
- - Require GitHub App Checks read permission for CI inspection.
1230
-
1231
- ### Tests
1232
-
1233
- - Add coverage for GitHub check summaries and existing pull request updates.
1234
-
1235
- ## [1.0.0-beta.10]
1236
-
1237
- ### Fixed
1238
-
1239
- - Retry cloning a GitHub repository on later triggers when the conversation clone is missing.
1240
-
1241
- ### Security
1242
-
1243
- - Stop applying the ambient default shared vault to GitHub conversations while preserving explicit conversation vault grants.
1244
- - Document the platform, shared machine, and personal credential trust boundaries.
1245
-
1246
- ### Tests
1247
-
1248
- - Add coverage for GitHub clone retries and platform-gated default vault resolution.
1249
-
1250
- ## [1.0.0-beta.9]
1251
-
1252
- ### Added
1253
-
1254
- - Clone GitHub repositories into conversation workspaces and check out pull request heads.
1255
- - Add a `github_pr` tool that pushes agent changes from `pi/*` branches and opens pull requests.
1256
-
1257
- ### Changed
1258
-
1259
- - Require GitHub App Contents read and write permission for repository automation.
1260
- - Post completed GitHub responses as single comments instead of streaming edits.
1261
-
1262
- ### Fixed
1263
-
1264
- - Keep GitHub issue context inside the history recency window.
1265
-
1266
- ### Security
1267
-
1268
- - Require commenters to have repository write permission or higher before triggering the agent.
1269
- - Keep installation tokens out of sandboxes and restrict agent pushes to non-force `pi/*` branches.
1270
-
1271
- ### Tests
1272
-
1273
- - Add coverage for GitHub repository checkout, permission gating, pull request creation, and branch restrictions.
1274
-
1275
- ## [1.0.0-beta.8]
1276
-
1277
- ### Added
1278
-
1279
- - Add a GitHub messaging adapter where each issue or pull request is an independent conversation.
1280
- - Add GitHub App authentication, mention and participation triggers, persisted polling cursors, and downtime replay.
1281
- - Add GitHub adapter deployment configuration and documentation.
1282
-
1283
- ### Tests
1284
-
1285
- - Add coverage for GitHub polling, authentication, conversation context, triggers, and responses.
1286
-
1287
- ## [1.0.0-beta.7]
1288
-
1289
- ### Added
1290
-
1291
- - Add TypeScript and npm-package extensions with `package.json` entrypoints and runtime dependencies.
1292
- - Add `mikan ext install`, `validate`, `list`, and `remove` commands.
1293
- - Add extension installation from Git sources and repository subpaths.
1294
-
1295
- ### Changed
1296
-
1297
- - Treat reinstalling an extension as an update while preserving its data directory.
1298
- - Use `package.json` as the primary extension metadata source with `manifest.json` as a fallback.
1299
- - Convert the agent project manager example to TypeScript with a typed extension API.
1300
- - Add the Slack `reactions:write` scope and missing slash commands to the manifests and setup guides.
1301
-
1302
- ### Tests
1303
-
1304
- - Add coverage for TypeScript loading, package metadata, extension CLI operations, and Git installation.
1305
-
1306
- ## [1.0.0-beta.6]
1307
-
1308
- ### Added
1309
-
1310
- - Add emoji reactions for agents and extensions across Slack, Discord, and Telegram.
1311
-
1312
- ### Changed
1313
-
1314
- - Default the agent project manager example to conversation-scoped extension data.
1315
- - Log when extensions rewrite the system prompt and report the resulting size change.
1316
-
1317
- ### Fixed
1318
-
1319
- - Render Slack session links outside the triggered-by italic span.
1320
-
1321
- ### Tests
1322
-
1323
- - Add coverage for the reaction tool and extension reaction API.
1324
-
1325
- ## [1.0.0-beta.5]
1326
-
1327
- ### Added
1328
-
1329
- - Add `api.paths.sharedDataDir` for extension state intentionally shared across conversations.
1330
- - Add an idempotent, dry-run-first script for migrating extension code and data to the new layout.
1331
-
1332
- ### Changed
1333
-
1334
- - Store conversation extension code and data under `conversations/<id>/` and global extension assets under `global/`.
1335
- - Make `api.paths.dataDir` conversation-scoped by default to prevent accidental cross-conversation state sharing.
1336
-
1337
- ### Tests
1338
-
1339
- - Update extension loader and command coverage for the conversation-scoped layout.
1340
-
1341
- ## [1.0.0-beta.4]
1342
-
1343
- ### Changed
1344
-
1345
- - Show an extension's slug in `/pi-extensions` when it differs from the manifest display name.
1346
-
1347
- ### Fixed
1348
-
1349
- - Reject extensions installed directly at a scope root and show an actionable warning to use a named subdirectory.
1350
-
1351
- ### Tests
1352
-
1353
- - Add coverage for scope-root extension mis-install detection and inventory warnings.
1354
-
1355
- ## [1.0.0-beta.3]
1356
-
1357
- ### Fixed
1358
-
1359
- - Route `/pi-extensions` through Slack and include it in the bundled app manifests.
1360
-
1361
- ## [1.0.0-beta.2]
1362
-
1363
- ### Added
1364
-
1365
- - Add `/pi-extensions` to list global and conversation extensions, manifest metadata, and bundled skills without activating modules.
1366
-
1367
- ### Tests
1368
-
1369
- - Add coverage for extension inventory discovery and command output.
1370
-
1371
- ## [1.0.0-beta.1]
1372
-
1373
- ### Fixed
1374
-
1375
- - Accept `maxOutputTokens` as an alias for `maxTokens` in custom model configuration.
1376
- - Restore npm release automation with compatible Node.js and npm versions.
1377
-
1378
- ### Tests
1379
-
1380
- - Add coverage for production-shaped custom model configuration.
1381
-
1382
- ## [1.0.0-beta.0]
1383
-
1384
- ### Added
1385
-
1386
- - Add mikan's native agent harness with model, authentication, session, compaction, and skill support.
1387
- - Add an extension system for hooks, schedules, notifications, data directories, secrets, and bundled skills, with an agent project manager example.
1388
- - Add per-conversation token usage bar charts to the admin portal.
1389
-
1390
- ### Changed
1391
-
1392
- - Replace the pi-coding-agent runtime and session integration with the native harness built on pi-agent-core and pi-ai.
1393
-
1394
- ### Tests
1395
-
1396
- - Add coverage for harness authentication, extensions, HTTP helpers, runner, sessions, and skills.
1397
-
1398
- ## [0.5.3] - 2026-06-30
1399
-
1400
- ### Added
1401
-
1402
- - Append a session-view link to event-triggered attribution messages.
1403
- - Show raw cached token counts and cache-hit rate in usage summaries.
1404
-
1405
- ### Changed
1406
-
1407
- - Use a stable, low-noise usage summary layout with token units and fixed cost breakdowns.
1408
- - Mark the auto-reply command as deprecated.
1409
-
1410
- ### Fixed
1411
-
1412
- - Harden state file writes to avoid readers seeing partial state.
1413
- - Reject malformed OAuth configuration during login setup.
1414
-
1415
- ### Tests
1416
-
1417
- - Add unit coverage for utility and tool modules.
1418
- - Expand Slack end-to-end coverage and make CI Slack artifacts more reliable.
1419
-
1420
- ## [0.5.2] - 2026-06-26
1421
-
1422
- ### Added
1423
-
1424
- - Show the top 20 pi sessions by token usage in the admin portal, including channel labels and raw input, output, cache read, cache write, total, and cost columns.
1425
-
1426
- ## [0.5.1] - 2026-06-26
1427
-
1428
- ### Added
1429
-
1430
- - Render markdown as Slack Block Kit.
1431
- - Show live tool progress during agent runs.
1432
-
1433
- ## [0.5.0] - 2026-06-25
1434
-
1435
- ### Added
1436
-
1437
- - Add the Starlight documentation site with localized docs for English, Japanese, Simplified Chinese, and Traditional Chinese.
1438
- - Add platform adapter guides for Slack, Discord, and Telegram.
1439
- - Add a web agent-events portal for streaming agent events.
1440
-
1441
- ### Changed
1442
-
1443
- - Align adapter, runtime, and session naming around conversation terminology for clearer contributor navigation.
1444
- - Update project dependencies and bundled pi packages.
1445
-
1446
- ### Fixed
1447
-
1448
- - Preserve custom Starlight theme component overrides.
1449
- - Keep the docs dev server from restarting when settings cleanup runs.
1450
- - Tighten Sentry event sanitization.
1451
-
1452
- ## [0.4.8] - 2026-06-22
1453
-
1454
- ### Changed
1455
-
1456
- - Update bundled pi packages to the 0.79.9 line.
1457
-
1458
- ## [0.4.7] - 2026-06-22
1459
-
1460
- ### Fixed
1461
-
1462
- - Apply the recent-days and max-messages history window when syncing existing chat sessions so resuming a session no longer replays unbounded older log history.
1463
-
1464
- ### Changed
1465
-
1466
- - Always report a usage summary whenever token usage is available.
1467
-
1468
- ### Tests
1469
-
1470
- - Add coverage for capping existing chat history sync to the recent history window.
1471
-
1472
- ## [0.4.6] - 2026-06-18
1473
-
1474
- ### Fixed
1475
-
1476
- - Store Slack streamed responses as a single finalized bot log entry instead of per-delta fragments.
1477
- - Coalesce legacy Slack bot log fragments when bootstrapping chat sessions so platform history is not filled with partial words.
1478
-
1479
- ### Tests
1480
-
1481
- - Add coverage for coalescing streamed bot history and logging only finalized Slack responses.
1482
-
1483
- ## [0.4.5] - 2026-06-17
1484
-
1485
- ### Added
1486
-
1487
- - Rotate shared top-level channel sessions on biweekly Sunday boundaries while keeping thread sessions fixed.
1488
-
1489
- ### Changed
1490
-
1491
- - Bootstrap rotated shared channel sessions from the recent two-week chat log window and prevent older log history from being resynced into the active session.
1492
- - Harden managed Docker sandboxes with dropped capabilities, no-new-privileges, and a PID limit.
1493
-
1494
- ### Fixed
1495
-
1496
- - Report usage summaries when token usage is available even if provider pricing data is missing.
1497
-
1498
- ### Tests
1499
-
1500
- - Add coverage for session rotation, thread bootstrap watermarks, sandbox hardening flags, and usage summaries without cost data.
1501
-
1502
- ## [0.4.4] - 2026-06-12
1503
-
1504
- ### Fixed
1505
-
1506
- - Require exact provider model ID matches when grouping verified admin model availability.
1507
-
1508
- ## [0.4.3] - 2026-06-12
1509
-
1510
- ### Added
1511
-
1512
- - Group admin model selectors by verified availability for OpenAI and Anthropic keys.
1513
- - Log the active provider and model when each agent run starts to simplify server-side debugging.
1514
-
1515
- ## [0.4.2] - 2026-06-11
1516
-
1517
- ### Fixed
1518
-
1519
- - Resolve custom providers through pi's model registry so conversation settings can select models from `models.json`.
1520
- - Resolve attached file paths from the sandbox runtime workspace so image sandboxes upload generated files from the correct host path.
1521
-
1522
- ## [0.4.1] - 2026-06-08
1523
-
1524
- ### Changed
1525
-
1526
- - Update bundled pi packages to the 0.78.1 line.
1527
-
1528
- ### Fixed
1529
-
1530
- - Stream Slack responses with delta-only appends to avoid duplicated message segments and streaming state conflicts.
1531
- - Include Slack streaming recipient metadata so threaded streamed replies work in Slack E2E and production workspaces.
1532
-
1533
- ### Tests
1534
-
1535
- - Add Slack streaming E2E coverage for delta appends without duplicate text.
1536
-
1537
- ## [0.4.0] - 2026-06-07
1538
-
1539
- ### Added
1540
-
1541
- - Add streamed response deltas across adapters so replies can update progressively.
1542
- - Add Slack reply mode configuration in the admin portal.
1543
- - Add event tool CRUD support for listing, reading, updating, and deleting scheduled events, with conversation-scoped listing by default and explicit all-event listing.
1544
-
1545
- ### Changed
1546
-
1547
- - Reorganize source modules and centralize shared type definitions for clearer contributor navigation.
1548
- - Centralize adapter conversation intake and reduce wrapper indirection across runtime, adapters, commands, config, and web modules.
1549
- - Attribute agent Sentry traces with platform and conversation context for clearer operator debugging.
1550
-
1551
- ### Fixed
1552
-
1553
- - Persist global settings overrides correctly.
1554
- - Warn when invalid custom OAuth service definitions are skipped instead of silently dropping them.
1555
-
1556
- ## [0.4.0-beta.0]
1557
-
1558
- ### Added
1559
-
1560
- - Add streamed response deltas across adapters so replies can update progressively.
1561
- - Add Slack reply mode configuration in the admin portal.
1562
- - Add event tool CRUD support for listing, reading, updating, and deleting scheduled events, with conversation-scoped listing by default and explicit all-event listing.
1563
-
1564
- ### Changed
1565
-
1566
- - Reorganize source modules and centralize shared type definitions for clearer contributor navigation.
1567
- - Centralize adapter conversation intake and reduce wrapper indirection across runtime, adapters, commands, config, and web modules.
1568
-
1569
- ### Fixed
1570
-
1571
- - Persist global settings overrides correctly.
1572
-
1573
- ## [0.3.2] - 2026-06-02
1574
-
1575
- ### Fixed
1576
-
1577
- - Preserve trigger attribution in streamed agent responses so tool-written GitHub comments include the triggering user.
1578
-
1579
- ## [0.3.1] - 2026-06-02
1580
-
1581
- ### Added
1582
-
1583
- - Add Slack Block Kit response support and document Block Kit implementation lessons.
1584
-
1585
- ### Fixed
1586
-
1587
- - Require explicit mentions before Slack thread replies trigger the bot.
1588
-
1589
- ### Tests
1590
-
1591
- - Enforce phase-one strict checks and unused export checks.
1592
-
1593
- ## [0.3.0] - 2026-06-01
1594
-
1595
- ### Added
1596
-
1597
- - Add source directory README guides for contributors navigating adapters, commands, runtime, sessions, sandbox, tools, login, admin, and session-view code.
1598
-
1599
- ### Changed
1600
-
1601
- - Centralize chat session bootstrapping through `ChatSessionManager` so Slack top-level and thread sessions share the same log-based history sync path.
1602
- - Rename Slack branch/fork terminology to thread/anchor terminology across the adapter, session viewer, and documentation.
1603
- - Model session-view related sessions as parent/thread relationships, including fixed-path thread sessions without legacy parent metadata.
1604
- - Remove legacy thread fork and snapshot helpers from session storage.
1605
-
1606
- ### Fixed
1607
-
1608
- - Anchor session-view thread links on the root turn instead of earlier bootstrapped context messages.
1609
-
1610
- ## [0.3.0-beta.0]
1611
-
1612
- ### Changed
1613
-
1614
- - Centralize chat session bootstrapping through `ChatSessionManager` so Slack top-level and thread sessions share the same log-based history sync path.
1615
- - Rename Slack branch/fork terminology to thread/anchor terminology across the adapter, session viewer, and documentation.
1616
- - Model session-view related sessions as parent/thread relationships, including fixed-path thread sessions without legacy parent metadata.
1617
- - Remove legacy thread fork and snapshot helpers from session storage.
1618
-
1619
- ### Fixed
1620
-
1621
- - Anchor session-view thread links on the root turn instead of earlier bootstrapped context messages.
1622
-
1623
- ## [0.2.4] - 2026-06-01
1624
-
1625
- ### Fixed
1626
-
1627
- - Make Slack bot-rooted thread session seeds loadable by storing platform-history assistant metadata.
1628
-
1629
- ## [0.2.3] - 2026-06-01
1630
-
1631
- ### Added
1632
-
1633
- - Add a sandbox resource limit tool for checking and temporarily updating managed sandbox CPU and memory limits.
1634
-
1635
- ### Fixed
1636
-
1637
- - Isolate Slack sessions rooted at bot messages so thread replies do not inherit unrelated channel history.
1638
-
1639
- ## [0.2.2] - 2026-05-30
1640
-
1641
- ### Added
1642
-
1643
- - Add `/admin` portal with token-protected access via `/admin` and `/pi-admin` commands.
1644
- - Add admin APIs and UI for conversation settings, global settings, workspace preview, skills, events, session links, and login/vault links.
1645
- - Add model selection in the admin portal using `ModelRegistry.getAvailable()` instead of free-text fields.
1646
- - Share portal shell chrome across admin, session-view, and login/vault pages.
1647
- - Document admin, login, and session token boundaries in `docs/portal-auth-model.md`.
1648
-
1649
- ### Changed
1650
-
1651
- - Normalize slash-command feedback into muted compact summaries.
1652
- - Align desktop layout widths across all portal surfaces.
1653
-
1654
- ## [0.2.1] - 2026-05-27
1655
-
1656
- ### Added
1657
-
1658
- - Add expanded command, configuration, deployment, development, session, and skill documentation.
1659
- - Add README hero and architecture diagrams.
1660
- - Add project agent development rules and Karpathy coding guidelines.
1661
-
1662
- ### Changed
1663
-
1664
- - Simplify the README overview and clarify sandbox runtime architecture documentation.
1665
- - Simplify file guards and retry helpers.
1666
-
1667
- ### Fixed
1668
-
1669
- - Retry attachment downloads.
1670
- - Skip retry sleep on the final attempt and clarify retry naming.
1671
-
1672
- ## [0.2.0] - 2026-05-23
1673
-
1674
- ### Changed
1675
-
1676
- - Renamed the project, CLI, npm package, GitHub repository, documentation, release skill, and sandbox image references to mikan.
1677
- - Changed platform credentials to unprefixed env vars (`SLACK_APP_TOKEN`, `SLACK_BOT_TOKEN`, `TELEGRAM_BOT_TOKEN`, `DISCORD_BOT_TOKEN`) while keeping `MIKAN_*` aliases as fallbacks.
1678
- - Changed runtime env vars such as `LINK_URL`, `LINK_PORT`, `STATE_DIR`, OAuth scope overrides, and Cloudflare sandbox settings to prefer unprefixed names with `MIKAN_*` fallbacks.
1679
- - Raised the minimum supported Node.js version to `>=22.19.0`.
1680
- - Updated internal variable, function, type, Docker label, sandbox image, and generated resource names to use mikan naming.
1681
- - Added manual dispatch support to the CI workflow.
1682
-
1683
- ## [0.2.0-beta.25] - 2026-05-23
1684
-
1685
- ### Changed
1686
-
1687
- - Grouped session modules under a single directory.
1688
- - Centralized command parsing across adapters.
1689
- - Removed explicit `any` usage across the type surface.
1690
- - Cleaned unused dependencies.
1691
-
1692
- ### Tests
1693
-
1694
- - CI now enforces coverage thresholds.
1695
-
1696
- ## [0.2.0-beta.24]
1697
-
1698
- ### Fixed
1699
-
1700
- - Session history writes now emit valid assistant messages.
1701
-
1702
- ## [0.2.0-beta.23]
1703
-
1704
- ### Fixed
1705
-
1706
- - Refresh stale channel history before forking a thread.
1707
- - Separate history seeds from live sessions to prevent cross-contamination.
1708
- - Materialize channel history when the first thread is created.
1709
-
1710
- ### Added
1711
-
1712
- - Scripts to migrate session history and repair orphan thread sessions.
1713
-
1714
- ## [0.2.0-beta.22]
1715
-
1716
- ### Fixed
1717
-
1718
- - Slack: fork bot response threads from the channel session so replies inherit context.
1719
- - Vault: preserve failures when the default shared vault cannot be applied.
1720
-
1721
- ## [0.2.0-beta.21]
1722
-
1723
- ### Added
1724
-
1725
- - Vault: seed new sandboxes from a shared profile (`sandbox.defaultSharedVault`).
1726
-
1727
- ## [0.2.0-beta.20]
1728
-
1729
- ### Added
1730
-
1731
- - Sentry: report user-facing failures.
1732
- - Auto-reply: surface configured rules in the status command.
1733
-
1734
- ### Fixed
1735
-
1736
- - Slack: anchor event-fork sessions correctly (#61).
1737
- - Slack: keep session ephemerals scoped to threads.
1738
- - Agent: require history search before answering unknown replies.
1739
- - Agent: keep quiet tool errors out of chat.
1740
-
1741
- ### Changed
1742
-
1743
- - Removed cloud-logging config — log to stdout/stderr and route via your process manager.
1744
-
1745
- ## [0.2.0-beta.19]
1746
-
1747
- ### Fixed
1748
-
1749
- - Sandbox: bootstrap `gh` git credentials inside managed containers.
1750
-
1751
- ## [0.2.0-beta.18]
1752
-
1753
- ### Fixed
1754
-
1755
- - Sandbox: update memory swap when applying CPU/memory limits.
1756
- - Slack: preserve long replies posted in threads.
1757
-
1758
- ## [0.2.0-beta.17]
1759
-
1760
- ### Added
1761
-
1762
- - Sentry: store env values and write a `sentry-cli` config for richer error reports.
1763
-
1764
- ### Changed
1765
-
1766
- - Bumped `@earendil-works/pi-*` packages.
1767
-
1768
- ## [0.2.0-beta.16]
1769
-
1770
- ### Performance
1771
-
1772
- - Slack: unblock startup while backfill is running.
1773
-
1774
- ## [0.2.0-beta.15]
1775
-
1776
- ### Added
1777
-
1778
- - Config: validate JSON files with TypeBox schemas.
1779
- - Agent: attribute the trigger (mention/direct/auto-reply/…) in responses.
1780
-
1781
- ## [0.2.0-beta.14]
1782
-
1783
- ### Fixed
1784
-
1785
- - Login: refresh the sandbox after copying a shared profile.
1786
-
1787
- ### Changed
1788
-
1789
- - Simplified command dispatch, token stores, and re-exports (#60).
1790
-
1791
- ## [0.2.0-beta.13]
1792
-
1793
- ### Added
1794
-
1795
- - Login: gcloud OAuth support.
1796
-
1797
- ## [0.2.0-beta.12]
1798
-
1799
- ### Fixed
1800
-
1801
- - Auto-reply: persist the resolved session key.
1802
-
1803
- ## [0.2.0-beta.11]
1804
-
1805
- ### Fixed
1806
-
1807
- - Login: make Slack login ephemeral and refresh vault mounts after credentials change.
1808
-
1809
- ### Changed
1810
-
1811
- - Sandbox: update base image and tags.
1812
-
1813
- ## [0.2.0-beta.10]
1814
-
1815
- ### Added
1816
-
1817
- - Auto-reply: channel trigger rules and a configurable judge model (`llm.autoReply`).
1818
- - Slack: native E2E smoke workflow under `e2e/`.
1819
-
1820
- ### Fixed
1821
-
1822
- - Auto-reply: use mom-compatible marker files; judge policy never throws and always logs.
1823
- - Events: validate one-shot times before scheduling; simplify fresh follow-up sessions.
1824
-
1825
- ### Changed
1826
-
1827
- - Onboard: default model is `claude-sonnet-4-6`.
1828
- - Separated runtime and control-plane paths.
1829
-
1830
- ## [0.2.0-beta.9]
1831
-
1832
- ### Added
1833
-
1834
- - Session view: floating composer and per-message copy button.
1835
- - Docker sandbox: add `rg` and `fd` to the image.
1836
-
1837
- ### Fixed
1838
-
1839
- - Session view: ignore Enter during IME composition; preserve code-block contrast.
1840
-
1841
- ## [0.2.0-beta.8]
1842
-
1843
- ### Added
1844
-
1845
- - Login: shared vault profiles.
1846
- - Session view: improved interactive chat console.
1847
- - Slack: harden socket connection and label the platform in the connect log.
1848
- - Agent: `ThinkingLevel` type on session parameters.
1849
-
1850
- ### Changed
1851
-
1852
- - Sandbox: store the image workspace mount in settings.
1853
- - Dropped `vault.json` metadata — directories are the only source of truth.
1854
- - Refactored agent runner orchestration into smaller modules.
1855
-
1856
- ### Removed
1857
-
1858
- - `UserBindingStore` and `bindings.json` plumbing.
1859
- - Log-to-session backfill.
1860
-
1861
- ## [0.2.0-beta.7]
1862
-
1863
- ### Added
1864
-
1865
- - Sandbox: temporary `boost` command for one-off CPU/memory bumps.
1866
- - Slack: mute command summaries.
1867
-
1868
- ### Changed
1869
-
1870
- - Migrated `pi-*` packages to the `@earendil-works/` namespace.
1871
-
1872
- ### Fixed
1873
-
1874
- - Slack: log messages from external apps; hide bash tool diagnostics.
1875
- - Session: ignore history written before a reset.
1876
- - Agent: clarify runtime workspace paths in the system prompt.
1877
-
1878
- ## [0.2.0-beta.6]
1879
-
1880
- ### Added
1881
-
1882
- - Commands: conversation model switch (`/pi-model …`) with `:thinking` shorthand.
1883
- - Config: onboarding flow for global settings (`mikan --onboard`).
1884
- - Docs: PM2 ecosystem config and production deploy guide.
1885
-
1886
- ### Changed
1887
-
1888
- - Config: nest settings schema; align chat platform commands.
1889
-
1890
- ### Fixed
1891
-
1892
- - Slack: strip only the bot's own mention from message text.
1893
-
1894
- ## [0.2.0-beta.5]
1895
-
1896
- ### Added
1897
-
1898
- - Sandbox: Cloudflare sandbox bridge (experimental).
1899
- - Tests: unit coverage for `CommandRegistry` and command handlers.
1900
-
1901
- ### Changed
1902
-
1903
- - Env: renamed `MOM_*` env vars to `MIKAN_*` (breaking).
1904
- - Vault: conversation vault directories are now the source of truth; dropped platform prefix from the conversation vault key.
1905
- - Config: `--state-dir` is the single source for settings.
1906
- - Tightened command/runtime types and added a `postPrivate` capability.
1907
-
1908
- ## [0.2.0-beta.4]
1909
-
1910
- ### Changed
1911
-
1912
- - Hardened core writes; unified adapter retry and log helpers.
1913
- - Eliminated duplication across adapters, vault, and Slack command factories (#53).
1914
- - Session forks now anchor to raw split points.
1915
- - Adapter-specific stop logic stays in adapters.
1916
-
1917
- ### Fixed
1918
-
1919
- - Slack: tighten thread reply triggers.
1920
-
1921
- ## [0.2.0-beta.3]
1922
-
1923
- ### Added
1924
-
1925
- - Session view: Slack-aware session viewer with branching (#51).
1926
- - Login: built-in credential presets and a redesigned credential portal.
1927
- - Sandbox: image-mode container CPU/memory limits (#50), bridge network isolation, `ffmpeg` in the tools image.
1928
-
1929
- ### Fixed
1930
-
1931
- - Discord: normalize thread sessions; queue follow-up messages; persistent channel sessions; hide usage summary by default.
1932
- - Events: restore Slack synthetic notifications (#52).
1933
- - Attachments: wait for downloads before the agent accesses them.
1934
-
1935
- ## [0.2.0-beta.2]
1936
-
1937
- ### Added
1938
-
1939
- - Per-user vault system for actor-scoped credential isolation (#24).
1940
- - Managed image sandbox (`--sandbox=image:<image>`) (#47).
1941
- - Login flow wired into the runtime; credential onboarding server (#32, #34).
1942
- - Slack: `/pi-new` and `/pi-login` DM commands.
1943
- - Events: actor-aware scheduling tool (#36, #39).
1944
-
1945
- ### Changed
1946
-
1947
- - Internal contracts unified around "conversation" naming across adapter, store, config, log, and UI layers (#38, #41, #42, #43, #44, #46).
1948
-
1949
- ### Fixed
1950
-
1951
- - Telegram: handle bare `stop` in shared chats; escape unsupported HTML entities.
1952
- - Slack: queue follow-up messages per session.
1953
-
1954
- ## [0.2.0-beta.1]
1955
-
1956
- ### Added
1957
-
1958
- - File-backed credential vault (#31) and per-user vault routing (#33).
1959
- - OAuth: GitHub redirect flow, scope parity with `gh` CLI, gcloud OAuth.
1960
- - Sandbox: separate `stateDir` from `workspaceDir` to keep secrets out of sandboxes.
1961
-
1962
- ### Security
1963
-
1964
- - Hardened vault writes, file permissions, and login flow.
1965
- - Stopped leaking secrets in `docker exec` args.
1966
- - Enforced vault sandbox isolation policy.
1967
-
1968
- ### Changed
1969
-
1970
- - Renamed `docker` sandbox mode to `container` (breaking).
1971
- - Replaced `DockerProvisioner` with `DockerContainerManager` + idle stop.
1972
-
1973
- ## [0.2.0-beta.0]
1974
-
1975
- ### Added
1976
-
1977
- - Sentry integration for error monitoring, tracing, and metrics (#21).
1978
- - Persistent session management with in-thread replies (#18).
1979
- - Telegram: native slash commands; private-chat session fix (#15).
1980
- - `pi-coding-agent` extension loading (#12).
1981
-
1982
- ## Earlier releases
1983
-
1984
- For releases prior to `0.2.0-beta.0` (i.e. the `0.1.x` line), see the [git tag history](https://github.com/geminixiang/mikan/tags).
647
+ [Showing lines 1-614 of 1985 (50.0KB limit). Use offset=615 to continue.]