@geminixiang/mikan 1.0.0-beta.61 → 1.0.0-beta.62
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 +22 -0
- package/README.md +3 -1
- package/dist/adapters/slack/bot.d.ts +7 -3
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +18 -12
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/web/admin/portal.d.ts +1 -1
- package/dist/adapters/web/admin/portal.d.ts.map +1 -1
- package/dist/adapters/web/admin/portal.js +33 -25
- package/dist/adapters/web/admin/portal.js.map +1 -1
- package/dist/adapters/web/admin/types.d.ts +6 -3
- package/dist/adapters/web/admin/types.d.ts.map +1 -1
- package/dist/adapters/web/admin/types.js.map +1 -1
- package/dist/adapters/web/server.d.ts +3 -0
- package/dist/adapters/web/server.d.ts.map +1 -1
- package/dist/adapters/web/server.js +4 -6
- package/dist/adapters/web/server.js.map +1 -1
- package/dist/cli/boot.js +1 -1
- package/dist/cli/boot.js.map +1 -1
- package/dist/cli/office.d.ts.map +1 -1
- package/dist/cli/office.js +66 -0
- package/dist/cli/office.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -4
- package/dist/config.js.map +1 -1
- package/dist/env-manifest.js +3 -3
- package/dist/env-manifest.js.map +1 -1
- package/dist/events/index.d.ts +56 -34
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +114 -23
- package/dist/events/index.js.map +1 -1
- package/dist/events/scheduler.d.ts +34 -0
- package/dist/events/scheduler.d.ts.map +1 -0
- package/dist/events/scheduler.js +231 -0
- package/dist/events/scheduler.js.map +1 -0
- package/dist/harness/mcp.d.ts.map +1 -1
- package/dist/harness/mcp.js +1 -3
- package/dist/harness/mcp.js.map +1 -1
- package/dist/harness/open-connector.d.ts +21 -10
- package/dist/harness/open-connector.d.ts.map +1 -1
- package/dist/harness/open-connector.js +109 -135
- package/dist/harness/open-connector.js.map +1 -1
- package/dist/harness/prompt.js +4 -4
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +24 -9
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/tools/event.d.ts +1 -1
- package/dist/harness/tools/event.d.ts.map +1 -1
- package/dist/harness/tools/event.js +19 -22
- package/dist/harness/tools/event.js.map +1 -1
- package/dist/harness/tools/index.d.ts +2 -1
- package/dist/harness/tools/index.d.ts.map +1 -1
- package/dist/harness/tools/index.js +2 -3
- package/dist/harness/tools/index.js.map +1 -1
- package/dist/main.js +17 -9
- package/dist/main.js.map +1 -1
- package/dist/office/index.d.ts +3 -2
- package/dist/office/index.d.ts.map +1 -1
- package/dist/office/index.js +3 -3
- package/dist/office/index.js.map +1 -1
- package/dist/office/projection.d.ts.map +1 -1
- package/dist/office/projection.js +0 -2
- package/dist/office/projection.js.map +1 -1
- package/dist/office/types.d.ts +0 -2
- package/dist/office/types.d.ts.map +1 -1
- package/dist/office/types.js.map +1 -1
- package/dist/runtime/conversation-runtime.js +1 -0
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/types.d.ts +4 -1
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/types.d.ts +6 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -1
- package/dist/events/watcher.d.ts +0 -43
- package/dist/events/watcher.d.ts.map +0 -1
- package/dist/events/watcher.js +0 -395
- package/dist/events/watcher.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,28 @@ any release.
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [1.0.0-beta.62]
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Scheduled events now live in host-only per-office state (`<state dir>/conversations/<office key>/events/`) and are never mounted into a sandbox. The `event` tool and the Admin portal are the only writers, both confined to the current office; `create` never overwrites, deleting a record cancels its timer or cron immediately, and the Slack App Home lists only the opener's DM office schedules. The filesystem watcher is gone: hand-edited records take effect on the next start.
|
|
17
|
+
- OpenConnector is an ordinary MCP server with a deployment default. When a Slack conversation has not declared `open-connector`, mikan mints that conversation's runtime token with `OPENCONNECTOR_ADMIN_TOKEN` and saves a normal `mcpServers` entry in its settings; conversations may override it with a self-hosted server or disable it like any other MCP entry. The loader no longer fills `connectionName`; connection selection belongs to OpenConnector.
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- `mikan office migrate-events` moves legacy `<workspace>/events/*.json` records into the owning office's state and reports records it cannot attribute.
|
|
22
|
+
- `mikan office migrate-openconnector` converts legacy `open-connector-runtime-token.json` files into conversation MCP entries.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- The agent `event` tool can no longer list, read, update, or delete another office's events, and `scope=all` is rejected.
|
|
27
|
+
|
|
28
|
+
### Docs and maintenance
|
|
29
|
+
|
|
30
|
+
- Redraw the architecture diagram as a single rounded page and refresh the README image.
|
|
31
|
+
- Support local Slack E2E runs, capture intake and session markers on failure, and schedule E2E events through the `event` tool instead of writing files.
|
|
32
|
+
- Record the Office isolation policy, storage inventory, and OpenConnector history audit under `docs/`.
|
|
33
|
+
|
|
12
34
|
## [1.0.0-beta.61]
|
|
13
35
|
|
|
14
36
|
### Added
|
package/README.md
CHANGED
|
@@ -16,7 +16,9 @@ A multi-platform AI coding agent for Slack, Telegram, Discord, and GitHub.
|
|
|
16
16
|
|
|
17
17
|
mikan keeps the chat record, agent session, and execution runtime separate:
|
|
18
18
|
|
|
19
|
-

