@geminixiang/mikan 1.0.0-beta.95 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +387 -391
- package/README.md +33 -42
- package/dist/adapters/github/bot.js +1 -1
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/github/policy.d.ts +2 -9
- package/dist/adapters/github/policy.d.ts.map +1 -1
- package/dist/adapters/github/policy.js +18 -26
- package/dist/adapters/github/policy.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +2 -4
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +28 -56
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/socket-agent.d.ts +9 -0
- package/dist/adapters/slack/socket-agent.d.ts.map +1 -0
- package/dist/adapters/slack/socket-agent.js +17 -0
- package/dist/adapters/slack/socket-agent.js.map +1 -0
- package/dist/adapters/telegram/bot.d.ts +1 -0
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +6 -1
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/types.d.ts +1 -0
- package/dist/adapters/telegram/types.d.ts.map +1 -1
- package/dist/adapters/telegram/types.js.map +1 -1
- package/dist/cli/arg-grammar.d.ts +1 -2
- package/dist/cli/arg-grammar.d.ts.map +1 -1
- package/dist/cli/arg-grammar.js +2 -17
- package/dist/cli/arg-grammar.js.map +1 -1
- package/dist/cli/boot.d.ts.map +1 -1
- package/dist/cli/boot.js +5 -11
- package/dist/cli/boot.js.map +1 -1
- package/dist/cli/migrate.d.ts.map +1 -1
- package/dist/cli/migrate.js +22 -7
- package/dist/cli/migrate.js.map +1 -1
- package/dist/cli/office.d.ts.map +1 -1
- package/dist/cli/office.js +3 -5
- package/dist/cli/office.js.map +1 -1
- package/dist/cli/onboard.js +18 -20
- package/dist/cli/onboard.js.map +1 -1
- package/dist/cli/types.d.ts +1 -2
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/env-manifest.d.ts +2 -0
- package/dist/env-manifest.d.ts.map +1 -1
- package/dist/env-manifest.js +76 -43
- package/dist/env-manifest.js.map +1 -1
- package/dist/events/index.d.ts +5 -5
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +1 -7
- package/dist/events/index.js.map +1 -1
- package/dist/file-guards.d.ts +1 -0
- package/dist/file-guards.d.ts.map +1 -1
- package/dist/file-guards.js +4 -1
- package/dist/file-guards.js.map +1 -1
- package/dist/harness/execution-resolver.d.ts.map +1 -1
- package/dist/harness/execution-resolver.js +1 -7
- package/dist/harness/execution-resolver.js.map +1 -1
- package/dist/harness/http.d.ts +1 -2
- package/dist/harness/http.d.ts.map +1 -1
- package/dist/harness/http.js +3 -16
- package/dist/harness/http.js.map +1 -1
- package/dist/harness/jev.d.ts +2 -1
- package/dist/harness/jev.d.ts.map +1 -1
- package/dist/harness/jev.js.map +1 -1
- package/dist/harness/prompt.d.ts.map +1 -1
- package/dist/harness/prompt.js +0 -6
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/session.d.ts +2 -9
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +3 -3
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/tools/event.d.ts +0 -1
- package/dist/harness/tools/event.d.ts.map +1 -1
- package/dist/harness/tools/event.js +1 -7
- package/dist/harness/tools/event.js.map +1 -1
- package/dist/harness/types.d.ts +3 -3
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +8 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -15
- package/dist/index.js.map +1 -1
- package/dist/main.js +26 -36
- package/dist/main.js.map +1 -1
- package/dist/migrations/index.d.ts +0 -1
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +4 -4
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/legacy-office-files.d.ts +3 -0
- package/dist/migrations/legacy-office-files.d.ts.map +1 -0
- package/dist/migrations/legacy-office-files.js +29 -0
- package/dist/migrations/legacy-office-files.js.map +1 -0
- package/dist/observability/instrument.js +2 -3
- package/dist/observability/instrument.js.map +1 -1
- package/dist/observability/sentry.js +1 -1
- package/dist/observability/sentry.js.map +1 -1
- package/dist/office/projection.js +2 -2
- package/dist/office/projection.js.map +1 -1
- package/dist/sandbox/identity.d.ts +0 -1
- package/dist/sandbox/identity.d.ts.map +1 -1
- package/dist/sandbox/identity.js +0 -3
- package/dist/sandbox/identity.js.map +1 -1
- package/dist/sandbox/registry.d.ts +1 -5
- package/dist/sandbox/registry.d.ts.map +1 -1
- package/dist/sandbox/registry.js +4 -13
- package/dist/sandbox/registry.js.map +1 -1
- package/dist/sandbox/types.d.ts +1 -5
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sessions/types.d.ts +1 -1
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings/index.d.ts +56 -2
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +57 -37
- package/dist/settings/index.js.map +1 -1
- package/dist/types.d.ts +1 -25
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vault/index.js +1 -1
- package/dist/vault/index.js.map +1 -1
- package/package.json +4 -17
- package/dist/cli/download.d.ts +0 -2
- package/dist/cli/download.d.ts.map +0 -1
- package/dist/cli/download.js +0 -84
- package/dist/cli/download.js.map +0 -1
- package/dist/harness/index.d.ts +0 -20
- package/dist/harness/index.d.ts.map +0 -1
- package/dist/harness/index.js +0 -14
- package/dist/harness/index.js.map +0 -1
- package/dist/sandbox/cloudflare.d.ts +0 -17
- package/dist/sandbox/cloudflare.d.ts.map +0 -1
- package/dist/sandbox/cloudflare.js +0 -142
- package/dist/sandbox/cloudflare.js.map +0 -1
- package/dist/sandbox/index.d.ts +0 -7
- package/dist/sandbox/index.d.ts.map +0 -1
- package/dist/sandbox/index.js +0 -6
- package/dist/sandbox/index.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,701 +4,697 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
from 1.0.0 on. The package interface is the root export of `@geminixiang/mikan`; the
|
|
8
|
+
CLI, `settings.json`, `mikan.env`, and the state layout under `~/.mikan` are covered too.
|
|
9
|
+
The GitHub adapter is experimental and excluded: its settings and conversation layout may
|
|
10
|
+
change in a minor release.
|
|
9
11
|
|
|
10
12
|
## [Unreleased]
|
|
11
13
|
|
|
12
|
-
## [1.0.0-
|
|
14
|
+
## [1.0.0] - 2026-10-06
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
1.0.0 is the first stable release. It replaces the 0.5.3 runtime, which ran on
|
|
17
|
+
`pi-coding-agent`, with mikan's own harness on `pi-durable` and `pi-ai`, and gives every
|
|
18
|
+
conversation its own office. The 97 `1.0.0-beta.*` prereleases are summarized here; their
|
|
19
|
+
individual notes remain in the [GitHub releases](https://github.com/geminixiang/mikan/releases).
|
|
17
20
|
|
|
18
|
-
###
|
|
21
|
+
### Upgrading from 0.5.3
|
|
19
22
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
`mikan migrate` upgrades a 0.5.3 install in place; it is the only supported upgrade path, and
|
|
24
|
+
formats that existed only in 1.0.0 prereleases are not converted. The daemon refuses to start
|
|
25
|
+
while migrations are pending and prints the exact command to run. Follow
|
|
26
|
+
[Upgrading from 0.5.3](https://mikan.geminixiang.com/deployment/#upgrading-from-053) in the
|
|
27
|
+
deployment guide, which lists what migrates, what does not, and what to check afterwards.
|
|
24
28
|
|
|
25
|
-
|
|
29
|
+
### Added
|
|
26
30
|
|
|
27
|
-
|
|
31
|
+
- **Conversation offices.** Each conversation gets its own directory, sandbox runtime, vault,
|
|
32
|
+
settings, sessions, and scheduled events, named by an office key
|
|
33
|
+
(`v1-<platform>-<readable-id>-<hash>`) so two platforms never collide on one raw id. Offices
|
|
34
|
+
are public or private, following the Slack conversation type, and `image:*` sandboxes enforce
|
|
35
|
+
it: a private office sees only itself plus shared knowledge. `mikan office list` prints them.
|
|
36
|
+
- **GitHub adapter (experimental).** A regular GitHub account, bound with a fine-grained token and an
|
|
37
|
+
organization webhook, answers mentions, assignments, and review requests; each issue or pull
|
|
38
|
+
request is one conversation. Its settings and conversation layout may change in a minor
|
|
39
|
+
release, and conversations from this version may not carry over.
|
|
40
|
+
- **Durable sessions.** Each office keeps its sessions in one SQLite database (`sessions.db`)
|
|
41
|
+
through `pi-durable`. Sessions survive restarts, a channel's top-level session stays current
|
|
42
|
+
until `/new` with Pi compacting old context, and threads keep their own sessions. The agent's
|
|
43
|
+
`history` tool reads the conversation's earlier sessions.
|
|
44
|
+
- **MCP servers and codemode.** `mcpServers` in `settings.json` connects MCP servers; the agent
|
|
45
|
+
reaches their tools through Pi's codemode and searches large tool lists on demand.
|
|
46
|
+
OpenConnector can provision a per-conversation MCP token.
|
|
47
|
+
- **Subagents.** The agent delegates bounded work, in parallel or as a dependency graph, to
|
|
48
|
+
subagents with role profiles, their own tools, and token, cost, and time budgets.
|
|
49
|
+
- **Admin portal and session viewer.** `/admin` opens a 30-minute portal for model, sandbox
|
|
50
|
+
limits, office visibility, reply mode, MCP servers, and skills; `session` opens a read-only view
|
|
51
|
+
of the current session.
|
|
52
|
+
- **Memory capture.** After each human-triggered run, durable facts go to the office's
|
|
53
|
+
`MEMORY.md`.
|
|
54
|
+
- **Jev.** A small model answers yes/no decisions, such as whether a Slack message addresses the
|
|
55
|
+
bot in `/pi-auto-reply jev` mode, and drives the `jev_browser` tool.
|
|
56
|
+
- **Platform rendering.** Slack answers stream into native markdown and table blocks, with the
|
|
57
|
+
`slack_blockkit` tool for interactive messages; Discord uses Components V2; Telegram uses rich
|
|
58
|
+
formatting. Long answers continue in the thread instead of failing.
|
|
59
|
+
- **CLI.** `mikan onboard` writes `settings.json` and `mikan.env` from a few questions, `mikan env`
|
|
60
|
+
lists every environment variable and which are set, and `mikan migrate` applies state
|
|
61
|
+
migrations with `--dry-run`.
|
|
62
|
+
- **Observability.** Standard OTLP export through the `OTEL_*` variables, alongside Sentry.
|
|
63
|
+
|
|
64
|
+
### Changed
|
|
65
|
+
|
|
66
|
+
- Node.js 24.15.0 or newer is required.
|
|
67
|
+
- `mikan.env` holds secrets and deployment addresses; `settings.json` holds behavior. The
|
|
68
|
+
Sentry DSN is read only from `SENTRY_DSN`, so a `sentry.dsn` setting is ignored, and the GitHub
|
|
69
|
+
adapter's repositories and trigger rules live under `github` in `settings.json`. At startup the
|
|
70
|
+
daemon logs each environment variable it no longer reads, with what replaces it.
|
|
71
|
+
- State lives in `~/.mikan` only: `settings.json`, `mikan.env`, `models.json`, vaults, and the
|
|
72
|
+
host-only per-conversation directories under `conversations/`. Per-conversation settings,
|
|
73
|
+
sessions, and scheduled events moved out of the workspace, where sandboxes could read them.
|
|
74
|
+
- The workspace argument is optional and defaults to `~/.mikan/workspace`.
|
|
75
|
+
- Inside a sandbox, an office's files are at `/workspace/<office-key>` instead of
|
|
76
|
+
`/workspace/<conversation-id>`. Paths quoted in sessions from before the upgrade point at the
|
|
77
|
+
old location.
|
|
78
|
+
- `image:<image>` provisions one managed container and one vault per office, recreated from the
|
|
79
|
+
current image when missing; `/pi-sandbox boost` raises its limits until it stops.
|
|
80
|
+
- Vault directories use hashed keys instead of raw user and container names.
|
|
81
|
+
- Only `session` and `stop` work without a leading slash; `new`, `model`, and `auto-reply` need
|
|
82
|
+
their slash forms (`/new`, `/pi-new`, …).
|
|
83
|
+
- Auto-reply is Slack-only and takes `on`, `off`, or `jev`. A 0.5.3 channel with auto-reply
|
|
84
|
+
rules replies to every top-level message; the rules are ignored.
|
|
85
|
+
- The link server for the portal and credential links listens on `127.0.0.1` unless
|
|
86
|
+
configured otherwise.
|
|
87
|
+
- The package exports only what an embedder needs: `createConversationRuntime`,
|
|
88
|
+
`createWorkspace`, `createOfficeAddress`, `officeKey`, `createConversationEvent`,
|
|
89
|
+
`createConversationMessage`, `defaultCommandHandlers`, `MikanModels`, and the types they use.
|
|
90
|
+
The `@geminixiang/mikan/harness` and `@geminixiang/mikan/sandbox` entry points are gone.
|
|
28
91
|
|
|
29
|
-
###
|
|
92
|
+
### Removed
|
|
30
93
|
|
|
31
|
-
-
|
|
94
|
+
- The `pi-coding-agent` runtime and its extension loading; mikan loads no third-party code into
|
|
95
|
+
its process (ADR 0006). Skills in `skills/` directories remain.
|
|
96
|
+
- The `firecracker:*` and `cloudflare:*` sandboxes.
|
|
97
|
+
- `--state-dir` and the `STATE_DIR` / `MIKAN_STATE_DIR` variables, and `--download`.
|
|
98
|
+
- Auto-reply on Discord and Telegram, and auto-reply rules.
|
|
99
|
+
- `SENTRY_ENABLED` (leave `SENTRY_DSN` unset to turn Sentry off) and `HTTP_IDLE_TIMEOUT`
|
|
100
|
+
(outbound HTTP streams time out after five minutes).
|
|
101
|
+
- Provider keys in `~/.pi/mikan/auth.json`; put them in `~/.mikan/mikan.env` or `models.json`.
|
|
32
102
|
|
|
33
103
|
### Fixed
|
|
34
104
|
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
-
|
|
105
|
+
- Slack startup and reconnects no longer hang without a log line when Slack accepts the
|
|
106
|
+
connection and never answers; a socket silent for 30 seconds is dropped and retried, and the
|
|
107
|
+
daemon logs `Slack connection lost; reconnecting` and `Slack reconnected after Ns`.
|
|
108
|
+
- Stopping the daemon while it is still connecting to Slack ends in a graceful shutdown.
|
|
109
|
+
- When Telegram ends long polling because the token was revoked (401) or another process polls
|
|
110
|
+
the same bot (409), the daemon logs the reason and exits with code 1 for the process manager
|
|
111
|
+
to restart, instead of running on without receiving messages.
|
|
112
|
+
- A Slack message whose acknowledgement was lost during a reconnect runs once, not twice.
|
|
39
113
|
|
|
40
|
-
## [
|
|
114
|
+
## [0.5.3] - 2026-06-30
|
|
41
115
|
|
|
42
116
|
### Added
|
|
43
117
|
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
## [1.0.0-beta.92]
|
|
118
|
+
- Append a session-view link to event-triggered attribution messages.
|
|
119
|
+
- Show raw cached token counts and cache-hit rate in usage summaries.
|
|
47
120
|
|
|
48
121
|
### Changed
|
|
49
122
|
|
|
50
|
-
-
|
|
123
|
+
- Use a stable, low-noise usage summary layout with token units and fixed cost breakdowns.
|
|
124
|
+
- Mark the auto-reply command as deprecated.
|
|
51
125
|
|
|
52
|
-
|
|
126
|
+
### Fixed
|
|
53
127
|
|
|
54
|
-
|
|
128
|
+
- Harden state file writes to avoid readers seeing partial state.
|
|
129
|
+
- Reject malformed OAuth configuration during login setup.
|
|
55
130
|
|
|
56
|
-
|
|
57
|
-
- A direct MCP call that the server marks `isError` returns an error result instead of throwing, keeping the server's message.
|
|
131
|
+
### Tests
|
|
58
132
|
|
|
59
|
-
|
|
133
|
+
- Add unit coverage for utility and tool modules.
|
|
134
|
+
- Expand Slack end-to-end coverage and make CI Slack artifacts more reliable.
|
|
60
135
|
|
|
61
|
-
|
|
136
|
+
## [0.5.2] - 2026-06-26
|
|
62
137
|
|
|
63
|
-
|
|
138
|
+
### Added
|
|
64
139
|
|
|
65
|
-
|
|
140
|
+
- 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.
|
|
66
141
|
|
|
67
|
-
|
|
142
|
+
## [0.5.1] - 2026-06-26
|
|
68
143
|
|
|
69
|
-
|
|
144
|
+
### Added
|
|
70
145
|
|
|
71
|
-
|
|
146
|
+
- Render markdown as Slack Block Kit.
|
|
147
|
+
- Show live tool progress during agent runs.
|
|
72
148
|
|
|
73
|
-
|
|
74
|
-
- `/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.
|
|
75
|
-
- 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`.
|
|
76
|
-
- 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.
|
|
149
|
+
## [0.5.0] - 2026-06-25
|
|
77
150
|
|
|
78
151
|
### Added
|
|
79
152
|
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
153
|
+
- Add the Starlight documentation site with localized docs for English, Japanese, Simplified Chinese, and Traditional Chinese.
|
|
154
|
+
- Add platform adapter guides for Slack, Discord, and Telegram.
|
|
155
|
+
- Add a web agent-events portal for streaming agent events.
|
|
83
156
|
|
|
84
157
|
### Changed
|
|
85
158
|
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
- 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.
|
|
89
|
-
- A run left unfinished by a crash or restart is aborted before the next message in that conversation instead of answering first.
|
|
90
|
-
- 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.
|
|
159
|
+
- Align adapter, runtime, and session naming around conversation terminology for clearer contributor navigation.
|
|
160
|
+
- Update project dependencies and bundled pi packages.
|
|
91
161
|
|
|
92
162
|
### Fixed
|
|
93
163
|
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
- 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.
|
|
98
|
-
- A run Pi settles with a model error is recorded as failed instead of completed.
|
|
99
|
-
- 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.
|
|
100
|
-
|
|
101
|
-
## [1.0.0-beta.88]
|
|
164
|
+
- Preserve custom Starlight theme component overrides.
|
|
165
|
+
- Keep the docs dev server from restarting when settings cleanup runs.
|
|
166
|
+
- Tighten Sentry event sanitization.
|
|
102
167
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
- `tool_search` discovers authorized MCP tools and loads matching schemas for the next model call. MCP connections still start as before, but tools are no longer all declared upfront. Loaded tools survive later prompts and session reopen, subject to current grants. Codemode gains `searchTools()` and omits MCP schemas from its inline description.
|
|
106
|
-
- `codemode` runs JavaScript through Pi's official QuickJS sandbox to combine authorized tools and filter results before returning them to the model. Existing direct tools remain available; nested calls honor per-run grants, loop guards and cancellation, and appear in progress and tool-call counts. Sessions without tools stay tool-less.
|
|
168
|
+
## [0.4.8] - 2026-06-22
|
|
107
169
|
|
|
108
|
-
###
|
|
170
|
+
### Changed
|
|
109
171
|
|
|
110
|
-
-
|
|
172
|
+
- Update bundled pi packages to the 0.79.9 line.
|
|
111
173
|
|
|
112
|
-
## [
|
|
174
|
+
## [0.4.7] - 2026-06-22
|
|
113
175
|
|
|
114
176
|
### Fixed
|
|
115
177
|
|
|
116
|
-
-
|
|
178
|
+
- 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.
|
|
117
179
|
|
|
118
|
-
|
|
180
|
+
### Changed
|
|
119
181
|
|
|
120
|
-
|
|
182
|
+
- Always report a usage summary whenever token usage is available.
|
|
121
183
|
|
|
122
|
-
|
|
123
|
-
- **The GitHub adapter is restricted by default.** It answers only in private repositories listed in `GITHUB_REPOS`, only to people with write permission, and only comments and reads. `GITHUB_CAPABILITIES=triage,push` restores label and assignee management and pull requests; `GITHUB_PUBLIC_REPOS`, `GITHUB_USERS`, `GITHUB_MIN_PERMISSION`, and `GITHUB_TRIGGERS` narrow or widen who can trigger it and how.
|
|
124
|
-
- `github_checks` reads GitHub Actions jobs and commit statuses instead of check runs, because fine-grained PATs have no Checks permission. Check runs from third-party CI apps are no longer visible.
|
|
125
|
-
- **mikan no longer runs git for GitHub conversations.** Nothing is cloned into `<office>/repo`, and `github_sync` is removed. The agent clones, commits, and pushes inside its sandbox with the sandbox's GitHub credentials, and `github_pr` only opens a pull request for a branch the agent already pushed. What the agent can push is now bounded by that token, the account's repository role, and branch protection instead of mikan's `pi/*` rule; protect the default branch. GitHub conversations now trust `membership`, because only collaborators with write access can trigger them, so they receive `sandbox.defaultSharedVault` and settings-declared MCP servers like Slack conversations.
|
|
126
|
-
- **Session files move from `<workspace>/<office-key>/sessions/` to `<state-dir>/conversations/<office-key>/sessions/`, and sandboxes no longer see them.** Run `mikan migrate` before starting this version. The agent searches earlier history in `log.jsonl`, which stays in the office directory. See [ADR 0016](docs/adr/0016-host-sandbox-trust-boundary.md).
|
|
127
|
-
- Library API: `officeSessionsDir` and `resolveChannelSessionFile` are removed; use `office.sessionsDir` and `tryResolveCurrentSession(office.sessionsDir)`. `getThreadSessionFile` and `resolveParentSessionForThread` take the sessions directory, and the `ChatHistorySync` options and `registerThreadSession`/`hasMaterializedChatSession` take `office` instead of `conversationDir`.
|
|
128
|
-
- `jev_browser` no longer takes a `session` parameter. Each conversation thread has one browser that stays open across calls until `close: true`; a later `url` opens a new tab, and opening past three tabs closes the oldest inactive tabs and reports them in `closedOldTabs`. Model-named sessions each started another Chrome, and a few of them exhausted a 1 GB sandbox until every page load timed out.
|
|
184
|
+
### Tests
|
|
129
185
|
|
|
130
|
-
|
|
186
|
+
- Add coverage for capping existing chat history sync to the recent history window.
|
|
131
187
|
|
|
132
|
-
|
|
133
|
-
- MCP servers now connect through Pi's `@earendil-works/pi-mcp` client instead of the official `@modelcontextprotocol/sdk`, which is removed along with `zod`. Stdio servers still receive only a minimal inherited environment plus their configured `env`. When an HTTP server rejects the connection, the error now carries the status and the start of the server's response body.
|
|
188
|
+
## [0.4.6] - 2026-06-18
|
|
134
189
|
|
|
135
|
-
###
|
|
190
|
+
### Fixed
|
|
136
191
|
|
|
137
|
-
-
|
|
192
|
+
- Store Slack streamed responses as a single finalized bot log entry instead of per-delta fragments.
|
|
193
|
+
- Coalesce legacy Slack bot log fragments when bootstrapping chat sessions so platform history is not filled with partial words.
|
|
138
194
|
|
|
139
|
-
###
|
|
195
|
+
### Tests
|
|
140
196
|
|
|
141
|
-
-
|
|
142
|
-
- A daemon adopts at startup only the sandbox containers that mount its own workspace, so two mikan instances sharing one Docker engine no longer stop each other's containers.
|
|
143
|
-
- The sandbox image now ships CJK fonts (`fonts-noto-cjk`, about 170 MB). Without them, `jev_browser` screenshots showed Chinese and Japanese text as blank space, and charts drawn in the sandbox could not use Chinese labels.
|
|
144
|
-
- Python packages in the sandbox go through uv. The system pip still refuses installs, but its message now names the uv commands to use (`uv run --with <package>`), so the agent recovers after one attempt instead of trying pip, venvs, and apt in turn. The docs no longer claim that `pip install --user` works.
|
|
145
|
-
- Creating or updating a periodic event now reports its next three runs in the event's timezone, so the agent no longer computes weekdays itself (it once announced a Monday reminder for a Tuesday). An invalid cron `schedule` or `timezone` is rejected before the event file is written instead of being saved and then skipped by the scheduler.
|
|
146
|
-
- `apt-get install` works inside managed sandbox containers again. The containers drop all capabilities, so apt's download sandbox user could not switch groups and every install failed; the image now runs apt downloads as root, and the image smoke test installs a package under the same hardening.
|
|
147
|
-
- Asking "好了嗎" at the moment a background task finishes no longer answers "還在處理" right beside the completion notice. Task status now trusts the recorded end of the run over the runtime's still-settling state.
|
|
148
|
-
- A Slack message whose acknowledgement was lost during a socket reconnect no longer runs twice. Slack redelivers such events; mikan now recognizes a message or mention it has already taken and ignores the copy. A failed acknowledgement is logged instead of surfacing as an unhandled promise rejection.
|
|
149
|
-
- A Slack app that is not an agent app no longer calls `assistant.threads.setSuggestedPrompts` and logs `not_agent_app` every time someone opens its DM; after the first refusal the call is skipped until restart.
|
|
150
|
-
- A long Slack answer that outgrew the native stream no longer shows up twice. The partial streamed message is deleted before the full answer is posted, and the notification text sent with it is capped at the 4,000 bytes `chat.update` accepts, so the edit no longer fails with `msg_too_long`.
|
|
151
|
-
- A long Slack answer with many headings no longer fails with `invalid_blocks` and an `Error:` line. Slack expands each heading of a markdown block into its own block and rejects a message with more than 50; when an answer would exceed that, its headings are sent as bold lines instead.
|
|
152
|
-
- MCP tools ask the model for a progress label like every built-in tool, so the Slack checklist shows a readable step (for example "確認 GitHub 連線") instead of `mcp__server__tool`. The label is not forwarded to the MCP server, and a tool that already has its own `label` argument is left unchanged.
|
|
197
|
+
- Add coverage for coalescing streamed bot history and logging only finalized Slack responses.
|
|
153
198
|
|
|
154
|
-
## [
|
|
199
|
+
## [0.4.5] - 2026-06-17
|
|
155
200
|
|
|
156
|
-
###
|
|
201
|
+
### Added
|
|
157
202
|
|
|
158
|
-
-
|
|
159
|
-
- **Removed commands:** `mikan office claim`, `mikan office migrate-openconnector`, `mikan office migrate-events`, `mikan office migrate-door-policy`, `mikan sessions migrate`, and `mikan sandbox status|diff|migrate`. `mikan office list` remains and now prints each office key with its platform and conversation id.
|
|
160
|
-
- **Upgrades are supported only from 0.5.3.** Formats that existed only in 1.0.0 prereleases are no longer converted: OpenConnector `open-connector-runtime-token.json` files, door-policy settings, Pi 0.84 session files, `<state-dir>/conversations/<raw-id>` directories, and the hashed legacy vault keys. A prerelease install that already ran those conversions is unaffected.
|
|
161
|
-
- **Sandbox containers are disposable.** A managed container has no home volume. When its image or mounts change, it is replaced once it is stopped, and only the workspace and vault mounts carry over. Anything else, including `/root`, installed packages, and caches, starts empty. Existing `mikan-home-*` volumes and `mikan-migrate:*` images are no longer used, and operators may delete them.
|
|
162
|
-
- **Host and container vaults use hashed keys only.** The runtime no longer falls back to vault directories named by raw user id (`host`) or `container-<name>` (`container:*`). `mikan migrate` renames them.
|
|
163
|
-
- The public API no longer exports `findV3SessionFiles`, `isV3SessionFile`, or `migrateSessionFile`.
|
|
203
|
+
- Rotate shared top-level channel sessions on biweekly Sunday boundaries while keeping thread sessions fixed.
|
|
164
204
|
|
|
165
205
|
### Changed
|
|
166
206
|
|
|
167
|
-
-
|
|
207
|
+
- 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.
|
|
208
|
+
- Harden managed Docker sandboxes with dropped capabilities, no-new-privileges, and a PID limit.
|
|
168
209
|
|
|
169
210
|
### Fixed
|
|
170
211
|
|
|
171
|
-
-
|
|
172
|
-
- Upgrading a 0.5.3 install keeps each conversation's credentials. The old startup migration looked for a vault name that 0.5.3 never wrote, so 0.5.3 conversation vaults were silently left behind; `mikan migrate` moves them to their office keys.
|
|
173
|
-
- Upgrading a 0.5.3 install removes its sandbox containers instead of recreating them from snapshots under their old names next to the new ones.
|
|
174
|
-
|
|
175
|
-
## [1.0.0-beta.84]
|
|
212
|
+
- Report usage summaries when token usage is available even if provider pricing data is missing.
|
|
176
213
|
|
|
177
|
-
###
|
|
214
|
+
### Tests
|
|
178
215
|
|
|
179
|
-
-
|
|
180
|
-
- List skills in the prompt one line each under their directory instead of an XML block with a full path per skill; a path appears only when a skill's directory differs from its name. A workspace with 68 skills drops from about 31,000 to 22,000 characters of prompt per turn with the same names and descriptions.
|
|
216
|
+
- Add coverage for session rotation, thread bootstrap watermarks, sandbox hardening flags, and usage summaries without cost data.
|
|
181
217
|
|
|
182
|
-
## [
|
|
218
|
+
## [0.4.4] - 2026-06-12
|
|
183
219
|
|
|
184
220
|
### Fixed
|
|
185
221
|
|
|
186
|
-
-
|
|
222
|
+
- Require exact provider model ID matches when grouping verified admin model availability.
|
|
187
223
|
|
|
188
|
-
## [
|
|
189
|
-
|
|
190
|
-
### Changed
|
|
191
|
-
|
|
192
|
-
- mikan reacts `saluting_face` (eyes on GitHub) itself when a run starts its first work tool, instead of the model spending a separate round on the reaction; the model's `react` tool is left for background checks with nothing to report.
|
|
193
|
-
- mikan owns the `_Triggered by …_` signature on chat responses and replaces any signature line the model wrote, so user messages no longer carry a per-turn attribution instruction. The model is still asked to sign GitHub text it writes itself.
|
|
194
|
-
- The model reads the current time from each message's send time instead of running `date`.
|
|
195
|
-
|
|
196
|
-
## [1.0.0-beta.81]
|
|
224
|
+
## [0.4.3] - 2026-06-12
|
|
197
225
|
|
|
198
226
|
### Added
|
|
199
227
|
|
|
200
|
-
-
|
|
201
|
-
-
|
|
202
|
-
- Compact a session in the background after a successful run when its context nears the compaction threshold, so the next message does not wait for compaction.
|
|
228
|
+
- Group admin model selectors by verified availability for OpenAI and Anthropic keys.
|
|
229
|
+
- Log the active provider and model when each agent run starts to simplify server-side debugging.
|
|
203
230
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
- Undo Slack's HTML escaping on incoming text: the model and the office log saw `&&`, `<`, and `>` where the user typed `&&`, `<`, and `>`.
|
|
207
|
-
- Keep the tool checklist visible while the final answer streams; it used to disappear until the answer finished.
|
|
208
|
-
- Stop an open Session View page from holding shutdown open; open live streams now close after a five-second grace, so a restart no longer waits for the process manager's kill timeout.
|
|
209
|
-
- Report a GitHub API request that returns an empty body where a resource is required with its method, path, and status, instead of failing later on a null value.
|
|
210
|
-
|
|
211
|
-
### Security
|
|
212
|
-
|
|
213
|
-
- **Breaking (deploy):** The link server (Admin, Session View, and credential links) now listens on `127.0.0.1` even when `LINK_URL` is set; it used to listen on every interface, so portal tokens could travel in plain HTTP straight to `LINK_PORT` around the TLS reverse proxy. A reverse proxy on the same host (`reverse_proxy 127.0.0.1:8181`) keeps working unchanged. Set the new `LINK_HOST` (for example `0.0.0.0`) when the proxy runs on another host or in a separate network namespace.
|
|
214
|
-
|
|
215
|
-
## [1.0.0-beta.80]
|
|
231
|
+
## [0.4.2] - 2026-06-11
|
|
216
232
|
|
|
217
233
|
### Fixed
|
|
218
234
|
|
|
219
|
-
-
|
|
220
|
-
-
|
|
235
|
+
- Resolve custom providers through pi's model registry so conversation settings can select models from `models.json`.
|
|
236
|
+
- Resolve attached file paths from the sandbox runtime workspace so image sandboxes upload generated files from the correct host path.
|
|
221
237
|
|
|
222
|
-
## [
|
|
238
|
+
## [0.4.1] - 2026-06-08
|
|
223
239
|
|
|
224
240
|
### Changed
|
|
225
241
|
|
|
226
|
-
-
|
|
227
|
-
- Use pi's `typebox` 1.3.27 for tool and settings schemas instead of the incompatible `@sinclair/typebox` 0.34; platform tool packs now share pi's `AgentTool` schema types. Schema validation errors retain field paths but use typebox 1's wording.
|
|
228
|
-
- **Breaking (SDK):** `new ChatHistorySync()` now requires `{ isCommandText }`, so sessions no longer import the command inventory from the adapters. Pass the newly exported `isCommandText` to keep filtering command messages out of synced history.
|
|
229
|
-
|
|
230
|
-
### Security
|
|
231
|
-
|
|
232
|
-
- Only send the Slack bot token to `https://*.slack.com` file URLs, and stream incoming attachments to disk with a 100 MiB limit instead of buffering whole files in memory; a download over the limit is rejected, not retried, and leaves no partial file.
|
|
242
|
+
- Update bundled pi packages to the 0.78.1 line.
|
|
233
243
|
|
|
234
244
|
### Fixed
|
|
235
245
|
|
|
236
|
-
-
|
|
237
|
-
-
|
|
238
|
-
- Spill oversized MCP JSON results as indented JSON so `read` and `grep` can inspect them; the compact single-line spill exceeded `read`'s per-line limit.
|
|
239
|
-
- Record a Discord channel without a name (such as a DM) under its channel id instead of a `null` name.
|
|
246
|
+
- Stream Slack responses with delta-only appends to avoid duplicated message segments and streaming state conflicts.
|
|
247
|
+
- Include Slack streaming recipient metadata so threaded streamed replies work in Slack E2E and production workspaces.
|
|
240
248
|
|
|
241
249
|
### Tests
|
|
242
250
|
|
|
243
|
-
-
|
|
244
|
-
- Run tests in random order and print the seed, so order-dependent tests fail visibly and can be reproduced.
|
|
251
|
+
- Add Slack streaming E2E coverage for delta appends without duplicate text.
|
|
245
252
|
|
|
246
|
-
## [
|
|
253
|
+
## [0.4.0] - 2026-06-07
|
|
247
254
|
|
|
248
255
|
### Added
|
|
249
256
|
|
|
250
|
-
-
|
|
251
|
-
-
|
|
252
|
-
- Add
|
|
257
|
+
- Add streamed response deltas across adapters so replies can update progressively.
|
|
258
|
+
- Add Slack reply mode configuration in the admin portal.
|
|
259
|
+
- Add event tool CRUD support for listing, reading, updating, and deleting scheduled events, with conversation-scoped listing by default and explicit all-event listing.
|
|
253
260
|
|
|
254
261
|
### Changed
|
|
255
262
|
|
|
256
|
-
-
|
|
257
|
-
-
|
|
258
|
-
-
|
|
259
|
-
- Document the Vault as the store for development credentials that sandbox programs read directly; OpenConnector is the path for third-party service access (ADR 0013).
|
|
263
|
+
- Reorganize source modules and centralize shared type definitions for clearer contributor navigation.
|
|
264
|
+
- Centralize adapter conversation intake and reduce wrapper indirection across runtime, adapters, commands, config, and web modules.
|
|
265
|
+
- Attribute agent Sentry traces with platform and conversation context for clearer operator debugging.
|
|
260
266
|
|
|
261
|
-
###
|
|
267
|
+
### Fixed
|
|
262
268
|
|
|
263
|
-
-
|
|
269
|
+
- Persist global settings overrides correctly.
|
|
270
|
+
- Warn when invalid custom OAuth service definitions are skipped instead of silently dropping them.
|
|
264
271
|
|
|
265
|
-
## [
|
|
272
|
+
## [0.4.0-beta.0]
|
|
266
273
|
|
|
267
274
|
### Added
|
|
268
275
|
|
|
269
|
-
-
|
|
276
|
+
- Add streamed response deltas across adapters so replies can update progressively.
|
|
277
|
+
- Add Slack reply mode configuration in the admin portal.
|
|
278
|
+
- Add event tool CRUD support for listing, reading, updating, and deleting scheduled events, with conversation-scoped listing by default and explicit all-event listing.
|
|
270
279
|
|
|
271
280
|
### Changed
|
|
272
281
|
|
|
273
|
-
-
|
|
274
|
-
-
|
|
275
|
-
- Delegate persisted session behavior to public Pi session and harness APIs instead of maintaining duplicate storage semantics.
|
|
282
|
+
- Reorganize source modules and centralize shared type definitions for clearer contributor navigation.
|
|
283
|
+
- Centralize adapter conversation intake and reduce wrapper indirection across runtime, adapters, commands, config, and web modules.
|
|
276
284
|
|
|
277
285
|
### Fixed
|
|
278
286
|
|
|
279
|
-
-
|
|
287
|
+
- Persist global settings overrides correctly.
|
|
280
288
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
- Harden state and credential ownership by preserving explicit vault mount targets outside secret directories, rejecting migration collisions, keeping private file writes atomic, and deriving session operations from authorized conversation identities.
|
|
289
|
+
## [0.3.2] - 2026-06-02
|
|
284
290
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
### Changed
|
|
291
|
+
### Fixed
|
|
288
292
|
|
|
289
|
-
-
|
|
293
|
+
- Preserve trigger attribution in streamed agent responses so tool-written GitHub comments include the triggering user.
|
|
290
294
|
|
|
291
|
-
## [
|
|
295
|
+
## [0.3.1] - 2026-06-02
|
|
292
296
|
|
|
293
297
|
### Added
|
|
294
298
|
|
|
295
|
-
-
|
|
296
|
-
- Jev decision cost (from the `jev` tool, `jev_browser`'s decision loop, Slack auto-reply gating, and task-intent classification) is now reported to Sentry/OpenTelemetry as `agent.jev.cost`, `agent.jev.duration`, and `agent.jev.calls`, tagged by which feature made the call. Previously this spend was invisible next to the primary chat model's per-run cost — it only ever appeared inside a tool call's raw JSON text.
|
|
297
|
-
|
|
298
|
-
### Changed
|
|
299
|
+
- Add Slack Block Kit response support and document Block Kit implementation lessons.
|
|
299
300
|
|
|
300
|
-
|
|
301
|
+
### Fixed
|
|
301
302
|
|
|
302
|
-
|
|
303
|
+
- Require explicit mentions before Slack thread replies trigger the bot.
|
|
303
304
|
|
|
304
|
-
###
|
|
305
|
+
### Tests
|
|
305
306
|
|
|
306
|
-
-
|
|
307
|
+
- Enforce phase-one strict checks and unused export checks.
|
|
307
308
|
|
|
308
|
-
|
|
309
|
+
## [0.3.0] - 2026-06-01
|
|
309
310
|
|
|
310
|
-
|
|
311
|
+
### Added
|
|
311
312
|
|
|
312
|
-
|
|
313
|
+
- Add source directory README guides for contributors navigating adapters, commands, runtime, sessions, sandbox, tools, login, admin, and session-view code.
|
|
313
314
|
|
|
314
315
|
### Changed
|
|
315
316
|
|
|
316
|
-
-
|
|
317
|
+
- Centralize chat session bootstrapping through `ChatSessionManager` so Slack top-level and thread sessions share the same log-based history sync path.
|
|
318
|
+
- Rename Slack branch/fork terminology to thread/anchor terminology across the adapter, session viewer, and documentation.
|
|
319
|
+
- Model session-view related sessions as parent/thread relationships, including fixed-path thread sessions without legacy parent metadata.
|
|
320
|
+
- Remove legacy thread fork and snapshot helpers from session storage.
|
|
317
321
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
### Added
|
|
322
|
+
### Fixed
|
|
321
323
|
|
|
322
|
-
-
|
|
324
|
+
- Anchor session-view thread links on the root turn instead of earlier bootstrapped context messages.
|
|
323
325
|
|
|
324
|
-
## [
|
|
326
|
+
## [0.3.0-beta.0]
|
|
325
327
|
|
|
326
328
|
### Changed
|
|
327
329
|
|
|
328
|
-
-
|
|
330
|
+
- Centralize chat session bootstrapping through `ChatSessionManager` so Slack top-level and thread sessions share the same log-based history sync path.
|
|
331
|
+
- Rename Slack branch/fork terminology to thread/anchor terminology across the adapter, session viewer, and documentation.
|
|
332
|
+
- Model session-view related sessions as parent/thread relationships, including fixed-path thread sessions without legacy parent metadata.
|
|
333
|
+
- Remove legacy thread fork and snapshot helpers from session storage.
|
|
329
334
|
|
|
330
335
|
### Fixed
|
|
331
336
|
|
|
332
|
-
-
|
|
333
|
-
- Console usage summaries now show cache-read tokens alongside fresh input tokens.
|
|
334
|
-
- Sandbox provisioning no longer logs `Container … already running` on every readiness check; creation, restart, drift, and failure messages remain visible.
|
|
337
|
+
- Anchor session-view thread links on the root turn instead of earlier bootstrapped context messages.
|
|
335
338
|
|
|
336
|
-
## [
|
|
339
|
+
## [0.2.4] - 2026-06-01
|
|
337
340
|
|
|
338
341
|
### Fixed
|
|
339
342
|
|
|
340
|
-
-
|
|
341
|
-
|
|
342
|
-
## [1.0.0-beta.69]
|
|
343
|
+
- Make Slack bot-rooted thread session seeds loadable by storing platform-history assistant metadata.
|
|
343
344
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
- `harness/jev.ts` is now backed by [`@geminixiang/jev`](https://github.com/geminixiang/jev), a standalone SDK shaped like pi-ai (providers own auth, a model catalog, and a wire implementation) instead of a hand-rolled OpenRouter fetch client. `evaluateWithJev`'s signature, types, and error classes are unchanged, so the auto-reply gate, DM task-intent classification, and the `jev` tool are unaffected. The swap adds request retries and timeouts, neither of which existed before, and a path to other Jev backends (TypeSafe, Vercel AI Gateway, Cloudflare Workers AI) without touching call sites.
|
|
347
|
-
|
|
348
|
-
## [1.0.0-beta.68]
|
|
345
|
+
## [0.2.3] - 2026-06-01
|
|
349
346
|
|
|
350
347
|
### Added
|
|
351
348
|
|
|
352
|
-
-
|
|
353
|
-
- Slack: DM messages in a task thread (and top-level DMs while a task is running) are classified by Jev as `status`, `steer`, or `request` before spending a model turn. Status questions are answered from recorded task state; steering is delivered into the running task; anything else starts a normal run. The regex status matcher remains as the fallback.
|
|
354
|
-
- `task_status` reports `queued` for tasks that were admitted but have not started executing yet.
|
|
349
|
+
- Add a sandbox resource limit tool for checking and temporarily updating managed sandbox CPU and memory limits.
|
|
355
350
|
|
|
356
|
-
###
|
|
357
|
-
|
|
358
|
-
- `harness/jev.ts` accepts structured JSON for state, instructions, and criteria, and returns `confidence` and `legend` on choice / score answers.
|
|
359
|
-
- Jev auto-reply and task-intent state renders `<@U…>` mentions as `@Name` (the bot as `@mikan`) so Jev can tell a message addressed to someone else from one addressed to mikan.
|
|
360
|
-
- Tool progress lines for `jev` calls are prefixed with `jev ·` so users can see which steps came from a calibrated judgment.
|
|
351
|
+
### Fixed
|
|
361
352
|
|
|
362
|
-
|
|
353
|
+
- Isolate Slack sessions rooted at bot messages so thread replies do not inherit unrelated channel history.
|
|
363
354
|
|
|
364
|
-
|
|
355
|
+
## [0.2.2] - 2026-05-30
|
|
365
356
|
|
|
366
|
-
|
|
367
|
-
- Deploy docs: `/pi-auto-reply` slash command description lists `on | off | jev`.
|
|
357
|
+
### Added
|
|
368
358
|
|
|
369
|
-
|
|
359
|
+
- Add `/admin` portal with token-protected access via `/admin` and `/pi-admin` commands.
|
|
360
|
+
- Add admin APIs and UI for conversation settings, global settings, workspace preview, skills, events, session links, and login/vault links.
|
|
361
|
+
- Add model selection in the admin portal using `ModelRegistry.getAvailable()` instead of free-text fields.
|
|
362
|
+
- Share portal shell chrome across admin, session-view, and login/vault pages.
|
|
363
|
+
- Document admin, login, and session token boundaries in `docs/portal-auth-model.md`.
|
|
370
364
|
|
|
371
|
-
###
|
|
365
|
+
### Changed
|
|
372
366
|
|
|
373
|
-
-
|
|
374
|
-
-
|
|
375
|
-
- Jev-mode auto-reply decisions (channel, probability, addressed, truncated message text) are logged at info level for observability.
|
|
367
|
+
- Normalize slash-command feedback into muted compact summaries.
|
|
368
|
+
- Align desktop layout widths across all portal surfaces.
|
|
376
369
|
|
|
377
|
-
## [
|
|
370
|
+
## [0.2.1] - 2026-05-27
|
|
378
371
|
|
|
379
372
|
### Added
|
|
380
373
|
|
|
381
|
-
-
|
|
382
|
-
-
|
|
383
|
-
-
|
|
384
|
-
- `creative-producer` subagent profile gains the `generate_image` tool grant, matching its image-deliverable description.
|
|
374
|
+
- Add expanded command, configuration, deployment, development, session, and skill documentation.
|
|
375
|
+
- Add README hero and architecture diagrams.
|
|
376
|
+
- Add project agent development rules and Karpathy coding guidelines.
|
|
385
377
|
|
|
386
378
|
### Changed
|
|
387
379
|
|
|
388
|
-
-
|
|
389
|
-
-
|
|
390
|
-
- Office data policy for non-Slack platforms is now an explicit rule (ADR 0008): only Slack conversations can be public, and Telegram/Discord/GitHub offices always resolve to private rather than falling through an "unknown" branch by omission.
|
|
391
|
-
- The Admin office visibility card now states the effective outcome in plain words instead of the internal policy model; public Slack channels get one "Hide the files in this channel from other offices" checkbox, other conversation kinds show the fixed Hidden state with no control.
|
|
392
|
-
- `settings.json` ownership (schema, scope merge, readers, writers, one-time migrations) is gathered under `src/settings/`.
|
|
380
|
+
- Simplify the README overview and clarify sandbox runtime architecture documentation.
|
|
381
|
+
- Simplify file guards and retry helpers.
|
|
393
382
|
|
|
394
|
-
###
|
|
383
|
+
### Fixed
|
|
395
384
|
|
|
396
|
-
-
|
|
397
|
-
-
|
|
385
|
+
- Retry attachment downloads.
|
|
386
|
+
- Skip retry sleep on the final attempt and clarify retry naming.
|
|
398
387
|
|
|
399
|
-
## [
|
|
388
|
+
## [0.2.0] - 2026-05-23
|
|
400
389
|
|
|
401
390
|
### Changed
|
|
402
391
|
|
|
403
|
-
-
|
|
404
|
-
|
|
405
|
-
|
|
392
|
+
- Renamed the project, CLI, npm package, GitHub repository, documentation, release skill, and sandbox image references to mikan.
|
|
393
|
+
- 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.
|
|
394
|
+
- 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.
|
|
395
|
+
- Raised the minimum supported Node.js version to `>=22.19.0`.
|
|
396
|
+
- Updated internal variable, function, type, Docker label, sandbox image, and generated resource names to use mikan naming.
|
|
397
|
+
- Added manual dispatch support to the CI workflow.
|
|
406
398
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
## [1.0.0-beta.63]
|
|
399
|
+
## [0.2.0-beta.25] - 2026-05-23
|
|
410
400
|
|
|
411
401
|
### Changed
|
|
412
402
|
|
|
413
|
-
-
|
|
414
|
-
-
|
|
415
|
-
-
|
|
403
|
+
- Grouped session modules under a single directory.
|
|
404
|
+
- Centralized command parsing across adapters.
|
|
405
|
+
- Removed explicit `any` usage across the type surface.
|
|
406
|
+
- Cleaned unused dependencies.
|
|
416
407
|
|
|
417
|
-
###
|
|
408
|
+
### Tests
|
|
409
|
+
|
|
410
|
+
- CI now enforces coverage thresholds.
|
|
418
411
|
|
|
419
|
-
|
|
412
|
+
## [0.2.0-beta.24]
|
|
420
413
|
|
|
421
414
|
### Fixed
|
|
422
415
|
|
|
423
|
-
-
|
|
416
|
+
- Session history writes now emit valid assistant messages.
|
|
424
417
|
|
|
425
|
-
## [
|
|
418
|
+
## [0.2.0-beta.23]
|
|
426
419
|
|
|
427
|
-
###
|
|
420
|
+
### Fixed
|
|
428
421
|
|
|
429
|
-
-
|
|
430
|
-
-
|
|
422
|
+
- Refresh stale channel history before forking a thread.
|
|
423
|
+
- Separate history seeds from live sessions to prevent cross-contamination.
|
|
424
|
+
- Materialize channel history when the first thread is created.
|
|
431
425
|
|
|
432
426
|
### Added
|
|
433
427
|
|
|
434
|
-
-
|
|
435
|
-
|
|
428
|
+
- Scripts to migrate session history and repair orphan thread sessions.
|
|
429
|
+
|
|
430
|
+
## [0.2.0-beta.22]
|
|
436
431
|
|
|
437
432
|
### Fixed
|
|
438
433
|
|
|
439
|
-
-
|
|
434
|
+
- Slack: fork bot response threads from the channel session so replies inherit context.
|
|
435
|
+
- Vault: preserve failures when the default shared vault cannot be applied.
|
|
440
436
|
|
|
441
|
-
|
|
437
|
+
## [0.2.0-beta.21]
|
|
442
438
|
|
|
443
|
-
|
|
444
|
-
- Support local Slack E2E runs, capture intake and session markers on failure, and schedule E2E events through the `event` tool instead of writing files.
|
|
445
|
-
- Record the Office isolation policy, storage inventory, and OpenConnector history audit under `docs/`.
|
|
439
|
+
### Added
|
|
446
440
|
|
|
447
|
-
|
|
441
|
+
- Vault: seed new sandboxes from a shared profile (`sandbox.defaultSharedVault`).
|
|
442
|
+
|
|
443
|
+
## [0.2.0-beta.20]
|
|
448
444
|
|
|
449
445
|
### Added
|
|
450
446
|
|
|
451
|
-
-
|
|
452
|
-
-
|
|
447
|
+
- Sentry: report user-facing failures.
|
|
448
|
+
- Auto-reply: surface configured rules in the status command.
|
|
453
449
|
|
|
454
450
|
### Fixed
|
|
455
451
|
|
|
456
|
-
-
|
|
457
|
-
-
|
|
458
|
-
-
|
|
459
|
-
-
|
|
460
|
-
- Honor stop during runner preparation and keep older active tasks visible in status queries.
|
|
461
|
-
- Report task admission, asynchronous startup, and status inspection failures through the existing Sentry/OTLP observability path.
|
|
452
|
+
- Slack: anchor event-fork sessions correctly (#61).
|
|
453
|
+
- Slack: keep session ephemerals scoped to threads.
|
|
454
|
+
- Agent: require history search before answering unknown replies.
|
|
455
|
+
- Agent: keep quiet tool errors out of chat.
|
|
462
456
|
|
|
463
457
|
### Changed
|
|
464
458
|
|
|
465
|
-
-
|
|
466
|
-
- Keep the documented and CI coverage commands as stable entry points while maintaining their shared Vitest invocation in one place.
|
|
467
|
-
- Validate debug Session View selections from their path and header, leaving full parsing to consumers that load session content instead of inspecting the same file twice.
|
|
459
|
+
- Removed cloud-logging config — log to stdout/stderr and route via your process manager.
|
|
468
460
|
|
|
469
|
-
## [
|
|
461
|
+
## [0.2.0-beta.19]
|
|
470
462
|
|
|
471
463
|
### Fixed
|
|
472
464
|
|
|
473
|
-
-
|
|
474
|
-
- Validate Session View selections through read-only inspection so active and repeatedly selected historical sessions do not conflict with writer ownership or appear corrupted.
|
|
465
|
+
- Sandbox: bootstrap `gh` git credentials inside managed containers.
|
|
475
466
|
|
|
476
|
-
## [
|
|
467
|
+
## [0.2.0-beta.18]
|
|
477
468
|
|
|
478
469
|
### Fixed
|
|
479
470
|
|
|
480
|
-
-
|
|
481
|
-
-
|
|
482
|
-
|
|
483
|
-
### Changed
|
|
484
|
-
|
|
485
|
-
- Use Commander for CLI option parsing, subcommand validation, and generated help.
|
|
486
|
-
- Guide interactive onboarding with arrow-key selections, masked credentials, and a final confirmation before saving. Cancel without writing settings.
|
|
487
|
-
- Refuse custom-provider onboarding when models.json already exists, without printing credentials or writing partial settings.
|
|
471
|
+
- Sandbox: update memory swap when applying CPU/memory limits.
|
|
472
|
+
- Slack: preserve long replies posted in threads.
|
|
488
473
|
|
|
489
|
-
## [
|
|
474
|
+
## [0.2.0-beta.17]
|
|
490
475
|
|
|
491
476
|
### Added
|
|
492
477
|
|
|
493
|
-
-
|
|
494
|
-
- Expose the admin portal command on Discord and Telegram.
|
|
478
|
+
- Sentry: store env values and write a `sentry-cli` config for richer error reports.
|
|
495
479
|
|
|
496
480
|
### Changed
|
|
497
481
|
|
|
498
|
-
-
|
|
482
|
+
- Bumped `@earendil-works/pi-*` packages.
|
|
499
483
|
|
|
500
|
-
## [
|
|
484
|
+
## [0.2.0-beta.16]
|
|
501
485
|
|
|
502
|
-
###
|
|
503
|
-
|
|
504
|
-
- Export raw platform conversation, channel, session, thread, message, and user identifiers so Sentry traces can be mapped directly back to their source while continuing to exclude human-readable names and conversation or tool content.
|
|
505
|
-
|
|
506
|
-
### Removed
|
|
486
|
+
### Performance
|
|
507
487
|
|
|
508
|
-
-
|
|
488
|
+
- Slack: unblock startup while backfill is running.
|
|
509
489
|
|
|
510
|
-
## [
|
|
490
|
+
## [0.2.0-beta.15]
|
|
511
491
|
|
|
512
492
|
### Added
|
|
513
493
|
|
|
514
|
-
-
|
|
494
|
+
- Config: validate JSON files with TypeBox schemas.
|
|
495
|
+
- Agent: attribute the trigger (mention/direct/auto-reply/…) in responses.
|
|
515
496
|
|
|
516
|
-
|
|
497
|
+
## [0.2.0-beta.14]
|
|
517
498
|
|
|
518
|
-
|
|
499
|
+
### Fixed
|
|
519
500
|
|
|
520
|
-
|
|
501
|
+
- Login: refresh the sandbox after copying a shared profile.
|
|
521
502
|
|
|
522
|
-
###
|
|
503
|
+
### Changed
|
|
523
504
|
|
|
524
|
-
-
|
|
525
|
-
- Add a guided Admin dialog for configuring MCP servers, with structured fields or pasted standard `mcpServers` JSON and card-based installed-server management.
|
|
505
|
+
- Simplified command dispatch, token stores, and re-exports (#60).
|
|
526
506
|
|
|
527
|
-
|
|
507
|
+
## [0.2.0-beta.13]
|
|
528
508
|
|
|
529
|
-
|
|
530
|
-
- Upgrade `pi-agent-core` and `pi-ai` to 0.85.1, including GPT-6 Astra catalog entries and the 30-minute prompt-cache TTL for GPT-5.6+ Responses models.
|
|
531
|
-
- Consolidate harness, office, session, sandbox, web-adapter, and shared-command ownership without changing the published root exports.
|
|
509
|
+
### Added
|
|
532
510
|
|
|
533
|
-
|
|
511
|
+
- Login: gcloud OAuth support.
|
|
534
512
|
|
|
535
|
-
|
|
536
|
-
- Remove the auto-reply judge, command, configuration, and UI; explicit platform triggers remain supported.
|
|
537
|
-
- Remove the unused `/api/agent-events/stream` SSE mirror, its token setting, and supporting event types. The authenticated session viewer continues to use `/session/stream`.
|
|
513
|
+
## [0.2.0-beta.12]
|
|
538
514
|
|
|
539
515
|
### Fixed
|
|
540
516
|
|
|
541
|
-
-
|
|
517
|
+
- Auto-reply: persist the resolved session key.
|
|
542
518
|
|
|
543
|
-
## [
|
|
519
|
+
## [0.2.0-beta.11]
|
|
544
520
|
|
|
545
|
-
###
|
|
546
|
-
|
|
547
|
-
- Admin portal: MCP servers are added by pasting the server's standard `mcpServers` JSON (Claude Desktop / Cursor shape), stored as-is; the old name / target / `KEY=value` form is gone. Every add and preset install is followed by a real connection check, and the response shows the tool count or the server's own error; a per-server **Test** button re-checks an installed entry. Query-string values in listed URLs are redacted. stdio entries now run their command on the host at save time.
|
|
521
|
+
### Fixed
|
|
548
522
|
|
|
549
|
-
|
|
523
|
+
- Login: make Slack login ephemeral and refresh vault mounts after credentials change.
|
|
550
524
|
|
|
551
525
|
### Changed
|
|
552
526
|
|
|
553
|
-
-
|
|
527
|
+
- Sandbox: update base image and tags.
|
|
528
|
+
|
|
529
|
+
## [0.2.0-beta.10]
|
|
554
530
|
|
|
555
531
|
### Added
|
|
556
532
|
|
|
557
|
-
-
|
|
558
|
-
-
|
|
559
|
-
- Report subagent outcomes to Sentry from the subagent tool: `agent.subagent.runs` / `agent.subagent.duration` metrics and a lifecycle breadcrumb for every status; a Sentry error under `error_domain=subagent` for `failed` and `invalid_output` (fingerprinted by error class) and for launch failures. `budget_exceeded`, `timeout`, `cancelled`, and `skipped` stay metrics-only. Reports carry run metrics, never task text or labels.
|
|
533
|
+
- Auto-reply: channel trigger rules and a configurable judge model (`llm.autoReply`).
|
|
534
|
+
- Slack: native E2E smoke workflow under `e2e/`.
|
|
560
535
|
|
|
561
|
-
|
|
536
|
+
### Fixed
|
|
562
537
|
|
|
563
|
-
|
|
538
|
+
- Auto-reply: use mom-compatible marker files; judge policy never throws and always logs.
|
|
539
|
+
- Events: validate one-shot times before scheduling; simplify fresh follow-up sessions.
|
|
564
540
|
|
|
565
|
-
|
|
541
|
+
### Changed
|
|
566
542
|
|
|
567
|
-
|
|
543
|
+
- Onboard: default model is `claude-sonnet-4-6`.
|
|
544
|
+
- Separated runtime and control-plane paths.
|
|
568
545
|
|
|
569
|
-
|
|
546
|
+
## [0.2.0-beta.9]
|
|
570
547
|
|
|
571
|
-
|
|
572
|
-
- Keep a caller's `requiredTools` when the request also names a profile.
|
|
573
|
-
- Stop dropping the retained assistant message when an overflow retry rebuilds context from the store.
|
|
548
|
+
### Added
|
|
574
549
|
|
|
575
|
-
|
|
550
|
+
- Session view: floating composer and per-message copy button.
|
|
551
|
+
- Docker sandbox: add `rg` and `fd` to the image.
|
|
576
552
|
|
|
577
|
-
|
|
553
|
+
### Fixed
|
|
578
554
|
|
|
579
|
-
|
|
555
|
+
- Session view: ignore Enter during IME composition; preserve code-block contrast.
|
|
580
556
|
|
|
581
|
-
|
|
557
|
+
## [0.2.0-beta.8]
|
|
582
558
|
|
|
583
|
-
|
|
559
|
+
### Added
|
|
584
560
|
|
|
585
|
-
|
|
561
|
+
- Login: shared vault profiles.
|
|
562
|
+
- Session view: improved interactive chat console.
|
|
563
|
+
- Slack: harden socket connection and label the platform in the connect log.
|
|
564
|
+
- Agent: `ThinkingLevel` type on session parameters.
|
|
586
565
|
|
|
587
566
|
### Changed
|
|
588
567
|
|
|
589
|
-
-
|
|
568
|
+
- Sandbox: store the image workspace mount in settings.
|
|
569
|
+
- Dropped `vault.json` metadata — directories are the only source of truth.
|
|
570
|
+
- Refactored agent runner orchestration into smaller modules.
|
|
590
571
|
|
|
591
|
-
|
|
572
|
+
### Removed
|
|
573
|
+
|
|
574
|
+
- `UserBindingStore` and `bindings.json` plumbing.
|
|
575
|
+
- Log-to-session backfill.
|
|
576
|
+
|
|
577
|
+
## [0.2.0-beta.7]
|
|
592
578
|
|
|
593
579
|
### Added
|
|
594
580
|
|
|
595
|
-
-
|
|
581
|
+
- Sandbox: temporary `boost` command for one-off CPU/memory bumps.
|
|
582
|
+
- Slack: mute command summaries.
|
|
596
583
|
|
|
597
584
|
### Changed
|
|
598
585
|
|
|
599
|
-
-
|
|
600
|
-
- Extend `mikan sessions migrate` to convert both legacy mikan v3 and Pi 0.84-generation v4 sessions while the daemon is stopped.
|
|
586
|
+
- Migrated `pi-*` packages to the `@earendil-works/` namespace.
|
|
601
587
|
|
|
602
|
-
|
|
588
|
+
### Fixed
|
|
589
|
+
|
|
590
|
+
- Slack: log messages from external apps; hide bash tool diagnostics.
|
|
591
|
+
- Session: ignore history written before a reset.
|
|
592
|
+
- Agent: clarify runtime workspace paths in the system prompt.
|
|
593
|
+
|
|
594
|
+
## [0.2.0-beta.6]
|
|
603
595
|
|
|
604
596
|
### Added
|
|
605
597
|
|
|
606
|
-
-
|
|
607
|
-
-
|
|
608
|
-
-
|
|
598
|
+
- Commands: conversation model switch (`/pi-model …`) with `:thinking` shorthand.
|
|
599
|
+
- Config: onboarding flow for global settings (`mikan --onboard`).
|
|
600
|
+
- Docs: PM2 ecosystem config and production deploy guide.
|
|
609
601
|
|
|
610
602
|
### Changed
|
|
611
603
|
|
|
612
|
-
-
|
|
613
|
-
- Make platform shutdown cleanup bounded and strengthen runner/session lifecycle rollback handling.
|
|
604
|
+
- Config: nest settings schema; align chat platform commands.
|
|
614
605
|
|
|
615
606
|
### Fixed
|
|
616
607
|
|
|
617
|
-
-
|
|
608
|
+
- Slack: strip only the bot's own mention from message text.
|
|
618
609
|
|
|
619
|
-
|
|
610
|
+
## [0.2.0-beta.5]
|
|
611
|
+
|
|
612
|
+
### Added
|
|
620
613
|
|
|
621
|
-
-
|
|
614
|
+
- Sandbox: Cloudflare sandbox bridge (experimental).
|
|
615
|
+
- Tests: unit coverage for `CommandRegistry` and command handlers.
|
|
622
616
|
|
|
623
|
-
|
|
617
|
+
### Changed
|
|
624
618
|
|
|
625
|
-
|
|
619
|
+
- Env: renamed `MOM_*` env vars to `MIKAN_*` (breaking).
|
|
620
|
+
- Vault: conversation vault directories are now the source of truth; dropped platform prefix from the conversation vault key.
|
|
621
|
+
- Config: `--state-dir` is the single source for settings.
|
|
622
|
+
- Tightened command/runtime types and added a `postPrivate` capability.
|
|
626
623
|
|
|
627
|
-
|
|
628
|
-
- Derive shared workspace visibility from platform channel privacy: Slack public channels can update shared memory, private channels receive it read-only, and DMs, external channels, unknown kinds, and other platforms stay isolated unless explicitly overridden.
|
|
629
|
-
- Schedule Dream maintenance for Conversation-office memory with durable evidence checkpoints.
|
|
630
|
-
- Add an Admin MCP Marketplace with reviewed GitHub, Context7, Playwright, Sequential Thinking, and Metabase presets; Metabase installations accept an instance endpoint and API key.
|
|
624
|
+
## [0.2.0-beta.4]
|
|
631
625
|
|
|
632
626
|
### Changed
|
|
633
627
|
|
|
634
|
-
-
|
|
635
|
-
-
|
|
636
|
-
-
|
|
637
|
-
-
|
|
638
|
-
- Consolidate runtime, session, adapter, web, and configuration ownership to reduce duplicate lifecycle and parsing rules.
|
|
628
|
+
- Hardened core writes; unified adapter retry and log helpers.
|
|
629
|
+
- Eliminated duplication across adapters, vault, and Slack command factories (#53).
|
|
630
|
+
- Session forks now anchor to raw split points.
|
|
631
|
+
- Adapter-specific stop logic stays in adapters.
|
|
639
632
|
|
|
640
633
|
### Fixed
|
|
641
634
|
|
|
642
|
-
-
|
|
643
|
-
- Re-aim migrated session lanes at the nearest surviving ancestor when the newest v3 entry contains facts but no v4 message.
|
|
635
|
+
- Slack: tighten thread reply triggers.
|
|
644
636
|
|
|
645
|
-
|
|
637
|
+
## [0.2.0-beta.3]
|
|
646
638
|
|
|
647
|
-
|
|
639
|
+
### Added
|
|
648
640
|
|
|
649
|
-
|
|
641
|
+
- Session view: Slack-aware session viewer with branching (#51).
|
|
642
|
+
- Login: built-in credential presets and a redesigned credential portal.
|
|
643
|
+
- Sandbox: image-mode container CPU/memory limits (#50), bridge network isolation, `ffmpeg` in the tools image.
|
|
650
644
|
|
|
651
645
|
### Fixed
|
|
652
646
|
|
|
653
|
-
-
|
|
647
|
+
- Discord: normalize thread sessions; queue follow-up messages; persistent channel sessions; hide usage summary by default.
|
|
648
|
+
- Events: restore Slack synthetic notifications (#52).
|
|
649
|
+
- Attachments: wait for downloads before the agent accesses them.
|
|
654
650
|
|
|
655
|
-
## [
|
|
651
|
+
## [0.2.0-beta.2]
|
|
656
652
|
|
|
657
653
|
### Added
|
|
658
654
|
|
|
659
|
-
-
|
|
660
|
-
-
|
|
661
|
-
-
|
|
662
|
-
-
|
|
655
|
+
- Per-user vault system for actor-scoped credential isolation (#24).
|
|
656
|
+
- Managed image sandbox (`--sandbox=image:<image>`) (#47).
|
|
657
|
+
- Login flow wired into the runtime; credential onboarding server (#32, #34).
|
|
658
|
+
- Slack: `/pi-new` and `/pi-login` DM commands.
|
|
659
|
+
- Events: actor-aware scheduling tool (#36, #39).
|
|
663
660
|
|
|
664
661
|
### Changed
|
|
665
662
|
|
|
666
|
-
-
|
|
667
|
-
- Derive all platform command registration and routing from the single command manifest.
|
|
668
|
-
- Adopt pi-ai's retryable-error classifier instead of a local copy.
|
|
669
|
-
- Conversation runtimes are keyed by office key, fixing cross-conversation runner reuse after ID changes.
|
|
663
|
+
- Internal contracts unified around "conversation" naming across adapter, store, config, log, and UI layers (#38, #41, #42, #43, #44, #46).
|
|
670
664
|
|
|
671
665
|
### Fixed
|
|
672
666
|
|
|
673
|
-
-
|
|
674
|
-
-
|
|
675
|
-
- Slack slash commands in threads carry the thread session key instead of falling back to the top-level session.
|
|
676
|
-
- GitHub first-contact stop no longer creates participation state.
|
|
677
|
-
- Subagent deadlines are enforced by a single wall-clock timer; `before_agent_start` hooks run before auth and pre-turn compaction.
|
|
678
|
-
- Sandbox container removal failures no longer clear ownership, preventing orphaned containers.
|
|
679
|
-
- Run outcomes settle from the final message and run state is released on throw.
|
|
667
|
+
- Telegram: handle bare `stop` in shared chats; escape unsupported HTML entities.
|
|
668
|
+
- Slack: queue follow-up messages per session.
|
|
680
669
|
|
|
681
|
-
## [
|
|
670
|
+
## [0.2.0-beta.1]
|
|
682
671
|
|
|
683
672
|
### Added
|
|
684
673
|
|
|
685
|
-
-
|
|
686
|
-
-
|
|
674
|
+
- File-backed credential vault (#31) and per-user vault routing (#33).
|
|
675
|
+
- OAuth: GitHub redirect flow, scope parity with `gh` CLI, gcloud OAuth.
|
|
676
|
+
- Sandbox: separate `stateDir` from `workspaceDir` to keep secrets out of sandboxes.
|
|
687
677
|
|
|
688
|
-
###
|
|
678
|
+
### Security
|
|
689
679
|
|
|
690
|
-
-
|
|
680
|
+
- Hardened vault writes, file permissions, and login flow.
|
|
681
|
+
- Stopped leaking secrets in `docker exec` args.
|
|
682
|
+
- Enforced vault sandbox isolation policy.
|
|
691
683
|
|
|
692
|
-
###
|
|
684
|
+
### Changed
|
|
693
685
|
|
|
694
|
-
-
|
|
686
|
+
- Renamed `docker` sandbox mode to `container` (breaking).
|
|
687
|
+
- Replaced `DockerProvisioner` with `DockerContainerManager` + idle stop.
|
|
695
688
|
|
|
696
|
-
|
|
689
|
+
## [0.2.0-beta.0]
|
|
697
690
|
|
|
698
|
-
|
|
691
|
+
### Added
|
|
699
692
|
|
|
700
|
-
|
|
693
|
+
- Sentry integration for error monitoring, tracing, and metrics (#21).
|
|
694
|
+
- Persistent session management with in-thread replies (#18).
|
|
695
|
+
- Telegram: native slash commands; private-chat session fix (#15).
|
|
696
|
+
- `pi-coding-agent` extension loading (#12).
|
|
701
697
|
|
|
702
|
-
|
|
698
|
+
## Earlier releases
|
|
703
699
|
|
|
704
|
-
|
|
700
|
+
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).
|