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
|
@@ -4,18 +4,25 @@ import { parseKeys } from "../key-parser.js";
|
|
|
4
4
|
import { addDashboardOperationFailure } from "../dashboard/operation-failures.js";
|
|
5
5
|
import { buildWorktreeListOverlayOutput, buildWorktreeRemoveConfirmOverlayOutput, } from "../tui/screens/overlay-renderers.js";
|
|
6
6
|
import { postToProjectService } from "./dashboard-control.js";
|
|
7
|
-
import { DashboardPendingActions } from "../dashboard/pending-actions.js";
|
|
8
7
|
import { dashboardCreatedSortKey } from "../dashboard/sort.js";
|
|
9
8
|
function assertDashboardWorktreeMutationSettled(settled, action) {
|
|
10
9
|
if (!settled) {
|
|
11
10
|
throw new Error(`worktree ${action} did not settle before timing out`);
|
|
12
11
|
}
|
|
13
12
|
}
|
|
13
|
+
function findRenderedWorktreeForSettlement(host, path) {
|
|
14
|
+
const raw = Array.isArray(host.dashboardRawWorktreeGroupsCache)
|
|
15
|
+
? host.dashboardRawWorktreeGroupsCache.find((entry) => entry.path === path)
|
|
16
|
+
: undefined;
|
|
17
|
+
if (raw)
|
|
18
|
+
return raw;
|
|
19
|
+
return host.dashboardWorktreeGroupsCache.find((entry) => entry.path === path);
|
|
20
|
+
}
|
|
14
21
|
async function waitForRenderedDashboardWorktreeState(host, path, predicate, timeoutMs = 10_000) {
|
|
15
22
|
const deadline = Date.now() + timeoutMs;
|
|
16
23
|
while (Date.now() < deadline) {
|
|
17
24
|
await host.refreshDashboardModelFromService(true);
|
|
18
|
-
const group = host
|
|
25
|
+
const group = findRenderedWorktreeForSettlement(host, path);
|
|
19
26
|
if (predicate(group))
|
|
20
27
|
return true;
|
|
21
28
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
@@ -23,16 +30,19 @@ async function waitForRenderedDashboardWorktreeState(host, path, predicate, time
|
|
|
23
30
|
return false;
|
|
24
31
|
}
|
|
25
32
|
async function runDashboardWorktreeMutation(host, opts) {
|
|
26
|
-
host.dashboardPendingActions.
|
|
33
|
+
host.dashboardPendingActions.setWorktreeAction(opts.pendingPath, opts.pendingAction);
|
|
34
|
+
host.reapplyDashboardPendingActions?.();
|
|
27
35
|
host.renderDashboard();
|
|
28
36
|
try {
|
|
29
37
|
await opts.request();
|
|
30
38
|
assertDashboardWorktreeMutationSettled(await opts.settle(), opts.pendingAction);
|
|
31
|
-
host.dashboardPendingActions.
|
|
39
|
+
host.dashboardPendingActions.clearWorktreeAction(opts.pendingPath);
|
|
40
|
+
host.reapplyDashboardPendingActions?.();
|
|
32
41
|
opts.onSuccess?.();
|
|
33
42
|
}
|
|
34
43
|
catch (error) {
|
|
35
|
-
host.dashboardPendingActions.
|
|
44
|
+
host.dashboardPendingActions.clearWorktreeAction(opts.pendingPath);
|
|
45
|
+
host.reapplyDashboardPendingActions?.();
|
|
36
46
|
opts.onError?.(error);
|
|
37
47
|
}
|
|
38
48
|
}
|
|
@@ -45,32 +55,34 @@ function sortDashboardWorktrees(worktrees) {
|
|
|
45
55
|
return dashboardCreatedSortKey(b) - dashboardCreatedSortKey(a);
|
|
46
56
|
});
|
|
47
57
|
}
|
|
58
|
+
function getOptimisticWorktreeCreatedAt(host, path) {
|
|
59
|
+
const existing = host.dashboardWorktreeGroupsCache.find((group) => group.path === path);
|
|
60
|
+
if (typeof existing?.createdAt === "string")
|
|
61
|
+
return existing.createdAt;
|
|
62
|
+
host.dashboardOptimisticWorktreeCreatedAt ??= new Map();
|
|
63
|
+
const cached = host.dashboardOptimisticWorktreeCreatedAt.get(path);
|
|
64
|
+
if (cached)
|
|
65
|
+
return cached;
|
|
66
|
+
const createdAt = new Date().toISOString();
|
|
67
|
+
host.dashboardOptimisticWorktreeCreatedAt.set(path, createdAt);
|
|
68
|
+
return createdAt;
|
|
69
|
+
}
|
|
48
70
|
function showOptimisticDashboardWorktreeCreate(host, name) {
|
|
49
71
|
const targetPath = getWorktreeCreatePath(name);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
services: [],
|
|
65
|
-
},
|
|
66
|
-
];
|
|
67
|
-
sortDashboardWorktrees(host.dashboardWorktreeGroupsCache);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
existing.pending = true;
|
|
71
|
-
existing.pendingAction = "creating";
|
|
72
|
-
existing.optimistic = true;
|
|
73
|
-
}
|
|
72
|
+
host.dashboardPendingActions.setWorktreeAction(targetPath, "creating", {
|
|
73
|
+
worktreeSeed: {
|
|
74
|
+
name,
|
|
75
|
+
branch: name,
|
|
76
|
+
path: targetPath,
|
|
77
|
+
createdAt: getOptimisticWorktreeCreatedAt(host, targetPath),
|
|
78
|
+
status: "offline",
|
|
79
|
+
isBare: false,
|
|
80
|
+
sessions: [],
|
|
81
|
+
services: [],
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
host.reapplyDashboardPendingActions?.();
|
|
85
|
+
sortDashboardWorktrees(host.dashboardWorktreeGroupsCache);
|
|
74
86
|
host.dashboardState.focusedWorktreePath = targetPath;
|
|
75
87
|
host.dashboardUiStateStore.markSelectionDirty();
|
|
76
88
|
host.dashboardState.worktreeNavOrder = host.dashboardWorktreeGroupsCache.map((wt) => wt.path);
|
|
@@ -94,6 +106,8 @@ function showDashboardWorktreeCreateFailure(host, name, path, error) {
|
|
|
94
106
|
worktreePath: path,
|
|
95
107
|
worktreeName: name,
|
|
96
108
|
});
|
|
109
|
+
host.dashboardPendingActions.clearWorktreeAction(path);
|
|
110
|
+
host.dashboardOptimisticWorktreeCreatedAt?.delete?.(path);
|
|
97
111
|
removeOptimisticDashboardWorktree(host, path);
|
|
98
112
|
host.dashboardWorktreeGroupsCache = [
|
|
99
113
|
...host.dashboardWorktreeGroupsCache,
|
|
@@ -119,6 +133,40 @@ function showDashboardWorktreeCreateFailure(host, name, path, error) {
|
|
|
119
133
|
host.dashboardUiStateStore.markSelectionDirty();
|
|
120
134
|
host.showDashboardError(`Failed to create "${name}"`, [`Path: ${path}`, `Error: ${message}`]);
|
|
121
135
|
}
|
|
136
|
+
function findDashboardWorktreeCreateFailure(host, path) {
|
|
137
|
+
const groupFailure = host.dashboardWorktreeGroupsCache?.find((group) => group.path === path)?.operationFailure;
|
|
138
|
+
if (groupFailure)
|
|
139
|
+
return groupFailure;
|
|
140
|
+
return (host.dashboardOperationFailuresCache ?? []).find((failure) => failure.targetKind === "worktree" && failure.operation === "create" && failure.worktreePath === path);
|
|
141
|
+
}
|
|
142
|
+
function isDashboardWorktreeCreateSettled(group) {
|
|
143
|
+
if (!group)
|
|
144
|
+
return false;
|
|
145
|
+
if (group.operationFailure)
|
|
146
|
+
return false;
|
|
147
|
+
return group.pending !== true && group.pendingAction !== "creating";
|
|
148
|
+
}
|
|
149
|
+
async function waitForRenderedDashboardWorktreeCreate(host, name, path, timeoutMs = 180_000) {
|
|
150
|
+
const deadline = Date.now() + timeoutMs;
|
|
151
|
+
while (Date.now() < deadline) {
|
|
152
|
+
if (typeof host.refreshDashboardModelFromService === "function") {
|
|
153
|
+
await host.refreshDashboardModelFromService(true);
|
|
154
|
+
}
|
|
155
|
+
const failure = findDashboardWorktreeCreateFailure(host, path);
|
|
156
|
+
if (failure) {
|
|
157
|
+
const message = typeof failure.message === "string" ? failure.message : "worktree create failed";
|
|
158
|
+
return { ok: false, error: new Error(message) };
|
|
159
|
+
}
|
|
160
|
+
const group = findRenderedWorktreeForSettlement(host, path);
|
|
161
|
+
if (isDashboardWorktreeCreateSettled(group)) {
|
|
162
|
+
return { ok: true };
|
|
163
|
+
}
|
|
164
|
+
showOptimisticDashboardWorktreeCreate(host, name);
|
|
165
|
+
host.renderDashboard?.();
|
|
166
|
+
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
167
|
+
}
|
|
168
|
+
return { ok: false, error: new Error("worktree creating did not settle before timing out") };
|
|
169
|
+
}
|
|
122
170
|
export function showWorktreeCreatePrompt(host) {
|
|
123
171
|
host.openDashboardOverlay("worktree-input");
|
|
124
172
|
host.worktreeInputBuffer = "";
|
|
@@ -170,17 +218,27 @@ export function handleWorktreeInputKey(host, data) {
|
|
|
170
218
|
if (name) {
|
|
171
219
|
if (host.mode === "dashboard") {
|
|
172
220
|
const targetPath = showOptimisticDashboardWorktreeCreate(host, name);
|
|
173
|
-
const pendingKey = DashboardPendingActions.worktreeKey(targetPath);
|
|
174
221
|
host.renderDashboard();
|
|
175
222
|
void (async () => {
|
|
176
223
|
try {
|
|
177
224
|
await postToProjectService(host, "/worktrees/create", { name }, { timeoutMs: 180_000 });
|
|
178
|
-
await host
|
|
225
|
+
const result = await waitForRenderedDashboardWorktreeCreate(host, name, targetPath);
|
|
226
|
+
if (!result.ok) {
|
|
227
|
+
throw result.error;
|
|
228
|
+
}
|
|
179
229
|
debug(`worktree created from UI: ${name}`, "worktree");
|
|
180
|
-
host.
|
|
230
|
+
host.dashboardPendingActions.clearWorktreeAction(targetPath);
|
|
231
|
+
host.reapplyDashboardPendingActions?.();
|
|
232
|
+
host.dashboardOptimisticWorktreeCreatedAt?.delete?.(targetPath);
|
|
233
|
+
await host.refreshDashboardModelFromService?.(true);
|
|
234
|
+
host.dashboardState.focusedWorktreePath = targetPath;
|
|
235
|
+
host.dashboardUiStateStore.markSelectionDirty();
|
|
236
|
+
host.renderDashboard();
|
|
181
237
|
}
|
|
182
238
|
catch (err) {
|
|
183
|
-
host.dashboardPendingActions.
|
|
239
|
+
host.dashboardPendingActions.clearWorktreeAction(targetPath);
|
|
240
|
+
host.reapplyDashboardPendingActions?.();
|
|
241
|
+
host.dashboardOptimisticWorktreeCreatedAt?.delete?.(targetPath);
|
|
184
242
|
debug(`worktree create failed: ${err instanceof Error ? err.message : String(err)}`, "worktree");
|
|
185
243
|
showDashboardWorktreeCreateFailure(host, name, targetPath, err);
|
|
186
244
|
}
|
|
@@ -241,8 +299,6 @@ export function beginWorktreeRemoval(host, path, name, oldIdx) {
|
|
|
241
299
|
host.renderDashboard();
|
|
242
300
|
return;
|
|
243
301
|
}
|
|
244
|
-
if (host.pendingWorktreeRemovals?.has?.(path))
|
|
245
|
-
return;
|
|
246
302
|
debug(`begin worktree graveyard: name=${name} path=${path}`, "worktree");
|
|
247
303
|
host.worktreeRemovalJob = {
|
|
248
304
|
path,
|
|
@@ -251,15 +307,12 @@ export function beginWorktreeRemoval(host, path, name, oldIdx) {
|
|
|
251
307
|
oldIdx,
|
|
252
308
|
stderr: "",
|
|
253
309
|
};
|
|
254
|
-
host.refreshLocalDashboardModel();
|
|
255
|
-
host.renderDashboard();
|
|
256
310
|
if (host.mode === "dashboard") {
|
|
257
|
-
const pendingKey = DashboardPendingActions.worktreeKey(path);
|
|
258
311
|
void runDashboardWorktreeMutation(host, {
|
|
259
|
-
|
|
312
|
+
pendingPath: path,
|
|
260
313
|
pendingAction: "graveyarding",
|
|
261
314
|
request: async () => {
|
|
262
|
-
await postToProjectService(host, "/worktrees/graveyard", { path }, { timeoutMs:
|
|
315
|
+
await postToProjectService(host, "/worktrees/graveyard", { path }, { timeoutMs: 180_000 });
|
|
263
316
|
},
|
|
264
317
|
settle: () => waitForRenderedDashboardWorktreeState(host, path, (group) => !group),
|
|
265
318
|
onSuccess: () => {
|
|
@@ -276,6 +329,8 @@ export function beginWorktreeRemoval(host, path, name, oldIdx) {
|
|
|
276
329
|
});
|
|
277
330
|
return;
|
|
278
331
|
}
|
|
332
|
+
host.refreshLocalDashboardModel();
|
|
333
|
+
host.renderDashboard();
|
|
279
334
|
void (async () => {
|
|
280
335
|
try {
|
|
281
336
|
await host.graveyardDesktopWorktree(path);
|
|
@@ -326,6 +381,7 @@ export function finishWorktreeRemoval(host, code) {
|
|
|
326
381
|
`Error: ${message}`,
|
|
327
382
|
...details,
|
|
328
383
|
]);
|
|
384
|
+
host.renderDashboard();
|
|
329
385
|
return;
|
|
330
386
|
}
|
|
331
387
|
host.renderDashboard();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktrees.js","sourceRoot":"","sources":["../../src/multiplexer/worktrees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EACL,8BAA8B,EAC9B,uCAAuC,GACxC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAa/D,SAAS,sCAAsC,CAC7C,OAAgB,EAChB,MAAgD;IAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,YAAY,MAAM,mCAAmC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qCAAqC,CAClD,IAAkB,EAClB,IAAY,EACZ,SAA8C,EAC9C,SAAS,GAAG,MAAM;IAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC1F,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,4BAA4B,CAAC,IAAkB,EAAE,IAAsC;IACpG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACtE,IAAI,CAAC,eAAe,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,sCAAsC,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAChF,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,SAAqB;IACnD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QACnC,OAAO,uBAAuB,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qCAAqC,CAAC,IAAkB,EAAE,IAAY;IAC7E,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAI,IAAI,CAAC,4BAA2C,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACnH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,4BAA4B,GAAG;YAClC,GAAG,IAAI,CAAC,4BAA4B;YACpC;gBACE,IAAI;gBACJ,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,UAAU;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,UAAU;gBACzB,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,EAAE;aACb;SACF,CAAC;QACF,sBAAsB,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,QAAQ,CAAC,aAAa,GAAG,UAAU,CAAC;QACpC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,UAAU,CAAC;IACrD,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;IAChD,IAAI,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACnG,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iCAAiC,CAAC,IAAkB,EAAE,IAAY;IACzE,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClH,IAAI,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACnG,IAAI,IAAI,CAAC,cAAc,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,SAAS,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,kCAAkC,CAAC,IAAkB,EAAE,IAAY,EAAE,IAAY,EAAE,KAAc;IACxG,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,4BAA4B,CAAC;QAC3C,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,8BAA8B,IAAI,GAAG;QAC5C,OAAO;QACP,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IACH,iCAAiC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,4BAA4B,GAAG;QAClC,GAAG,IAAI,CAAC,4BAA4B;QACpC;YACE,IAAI;YACJ,MAAM,EAAE,UAAU;YAClB,IAAI;YACJ,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;YACZ,gBAAgB,EAAE,OAAO;SAC1B;KACF,CAAC;IACF,sBAAsB,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC1D,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAC/C,IAAI,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACnG,IAAI,CAAC,+BAA+B,GAAG;QACrC,OAAO;QACP,GAAG,CAAC,IAAI,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC,MAAM,CACpD,CAAC,QAAa,EAAE,EAAE,CAChB,CAAC,CACC,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU;YAC1C,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS;YACxC,QAAQ,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,CAC/C,CACJ;KACF,CAAC;IACF,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;IAChD,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,IAAI,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,EAAE,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAkB;IACzD,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IAC5C,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;IAC9B,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,IAAkB;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAG,CAAC,kBAAkB,EAAE,EAAE,EAAE,WAAW,IAAI,CAAC,mBAAmB,GAAG,EAAE,EAAE,EAAE,gCAAgC,CAAC,CAAC;IAErH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAEnD,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC;QACzB,MAAM,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,cAAc,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,MAAM,IAAI,gBAAgB,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,MAAM,IAAI,OAAO,CAAC;IAClB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,0BAA0B,KAAK,UAAU,EAAE,CAAC;QACvF,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAkB,EAAE,IAAY;IACrE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;IAErC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,mCAAmC,EAAE,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,qCAAqC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACnE,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC;wBACH,MAAM,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;wBACxF,MAAM,IAAI,CAAC,gCAAgC,EAAE,CAAC,IAAI,CAAC,CAAC;wBACpD,KAAK,CAAC,6BAA6B,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;wBACvD,IAAI,CAAC,4BAA4B,EAAE,CAAC,UAAU,CAAC,CAAC;oBAClD,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;wBACnD,KAAK,CAAC,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;wBACjG,kCAAkC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC;gBACL,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACjC,KAAK,CAAC,6BAA6B,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,CAAC,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACnG,CAAC;QACH,CAAC;QACD,IAAI,CAAC,mCAAmC,EAAE,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACvE,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAC,IAAI,CAAC;QACvC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAkB;IACjD,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC3C,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAkB;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,0BAA0B,KAAK,UAAU,EAAE,CAAC;QACvF,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAkB;IAC5D,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,0BAA0B,KAAK,UAAU,EAAE,CAAC;QACvF,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,uCAAuC,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAkB,EAAE,IAAY,EAAE,IAAY,EAAE,MAAc;IACjG,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,KAAK,IAAI;QAAE,OAAO;IACnD,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,wBAAwB,YAAY,EAAE,CAAC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,kBAAkB,CAAC,wCAAwC,EAAE;YAChE,wBAAwB,YAAY,0BAA0B,IAAI,IAAI;SACvE,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO;IAEtD,KAAK,CAAC,kCAAkC,IAAI,SAAS,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IACzE,IAAI,CAAC,kBAAkB,GAAG;QACxB,IAAI;QACJ,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,MAAM;QACN,MAAM,EAAE,EAAE;KACX,CAAC;IACF,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAClC,IAAI,CAAC,eAAe,EAAE,CAAC;IACvB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7D,KAAK,4BAA4B,CAAC,IAAI,EAAE;YACtC,UAAU;YACV,aAAa,EAAE,cAAc;YAC7B,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,MAAM,oBAAoB,CAAC,IAAI,EAAE,sBAAsB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,CAAC,qCAAqC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;YAClF,SAAS,EAAE,GAAG,EAAE;gBACd,KAAK,CAAC,4CAA4C,IAAI,SAAS,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;gBACnF,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5F,CAAC;gBACD,KAAK,CACH,yCAAyC,IAAI,SAAS,IAAI,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACtH,UAAU,CACX,CAAC;gBACF,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjC,CAAC;SACF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAC1C,KAAK,CAAC,4CAA4C,IAAI,SAAS,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YACnF,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5F,CAAC;YACD,KAAK,CACH,yCAAyC,IAAI,SAAS,IAAI,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACtH,UAAU,CACX,CAAC;YACF,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAkB,EAAE,IAAY;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO;IAEjB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM;SACvB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAClC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,gBAAgB,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,KAAK,CAAC,yBAAyB,GAAG,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;QAEvD,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,cAAc,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAChF,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7F,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,cAAc,CAAC,mBAAmB;gBACrC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACtD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,uCAAuC,IAAI,EAAE,CAAC;QAC5E,IAAI,CAAC,WAAW,GAAG,WAAW,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,GAAG,CAAC,IAAI,GAAG,EAAE;YAC3D,SAAS,GAAG,CAAC,IAAI,EAAE;YACnB,UAAU,OAAO,EAAE;YACnB,GAAG,OAAO;SACX,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,IAAkB,EAAE,IAAY;IAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7C,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1E,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,mCAAmC,EAAE,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAkB,EAAE,IAAY;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;IAErC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,mCAAmC,EAAE,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"worktrees.js","sourceRoot":"","sources":["../../src/multiplexer/worktrees.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,12 +35,16 @@ function isDirectSessionFocus(entry, sessionId) {
|
|
|
35
35
|
}
|
|
36
36
|
export function updateNotificationContext(source, patch) {
|
|
37
37
|
const state = loadState();
|
|
38
|
+
const previous = state.contexts[source];
|
|
39
|
+
const has = (key) => Object.prototype.hasOwnProperty.call(patch, key);
|
|
40
|
+
const nextSessionId = has("sessionId") ? patch.sessionId : previous?.sessionId;
|
|
41
|
+
const nextScreen = has("screen") ? patch.screen : has("sessionId") && nextSessionId ? "session" : previous?.screen;
|
|
38
42
|
const next = {
|
|
39
43
|
source,
|
|
40
|
-
focused: patch.focused ??
|
|
41
|
-
screen:
|
|
42
|
-
sessionId:
|
|
43
|
-
panelOpen: patch.panelOpen ??
|
|
44
|
+
focused: has("focused") ? (patch.focused ?? false) : (previous?.focused ?? false),
|
|
45
|
+
screen: nextScreen,
|
|
46
|
+
sessionId: nextSessionId,
|
|
47
|
+
panelOpen: has("panelOpen") ? (patch.panelOpen ?? false) : (previous?.panelOpen ?? false),
|
|
44
48
|
updatedAt: new Date().toISOString(),
|
|
45
49
|
};
|
|
46
50
|
state.contexts[source] = next;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-context.js","sourceRoot":"","sources":["../src/notification-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAmBxD,8EAA8E;AAC9E,2EAA2E;AAC3E,wEAAwE;AACxE,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAC;AAErC,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,0BAA0B,EAAE,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;QAC3D,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACpF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAA+B;IAChD,eAAe,CAAC,0BAA0B,EAAE,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,OAAO,CAAC,KAA2C;IAC1D,IAAI,CAAC,KAAK,EAAE,SAAS;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,IAAI,gBAAgB,CAAC;AAC9E,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA+B,EAAE,SAAiB;IAC9E,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAAiC,EACjC,KAAsE;IAEtE,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,
|
|
1
|
+
{"version":3,"file":"notification-context.js","sourceRoot":"","sources":["../src/notification-context.ts"],"names":[],"mappings":"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"}
|
package/dist/notifications.js
CHANGED
|
@@ -1,48 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const path = getNotificationsPath();
|
|
7
|
-
if (!existsSync(path))
|
|
8
|
-
return { version: 1, notifications: [] };
|
|
9
|
-
try {
|
|
10
|
-
const raw = readFileSync(path, "utf8");
|
|
11
|
-
const parsed = JSON.parse(raw);
|
|
12
|
-
if (parsed.version !== 1 || !Array.isArray(parsed.notifications)) {
|
|
13
|
-
return { version: 1, notifications: [] };
|
|
14
|
-
}
|
|
15
|
-
return parsed;
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
return { version: 1, notifications: [] };
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function saveState(state) {
|
|
22
|
-
writeJsonAtomic(getNotificationsPath(), state);
|
|
23
|
-
}
|
|
24
|
-
export function addNotification(input) {
|
|
25
|
-
const now = input.createdAt ?? new Date().toISOString();
|
|
26
|
-
const state = loadState();
|
|
27
|
-
const record = {
|
|
28
|
-
id: randomUUID(),
|
|
29
|
-
title: input.title.trim() || "aimux",
|
|
30
|
-
subtitle: input.subtitle?.trim() || undefined,
|
|
31
|
-
body: input.body.trim() || input.title.trim() || "aimux",
|
|
32
|
-
sessionId: input.sessionId?.trim() || undefined,
|
|
33
|
-
targetKey: normalizeTargetKey(input),
|
|
34
|
-
targetKind: normalizeTargetKind(input),
|
|
35
|
-
kind: input.kind?.trim() || undefined,
|
|
36
|
-
unread: input.unread ?? true,
|
|
37
|
-
cleared: false,
|
|
38
|
-
createdAt: now,
|
|
39
|
-
updatedAt: now,
|
|
40
|
-
dedupeKey: input.dedupeKey?.trim() || undefined,
|
|
41
|
-
};
|
|
42
|
-
state.notifications.unshift(record);
|
|
43
|
-
saveState(state);
|
|
44
|
-
return record;
|
|
45
|
-
}
|
|
2
|
+
import { deriveRuntimeExchangeIndexes } from "./runtime-core/exchange-derived.js";
|
|
3
|
+
import { createRuntimeExchangeStore, } from "./runtime-core/exchange-store.js";
|
|
4
|
+
const PROJECT_NOTIFICATION_PARTICIPANT = "project";
|
|
5
|
+
const NOTIFICATION_TAG = "notification";
|
|
46
6
|
function normalizeTargetKey(input) {
|
|
47
7
|
const targetKey = input.targetKey?.trim();
|
|
48
8
|
if (targetKey)
|
|
@@ -53,39 +13,127 @@ function normalizeTargetKey(input) {
|
|
|
53
13
|
function normalizeTargetKind(input) {
|
|
54
14
|
if (input.targetKind)
|
|
55
15
|
return input.targetKind;
|
|
56
|
-
return input.sessionId?.trim() ? "session" :
|
|
16
|
+
return input.sessionId?.trim() ? "session" : "generic";
|
|
57
17
|
}
|
|
58
|
-
function
|
|
59
|
-
|
|
18
|
+
function metadataString(message, key) {
|
|
19
|
+
const value = message?.metadata?.[key];
|
|
20
|
+
return typeof value === "string" && value.trim() ? value : undefined;
|
|
60
21
|
}
|
|
61
|
-
|
|
62
|
-
|
|
22
|
+
function metadataBoolean(message, key) {
|
|
23
|
+
return message?.metadata?.[key] === true;
|
|
24
|
+
}
|
|
25
|
+
function notificationThreadId(targetKey) {
|
|
63
26
|
if (!targetKey)
|
|
64
|
-
return
|
|
27
|
+
return `notification-${randomUUID()}`;
|
|
28
|
+
return `notification-${Buffer.from(targetKey).toString("base64url")}`;
|
|
29
|
+
}
|
|
30
|
+
function threadLatestMessage(exchange, threadId) {
|
|
31
|
+
return exchange.messages
|
|
32
|
+
.filter((message) => message.threadId === threadId)
|
|
33
|
+
.sort((a, b) => b.ts.localeCompare(a.ts))[0];
|
|
34
|
+
}
|
|
35
|
+
function entryForThread(exchange, thread) {
|
|
36
|
+
return exchange.inbox.find((entry) => entry.subjectKind === "thread" && entry.subjectId === thread.id);
|
|
37
|
+
}
|
|
38
|
+
function notificationRecord(exchange, thread, message) {
|
|
39
|
+
const entry = entryForThread(exchange, thread);
|
|
40
|
+
const sessionId = metadataString(message, "notificationSessionId");
|
|
41
|
+
const targetKey = metadataString(message, "notificationTargetKey");
|
|
42
|
+
const targetKind = metadataString(message, "notificationTargetKind");
|
|
43
|
+
return {
|
|
44
|
+
id: metadataString(message, "notificationRecordId") ?? thread.id,
|
|
45
|
+
title: thread.title,
|
|
46
|
+
subtitle: metadataString(message, "notificationSubtitle"),
|
|
47
|
+
body: message.body,
|
|
48
|
+
sessionId,
|
|
49
|
+
targetKey,
|
|
50
|
+
targetKind,
|
|
51
|
+
kind: metadataString(message, "notificationKind"),
|
|
52
|
+
unread: Boolean(entry && entry.state !== "done"),
|
|
53
|
+
cleared: metadataBoolean(message, "notificationCleared"),
|
|
54
|
+
createdAt: thread.createdAt,
|
|
55
|
+
updatedAt: thread.updatedAt,
|
|
56
|
+
dedupeKey: metadataString(message, "notificationDedupeKey"),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function notificationRecords(exchange = createRuntimeExchangeStore().read()) {
|
|
60
|
+
return exchange.threads
|
|
61
|
+
.filter((thread) => thread.tags?.includes(NOTIFICATION_TAG))
|
|
62
|
+
.map((thread) => {
|
|
63
|
+
const message = threadLatestMessage(exchange, thread.id);
|
|
64
|
+
return message ? notificationRecord(exchange, thread, message) : undefined;
|
|
65
|
+
})
|
|
66
|
+
.filter((record) => Boolean(record))
|
|
67
|
+
.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
68
|
+
}
|
|
69
|
+
function writeNotification(input) {
|
|
65
70
|
const now = input.createdAt ?? new Date().toISOString();
|
|
66
|
-
const
|
|
67
|
-
const
|
|
68
|
-
|
|
71
|
+
const sessionId = input.sessionId?.trim() || undefined;
|
|
72
|
+
const targetKey = normalizeTargetKey(input);
|
|
73
|
+
const targetKind = normalizeTargetKind(input);
|
|
74
|
+
const threadId = input.replaceTarget ? notificationThreadId(targetKey) : notificationThreadId();
|
|
75
|
+
const participantId = sessionId ?? PROJECT_NOTIFICATION_PARTICIPANT;
|
|
76
|
+
const thread = {
|
|
77
|
+
id: threadId,
|
|
69
78
|
title: input.title.trim() || "aimux",
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
sessionId: input.sessionId?.trim() || undefined,
|
|
73
|
-
targetKey,
|
|
74
|
-
targetKind: normalizeTargetKind(input),
|
|
75
|
-
kind: input.kind?.trim() || undefined,
|
|
76
|
-
unread: input.unread ?? true,
|
|
77
|
-
cleared: false,
|
|
79
|
+
kind: "conversation",
|
|
80
|
+
status: "open",
|
|
78
81
|
createdAt: now,
|
|
79
82
|
updatedAt: now,
|
|
80
|
-
|
|
83
|
+
createdBy: "aimux",
|
|
84
|
+
participants: ["aimux", participantId],
|
|
85
|
+
lastMessageId: `message-${threadId}`,
|
|
86
|
+
unreadBy: input.unread === false ? [] : [participantId],
|
|
87
|
+
tags: [NOTIFICATION_TAG],
|
|
81
88
|
};
|
|
82
|
-
|
|
83
|
-
|
|
89
|
+
const message = {
|
|
90
|
+
id: `message-${threadId}`,
|
|
91
|
+
threadId,
|
|
92
|
+
ts: now,
|
|
93
|
+
from: "aimux",
|
|
94
|
+
to: [participantId],
|
|
95
|
+
kind: "note",
|
|
96
|
+
body: input.body.trim() || input.title.trim() || "aimux",
|
|
97
|
+
metadata: {
|
|
98
|
+
notificationRecordId: randomUUID(),
|
|
99
|
+
notificationSubtitle: input.subtitle?.trim() || null,
|
|
100
|
+
notificationSessionId: sessionId ?? null,
|
|
101
|
+
notificationTargetKey: targetKey ?? null,
|
|
102
|
+
notificationTargetKind: targetKind ?? null,
|
|
103
|
+
notificationKind: input.kind?.trim() || null,
|
|
104
|
+
notificationDedupeKey: input.dedupeKey?.trim() || null,
|
|
105
|
+
notificationCleared: false,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
let record;
|
|
109
|
+
createRuntimeExchangeStore().update((exchange) => {
|
|
110
|
+
const next = deriveRuntimeExchangeIndexes({
|
|
111
|
+
...exchange,
|
|
112
|
+
generatedAt: now,
|
|
113
|
+
threads: [...exchange.threads.filter((existing) => existing.id !== threadId), thread],
|
|
114
|
+
messages: [...exchange.messages.filter((existing) => existing.threadId !== threadId), message],
|
|
115
|
+
});
|
|
116
|
+
const inbox = input.unread === false
|
|
117
|
+
? next.inbox.map((entry) => entry.subjectKind === "thread" && entry.subjectId === threadId
|
|
118
|
+
? { ...entry, state: "done" }
|
|
119
|
+
: entry)
|
|
120
|
+
: next.inbox;
|
|
121
|
+
const updated = { ...next, inbox };
|
|
122
|
+
record = notificationRecord(updated, thread, message);
|
|
123
|
+
return updated;
|
|
124
|
+
});
|
|
125
|
+
if (!record)
|
|
126
|
+
throw new Error("failed to write notification");
|
|
84
127
|
return record;
|
|
85
128
|
}
|
|
129
|
+
export function addNotification(input) {
|
|
130
|
+
return writeNotification(input);
|
|
131
|
+
}
|
|
132
|
+
export function upsertNotification(input) {
|
|
133
|
+
return writeNotification({ ...input, replaceTarget: Boolean(normalizeTargetKey(input)) });
|
|
134
|
+
}
|
|
86
135
|
export function listNotifications(opts) {
|
|
87
|
-
|
|
88
|
-
return state.notifications.filter((record) => {
|
|
136
|
+
return notificationRecords().filter((record) => {
|
|
89
137
|
if (!opts?.includeCleared && record.cleared)
|
|
90
138
|
return false;
|
|
91
139
|
if (opts?.unreadOnly && !record.unread)
|
|
@@ -96,49 +144,63 @@ export function listNotifications(opts) {
|
|
|
96
144
|
});
|
|
97
145
|
}
|
|
98
146
|
export function markNotificationsRead(opts) {
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
const now = new Date().toISOString();
|
|
102
|
-
state.notifications = state.notifications.map((record) => {
|
|
147
|
+
const store = createRuntimeExchangeStore();
|
|
148
|
+
const records = notificationRecords(store.read()).filter((record) => {
|
|
103
149
|
if (record.cleared || !record.unread)
|
|
104
|
-
return
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if (
|
|
108
|
-
return
|
|
109
|
-
|
|
110
|
-
return {
|
|
111
|
-
...record,
|
|
112
|
-
unread: false,
|
|
113
|
-
updatedAt: now,
|
|
114
|
-
};
|
|
150
|
+
return false;
|
|
151
|
+
if (opts?.id && record.id !== opts.id)
|
|
152
|
+
return false;
|
|
153
|
+
if (opts?.sessionId && record.sessionId !== opts.sessionId)
|
|
154
|
+
return false;
|
|
155
|
+
return true;
|
|
115
156
|
});
|
|
116
|
-
if (
|
|
117
|
-
|
|
118
|
-
|
|
157
|
+
if (records.length === 0)
|
|
158
|
+
return 0;
|
|
159
|
+
const threadIds = new Set(records
|
|
160
|
+
.map((record) => {
|
|
161
|
+
const exchange = store.read();
|
|
162
|
+
return exchange.threads.find((thread) => {
|
|
163
|
+
const message = threadLatestMessage(exchange, thread.id);
|
|
164
|
+
return message && notificationRecord(exchange, thread, message).id === record.id;
|
|
165
|
+
})?.id;
|
|
166
|
+
})
|
|
167
|
+
.filter((id) => Boolean(id)));
|
|
168
|
+
store.update((exchange) => ({
|
|
169
|
+
...exchange,
|
|
170
|
+
inbox: exchange.inbox.map((entry) => entry.subjectKind === "thread" && threadIds.has(entry.subjectId) ? { ...entry, state: "done" } : entry),
|
|
171
|
+
}));
|
|
172
|
+
return records.length;
|
|
119
173
|
}
|
|
120
174
|
export function clearNotifications(opts) {
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
const now = new Date().toISOString();
|
|
124
|
-
state.notifications = state.notifications.map((record) => {
|
|
175
|
+
const store = createRuntimeExchangeStore();
|
|
176
|
+
const records = notificationRecords(store.read()).filter((record) => {
|
|
125
177
|
if (record.cleared)
|
|
126
|
-
return
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (
|
|
130
|
-
return
|
|
131
|
-
|
|
178
|
+
return false;
|
|
179
|
+
if (opts?.id && record.id !== opts.id)
|
|
180
|
+
return false;
|
|
181
|
+
if (opts?.sessionId && record.sessionId !== opts.sessionId)
|
|
182
|
+
return false;
|
|
183
|
+
return true;
|
|
184
|
+
});
|
|
185
|
+
if (records.length === 0)
|
|
186
|
+
return 0;
|
|
187
|
+
const recordIds = new Set(records.map((record) => record.id));
|
|
188
|
+
store.update((exchange) => {
|
|
189
|
+
const threadIds = new Set(exchange.threads
|
|
190
|
+
.map((thread) => {
|
|
191
|
+
const message = threadLatestMessage(exchange, thread.id);
|
|
192
|
+
return message && recordIds.has(notificationRecord(exchange, thread, message).id) ? thread.id : undefined;
|
|
193
|
+
})
|
|
194
|
+
.filter((id) => Boolean(id)));
|
|
132
195
|
return {
|
|
133
|
-
...
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
196
|
+
...exchange,
|
|
197
|
+
messages: exchange.messages.map((message) => message.threadId && threadIds.has(message.threadId)
|
|
198
|
+
? { ...message, metadata: { ...(message.metadata ?? {}), notificationCleared: true } }
|
|
199
|
+
: message),
|
|
200
|
+
inbox: exchange.inbox.map((entry) => entry.subjectKind === "thread" && threadIds.has(entry.subjectId) ? { ...entry, state: "done" } : entry),
|
|
137
201
|
};
|
|
138
202
|
});
|
|
139
|
-
|
|
140
|
-
saveState(state);
|
|
141
|
-
return changed;
|
|
203
|
+
return records.length;
|
|
142
204
|
}
|
|
143
205
|
export function unreadNotificationCount(opts) {
|
|
144
206
|
return listNotifications({ unreadOnly: true, sessionId: opts?.sessionId }).length;
|