|
|
19
|
+
[](docs/architecture.html)
|
|
20
|
+
|
|
21
|
+
[Download the HTML/SVG source](docs/architecture.html) to view the full architecture diagram locally.
|
|
20
22
|
|
|
21
23
|
- **Conversation office** is the unit everything else hangs off: one conversation's working area plus its own sandbox runtime. An office is identified by its platform and raw conversation id, and its directory is named by an office key (`v1-<platform>-<readable-id>-<hash>`), so two platforms can never collide on the same raw id.
|
|
22
24
|
- **Chat / conversation data** is the platform-facing record: `log.jsonl`, attachments, and conversation files.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type MessagingBot, type ConversationEvent, type MessagingEventHandler, type MessagingInfo, type PlatformHistoryMessage, type PlatformHistoryOptions, type PlatformUserInfo } from "../../adapter.js";
|
|
2
2
|
import { type Workspace } from "../../office/index.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { EventScheduler } from "../../events/scheduler.js";
|
|
4
4
|
import type { SlackChannel, SlackUser } from "./types.js";
|
|
5
5
|
import { type SuggestedPrompt } from "./assistant.js";
|
|
6
6
|
/** Slices `text` into pieces that each fit one streaming call. */
|
|
@@ -38,7 +38,7 @@ export declare class SlackMessagingBot implements MessagingBot {
|
|
|
38
38
|
private stopped;
|
|
39
39
|
private queues;
|
|
40
40
|
private intake;
|
|
41
|
-
private
|
|
41
|
+
private eventScheduler;
|
|
42
42
|
/** Host office dir for a Slack conversation. */
|
|
43
43
|
private conversationDir;
|
|
44
44
|
private resolveReplyMode;
|
|
@@ -48,7 +48,7 @@ export declare class SlackMessagingBot implements MessagingBot {
|
|
|
48
48
|
botToken: string;
|
|
49
49
|
workspace: Workspace;
|
|
50
50
|
});
|
|
51
|
-
|
|
51
|
+
setEventScheduler(scheduler: EventScheduler): void;
|
|
52
52
|
start(): Promise<void>;
|
|
53
53
|
stop(): Promise<void>;
|
|
54
54
|
getUser(userId: string): SlackUser | undefined;
|
|
@@ -157,6 +157,10 @@ export declare class SlackMessagingBot implements MessagingBot {
|
|
|
157
157
|
private channelKindFor;
|
|
158
158
|
private processSlackMessageIntake;
|
|
159
159
|
private appendRunningTasks;
|
|
160
|
+
/**
|
|
161
|
+
* Scheduled jobs of the opener's own DM office only: the App Home is a
|
|
162
|
+
* personal surface, so other offices' schedules are not listed here.
|
|
163
|
+
*/
|
|
160
164
|
private appendScheduledJobs;
|
|
161
165
|
private buildHomeView;
|
|
162
166
|
private createCommandAdapters;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/bot.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,YAAY,EAEjB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAI1B,KAAK,aAAa,EAElB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../../src/adapters/slack/bot.ts"],"names":[],"mappings":"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"}
|
|
@@ -234,7 +234,7 @@ export class SlackMessagingBot {
|
|
|
234
234
|
this.stopped = false;
|
|
235
235
|
this.queues = new Map();
|
|
236
236
|
this.intake = new MessagingIntakeTracker("Slack");
|
|
237
|
-
this.
|
|
237
|
+
this.eventScheduler = null;
|
|
238
238
|
this.handler = handler;
|
|
239
239
|
this.workspace = config.workspace;
|
|
240
240
|
this.botToken = config.botToken;
|
|
@@ -251,8 +251,8 @@ export class SlackMessagingBot {
|
|
|
251
251
|
rejectRateLimitedCalls: true,
|
|
252
252
|
});
|
|
253
253
|
}
|
|
254
|
-
|
|
255
|
-
this.
|
|
254
|
+
setEventScheduler(scheduler) {
|
|
255
|
+
this.eventScheduler = scheduler;
|
|
256
256
|
}
|
|
257
257
|
// ==========================================================================
|
|
258
258
|
// Public API
|
|
@@ -922,8 +922,14 @@ export class SlackMessagingBot {
|
|
|
922
922
|
}
|
|
923
923
|
}
|
|
924
924
|
}
|
|
925
|
-
|
|
926
|
-
|
|
925
|
+
/**
|
|
926
|
+
* Scheduled jobs of the opener's own DM office only: the App Home is a
|
|
927
|
+
* personal surface, so other offices' schedules are not listed here.
|
|
928
|
+
*/
|
|
929
|
+
appendScheduledJobs(blocks, dmChannelId) {
|
|
930
|
+
const periodicEvents = dmChannelId && this.eventScheduler
|
|
931
|
+
? this.eventScheduler.periodicEvents(createOfficeAddress("slack", dmChannelId))
|
|
932
|
+
: [];
|
|
927
933
|
blocks.push({ type: "divider" }, {
|
|
928
934
|
type: "header",
|
|
929
935
|
text: {
|
|
@@ -960,7 +966,7 @@ export class SlackMessagingBot {
|
|
|
960
966
|
});
|
|
961
967
|
}
|
|
962
968
|
}
|
|
963
|
-
buildHomeView() {
|
|
969
|
+
buildHomeView(dmChannelId) {
|
|
964
970
|
const blocks = [
|
|
965
971
|
{
|
|
966
972
|
type: "section",
|
|
@@ -976,7 +982,7 @@ export class SlackMessagingBot {
|
|
|
976
982
|
},
|
|
977
983
|
];
|
|
978
984
|
this.appendRunningTasks(blocks);
|
|
979
|
-
this.appendScheduledJobs(blocks);
|
|
985
|
+
this.appendScheduledJobs(blocks, dmChannelId);
|
|
980
986
|
blocks.push({ type: "divider" }, {
|
|
981
987
|
type: "context",
|
|
982
988
|
elements: [
|
|
@@ -1369,7 +1375,7 @@ export class SlackMessagingBot {
|
|
|
1369
1375
|
this.webClient.views
|
|
1370
1376
|
.publish({
|
|
1371
1377
|
user_id: e.user,
|
|
1372
|
-
view: this.buildHomeView(),
|
|
1378
|
+
view: this.buildHomeView(e.channel),
|
|
1373
1379
|
})
|
|
1374
1380
|
.catch((err) => {
|
|
1375
1381
|
log.logWarning(`Failed to publish App Home view`, String(err));
|
|
@@ -1400,11 +1406,11 @@ export class SlackMessagingBot {
|
|
|
1400
1406
|
await this.postMessage(channelId, formatForceStopped("slack", userId ?? "unknown"));
|
|
1401
1407
|
// Refresh home tab
|
|
1402
1408
|
if (userId) {
|
|
1403
|
-
this.
|
|
1404
|
-
.publish({
|
|
1409
|
+
this.openDirectConversation(userId)
|
|
1410
|
+
.then((dmChannelId) => this.webClient.views.publish({
|
|
1405
1411
|
user_id: userId,
|
|
1406
|
-
view: this.buildHomeView(),
|
|
1407
|
-
})
|
|
1412
|
+
view: this.buildHomeView(dmChannelId),
|
|
1413
|
+
}))
|
|
1408
1414
|
.catch((err) => {
|
|
1409
1415
|
log.logWarning(`Failed to refresh App Home view`, String(err));
|
|
1410
1416
|
});
|