aimux-cli 0.1.15 → 0.1.18
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/README.md +184 -67
- package/bin/aimux-dev +10 -0
- package/dist/alert-display.d.ts +21 -0
- package/dist/alert-display.js +86 -0
- package/dist/alert-display.js.map +1 -0
- package/dist/attachment-store.d.ts +0 -7
- package/dist/attachment-store.js +2 -86
- package/dist/attachment-store.js.map +1 -1
- package/dist/builtin-metadata-watchers.js +4 -4
- package/dist/builtin-metadata-watchers.js.map +1 -1
- package/dist/claude-hooks.d.ts +1 -0
- package/dist/claude-hooks.js +25 -0
- package/dist/claude-hooks.js.map +1 -1
- package/dist/config.d.ts +19 -13
- package/dist/config.js +28 -14
- package/dist/config.js.map +1 -1
- package/dist/connection-targets.d.ts +8 -0
- package/dist/connection-targets.js +28 -0
- package/dist/connection-targets.js.map +1 -0
- package/dist/credentials.d.ts +12 -0
- package/dist/credentials.js +49 -0
- package/dist/credentials.js.map +1 -0
- package/dist/daemon.d.ts +23 -0
- package/dist/daemon.js +391 -66
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/index.d.ts +13 -10
- package/dist/dashboard/index.js +3 -26
- package/dist/dashboard/index.js.map +1 -1
- package/dist/dashboard/order.d.ts +22 -0
- package/dist/dashboard/order.js +55 -0
- package/dist/dashboard/order.js.map +1 -0
- package/dist/dashboard/pending-actions.d.ts +39 -10
- package/dist/dashboard/pending-actions.js +166 -36
- package/dist/dashboard/pending-actions.js.map +1 -1
- package/dist/dashboard/quick-jump.d.ts +2 -1
- package/dist/dashboard/quick-jump.js +7 -4
- package/dist/dashboard/quick-jump.js.map +1 -1
- package/dist/dashboard/session-actions.d.ts +4 -4
- package/dist/dashboard/session-actions.js +1 -1
- package/dist/dashboard/session-actions.js.map +1 -1
- package/dist/dashboard/session-registry.d.ts +4 -3
- package/dist/dashboard/session-registry.js +16 -50
- package/dist/dashboard/session-registry.js.map +1 -1
- package/dist/dashboard/state.d.ts +1 -1
- package/dist/dashboard/state.js.map +1 -1
- package/dist/dashboard/ui-state-store.d.ts +16 -1
- package/dist/dashboard/ui-state-store.js +73 -2
- package/dist/dashboard/ui-state-store.js.map +1 -1
- package/dist/debug-state.d.ts +97 -0
- package/dist/debug-state.js +541 -0
- package/dist/debug-state.js.map +1 -0
- package/dist/debug.d.ts +38 -0
- package/dist/debug.js +219 -15
- package/dist/debug.js.map +1 -1
- package/dist/default-plugins/gh-pr-context.d.ts +2 -1
- package/dist/default-plugins/gh-pr-context.js +17 -11
- package/dist/default-plugins/gh-pr-context.js.map +1 -1
- package/dist/default-plugins/transcript-length.js +15 -2
- package/dist/default-plugins/transcript-length.js.map +1 -1
- package/dist/fast-control.js +37 -19
- package/dist/fast-control.js.map +1 -1
- package/dist/http-client.js +31 -2
- package/dist/http-client.js.map +1 -1
- package/dist/local-ui-server.d.ts +22 -0
- package/dist/local-ui-server.js +186 -0
- package/dist/local-ui-server.js.map +1 -0
- package/dist/login-flow.d.ts +7 -0
- package/dist/login-flow.js +120 -0
- package/dist/login-flow.js.map +1 -0
- package/dist/main.js +824 -152
- package/dist/main.js.map +1 -1
- package/dist/managed-launch-env.js +14 -0
- package/dist/managed-launch-env.js.map +1 -1
- package/dist/metadata-server.d.ts +36 -36
- package/dist/metadata-server.js +638 -137
- package/dist/metadata-server.js.map +1 -1
- package/dist/metadata-store.d.ts +4 -1
- package/dist/metadata-store.js +30 -2
- package/dist/metadata-store.js.map +1 -1
- package/dist/multiplexer/agent-io-methods.d.ts +2 -10
- package/dist/multiplexer/agent-io-methods.js +12 -43
- package/dist/multiplexer/agent-io-methods.js.map +1 -1
- package/dist/multiplexer/archives.js +8 -9
- package/dist/multiplexer/archives.js.map +1 -1
- package/dist/multiplexer/dashboard-control.js +45 -13
- package/dist/multiplexer/dashboard-control.js.map +1 -1
- package/dist/multiplexer/dashboard-interaction.d.ts +8 -2
- package/dist/multiplexer/dashboard-interaction.js +187 -28
- package/dist/multiplexer/dashboard-interaction.js.map +1 -1
- package/dist/multiplexer/dashboard-model.d.ts +10 -3
- package/dist/multiplexer/dashboard-model.js +417 -35
- package/dist/multiplexer/dashboard-model.js.map +1 -1
- package/dist/multiplexer/dashboard-ops.d.ts +9 -7
- package/dist/multiplexer/dashboard-ops.js +178 -68
- package/dist/multiplexer/dashboard-ops.js.map +1 -1
- package/dist/multiplexer/dashboard-state-methods.d.ts +2 -1
- package/dist/multiplexer/dashboard-state-methods.js +3 -2
- package/dist/multiplexer/dashboard-state-methods.js.map +1 -1
- package/dist/multiplexer/dashboard-tail-methods.d.ts +22 -10
- package/dist/multiplexer/dashboard-tail-methods.js +164 -47
- package/dist/multiplexer/dashboard-tail-methods.js.map +1 -1
- package/dist/multiplexer/dashboard-view-methods.d.ts +1 -1
- package/dist/multiplexer/dashboard-view-methods.js +23 -8
- package/dist/multiplexer/dashboard-view-methods.js.map +1 -1
- package/dist/multiplexer/graveyard-view-model.d.ts +9 -1
- package/dist/multiplexer/graveyard-view-model.js +39 -0
- package/dist/multiplexer/graveyard-view-model.js.map +1 -1
- package/dist/multiplexer/index.d.ts +15 -12
- package/dist/multiplexer/index.js +64 -43
- package/dist/multiplexer/index.js.map +1 -1
- package/dist/multiplexer/notifications.js +107 -24
- package/dist/multiplexer/notifications.js.map +1 -1
- package/dist/multiplexer/persistence-methods.d.ts +31 -4
- package/dist/multiplexer/persistence-methods.js +304 -308
- package/dist/multiplexer/persistence-methods.js.map +1 -1
- package/dist/multiplexer/runtime-lifecycle-methods.d.ts +8 -10
- package/dist/multiplexer/runtime-lifecycle-methods.js +104 -86
- package/dist/multiplexer/runtime-lifecycle-methods.js.map +1 -1
- package/dist/multiplexer/runtime-state.d.ts +8 -10
- package/dist/multiplexer/runtime-state.js +82 -145
- package/dist/multiplexer/runtime-state.js.map +1 -1
- package/dist/multiplexer/runtime-sync.d.ts +2 -10
- package/dist/multiplexer/runtime-sync.js +3 -18
- package/dist/multiplexer/runtime-sync.js.map +1 -1
- package/dist/multiplexer/service-state-snapshot.d.ts +2 -4
- package/dist/multiplexer/service-state-snapshot.js +4 -51
- package/dist/multiplexer/service-state-snapshot.js.map +1 -1
- package/dist/multiplexer/services.d.ts +1 -0
- package/dist/multiplexer/services.js +55 -5
- package/dist/multiplexer/services.js.map +1 -1
- package/dist/multiplexer/session-capture.d.ts +1 -0
- package/dist/multiplexer/session-capture.js +24 -0
- package/dist/multiplexer/session-capture.js.map +1 -0
- package/dist/multiplexer/session-launch.d.ts +4 -1
- package/dist/multiplexer/session-launch.js +152 -63
- package/dist/multiplexer/session-launch.js.map +1 -1
- package/dist/multiplexer/session-runtime-core.d.ts +8 -20
- package/dist/multiplexer/session-runtime-core.js +40 -135
- package/dist/multiplexer/session-runtime-core.js.map +1 -1
- package/dist/multiplexer/subscreens.js +10 -3
- package/dist/multiplexer/subscreens.js.map +1 -1
- package/dist/multiplexer/worktree-graveyard.d.ts +0 -1
- package/dist/multiplexer/worktree-graveyard.js +15 -16
- package/dist/multiplexer/worktree-graveyard.js.map +1 -1
- package/dist/multiplexer/worktrees.js +96 -40
- package/dist/multiplexer/worktrees.js.map +1 -1
- package/dist/notification-context.js +8 -4
- package/dist/notification-context.js.map +1 -1
- package/dist/notifications.js +163 -101
- package/dist/notifications.js.map +1 -1
- package/dist/notify.d.ts +4 -0
- package/dist/notify.js +14 -0
- package/dist/notify.js.map +1 -1
- package/dist/paths.d.ts +32 -7
- package/dist/paths.js +82 -58
- package/dist/paths.js.map +1 -1
- package/dist/pending-actions.d.ts +5 -0
- package/dist/pending-actions.js +14 -0
- package/dist/pending-actions.js.map +1 -0
- package/dist/plugin-runtime.js +9 -2
- package/dist/plugin-runtime.js.map +1 -1
- package/dist/project-events.d.ts +1 -10
- package/dist/project-events.js +0 -10
- package/dist/project-events.js.map +1 -1
- package/dist/project-scanner.d.ts +2 -3
- package/dist/project-scanner.js +58 -129
- package/dist/project-scanner.js.map +1 -1
- package/dist/project-service-manifest.d.ts +1 -3
- package/dist/project-service-manifest.js +1 -3
- package/dist/project-service-manifest.js.map +1 -1
- package/dist/relay-client.d.ts +30 -0
- package/dist/relay-client.js +191 -0
- package/dist/relay-client.js.map +1 -0
- package/dist/remote-access.d.ts +16 -0
- package/dist/remote-access.js +91 -0
- package/dist/remote-access.js.map +1 -0
- package/dist/runtime-core/exchange-derived.d.ts +2 -0
- package/dist/runtime-core/exchange-derived.js +154 -0
- package/dist/runtime-core/exchange-derived.js.map +1 -0
- package/dist/runtime-core/exchange-import.d.ts +24 -0
- package/dist/runtime-core/exchange-import.js +318 -0
- package/dist/runtime-core/exchange-import.js.map +1 -0
- package/dist/runtime-core/exchange-store.d.ts +157 -0
- package/dist/runtime-core/exchange-store.js +453 -0
- package/dist/runtime-core/exchange-store.js.map +1 -0
- package/dist/runtime-core/topology-services.d.ts +38 -0
- package/dist/runtime-core/topology-services.js +171 -0
- package/dist/runtime-core/topology-services.js.map +1 -0
- package/dist/runtime-core/topology-sessions.d.ts +52 -0
- package/dist/runtime-core/topology-sessions.js +239 -0
- package/dist/runtime-core/topology-sessions.js.map +1 -0
- package/dist/runtime-core/topology-store.d.ts +171 -0
- package/dist/runtime-core/topology-store.js +420 -0
- package/dist/runtime-core/topology-store.js.map +1 -0
- package/dist/runtime-core/topology-worktrees.d.ts +60 -0
- package/dist/runtime-core/topology-worktrees.js +200 -0
- package/dist/runtime-core/topology-worktrees.js.map +1 -0
- package/dist/runtime-migration.d.ts +69 -0
- package/dist/runtime-migration.js +399 -0
- package/dist/runtime-migration.js.map +1 -0
- package/dist/session-bootstrap.d.ts +8 -6
- package/dist/session-bootstrap.js +51 -158
- package/dist/session-bootstrap.js.map +1 -1
- package/dist/session-runtime.d.ts +2 -0
- package/dist/session-runtime.js +1 -0
- package/dist/session-runtime.js.map +1 -1
- package/dist/session-semantics.d.ts +12 -4
- package/dist/session-semantics.js +14 -0
- package/dist/session-semantics.js.map +1 -1
- package/dist/shell-hooks.js +32 -10
- package/dist/shell-hooks.js.map +1 -1
- package/dist/shell-state.d.ts +2 -0
- package/dist/shell-state.js +26 -1
- package/dist/shell-state.js.map +1 -1
- package/dist/statusline-model.d.ts +10 -2
- package/dist/statusline-model.js +106 -30
- package/dist/statusline-model.js.map +1 -1
- package/dist/task-workflow.d.ts +6 -9
- package/dist/task-workflow.js +37 -84
- package/dist/task-workflow.js.map +1 -1
- package/dist/tasks.d.ts +6 -33
- package/dist/tasks.js +46 -88
- package/dist/tasks.js.map +1 -1
- package/dist/team.d.ts +29 -0
- package/dist/team.js +40 -0
- package/dist/team.js.map +1 -1
- package/dist/threads.d.ts +6 -35
- package/dist/threads.js +89 -98
- package/dist/threads.js.map +1 -1
- package/dist/tmux/inbox-popup.js +37 -15
- package/dist/tmux/inbox-popup.js.map +1 -1
- package/dist/tmux/runtime-manager.d.ts +3 -0
- package/dist/tmux/runtime-manager.js +21 -4
- package/dist/tmux/runtime-manager.js.map +1 -1
- package/dist/tmux/statusline.js +49 -9
- package/dist/tmux/statusline.js.map +1 -1
- package/dist/tmux/window-open.js +1 -2
- package/dist/tmux/window-open.js.map +1 -1
- package/dist/tool-output-watchers.d.ts +0 -18
- package/dist/tool-output-watchers.js +0 -322
- package/dist/tool-output-watchers.js.map +1 -1
- package/dist/tui/screens/dashboard-renderers.js +37 -25
- package/dist/tui/screens/dashboard-renderers.js.map +1 -1
- package/dist/tui/screens/overlay-renderers.d.ts +2 -0
- package/dist/tui/screens/overlay-renderers.js +37 -1
- package/dist/tui/screens/overlay-renderers.js.map +1 -1
- package/dist/tui/screens/subscreen-renderers.js +7 -0
- package/dist/tui/screens/subscreen-renderers.js.map +1 -1
- package/dist/worktree.js +17 -0
- package/dist/worktree.js.map +1 -1
- package/dist-ui/_expo/static/css/web-30453ede1678c16acb08b97e83e8646d.css +1 -0
- package/dist-ui/_expo/static/js/web/entry-477c745b2adc79367a4380ecf07d9ff6.js +14620 -0
- package/dist-ui/assets/assets/images/icon.a5413dcd2e811c9f2317d01a28118d8a.png +0 -0
- package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
- package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
- package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
- package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
- package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
- package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
- package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
- package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
- package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
- package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
- package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
- package/dist-ui/assets/node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
- package/dist-ui/assets/node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
- package/dist-ui/assets/node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
- package/dist-ui/assets/node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
- package/dist-ui/assets/node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
- package/dist-ui/assets/node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
- package/dist-ui/assets/node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
- package/dist-ui/favicon.ico +0 -0
- package/dist-ui/index.html +38 -0
- package/dist-ui/metadata.json +1 -0
- package/package.json +31 -15
- package/dist/agent-message-parts.d.ts +0 -17
- package/dist/agent-message-parts.js +0 -31
- package/dist/agent-message-parts.js.map +0 -1
- package/dist/instance-directory.d.ts +0 -32
- package/dist/instance-directory.js +0 -82
- package/dist/instance-directory.js.map +0 -1
- package/dist/instance-registry.d.ts +0 -39
- package/dist/instance-registry.js +0 -208
- package/dist/instance-registry.js.map +0 -1
- package/dist/multiplexer/session-actions.d.ts +0 -40
- package/dist/multiplexer/session-actions.js +0 -110
- package/dist/multiplexer/session-actions.js.map +0 -1
- package/dist/orchestration-dispatcher.d.ts +0 -25
- package/dist/orchestration-dispatcher.js +0 -59
- package/dist/orchestration-dispatcher.js.map +0 -1
- package/dist/session-input-operations.d.ts +0 -19
- package/dist/session-input-operations.js +0 -46
- package/dist/session-input-operations.js.map +0 -1
- package/dist/session-message-history.d.ts +0 -27
- package/dist/session-message-history.js +0 -105
- package/dist/session-message-history.js.map +0 -1
- package/dist/task-dispatcher.d.ts +0 -64
- package/dist/task-dispatcher.js +0 -213
- package/dist/task-dispatcher.js.map +0 -1
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
type SessionActionsHost = any;
|
|
2
|
-
export declare function forkAgent(host: SessionActionsHost, opts: {
|
|
3
|
-
sourceSessionId: string;
|
|
4
|
-
targetToolConfigKey: string;
|
|
5
|
-
targetSessionId?: string;
|
|
6
|
-
instruction?: string;
|
|
7
|
-
targetWorktreePath?: string;
|
|
8
|
-
open?: boolean;
|
|
9
|
-
extraArgs?: string[];
|
|
10
|
-
}): Promise<{
|
|
11
|
-
sessionId: string;
|
|
12
|
-
threadId: string;
|
|
13
|
-
}>;
|
|
14
|
-
export declare function spawnAgent(host: SessionActionsHost, opts: {
|
|
15
|
-
toolConfigKey: string;
|
|
16
|
-
targetSessionId?: string;
|
|
17
|
-
targetWorktreePath?: string;
|
|
18
|
-
open?: boolean;
|
|
19
|
-
extraArgs?: string[];
|
|
20
|
-
}): Promise<{
|
|
21
|
-
sessionId: string;
|
|
22
|
-
}>;
|
|
23
|
-
export declare function renameAgent(host: SessionActionsHost, sessionId: string, label?: string): Promise<{
|
|
24
|
-
sessionId: string;
|
|
25
|
-
label?: string;
|
|
26
|
-
}>;
|
|
27
|
-
export declare function stopAgent(host: SessionActionsHost, sessionId: string): Promise<{
|
|
28
|
-
sessionId: string;
|
|
29
|
-
status: "offline";
|
|
30
|
-
}>;
|
|
31
|
-
export declare function sendAgentToGraveyard(host: SessionActionsHost, sessionId: string): Promise<{
|
|
32
|
-
sessionId: string;
|
|
33
|
-
status: "graveyard";
|
|
34
|
-
previousStatus: "running" | "offline";
|
|
35
|
-
}>;
|
|
36
|
-
export declare function migrateAgentSession(host: SessionActionsHost, sessionId: string, targetWorktreePath: string): Promise<{
|
|
37
|
-
sessionId: string;
|
|
38
|
-
worktreePath?: string;
|
|
39
|
-
}>;
|
|
40
|
-
export {};
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { waitForSessionExit } from "../dashboard/session-actions.js";
|
|
2
|
-
import { loadConfig } from "../config.js";
|
|
3
|
-
export async function forkAgent(host, opts) {
|
|
4
|
-
host.syncSessionsFromState();
|
|
5
|
-
const result = await host.forkSessionFromSource(opts.sourceSessionId, opts.targetToolConfigKey, opts.targetSessionId, opts.instruction, opts.targetWorktreePath, opts.extraArgs ?? []);
|
|
6
|
-
if (!result) {
|
|
7
|
-
throw new Error(`Unable to fork session ${opts.sourceSessionId}`);
|
|
8
|
-
}
|
|
9
|
-
if (opts.open !== false && result.target) {
|
|
10
|
-
const openResult = typeof host.waitAndOpenLiveTmuxWindowForEntry === "function"
|
|
11
|
-
? await host.waitAndOpenLiveTmuxWindowForEntry({ id: result.sessionId })
|
|
12
|
-
: host.openLiveTmuxWindowForEntry({ id: result.sessionId });
|
|
13
|
-
if (openResult === "missing") {
|
|
14
|
-
host.tmuxRuntimeManager.openTarget(result.target, { insideTmux: host.tmuxRuntimeManager.isInsideTmux() });
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return {
|
|
18
|
-
sessionId: result.sessionId,
|
|
19
|
-
threadId: result.threadId,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
export async function spawnAgent(host, opts) {
|
|
23
|
-
host.syncSessionsFromState();
|
|
24
|
-
const config = loadConfig();
|
|
25
|
-
const toolCfg = config.tools[opts.toolConfigKey];
|
|
26
|
-
if (!toolCfg) {
|
|
27
|
-
throw new Error(`Unknown tool config: ${opts.toolConfigKey}`);
|
|
28
|
-
}
|
|
29
|
-
if (!toolCfg.enabled) {
|
|
30
|
-
throw new Error(`Tool "${opts.toolConfigKey}" is disabled`);
|
|
31
|
-
}
|
|
32
|
-
const targetWorktreePath = opts.targetWorktreePath === process.cwd() ? undefined : opts.targetWorktreePath;
|
|
33
|
-
const transport = host.createSession(toolCfg.command, [...toolCfg.args, ...(opts.extraArgs ?? [])], toolCfg.preambleFlag, opts.toolConfigKey, undefined, toolCfg.sessionIdFlag, targetWorktreePath, undefined, opts.targetSessionId);
|
|
34
|
-
const target = host.sessionTmuxTargets.get(transport.id);
|
|
35
|
-
if (opts.open !== false && target) {
|
|
36
|
-
const openResult = typeof host.waitAndOpenLiveTmuxWindowForEntry === "function"
|
|
37
|
-
? await host.waitAndOpenLiveTmuxWindowForEntry({ id: transport.id })
|
|
38
|
-
: host.openLiveTmuxWindowForEntry({ id: transport.id });
|
|
39
|
-
if (openResult === "missing") {
|
|
40
|
-
host.tmuxRuntimeManager.openTarget(target, { insideTmux: host.tmuxRuntimeManager.isInsideTmux() });
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return { sessionId: transport.id };
|
|
44
|
-
}
|
|
45
|
-
export async function renameAgent(host, sessionId, label) {
|
|
46
|
-
host.syncSessionsFromState();
|
|
47
|
-
const runningSession = host.sessions.find((session) => session.id === sessionId);
|
|
48
|
-
const offlineSession = host.offlineSessions.find((session) => session.id === sessionId);
|
|
49
|
-
if (!runningSession && !offlineSession) {
|
|
50
|
-
throw new Error(`Session "${sessionId}" not found`);
|
|
51
|
-
}
|
|
52
|
-
await host.updateSessionLabel(sessionId, label);
|
|
53
|
-
return { sessionId, label: host.getSessionLabel(sessionId) };
|
|
54
|
-
}
|
|
55
|
-
export async function stopAgent(host, sessionId) {
|
|
56
|
-
host.syncSessionsFromState();
|
|
57
|
-
const runningSession = host.sessions.find((session) => session.id === sessionId);
|
|
58
|
-
if (!runningSession) {
|
|
59
|
-
const offlineSession = host.offlineSessions.find((session) => session.id === sessionId);
|
|
60
|
-
if (offlineSession) {
|
|
61
|
-
return { sessionId, status: "offline" };
|
|
62
|
-
}
|
|
63
|
-
throw new Error(`Session "${sessionId}" not found`);
|
|
64
|
-
}
|
|
65
|
-
if (!host.stoppingSessionIds.has(sessionId)) {
|
|
66
|
-
host.stopSessionToOffline(runningSession);
|
|
67
|
-
}
|
|
68
|
-
await waitForSessionExit(runningSession);
|
|
69
|
-
host.saveState();
|
|
70
|
-
return { sessionId, status: "offline" };
|
|
71
|
-
}
|
|
72
|
-
export async function sendAgentToGraveyard(host, sessionId) {
|
|
73
|
-
host.syncSessionsFromState();
|
|
74
|
-
let previousStatus;
|
|
75
|
-
const runningSession = host.sessions.find((session) => session.id === sessionId);
|
|
76
|
-
if (runningSession) {
|
|
77
|
-
previousStatus = "running";
|
|
78
|
-
host.graveyardAfterStopSessionIds.add(sessionId);
|
|
79
|
-
if (!host.stoppingSessionIds.has(sessionId)) {
|
|
80
|
-
host.stopSessionToOffline(runningSession);
|
|
81
|
-
}
|
|
82
|
-
await waitForSessionExit(runningSession);
|
|
83
|
-
host.saveState();
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
const offlineSession = host.offlineSessions.find((session) => session.id === sessionId);
|
|
87
|
-
if (!offlineSession) {
|
|
88
|
-
throw new Error(`Session "${sessionId}" not found`);
|
|
89
|
-
}
|
|
90
|
-
previousStatus = "offline";
|
|
91
|
-
}
|
|
92
|
-
host.graveyardAfterStopSessionIds.delete(sessionId);
|
|
93
|
-
host.graveyardSession(sessionId);
|
|
94
|
-
return { sessionId, status: "graveyard", previousStatus };
|
|
95
|
-
}
|
|
96
|
-
export async function migrateAgentSession(host, sessionId, targetWorktreePath) {
|
|
97
|
-
host.syncSessionsFromState();
|
|
98
|
-
const runningSession = host.sessions.find((session) => session.id === sessionId);
|
|
99
|
-
if (!runningSession) {
|
|
100
|
-
const offlineSession = host.offlineSessions.find((session) => session.id === sessionId);
|
|
101
|
-
if (offlineSession) {
|
|
102
|
-
throw new Error(`Session "${sessionId}" is offline and cannot be migrated`);
|
|
103
|
-
}
|
|
104
|
-
throw new Error(`Session "${sessionId}" not found`);
|
|
105
|
-
}
|
|
106
|
-
await host.migrateAgent(sessionId, targetWorktreePath);
|
|
107
|
-
await waitForSessionExit(runningSession);
|
|
108
|
-
return { sessionId, worktreePath: host.getSessionWorktreePath(sessionId) };
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=session-actions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-actions.js","sourceRoot":"","sources":["../../src/multiplexer/session-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { type MessageKind } from "./threads.js";
|
|
2
|
-
interface DispatchSession {
|
|
3
|
-
id: string;
|
|
4
|
-
exited: boolean;
|
|
5
|
-
status: string;
|
|
6
|
-
write(data: string): void;
|
|
7
|
-
}
|
|
8
|
-
type PromptDelivery = (session: DispatchSession, prompt: string) => void;
|
|
9
|
-
export interface OrchestrationDeliveryEvent {
|
|
10
|
-
type: "message_delivered";
|
|
11
|
-
threadId: string;
|
|
12
|
-
messageId: string;
|
|
13
|
-
sessionId: string;
|
|
14
|
-
kind: MessageKind;
|
|
15
|
-
}
|
|
16
|
-
export declare class OrchestrationDispatcher {
|
|
17
|
-
private readonly getSession;
|
|
18
|
-
private readonly canSessionReceiveInput;
|
|
19
|
-
private readonly deliverPrompt;
|
|
20
|
-
private pendingEvents;
|
|
21
|
-
constructor(getSession: (id: string) => DispatchSession | undefined, canSessionReceiveInput: (id: string) => boolean, deliverPrompt?: PromptDelivery);
|
|
22
|
-
tick(localSessionIds: string[]): void;
|
|
23
|
-
drainEvents(): OrchestrationDeliveryEvent[];
|
|
24
|
-
}
|
|
25
|
-
export {};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { listThreads, markMessageDelivered, readMessages } from "./threads.js";
|
|
2
|
-
function shouldDispatch(kind) {
|
|
3
|
-
return kind === "request" || kind === "reply" || kind === "handoff" || kind === "decision" || kind === "status";
|
|
4
|
-
}
|
|
5
|
-
export class OrchestrationDispatcher {
|
|
6
|
-
getSession;
|
|
7
|
-
canSessionReceiveInput;
|
|
8
|
-
deliverPrompt;
|
|
9
|
-
pendingEvents = [];
|
|
10
|
-
constructor(getSession, canSessionReceiveInput,
|
|
11
|
-
// Production multiplexer wiring overrides this with writeAgentInput(..., submit: true).
|
|
12
|
-
deliverPrompt = (session, prompt) => session.write(prompt + "\r")) {
|
|
13
|
-
this.getSession = getSession;
|
|
14
|
-
this.canSessionReceiveInput = canSessionReceiveInput;
|
|
15
|
-
this.deliverPrompt = deliverPrompt;
|
|
16
|
-
}
|
|
17
|
-
tick(localSessionIds) {
|
|
18
|
-
for (const thread of listThreads()) {
|
|
19
|
-
const messages = readMessages(thread.id);
|
|
20
|
-
for (const message of messages) {
|
|
21
|
-
if (!message.to?.length || !shouldDispatch(message.kind))
|
|
22
|
-
continue;
|
|
23
|
-
for (const recipient of message.to) {
|
|
24
|
-
if ((message.deliveredTo ?? []).includes(recipient))
|
|
25
|
-
continue;
|
|
26
|
-
if (!localSessionIds.includes(recipient))
|
|
27
|
-
continue;
|
|
28
|
-
const session = this.getSession(recipient);
|
|
29
|
-
if (!session || session.exited)
|
|
30
|
-
continue;
|
|
31
|
-
if (!this.canSessionReceiveInput(recipient))
|
|
32
|
-
continue;
|
|
33
|
-
const prompt = `Aimux: new ${message.kind} for you.\n\n` +
|
|
34
|
-
`Thread: ${thread.id}\n` +
|
|
35
|
-
`Message: ${message.id}\n` +
|
|
36
|
-
`From: ${message.from}\n\n` +
|
|
37
|
-
`Run:\n` +
|
|
38
|
-
` aimux thread show ${thread.id}\n\n` +
|
|
39
|
-
`Then reply, accept, complete, or request clarification using aimux as appropriate.`;
|
|
40
|
-
this.deliverPrompt(session, prompt);
|
|
41
|
-
markMessageDelivered(thread.id, message.id, recipient);
|
|
42
|
-
this.pendingEvents.push({
|
|
43
|
-
type: "message_delivered",
|
|
44
|
-
threadId: thread.id,
|
|
45
|
-
messageId: message.id,
|
|
46
|
-
sessionId: recipient,
|
|
47
|
-
kind: message.kind,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
drainEvents() {
|
|
54
|
-
const events = this.pendingEvents;
|
|
55
|
-
this.pendingEvents = [];
|
|
56
|
-
return events;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=orchestration-dispatcher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orchestration-dispatcher.js","sourceRoot":"","sources":["../src/orchestration-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,YAAY,EAAoB,MAAM,cAAc,CAAC;AAmBjG,SAAS,cAAc,CAAC,IAAiB;IACvC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ,CAAC;AAClH,CAAC;AAED,MAAM,OAAO,uBAAuB;IAIf;IACA;IAEA;IANX,aAAa,GAAiC,EAAE,CAAC;IAEzD,YACmB,UAAuD,EACvD,sBAA+C;IAChE,wFAAwF;IACvE,gBAAgC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QAHjF,eAAU,GAAV,UAAU,CAA6C;QACvD,2BAAsB,GAAtB,sBAAsB,CAAyB;QAE/C,kBAAa,GAAb,aAAa,CAAoE;IACjG,CAAC;IAEJ,IAAI,CAAC,eAAyB;QAC5B,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACnE,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;oBACnC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;wBAAE,SAAS;oBAC9D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC;wBAAE,SAAS;oBACnD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;oBAC3C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM;wBAAE,SAAS;oBACzC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;wBAAE,SAAS;oBACtD,MAAM,MAAM,GACV,cAAc,OAAO,CAAC,IAAI,eAAe;wBACzC,WAAW,MAAM,CAAC,EAAE,IAAI;wBACxB,YAAY,OAAO,CAAC,EAAE,IAAI;wBAC1B,SAAS,OAAO,CAAC,IAAI,MAAM;wBAC3B,QAAQ;wBACR,uBAAuB,MAAM,CAAC,EAAE,MAAM;wBACtC,oFAAoF,CAAC;oBACvF,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBACpC,oBAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;oBACvD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;wBACtB,IAAI,EAAE,mBAAmB;wBACzB,QAAQ,EAAE,MAAM,CAAC,EAAE;wBACnB,SAAS,EAAE,OAAO,CAAC,EAAE;wBACrB,SAAS,EAAE,SAAS;wBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;qBACnB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export type SessionInputOperationState = "queued" | "applied" | "submitted" | "failed";
|
|
2
|
-
export interface SessionInputOperationRecord {
|
|
3
|
-
id: string;
|
|
4
|
-
sessionId: string;
|
|
5
|
-
clientMessageId?: string;
|
|
6
|
-
submit: boolean;
|
|
7
|
-
state: SessionInputOperationState;
|
|
8
|
-
createdAt: string;
|
|
9
|
-
updatedAt: string;
|
|
10
|
-
messageId?: string;
|
|
11
|
-
error?: string;
|
|
12
|
-
}
|
|
13
|
-
export declare function createSessionInputOperation(input: {
|
|
14
|
-
sessionId: string;
|
|
15
|
-
clientMessageId?: string;
|
|
16
|
-
submit?: boolean;
|
|
17
|
-
}): SessionInputOperationRecord;
|
|
18
|
-
export declare function saveSessionInputOperation(operation: SessionInputOperationRecord): SessionInputOperationRecord;
|
|
19
|
-
export declare function readSessionInputOperation(operationId: string): SessionInputOperationRecord | null;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { mkdirSync, existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { randomUUID } from "node:crypto";
|
|
4
|
-
import { getSessionInputOperationsDir } from "./paths.js";
|
|
5
|
-
function ensureOperationsDir() {
|
|
6
|
-
const dir = getSessionInputOperationsDir();
|
|
7
|
-
if (!existsSync(dir)) {
|
|
8
|
-
mkdirSync(dir, { recursive: true });
|
|
9
|
-
}
|
|
10
|
-
return dir;
|
|
11
|
-
}
|
|
12
|
-
function operationPath(operationId) {
|
|
13
|
-
return join(ensureOperationsDir(), `${operationId}.json`);
|
|
14
|
-
}
|
|
15
|
-
export function createSessionInputOperation(input) {
|
|
16
|
-
const ts = new Date().toISOString();
|
|
17
|
-
const operation = {
|
|
18
|
-
id: `inputop_${randomUUID()}`,
|
|
19
|
-
sessionId: input.sessionId,
|
|
20
|
-
clientMessageId: input.clientMessageId?.trim() || undefined,
|
|
21
|
-
submit: input.submit === true,
|
|
22
|
-
state: "queued",
|
|
23
|
-
createdAt: ts,
|
|
24
|
-
updatedAt: ts,
|
|
25
|
-
};
|
|
26
|
-
saveSessionInputOperation(operation);
|
|
27
|
-
return operation;
|
|
28
|
-
}
|
|
29
|
-
export function saveSessionInputOperation(operation) {
|
|
30
|
-
const next = {
|
|
31
|
-
...operation,
|
|
32
|
-
updatedAt: new Date().toISOString(),
|
|
33
|
-
};
|
|
34
|
-
writeFileSync(operationPath(next.id), `${JSON.stringify(next, null, 2)}\n`, "utf-8");
|
|
35
|
-
return next;
|
|
36
|
-
}
|
|
37
|
-
export function readSessionInputOperation(operationId) {
|
|
38
|
-
try {
|
|
39
|
-
const raw = readFileSync(operationPath(operationId), "utf-8");
|
|
40
|
-
return JSON.parse(raw);
|
|
41
|
-
}
|
|
42
|
-
catch {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=session-input-operations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-input-operations.js","sourceRoot":"","sources":["../src/session-input-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAgB1D,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,4BAA4B,EAAE,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB;IACxC,OAAO,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAI3C;IACC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,SAAS,GAAgC;QAC7C,EAAE,EAAE,WAAW,UAAU,EAAE,EAAE;QAC7B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,SAAS;QAC3D,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI;QAC7B,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;KACd,CAAC;IACF,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAAsC;IAC9E,MAAM,IAAI,GAAgC;QACxC,GAAG,SAAS;QACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IACF,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,WAAmB;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { AgentInputPart } from "./agent-message-parts.js";
|
|
2
|
-
export interface SessionMessagePart {
|
|
3
|
-
type: "text" | "image";
|
|
4
|
-
text?: string;
|
|
5
|
-
attachmentId?: string;
|
|
6
|
-
alt?: string;
|
|
7
|
-
filename?: string;
|
|
8
|
-
mimeType?: string;
|
|
9
|
-
contentUrl?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface SessionMessageRecord {
|
|
12
|
-
id: string;
|
|
13
|
-
clientMessageId?: string;
|
|
14
|
-
sessionId: string;
|
|
15
|
-
role: "user";
|
|
16
|
-
ts: string;
|
|
17
|
-
parts: SessionMessagePart[];
|
|
18
|
-
}
|
|
19
|
-
export declare function appendSessionMessage(sessionId: string, input: {
|
|
20
|
-
data?: string;
|
|
21
|
-
parts?: AgentInputPart[];
|
|
22
|
-
clientMessageId?: string;
|
|
23
|
-
}): SessionMessageRecord | null;
|
|
24
|
-
export declare function readSessionMessages(sessionId: string, opts?: {
|
|
25
|
-
lastN?: number;
|
|
26
|
-
maxBytes?: number;
|
|
27
|
-
}): SessionMessageRecord[];
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { appendFileSync, existsSync, mkdirSync, readFileSync, statSync, openSync, readSync, closeSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { randomUUID } from "node:crypto";
|
|
4
|
-
import { getSessionMessagesDir } from "./paths.js";
|
|
5
|
-
import { getAttachment } from "./attachment-store.js";
|
|
6
|
-
function historyPath(sessionId) {
|
|
7
|
-
return join(getSessionMessagesDir(), `${sessionId}.jsonl`);
|
|
8
|
-
}
|
|
9
|
-
export function appendSessionMessage(sessionId, input) {
|
|
10
|
-
const parts = normalizeMessageParts(input);
|
|
11
|
-
if (parts.length === 0)
|
|
12
|
-
return null;
|
|
13
|
-
const dir = getSessionMessagesDir();
|
|
14
|
-
if (!existsSync(dir)) {
|
|
15
|
-
mkdirSync(dir, { recursive: true });
|
|
16
|
-
}
|
|
17
|
-
const record = {
|
|
18
|
-
id: `msg_${randomUUID()}`,
|
|
19
|
-
clientMessageId: input.clientMessageId?.trim() || undefined,
|
|
20
|
-
sessionId,
|
|
21
|
-
role: "user",
|
|
22
|
-
ts: new Date().toISOString(),
|
|
23
|
-
parts,
|
|
24
|
-
};
|
|
25
|
-
appendFileSync(historyPath(sessionId), `${JSON.stringify(record)}\n`);
|
|
26
|
-
return record;
|
|
27
|
-
}
|
|
28
|
-
export function readSessionMessages(sessionId, opts) {
|
|
29
|
-
const filePath = historyPath(sessionId);
|
|
30
|
-
if (!existsSync(filePath))
|
|
31
|
-
return [];
|
|
32
|
-
const maxBytes = opts?.maxBytes ?? 100 * 1024;
|
|
33
|
-
let raw;
|
|
34
|
-
try {
|
|
35
|
-
const size = statSync(filePath).size;
|
|
36
|
-
if (size <= maxBytes) {
|
|
37
|
-
raw = readFileSync(filePath, "utf-8");
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
const buf = Buffer.alloc(maxBytes);
|
|
41
|
-
const fd = openSync(filePath, "r");
|
|
42
|
-
try {
|
|
43
|
-
readSync(fd, buf, 0, maxBytes, size - maxBytes);
|
|
44
|
-
}
|
|
45
|
-
finally {
|
|
46
|
-
closeSync(fd);
|
|
47
|
-
}
|
|
48
|
-
raw = buf.toString("utf-8");
|
|
49
|
-
const firstNewline = raw.indexOf("\n");
|
|
50
|
-
if (firstNewline !== -1) {
|
|
51
|
-
raw = raw.slice(firstNewline + 1);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
return [];
|
|
57
|
-
}
|
|
58
|
-
let records = raw
|
|
59
|
-
.split("\n")
|
|
60
|
-
.map((line) => line.trim())
|
|
61
|
-
.filter(Boolean)
|
|
62
|
-
.flatMap((line) => {
|
|
63
|
-
try {
|
|
64
|
-
return [JSON.parse(line)];
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
return [];
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
if (opts?.lastN !== undefined && records.length > opts.lastN) {
|
|
71
|
-
records = records.slice(-opts.lastN);
|
|
72
|
-
}
|
|
73
|
-
return records;
|
|
74
|
-
}
|
|
75
|
-
function normalizeMessageParts(input) {
|
|
76
|
-
const parts = Array.isArray(input.parts) ? input.parts : [];
|
|
77
|
-
if (parts.length === 0) {
|
|
78
|
-
const text = String(input.data ?? "");
|
|
79
|
-
return text.trim() ? [{ type: "text", text }] : [];
|
|
80
|
-
}
|
|
81
|
-
const normalized = [];
|
|
82
|
-
for (const part of parts) {
|
|
83
|
-
if (part.type === "text") {
|
|
84
|
-
const text = String(part.text ?? "");
|
|
85
|
-
if (text.trim()) {
|
|
86
|
-
normalized.push({ type: "text", text });
|
|
87
|
-
}
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
const attachmentId = part.attachmentId?.trim();
|
|
91
|
-
if (!attachmentId)
|
|
92
|
-
continue;
|
|
93
|
-
const attachment = getAttachment(attachmentId);
|
|
94
|
-
normalized.push({
|
|
95
|
-
type: "image",
|
|
96
|
-
attachmentId,
|
|
97
|
-
alt: part.alt?.trim() || undefined,
|
|
98
|
-
filename: attachment?.filename,
|
|
99
|
-
mimeType: attachment?.mimeType,
|
|
100
|
-
contentUrl: attachment?.contentUrl,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
return normalized;
|
|
104
|
-
}
|
|
105
|
-
//# sourceMappingURL=session-message-history.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-message-history.js","sourceRoot":"","sources":["../src/session-message-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { type Task } from "./tasks.js";
|
|
2
|
-
interface DispatchSession {
|
|
3
|
-
id: string;
|
|
4
|
-
exited: boolean;
|
|
5
|
-
status: string;
|
|
6
|
-
write(data: string): void;
|
|
7
|
-
}
|
|
8
|
-
type PromptDelivery = (session: Pick<DispatchSession, "id" | "write">, prompt: string) => void;
|
|
9
|
-
export interface TaskEvent {
|
|
10
|
-
type: "assigned" | "completed" | "failed" | "review_created" | "review_approved" | "changes_requested";
|
|
11
|
-
taskId: string;
|
|
12
|
-
sessionId: string;
|
|
13
|
-
description: string;
|
|
14
|
-
}
|
|
15
|
-
export declare class TaskDispatcher {
|
|
16
|
-
private getSession;
|
|
17
|
-
private getSessionTool;
|
|
18
|
-
private getSessionRole;
|
|
19
|
-
private canSessionReceiveInput;
|
|
20
|
-
private tickCount;
|
|
21
|
-
private lastCounts;
|
|
22
|
-
private workflow;
|
|
23
|
-
/** Per-session task info: sessionId → task description */
|
|
24
|
-
private sessionTasks;
|
|
25
|
-
/** Recent events for flash notifications, drained by caller */
|
|
26
|
-
private pendingEvents;
|
|
27
|
-
constructor(getSession: (id: string) => DispatchSession | undefined, getSessionTool: (id: string) => string | undefined, getSessionRole: (id: string) => string | undefined, canSessionReceiveInput: (id: string) => boolean, deliverPrompt?: PromptDelivery);
|
|
28
|
-
/**
|
|
29
|
-
* Main dispatch loop, called every ~2s from the dashboard/status refresh loop.
|
|
30
|
-
*/
|
|
31
|
-
tick(localSessionIds: string[]): void;
|
|
32
|
-
/**
|
|
33
|
-
* Find an idle local session matching the task's targeting criteria.
|
|
34
|
-
* Priority: assignedTo (specific session) > assignee (role) > tool > any idle.
|
|
35
|
-
*/
|
|
36
|
-
private findIdleSession;
|
|
37
|
-
private canReceiveInjectedPrompt;
|
|
38
|
-
private inject;
|
|
39
|
-
/**
|
|
40
|
-
* Notify the assigning session that a task has completed.
|
|
41
|
-
*/
|
|
42
|
-
private notifyAssigner;
|
|
43
|
-
/**
|
|
44
|
-
* Get cached counts from last tick.
|
|
45
|
-
*/
|
|
46
|
-
getTaskCounts(): {
|
|
47
|
-
pending: number;
|
|
48
|
-
assigned: number;
|
|
49
|
-
};
|
|
50
|
-
/**
|
|
51
|
-
* Get the task description assigned to a session, if any.
|
|
52
|
-
*/
|
|
53
|
-
getSessionTask(sessionId: string): string | undefined;
|
|
54
|
-
/**
|
|
55
|
-
* Drain pending events (for flash notifications). Returns and clears the queue.
|
|
56
|
-
*/
|
|
57
|
-
drainEvents(): TaskEvent[];
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Create a review task for the active session's recent work.
|
|
61
|
-
* Called from the [v] hotkey handler.
|
|
62
|
-
*/
|
|
63
|
-
export declare function requestReview(agentSessionId: string, agentRole: string, diff: string | undefined, summary: string): Task | null;
|
|
64
|
-
export {};
|