kimaki 1.3.0 → 1.5.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/assets/fonts/Geist-Bold.ttf +0 -0
- package/assets/fonts/Geist-Regular.ttf +0 -0
- package/assets/fonts/GeistMono-Regular.ttf +0 -0
- package/assets/fonts/OFL.txt +92 -0
- package/dist/agent-ui.e2e.test.js +27 -13
- package/dist/agent-ui.e2e.test.js.map +1 -1
- package/dist/agent-ui.js +2 -1
- package/dist/agent-ui.js.map +1 -1
- package/dist/analytics.e2e.test.js +1 -1
- package/dist/analytics.e2e.test.js.map +1 -1
- package/dist/autostart.d.ts +4 -0
- package/dist/autostart.js +55 -10
- package/dist/autostart.js.map +1 -1
- package/dist/bot.d.ts +13 -6
- package/dist/bot.js +17 -15
- package/dist/bot.js.map +1 -1
- package/dist/btw.e2e.test.js +3 -3
- package/dist/builtin-skills.d.ts +3 -0
- package/dist/builtin-skills.js +29 -0
- package/dist/builtin-skills.js.map +1 -1
- package/dist/builtin-skills.test.js +72 -1
- package/dist/builtin-skills.test.js.map +1 -1
- package/dist/catalog-refresh.e2e.test.js +2 -2
- package/dist/cli/bot.d.ts +1 -1
- package/dist/cli/bot.js +33 -18
- package/dist/cli/bot.js.map +1 -1
- package/dist/cli/discord.js +32 -6
- package/dist/cli/discord.js.map +1 -1
- package/dist/cli/schedule.js +23 -9
- package/dist/cli/schedule.js.map +1 -1
- package/dist/cli/session.js +37 -12
- package/dist/cli/session.js.map +1 -1
- package/dist/cli/shared.d.ts +5 -3
- package/dist/cli/shared.js +45 -10
- package/dist/cli/shared.js.map +1 -1
- package/dist/cli-discord.e2e.test.js +13 -8
- package/dist/cli-discord.e2e.test.js.map +1 -1
- package/dist/cli-lock.e2e.test.js +87 -20
- package/dist/cli-lock.e2e.test.js.map +1 -1
- package/dist/cli-read.e2e.test.js +18 -9
- package/dist/cli-read.e2e.test.js.map +1 -1
- package/dist/cli-sessions.e2e.test.js +4 -3
- package/dist/cli-sessions.e2e.test.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/preference-commands.d.ts +4 -0
- package/dist/commands/preference-commands.js +38 -4
- package/dist/commands/preference-commands.js.map +1 -1
- package/dist/commands/session-commands.js +11 -8
- package/dist/commands/session-commands.js.map +1 -1
- package/dist/commands/thread-commands.js +94 -24
- package/dist/commands/thread-commands.js.map +1 -1
- package/dist/commands/worktree-commands.d.ts +5 -6
- package/dist/commands/worktree-commands.js +8 -7
- package/dist/commands/worktree-commands.js.map +1 -1
- package/dist/commands.e2e.test.js +25 -21
- package/dist/commands.e2e.test.js.map +1 -1
- package/dist/coordinator-agents.e2e.test.d.ts +1 -0
- package/dist/coordinator-agents.e2e.test.js +113 -0
- package/dist/coordinator-agents.e2e.test.js.map +1 -0
- package/dist/coordinator-idle.e2e.test.d.ts +1 -0
- package/dist/coordinator-idle.e2e.test.js +100 -0
- package/dist/coordinator-idle.e2e.test.js.map +1 -0
- package/dist/coordinator-queue.e2e.test.d.ts +1 -0
- package/dist/coordinator-queue.e2e.test.js +244 -0
- package/dist/coordinator-queue.e2e.test.js.map +1 -0
- package/dist/coordinator-warmup.e2e.test.d.ts +1 -0
- package/dist/coordinator-warmup.e2e.test.js +131 -0
- package/dist/coordinator-warmup.e2e.test.js.map +1 -0
- package/dist/coordinator.d.ts +6 -0
- package/dist/coordinator.e2e.test.d.ts +1 -0
- package/dist/coordinator.e2e.test.js +505 -0
- package/dist/coordinator.e2e.test.js.map +1 -0
- package/dist/coordinator.js +164 -0
- package/dist/coordinator.js.map +1 -0
- package/dist/db.d.ts +78 -3
- package/dist/db.test.js +1 -0
- package/dist/db.test.js.map +1 -1
- package/dist/diagram.d.ts +11 -0
- package/dist/diagram.js +232 -0
- package/dist/diagram.js.map +1 -0
- package/dist/diagram.test.d.ts +1 -0
- package/dist/diagram.test.js +52 -0
- package/dist/diagram.test.js.map +1 -0
- package/dist/duration.js +13 -5
- package/dist/duration.js.map +1 -1
- package/dist/effects.d.ts +6 -1
- package/dist/effects.js +97 -26
- package/dist/effects.js.map +1 -1
- package/dist/event-loop.d.ts +2 -3
- package/dist/event-loop.js +74 -44
- package/dist/event-loop.js.map +1 -1
- package/dist/format-parts.d.ts +21 -4
- package/dist/format-parts.js +40 -23
- package/dist/format-parts.js.map +1 -1
- package/dist/gateway-replay.e2e.test.js +4 -4
- package/dist/harness.e2e.test.js +2 -2
- package/dist/harness.e2e.test.js.map +1 -1
- package/dist/hello-thread.e2e.test.js +56 -5
- package/dist/hello-thread.e2e.test.js.map +1 -1
- package/dist/ingress.js +47 -12
- package/dist/ingress.js.map +1 -1
- package/dist/interaction-context.d.ts +4 -4
- package/dist/interaction-context.js +9 -7
- package/dist/interaction-context.js.map +1 -1
- package/dist/interrupt.e2e.test.js +8 -5
- package/dist/interrupt.e2e.test.js.map +1 -1
- package/dist/legacy.e2e.test.js +1 -1
- package/dist/lock-routes.d.ts +83 -31
- package/dist/lock-routes.js +68 -8
- package/dist/lock-routes.js.map +1 -1
- package/dist/lock-server.d.ts +3 -2
- package/dist/lock-server.js +23 -7
- package/dist/lock-server.js.map +1 -1
- package/dist/main.d.ts +6 -3
- package/dist/main.js +14 -4
- package/dist/main.js.map +1 -1
- package/dist/mainmast-idle.e2e.test.d.ts +1 -0
- package/dist/mainmast-idle.e2e.test.js +99 -0
- package/dist/mainmast-idle.e2e.test.js.map +1 -0
- package/dist/mainmast-queue.e2e.test.d.ts +1 -0
- package/dist/mainmast-queue.e2e.test.js +244 -0
- package/dist/mainmast-queue.e2e.test.js.map +1 -0
- package/dist/mainmast-warmup.e2e.test.d.ts +1 -0
- package/dist/mainmast-warmup.e2e.test.js +130 -0
- package/dist/mainmast-warmup.e2e.test.js.map +1 -0
- package/dist/mainmast.d.ts +6 -0
- package/dist/mainmast.e2e.test.d.ts +1 -0
- package/dist/mainmast.e2e.test.js +428 -0
- package/dist/mainmast.e2e.test.js.map +1 -0
- package/dist/mainmast.js +156 -0
- package/dist/mainmast.js.map +1 -0
- package/dist/markdown/markdown.test.js +14 -4
- package/dist/markdown/markdown.test.js.map +1 -1
- package/dist/markdown/render-markdown.js +9 -6
- package/dist/markdown/render-markdown.js.map +1 -1
- package/dist/onboarding-cli.e2e.test.js +7 -6
- package/dist/onboarding-cli.e2e.test.js.map +1 -1
- package/dist/onboarding.d.ts +3 -10
- package/dist/onboarding.e2e.test.js +8 -10
- package/dist/onboarding.e2e.test.js.map +1 -1
- package/dist/onboarding.js +14 -24
- package/dist/onboarding.js.map +1 -1
- package/dist/permissions.e2e.test.js +3 -3
- package/dist/plugin/coordinator.d.ts +4 -0
- package/dist/plugin/coordinator.js +389 -0
- package/dist/plugin/coordinator.js.map +1 -0
- package/dist/plugin/index.js +93 -61
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/mainmast.d.ts +4 -0
- package/dist/plugin/mainmast.js +379 -0
- package/dist/plugin/mainmast.js.map +1 -0
- package/dist/plugin.e2e.test.js +1 -1
- package/dist/preference-commands.e2e.test.js +103 -24
- package/dist/preference-commands.e2e.test.js.map +1 -1
- package/dist/project.d.ts +1 -1
- package/dist/prompt.d.ts +22 -9
- package/dist/prompt.js +64 -48
- package/dist/prompt.js.map +1 -1
- package/dist/questions.e2e.test.js +13 -13
- package/dist/queue-sources.e2e.test.d.ts +1 -0
- package/dist/queue-sources.e2e.test.js +168 -0
- package/dist/queue-sources.e2e.test.js.map +1 -0
- package/dist/queue.d.ts +9 -1
- package/dist/queue.e2e.test.js +48 -30
- package/dist/queue.e2e.test.js.map +1 -1
- package/dist/queue.js +97 -24
- package/dist/queue.js.map +1 -1
- package/dist/queue.test.d.ts +1 -0
- package/dist/queue.test.js +57 -0
- package/dist/queue.test.js.map +1 -0
- package/dist/remote-send.e2e.test.js +6 -6
- package/dist/remote-send.js +2 -1
- package/dist/remote-send.js.map +1 -1
- package/dist/renderer.e2e.test.js +7 -7
- package/dist/restart.e2e.test.js +2 -2
- package/dist/routines.e2e.test.js +2 -2
- package/dist/scheduler.d.ts +3 -3
- package/dist/scheduler.e2e.test.js +43 -20
- package/dist/scheduler.e2e.test.js.map +1 -1
- package/dist/scheduler.js +4 -2
- package/dist/scheduler.js.map +1 -1
- package/dist/schema-sql.d.ts +1 -1
- package/dist/schema-sql.js +1 -1
- package/dist/schema-sql.js.map +1 -1
- package/dist/schema.d.ts +152 -6
- package/dist/schema.js +12 -0
- package/dist/schema.js.map +1 -1
- package/dist/session-commands.e2e.test.js +36 -11
- package/dist/session-commands.e2e.test.js.map +1 -1
- package/dist/session-events.d.ts +18 -6
- package/dist/session-events.js +175 -27
- package/dist/session-events.js.map +1 -1
- package/dist/session-ops.e2e.test.js +63 -12
- package/dist/session-ops.e2e.test.js.map +1 -1
- package/dist/sessions.d.ts +44 -21
- package/dist/sessions.js +177 -65
- package/dist/sessions.js.map +1 -1
- package/dist/shell.e2e.test.js +4 -4
- package/dist/slash-commands.js +6 -4
- package/dist/slash-commands.js.map +1 -1
- package/dist/slash-commands.test.js +2 -0
- package/dist/slash-commands.test.js.map +1 -1
- package/dist/sleep.e2e.test.js +29 -14
- package/dist/sleep.e2e.test.js.map +1 -1
- package/dist/sleeps.d.ts +2 -1
- package/dist/sleeps.js +21 -3
- package/dist/sleeps.js.map +1 -1
- package/dist/store.d.ts +1 -0
- package/dist/store.js +3 -2
- package/dist/store.js.map +1 -1
- package/dist/system-prompt.d.ts +5 -15
- package/dist/system-prompt.js +180 -131
- package/dist/system-prompt.js.map +1 -1
- package/dist/test/generate-log-plugin/index.d.ts +3 -0
- package/dist/test/generate-log-plugin/index.js +15 -0
- package/dist/test/generate-log-plugin/index.js.map +1 -0
- package/dist/test/harness.d.ts +20 -2
- package/dist/test/harness.js +51 -11
- package/dist/test/harness.js.map +1 -1
- package/dist/test/replay.js +11 -8
- package/dist/test/replay.js.map +1 -1
- package/dist/thread-reducer.d.ts +29 -6
- package/dist/thread-reducer.fixtures.test.js +58 -51
- package/dist/thread-reducer.fixtures.test.js.map +1 -1
- package/dist/thread-reducer.js +109 -50
- package/dist/thread-reducer.js.map +1 -1
- package/dist/thread-reducer.test.js +190 -48
- package/dist/thread-reducer.test.js.map +1 -1
- package/dist/tunnel.d.ts +9 -0
- package/dist/tunnel.js +117 -28
- package/dist/tunnel.js.map +1 -1
- package/dist/tunnel.test.js +81 -5
- package/dist/tunnel.test.js.map +1 -1
- package/dist/voice-attachments.e2e.test.js +108 -18
- package/dist/voice-attachments.e2e.test.js.map +1 -1
- package/dist/voice-call.e2e.test.js +9 -9
- package/dist/voice-call.js +6 -6
- package/dist/voice-call.js.map +1 -1
- package/dist/voice-openai.e2e.test.js +59 -23
- package/dist/voice-openai.e2e.test.js.map +1 -1
- package/dist/voice.d.ts +1 -1
- package/dist/voice.js +72 -24
- package/dist/voice.js.map +1 -1
- package/dist/working-directory.e2e.test.js +11 -11
- package/dist/working-directory.e2e.test.js.map +1 -1
- package/package.json +11 -5
- package/skills/kimaki-tunnel/SKILL.md +3 -2
- package/src/agent-ui.e2e.test.ts +27 -13
- package/src/agent-ui.ts +2 -1
- package/src/analytics.e2e.test.ts +1 -1
- package/src/autostart.ts +55 -10
- package/src/bot.ts +36 -19
- package/src/btw.e2e.test.ts +3 -3
- package/src/builtin-skills.test.ts +73 -1
- package/src/builtin-skills.ts +33 -0
- package/src/catalog-refresh.e2e.test.ts +2 -2
- package/src/cli/bot.ts +30 -19
- package/src/cli/discord.ts +30 -6
- package/src/cli/schedule.ts +23 -9
- package/src/cli/session.ts +35 -12
- package/src/cli/shared.ts +43 -8
- package/src/cli-discord.e2e.test.ts +13 -8
- package/src/cli-lock.e2e.test.ts +88 -20
- package/src/cli-read.e2e.test.ts +17 -8
- package/src/cli-sessions.e2e.test.ts +4 -3
- package/src/cli.ts +2 -0
- package/src/commands/preference-commands.ts +38 -4
- package/src/commands/session-commands.ts +12 -7
- package/src/commands/thread-commands.ts +92 -24
- package/src/commands/worktree-commands.ts +10 -9
- package/src/commands.e2e.test.ts +25 -21
- package/src/coordinator-agents.e2e.test.ts +145 -0
- package/src/coordinator-idle.e2e.test.ts +122 -0
- package/src/coordinator-queue.e2e.test.ts +279 -0
- package/src/coordinator-warmup.e2e.test.ts +158 -0
- package/src/coordinator.e2e.test.ts +545 -0
- package/src/coordinator.ts +168 -0
- package/src/db.test.ts +1 -0
- package/src/diagram.test.ts +56 -0
- package/src/diagram.ts +243 -0
- package/src/duration.ts +13 -5
- package/src/effects.ts +99 -27
- package/src/event-loop.ts +71 -45
- package/src/format-parts.ts +53 -22
- package/src/gateway-replay.e2e.test.ts +4 -4
- package/src/harness.e2e.test.ts +2 -2
- package/src/hello-thread.e2e.test.ts +59 -5
- package/src/ingress.ts +44 -11
- package/src/interaction-context.ts +12 -11
- package/src/interrupt.e2e.test.ts +8 -5
- package/src/legacy.e2e.test.ts +1 -1
- package/src/lock-routes.ts +62 -8
- package/src/lock-server.ts +23 -7
- package/src/main.ts +26 -10
- package/src/markdown/markdown.test.ts +15 -4
- package/src/markdown/render-markdown.ts +9 -6
- package/src/onboarding-cli.e2e.test.ts +7 -6
- package/src/onboarding.e2e.test.ts +8 -10
- package/src/onboarding.ts +13 -29
- package/src/permissions.e2e.test.ts +3 -3
- package/src/plugin/coordinator.ts +401 -0
- package/src/plugin/index.ts +86 -59
- package/src/plugin.e2e.test.ts +1 -1
- package/src/preference-commands.e2e.test.ts +103 -23
- package/src/prompt.ts +87 -43
- package/src/questions.e2e.test.ts +13 -13
- package/src/queue-sources.e2e.test.ts +197 -0
- package/src/queue.e2e.test.ts +48 -30
- package/src/queue.test.ts +59 -0
- package/src/queue.ts +104 -24
- package/src/remote-send.e2e.test.ts +6 -6
- package/src/remote-send.ts +2 -1
- package/src/renderer.e2e.test.ts +7 -7
- package/src/restart.e2e.test.ts +2 -2
- package/src/routines.e2e.test.ts +2 -2
- package/src/scheduler.e2e.test.ts +45 -19
- package/src/scheduler.ts +4 -2
- package/src/schema-sql.ts +1 -1
- package/src/schema.ts +13 -0
- package/src/session-commands.e2e.test.ts +38 -11
- package/src/session-events.ts +168 -25
- package/src/session-ops.e2e.test.ts +64 -11
- package/src/sessions.ts +217 -67
- package/src/shell.e2e.test.ts +4 -4
- package/src/slash-commands.test.ts +2 -0
- package/src/slash-commands.ts +6 -4
- package/src/sleep.e2e.test.ts +30 -13
- package/src/sleeps.ts +20 -3
- package/src/store.ts +5 -2
- package/src/system-prompt.ts +190 -134
- package/src/test/generate-log-plugin/index.ts +16 -0
- package/src/test/harness.ts +77 -17
- package/src/test/replay.ts +12 -7
- package/src/thread-reducer.fixtures.test.ts +58 -51
- package/src/thread-reducer.test.ts +199 -49
- package/src/thread-reducer.ts +135 -66
- package/src/tunnel.test.ts +81 -5
- package/src/tunnel.ts +124 -25
- package/src/voice-attachments.e2e.test.ts +110 -18
- package/src/voice-call.e2e.test.ts +9 -9
- package/src/voice-call.ts +6 -6
- package/src/voice-openai.e2e.test.ts +64 -24
- package/src/voice.ts +93 -26
- package/src/working-directory.e2e.test.ts +11 -11
- package/src/message-tool.e2e.test.ts +0 -45
package/dist/lock-routes.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export declare const sendInput: z.ZodObject<{
|
|
|
16
16
|
baseBranch: z.ZodOptional<z.ZodString>;
|
|
17
17
|
worktree: z.ZodOptional<z.ZodString>;
|
|
18
18
|
notifyOnly: z.ZodOptional<z.ZodBoolean>;
|
|
19
|
+
wait: z.ZodOptional<z.ZodNumber>;
|
|
20
|
+
senderSessionId: z.ZodOptional<z.ZodString>;
|
|
19
21
|
permissions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
20
22
|
prompt: z.ZodString;
|
|
21
23
|
files: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -46,6 +48,8 @@ export declare const lockRoutes: {
|
|
|
46
48
|
baseBranch: z.ZodOptional<z.ZodString>;
|
|
47
49
|
worktree: z.ZodOptional<z.ZodString>;
|
|
48
50
|
notifyOnly: z.ZodOptional<z.ZodBoolean>;
|
|
51
|
+
wait: z.ZodOptional<z.ZodNumber>;
|
|
52
|
+
senderSessionId: z.ZodOptional<z.ZodString>;
|
|
49
53
|
permissions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
50
54
|
prompt: z.ZodString;
|
|
51
55
|
files: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -71,6 +75,8 @@ export declare const lockRoutes: {
|
|
|
71
75
|
baseBranch?: string | undefined;
|
|
72
76
|
worktree?: string | undefined;
|
|
73
77
|
notifyOnly?: boolean | undefined;
|
|
78
|
+
wait?: number | undefined;
|
|
79
|
+
senderSessionId?: string | undefined;
|
|
74
80
|
permissions?: string[] | undefined;
|
|
75
81
|
files?: {
|
|
76
82
|
uri: string;
|
|
@@ -100,7 +106,10 @@ export declare const lockRoutes: {
|
|
|
100
106
|
name: string;
|
|
101
107
|
}[];
|
|
102
108
|
}, signal: AbortSignal) => Promise<Error | {
|
|
103
|
-
uploaded:
|
|
109
|
+
uploaded: {
|
|
110
|
+
name: string;
|
|
111
|
+
url: string | null;
|
|
112
|
+
}[];
|
|
104
113
|
}>;
|
|
105
114
|
};
|
|
106
115
|
status: {
|
|
@@ -125,12 +134,26 @@ export declare const lockRoutes: {
|
|
|
125
134
|
}[];
|
|
126
135
|
}>;
|
|
127
136
|
};
|
|
137
|
+
'session.warmup': {
|
|
138
|
+
handle: (bot: Bot, raw: unknown, signal: AbortSignal) => Promise<Error | {
|
|
139
|
+
data: unknown;
|
|
140
|
+
}>;
|
|
141
|
+
input: z.ZodObject<{
|
|
142
|
+
sessionId: z.ZodString;
|
|
143
|
+
}, z.core.$strip>;
|
|
144
|
+
run: (bot: Bot, input: {
|
|
145
|
+
sessionId: string;
|
|
146
|
+
}, signal: AbortSignal) => Promise<Error | DbError | {
|
|
147
|
+
busy: boolean;
|
|
148
|
+
sleeping: boolean;
|
|
149
|
+
}>;
|
|
150
|
+
};
|
|
128
151
|
restart: {
|
|
129
152
|
handle: (bot: Bot, raw: unknown, signal: AbortSignal) => Promise<Error | {
|
|
130
153
|
data: unknown;
|
|
131
154
|
}>;
|
|
132
155
|
input: z.ZodObject<{}, z.core.$strip>;
|
|
133
|
-
run: (bot: Bot, input: Record<string, never>, signal: AbortSignal) => Promise<
|
|
156
|
+
run: (bot: Bot, input: Record<string, never>, signal: AbortSignal) => Promise<ConfigError | Error | {
|
|
134
157
|
restarting: boolean;
|
|
135
158
|
pid: number;
|
|
136
159
|
}>;
|
|
@@ -144,7 +167,7 @@ export declare const lockRoutes: {
|
|
|
144
167
|
}, z.core.$strip>;
|
|
145
168
|
run: (bot: Bot, input: {
|
|
146
169
|
durationMs: number;
|
|
147
|
-
}, signal: AbortSignal) => Promise<
|
|
170
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | FilesystemError | {
|
|
148
171
|
path: string;
|
|
149
172
|
}>;
|
|
150
173
|
};
|
|
@@ -174,7 +197,7 @@ export declare const lockRoutes: {
|
|
|
174
197
|
reason?: string | undefined;
|
|
175
198
|
sessionId?: string | undefined;
|
|
176
199
|
threadId?: string | undefined;
|
|
177
|
-
}, signal: AbortSignal) => Promise<
|
|
200
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | {
|
|
178
201
|
sessionId: string;
|
|
179
202
|
threadId: string;
|
|
180
203
|
wakeAt: string;
|
|
@@ -204,7 +227,7 @@ export declare const lockRoutes: {
|
|
|
204
227
|
preRun?: string | undefined;
|
|
205
228
|
user?: string | undefined;
|
|
206
229
|
allowConcurrency?: boolean | undefined;
|
|
207
|
-
}, signal: AbortSignal) => Promise<
|
|
230
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | {
|
|
208
231
|
routineId: number;
|
|
209
232
|
updated: string[];
|
|
210
233
|
}>;
|
|
@@ -218,7 +241,7 @@ export declare const lockRoutes: {
|
|
|
218
241
|
}, z.core.$strip>;
|
|
219
242
|
run: (bot: Bot, input: {
|
|
220
243
|
id: number;
|
|
221
|
-
}, signal: AbortSignal) => Promise<
|
|
244
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | {
|
|
222
245
|
routineId: number;
|
|
223
246
|
deleted: boolean;
|
|
224
247
|
}>;
|
|
@@ -263,7 +286,7 @@ export declare const lockRoutes: {
|
|
|
263
286
|
toolCall?: string | undefined;
|
|
264
287
|
sessionId?: string | undefined;
|
|
265
288
|
threadId?: string | undefined;
|
|
266
|
-
}, signal: AbortSignal) => Promise<
|
|
289
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | {
|
|
267
290
|
shown: true;
|
|
268
291
|
} | {
|
|
269
292
|
paths: string[];
|
|
@@ -271,6 +294,19 @@ export declare const lockRoutes: {
|
|
|
271
294
|
cancelled: true;
|
|
272
295
|
}>;
|
|
273
296
|
};
|
|
297
|
+
'session.buttons': {
|
|
298
|
+
handle: (bot: Bot, raw: unknown, signal: AbortSignal) => Promise<Error | {
|
|
299
|
+
data: unknown;
|
|
300
|
+
}>;
|
|
301
|
+
input: z.ZodObject<{
|
|
302
|
+
sessionIds: z.ZodArray<z.ZodString>;
|
|
303
|
+
}, z.core.$strip>;
|
|
304
|
+
run: (bot: Bot, input: {
|
|
305
|
+
sessionIds: string[];
|
|
306
|
+
}, signal: AbortSignal) => Promise<Error | {
|
|
307
|
+
[k: string]: string[];
|
|
308
|
+
}>;
|
|
309
|
+
};
|
|
274
310
|
'upload-request': {
|
|
275
311
|
handle: (bot: Bot, raw: unknown, signal: AbortSignal) => Promise<Error | {
|
|
276
312
|
data: unknown;
|
|
@@ -290,7 +326,7 @@ export declare const lockRoutes: {
|
|
|
290
326
|
toolCall?: string | undefined;
|
|
291
327
|
sessionId?: string | undefined;
|
|
292
328
|
threadId?: string | undefined;
|
|
293
|
-
}, signal: AbortSignal) => Promise<
|
|
329
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | {
|
|
294
330
|
shown: true;
|
|
295
331
|
} | {
|
|
296
332
|
paths: string[];
|
|
@@ -367,15 +403,15 @@ export declare const lockRoutes: {
|
|
|
367
403
|
input: z.ZodObject<{
|
|
368
404
|
id: z.ZodString;
|
|
369
405
|
operation: z.ZodPipe<z.ZodString, z.ZodEnum<{
|
|
370
|
-
label: "label";
|
|
371
406
|
remove: "remove";
|
|
372
407
|
activate: "activate";
|
|
408
|
+
label: "label";
|
|
373
409
|
}>>;
|
|
374
410
|
label: z.ZodOptional<z.ZodString>;
|
|
375
411
|
}, z.core.$strip>;
|
|
376
412
|
run: (bot: Bot, input: {
|
|
377
413
|
id: string;
|
|
378
|
-
operation: "
|
|
414
|
+
operation: "remove" | "activate" | "label";
|
|
379
415
|
label?: string | undefined;
|
|
380
416
|
}, signal: AbortSignal) => Promise<Error | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError | {
|
|
381
417
|
message: string;
|
|
@@ -397,7 +433,7 @@ export declare const lockRoutes: {
|
|
|
397
433
|
text: "on" | "off";
|
|
398
434
|
channelId?: string | undefined;
|
|
399
435
|
directory?: string | undefined;
|
|
400
|
-
}, signal: AbortSignal) => Promise<
|
|
436
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | {
|
|
401
437
|
enabled: boolean;
|
|
402
438
|
}>;
|
|
403
439
|
};
|
|
@@ -416,7 +452,7 @@ export declare const lockRoutes: {
|
|
|
416
452
|
clear?: boolean | undefined;
|
|
417
453
|
channelId?: string | undefined;
|
|
418
454
|
directory?: string | undefined;
|
|
419
|
-
}, signal: AbortSignal) => Promise<
|
|
455
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | {
|
|
420
456
|
cleared: boolean;
|
|
421
457
|
} | {
|
|
422
458
|
agent: string;
|
|
@@ -439,7 +475,7 @@ export declare const lockRoutes: {
|
|
|
439
475
|
clear?: boolean | undefined;
|
|
440
476
|
channelId?: string | undefined;
|
|
441
477
|
directory?: string | undefined;
|
|
442
|
-
}, signal: AbortSignal) => Promise<
|
|
478
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | {
|
|
443
479
|
cleared: boolean;
|
|
444
480
|
} | {
|
|
445
481
|
model: {
|
|
@@ -462,7 +498,7 @@ export declare const lockRoutes: {
|
|
|
462
498
|
model?: string | undefined;
|
|
463
499
|
variant?: string | undefined;
|
|
464
500
|
clear?: boolean | undefined;
|
|
465
|
-
}, signal: AbortSignal) => Promise<
|
|
501
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | {
|
|
466
502
|
cleared: boolean;
|
|
467
503
|
} | {
|
|
468
504
|
model: {
|
|
@@ -478,18 +514,18 @@ export declare const lockRoutes: {
|
|
|
478
514
|
}>;
|
|
479
515
|
input: z.ZodObject<{
|
|
480
516
|
text: z.ZodPipe<z.ZodString, z.ZodEnum<{
|
|
481
|
-
text: "text";
|
|
482
517
|
tools: "tools";
|
|
518
|
+
text: "text";
|
|
483
519
|
}>>;
|
|
484
520
|
channelId: z.ZodOptional<z.ZodString>;
|
|
485
521
|
directory: z.ZodOptional<z.ZodString>;
|
|
486
522
|
}, z.core.$strip>;
|
|
487
523
|
run: (bot: Bot, input: {
|
|
488
|
-
text: "
|
|
524
|
+
text: "tools" | "text";
|
|
489
525
|
channelId?: string | undefined;
|
|
490
526
|
directory?: string | undefined;
|
|
491
|
-
}, signal: AbortSignal) => Promise<
|
|
492
|
-
verbosity: "
|
|
527
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | {
|
|
528
|
+
verbosity: "tools" | "text";
|
|
493
529
|
}>;
|
|
494
530
|
};
|
|
495
531
|
'worktree.list': {
|
|
@@ -503,7 +539,7 @@ export declare const lockRoutes: {
|
|
|
503
539
|
run: (bot: Bot, input: {
|
|
504
540
|
channelId?: string | undefined;
|
|
505
541
|
directory?: string | undefined;
|
|
506
|
-
}, signal: AbortSignal) => Promise<
|
|
542
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | import("./worktrees.ts").GitError | {
|
|
507
543
|
entries: import("./worktrees.ts").GitWorktree[];
|
|
508
544
|
enabled: boolean;
|
|
509
545
|
}>;
|
|
@@ -548,7 +584,7 @@ export declare const lockRoutes: {
|
|
|
548
584
|
targetBranch?: string | undefined;
|
|
549
585
|
channelId?: string | undefined;
|
|
550
586
|
directory?: string | undefined;
|
|
551
|
-
}, signal: AbortSignal) => Promise<Error | DbError | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError |
|
|
587
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError | import("./worktrees.ts").GitError | {
|
|
552
588
|
targetBranch: string;
|
|
553
589
|
commitCount: number;
|
|
554
590
|
sha: string;
|
|
@@ -576,7 +612,7 @@ export declare const lockRoutes: {
|
|
|
576
612
|
targetBranch?: string | undefined;
|
|
577
613
|
channelId?: string | undefined;
|
|
578
614
|
directory?: string | undefined;
|
|
579
|
-
}, signal: AbortSignal) => Promise<Error | DbError | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError |
|
|
615
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError | import("./worktrees.ts").GitError | {
|
|
580
616
|
targetBranch: string;
|
|
581
617
|
commitCount: number;
|
|
582
618
|
sha: string;
|
|
@@ -595,7 +631,7 @@ export declare const lockRoutes: {
|
|
|
595
631
|
run: (bot: Bot, input: {
|
|
596
632
|
sessionId: string;
|
|
597
633
|
channelId?: string | undefined;
|
|
598
|
-
}, signal: AbortSignal) => Promise<Error | DbError | import("./errors.ts").OpenCodeError | DiscordError | OpenCodeUnavailableError |
|
|
634
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | import("./errors.ts").OpenCodeError | DiscordError | OpenCodeUnavailableError | {
|
|
599
635
|
title: string;
|
|
600
636
|
threadId: string;
|
|
601
637
|
sessionId: string;
|
|
@@ -614,7 +650,7 @@ export declare const lockRoutes: {
|
|
|
614
650
|
sessionId?: string | undefined;
|
|
615
651
|
threadId?: string | undefined;
|
|
616
652
|
directory?: string | undefined;
|
|
617
|
-
}, signal: AbortSignal) => Promise<Error | DbError | import("./errors.ts").OpenCodeError | DiscordError | OpenCodeUnavailableError |
|
|
653
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | import("./errors.ts").OpenCodeError | DiscordError | OpenCodeUnavailableError | import("./worktrees.ts").GitError | {
|
|
618
654
|
directory: string;
|
|
619
655
|
requestedDirectory?: undefined;
|
|
620
656
|
} | {
|
|
@@ -635,7 +671,7 @@ export declare const lockRoutes: {
|
|
|
635
671
|
text: string;
|
|
636
672
|
sessionId?: string | undefined;
|
|
637
673
|
threadId?: string | undefined;
|
|
638
|
-
}, signal: AbortSignal) => Promise<Error | import("./errors.ts").OpenCodeError | DiscordError | OpenCodeUnavailableError |
|
|
674
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | import("./errors.ts").OpenCodeError | DiscordError | OpenCodeUnavailableError | {
|
|
639
675
|
title: string;
|
|
640
676
|
}>;
|
|
641
677
|
};
|
|
@@ -650,7 +686,7 @@ export declare const lockRoutes: {
|
|
|
650
686
|
run: (bot: Bot, input: {
|
|
651
687
|
sessionId?: string | undefined;
|
|
652
688
|
threadId?: string | undefined;
|
|
653
|
-
}, signal: AbortSignal) => Promise<Error | DiscordError | OpenCodeUnavailableError |
|
|
689
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DiscordError | OpenCodeUnavailableError | {
|
|
654
690
|
archived: boolean;
|
|
655
691
|
}>;
|
|
656
692
|
};
|
|
@@ -665,10 +701,26 @@ export declare const lockRoutes: {
|
|
|
665
701
|
run: (bot: Bot, input: {
|
|
666
702
|
sessionId?: string | undefined;
|
|
667
703
|
threadId?: string | undefined;
|
|
668
|
-
}, signal: AbortSignal) => Promise<Error | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError |
|
|
704
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError | {
|
|
669
705
|
cleared: number;
|
|
670
706
|
}>;
|
|
671
707
|
};
|
|
708
|
+
'session.compact': {
|
|
709
|
+
handle: (bot: Bot, raw: unknown, signal: AbortSignal) => Promise<Error | {
|
|
710
|
+
data: unknown;
|
|
711
|
+
}>;
|
|
712
|
+
input: z.ZodObject<{
|
|
713
|
+
sessionId: z.ZodOptional<z.ZodString>;
|
|
714
|
+
threadId: z.ZodOptional<z.ZodString>;
|
|
715
|
+
}, z.core.$strip>;
|
|
716
|
+
run: (bot: Bot, input: {
|
|
717
|
+
sessionId?: string | undefined;
|
|
718
|
+
threadId?: string | undefined;
|
|
719
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError | {
|
|
720
|
+
sessionId: string;
|
|
721
|
+
queued: boolean;
|
|
722
|
+
}>;
|
|
723
|
+
};
|
|
672
724
|
'session.fork': {
|
|
673
725
|
handle: (bot: Bot, raw: unknown, signal: AbortSignal) => Promise<Error | {
|
|
674
726
|
data: unknown;
|
|
@@ -684,7 +736,7 @@ export declare const lockRoutes: {
|
|
|
684
736
|
threadId?: string | undefined;
|
|
685
737
|
before?: string | undefined;
|
|
686
738
|
name?: string | undefined;
|
|
687
|
-
}, signal: AbortSignal) => Promise<Error | DbError | import("./errors.ts").OpenCodeError | DiscordError | OpenCodeUnavailableError |
|
|
739
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | DbError | import("./errors.ts").OpenCodeError | DiscordError | OpenCodeUnavailableError | import("./worktrees.ts").GitError | {
|
|
688
740
|
threadId: string;
|
|
689
741
|
sessionId: string;
|
|
690
742
|
}>;
|
|
@@ -719,7 +771,7 @@ export declare const lockRoutes: {
|
|
|
719
771
|
text: string;
|
|
720
772
|
sessionId?: string | undefined;
|
|
721
773
|
threadId?: string | undefined;
|
|
722
|
-
}, signal: AbortSignal) => Promise<
|
|
774
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | OpenCodeUnavailableError | {
|
|
723
775
|
started: boolean;
|
|
724
776
|
}>;
|
|
725
777
|
};
|
|
@@ -764,7 +816,7 @@ export declare const lockRoutes: {
|
|
|
764
816
|
run: (bot: Bot, input: {
|
|
765
817
|
sessionId?: string | undefined;
|
|
766
818
|
threadId?: string | undefined;
|
|
767
|
-
}, signal: AbortSignal) => Promise<Error | import("./errors.ts").OpenCodeError | import("@opencode/client").SessionInboxInfo[]
|
|
819
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError | import("@opencode/client").SessionInboxInfo[]>;
|
|
768
820
|
};
|
|
769
821
|
'queue.remove': {
|
|
770
822
|
handle: (bot: Bot, raw: unknown, signal: AbortSignal) => Promise<Error | {
|
|
@@ -779,7 +831,7 @@ export declare const lockRoutes: {
|
|
|
779
831
|
inboxId: string;
|
|
780
832
|
sessionId?: string | undefined;
|
|
781
833
|
threadId?: string | undefined;
|
|
782
|
-
}, signal: AbortSignal) => Promise<Error | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError |
|
|
834
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError | {
|
|
783
835
|
removed: boolean;
|
|
784
836
|
}>;
|
|
785
837
|
};
|
|
@@ -794,7 +846,7 @@ export declare const lockRoutes: {
|
|
|
794
846
|
run: (bot: Bot, input: {
|
|
795
847
|
sessionId?: string | undefined;
|
|
796
848
|
threadId?: string | undefined;
|
|
797
|
-
}, signal: AbortSignal) => Promise<Error | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError |
|
|
849
|
+
}, signal: AbortSignal) => Promise<ConfigError | Error | import("./errors.ts").OpenCodeError | OpenCodeUnavailableError | {
|
|
798
850
|
cleared: number;
|
|
799
851
|
}>;
|
|
800
852
|
};
|
package/dist/lock-routes.js
CHANGED
|
@@ -11,7 +11,7 @@ import * as errore from 'errore';
|
|
|
11
11
|
import * as orm from 'drizzle-orm';
|
|
12
12
|
import { z } from 'zod';
|
|
13
13
|
import { parseButton } from "./agent-ui.js";
|
|
14
|
-
import {
|
|
14
|
+
import { fetchConversation, isCoordinatorChannel, oc, parseModel, projectOf } from "./bot.js";
|
|
15
15
|
import { credential, loginCli } from "./commands/login-commands.js";
|
|
16
16
|
import { setChannelAgent, setChannelModel, setGlobalModel, setVerbosity } from "./commands/preference-commands.js";
|
|
17
17
|
import { channelWorktrees, manageWorktree, newWorktree, setAutoWorktrees } from "./commands/worktree-commands.js";
|
|
@@ -21,7 +21,8 @@ import { abort, cancelQueuedPrompt, clearQueue, send, shell, upload } from "./pr
|
|
|
21
21
|
import { createTask, deleteTask, editTask, runTaskNow } from "./scheduler.js";
|
|
22
22
|
import * as schema from "./schema.js";
|
|
23
23
|
import { channelForDirectory, channelForSession, fork, resume, sessionCwd } from "./sessions.js";
|
|
24
|
-
import { createSleep } from "./sleeps.js";
|
|
24
|
+
import { createSleep, sleepsWarm } from "./sleeps.js";
|
|
25
|
+
import { conversationTyping, workersTyping } from "./thread-reducer.js";
|
|
25
26
|
import { worktreeName } from "./worktrees.js";
|
|
26
27
|
// Keeps input and run correlated, and gives the dispatcher one untyped entry point.
|
|
27
28
|
function route(definition) {
|
|
@@ -70,6 +71,10 @@ const sendFields = {
|
|
|
70
71
|
// '' asks for an automatic name.
|
|
71
72
|
worktree: z.string({ error: 'worktree must be a name or an empty string for an automatic name' }).optional(),
|
|
72
73
|
notifyOnly: z.boolean({ error: 'notifyOnly must be boolean' }).optional(),
|
|
74
|
+
// Seconds the CLI waits for the run (`--wait [seconds]`): a run that ends within them sends no coordinator note.
|
|
75
|
+
wait: z.number({ error: 'wait must be a number of seconds' }).positive({ error: 'wait must be a positive number of seconds' }).optional(),
|
|
76
|
+
// OPENCODE_SESSION_ID of the shell that ran `kimaki send`: a coordinator wakes when the runs it prompted end.
|
|
77
|
+
senderSessionId: text('senderSessionId').optional(),
|
|
73
78
|
permissions: z.array(z.string(), { error: 'Permission rules must be strings' }).optional(),
|
|
74
79
|
prompt: text('prompt'),
|
|
75
80
|
files: z.array(z.object({ uri: z.string(), name: z.string() }), { error: 'files must contain uri and name strings' }).optional(),
|
|
@@ -241,6 +246,20 @@ async function snapshotHeap({ dataDir }) {
|
|
|
241
246
|
return chmod;
|
|
242
247
|
return { path: written };
|
|
243
248
|
}
|
|
249
|
+
// The coordinator or a thread of its channel runs, from the thread views.
|
|
250
|
+
function coordinatorBusy(bot, sessionId) {
|
|
251
|
+
const { sessionThreads, roots, threads } = bot.store.getState();
|
|
252
|
+
// A coordinator's conversation is its channel. A replaced one (/reset-coordinator), one of a
|
|
253
|
+
// channel with coordinator mode off, or a thread session is never busy.
|
|
254
|
+
const channelId = sessionThreads[sessionId];
|
|
255
|
+
if (!channelId || roots[channelId] !== sessionId || !isCoordinatorChannel(bot, channelId))
|
|
256
|
+
return false;
|
|
257
|
+
const view = threads[channelId];
|
|
258
|
+
// An idle coordinator has no view after a bot restart; its threads do.
|
|
259
|
+
if (!view)
|
|
260
|
+
return workersTyping({ threads, channelId });
|
|
261
|
+
return view.coordinator && conversationTyping({ threads, threadId: channelId });
|
|
262
|
+
}
|
|
244
263
|
const loginField = z.string({ error: 'Login fields must be non-empty strings' }).min(1, { error: 'Login fields must be non-empty strings' }).optional();
|
|
245
264
|
export const lockRoutes = {
|
|
246
265
|
send: route({
|
|
@@ -273,6 +292,17 @@ export const lockRoutes = {
|
|
|
273
292
|
};
|
|
274
293
|
},
|
|
275
294
|
}),
|
|
295
|
+
// The plugin keeps a session's prompt cache warm while its coordinator channel is busy
|
|
296
|
+
// or it sleeps (plugin/coordinator.ts).
|
|
297
|
+
'session.warmup': route({
|
|
298
|
+
input: z.object({ sessionId: text('sessionId') }),
|
|
299
|
+
run: async (bot, { sessionId }) => {
|
|
300
|
+
const sleeping = await sleepsWarm(bot, sessionId);
|
|
301
|
+
if (sleeping instanceof Error)
|
|
302
|
+
return sleeping;
|
|
303
|
+
return { busy: coordinatorBusy(bot, sessionId), sleeping };
|
|
304
|
+
},
|
|
305
|
+
}),
|
|
276
306
|
restart: route({
|
|
277
307
|
input: z.object({}),
|
|
278
308
|
run: async (bot) => {
|
|
@@ -350,6 +380,17 @@ export const lockRoutes = {
|
|
|
350
380
|
return bot.features.agentUi.request({ ...input, sessionId, content: { buttons }, signal });
|
|
351
381
|
},
|
|
352
382
|
}),
|
|
383
|
+
// Labels of buttons each session showed and the user did not click yet (`kimaki session wait`).
|
|
384
|
+
'session.buttons': route({
|
|
385
|
+
input: z.object({ sessionIds: z.array(text('sessionId'), { error: 'sessionIds must be an array' }) }),
|
|
386
|
+
run: async (bot, { sessionIds }) => {
|
|
387
|
+
const prompts = Object.values(bot.store.getState().threads).flatMap((view) => view.agentUi);
|
|
388
|
+
return Object.fromEntries(sessionIds.map((sessionId) => [
|
|
389
|
+
sessionId,
|
|
390
|
+
prompts.flatMap((prompt) => prompt.sessionId === sessionId ? (prompt.buttons ?? []).map((item) => item.label) : []),
|
|
391
|
+
]));
|
|
392
|
+
},
|
|
393
|
+
}),
|
|
353
394
|
'upload-request': route({
|
|
354
395
|
input: z.object({
|
|
355
396
|
...agentUiFields,
|
|
@@ -488,10 +529,10 @@ export const lockRoutes = {
|
|
|
488
529
|
const target = localSession(bot, input);
|
|
489
530
|
if (target instanceof Error)
|
|
490
531
|
return target;
|
|
491
|
-
const thread = await
|
|
532
|
+
const thread = await fetchConversation(bot, target.threadId);
|
|
492
533
|
if (thread instanceof Error)
|
|
493
534
|
return thread;
|
|
494
|
-
return sessionCwd(bot, { thread, directory: input.directory });
|
|
535
|
+
return sessionCwd(bot, { conversation: thread, directory: input.directory });
|
|
495
536
|
},
|
|
496
537
|
}),
|
|
497
538
|
'session.title': route({
|
|
@@ -504,9 +545,12 @@ export const lockRoutes = {
|
|
|
504
545
|
const renamed = await oc(bot, 'session.update', (client) => client.session.update({ sessionID: target.sessionId, title }));
|
|
505
546
|
if (renamed instanceof Error)
|
|
506
547
|
return renamed;
|
|
507
|
-
const thread = await
|
|
548
|
+
const thread = await fetchConversation(bot, target.threadId);
|
|
508
549
|
if (thread instanceof Error)
|
|
509
550
|
return thread;
|
|
551
|
+
// A coordinator channel keeps its project name.
|
|
552
|
+
if (!thread.isThread())
|
|
553
|
+
return { title };
|
|
510
554
|
const updated = await thread.setName(title.slice(0, 100)).catch((cause) => new DiscordError({ operation: 'rename thread', cause }));
|
|
511
555
|
if (updated instanceof Error)
|
|
512
556
|
return updated;
|
|
@@ -519,9 +563,11 @@ export const lockRoutes = {
|
|
|
519
563
|
const target = localSession(bot, input);
|
|
520
564
|
if (target instanceof Error)
|
|
521
565
|
return target;
|
|
522
|
-
const thread = await
|
|
566
|
+
const thread = await fetchConversation(bot, target.threadId);
|
|
523
567
|
if (thread instanceof Error)
|
|
524
568
|
return thread;
|
|
569
|
+
if (!thread.isThread())
|
|
570
|
+
return new ConfigError({ reason: 'A coordinator channel cannot be archived' });
|
|
525
571
|
const archived = await thread.setArchived(true).catch((cause) => new DiscordError({ operation: 'archive thread', cause }));
|
|
526
572
|
if (archived instanceof Error)
|
|
527
573
|
return archived;
|
|
@@ -537,17 +583,31 @@ export const lockRoutes = {
|
|
|
537
583
|
return abort(bot, { threadId: target.threadId });
|
|
538
584
|
},
|
|
539
585
|
}),
|
|
586
|
+
'session.compact': route({
|
|
587
|
+
input: sessionInput({}),
|
|
588
|
+
run: async (bot, input) => {
|
|
589
|
+
const target = localSession(bot, input);
|
|
590
|
+
if (target instanceof Error)
|
|
591
|
+
return target;
|
|
592
|
+
// Queued, so an agent compacting its own session finishes its turn first.
|
|
593
|
+
const sessionID = input.sessionId ?? target.sessionId;
|
|
594
|
+
const compaction = await oc(bot, 'session.compact', (client) => client.session.compact({ sessionID, delivery: 'queue' }));
|
|
595
|
+
if (compaction instanceof Error)
|
|
596
|
+
return compaction;
|
|
597
|
+
return { sessionId: sessionID, queued: true };
|
|
598
|
+
},
|
|
599
|
+
}),
|
|
540
600
|
'session.fork': route({
|
|
541
601
|
input: sessionInput({ before: text('before').optional(), name: text('name').optional() }),
|
|
542
602
|
run: async (bot, input) => {
|
|
543
603
|
const target = localSession(bot, input);
|
|
544
604
|
if (target instanceof Error)
|
|
545
605
|
return target;
|
|
546
|
-
const thread = await
|
|
606
|
+
const thread = await fetchConversation(bot, target.threadId);
|
|
547
607
|
if (thread instanceof Error)
|
|
548
608
|
return thread;
|
|
549
609
|
// A child session ID forks that child, not the root.
|
|
550
|
-
return fork(bot, {
|
|
610
|
+
return fork(bot, { source: thread, sessionId: input.sessionId ?? target.sessionId, before: input.before, name: input.name, author: cliAuthor(bot) });
|
|
551
611
|
},
|
|
552
612
|
}),
|
|
553
613
|
'session.command': route({
|