aimux-cli 0.1.16 → 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 +821 -151
- 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 +28 -12
- 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
package/dist/tasks.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import * as lockfile from "proper-lockfile";
|
|
4
|
-
import { getTasksDir } from "./paths.js";
|
|
1
|
+
import { deriveRuntimeExchangeIndexes } from "./runtime-core/exchange-derived.js";
|
|
2
|
+
import { createRuntimeExchangeStore } from "./runtime-core/exchange-store.js";
|
|
5
3
|
export function normalizeReviewStatus(status) {
|
|
6
4
|
if (!status)
|
|
7
5
|
return undefined;
|
|
@@ -17,122 +15,82 @@ export function normalizeReviewStatus(status) {
|
|
|
17
15
|
return "changes_requested";
|
|
18
16
|
return undefined;
|
|
19
17
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
18
|
+
function nowIso() {
|
|
19
|
+
return new Date().toISOString();
|
|
20
|
+
}
|
|
21
|
+
function toExchangeTask(task, updatedAt) {
|
|
22
|
+
return {
|
|
23
|
+
...task,
|
|
24
|
+
updatedAt,
|
|
25
|
+
reviewStatus: normalizeReviewStatus(task.reviewStatus),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function fromExchangeTask(task) {
|
|
29
|
+
return { ...task };
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* Read a single task by ID.
|
|
33
33
|
*/
|
|
34
34
|
export function readTask(id) {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return JSON.parse(readFileSync(filePath, "utf-8"));
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
return undefined;
|
|
43
|
-
}
|
|
35
|
+
const task = createRuntimeExchangeStore()
|
|
36
|
+
.read()
|
|
37
|
+
.tasks.find((entry) => entry.id === id);
|
|
38
|
+
return task ? fromExchangeTask(task) : undefined;
|
|
44
39
|
}
|
|
45
40
|
/**
|
|
46
|
-
* Read all tasks from the
|
|
41
|
+
* Read all tasks from the runtime exchange.
|
|
47
42
|
*/
|
|
48
43
|
export function readAllTasks() {
|
|
49
|
-
|
|
50
|
-
const tasks = [];
|
|
51
|
-
let files;
|
|
52
|
-
try {
|
|
53
|
-
files = readdirSync(dir).filter((f) => f.endsWith(".json"));
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
return tasks;
|
|
57
|
-
}
|
|
58
|
-
for (const file of files) {
|
|
59
|
-
try {
|
|
60
|
-
const data = readFileSync(join(dir, file), "utf-8");
|
|
61
|
-
tasks.push(JSON.parse(data));
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// skip corrupt files
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return tasks;
|
|
44
|
+
return createRuntimeExchangeStore().read().tasks.map(fromExchangeTask);
|
|
68
45
|
}
|
|
69
46
|
/**
|
|
70
|
-
* Write a task to
|
|
47
|
+
* Write a task to the runtime exchange.
|
|
71
48
|
*/
|
|
72
|
-
export
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
release = await lockfile.lock(filePath, { retries: LOCK_RETRIES });
|
|
82
|
-
task.updatedAt = new Date().toISOString();
|
|
83
|
-
writeFileSync(filePath, JSON.stringify(task, null, 2) + "\n");
|
|
84
|
-
}
|
|
85
|
-
finally {
|
|
86
|
-
if (release)
|
|
87
|
-
await release();
|
|
88
|
-
}
|
|
49
|
+
export function writeTask(task) {
|
|
50
|
+
const updatedAt = nowIso();
|
|
51
|
+
createRuntimeExchangeStore().update((exchange) => deriveRuntimeExchangeIndexes({
|
|
52
|
+
...exchange,
|
|
53
|
+
generatedAt: updatedAt,
|
|
54
|
+
tasks: [...exchange.tasks.filter((existing) => existing.id !== task.id), toExchangeTask(task, updatedAt)],
|
|
55
|
+
}));
|
|
56
|
+
task.updatedAt = updatedAt;
|
|
57
|
+
task.reviewStatus = normalizeReviewStatus(task.reviewStatus);
|
|
89
58
|
}
|
|
90
59
|
/**
|
|
91
60
|
* Returns true if the session has an active (assigned) task.
|
|
92
61
|
*/
|
|
93
62
|
export function hasActiveTask(sessionId) {
|
|
94
|
-
|
|
95
|
-
return all.some((t) => ["assigned", "in_progress", "blocked"].includes(t.status) && t.assignedTo === sessionId);
|
|
63
|
+
return readAllTasks().some((task) => ["assigned", "in_progress", "blocked"].includes(task.status) && task.assignedTo === sessionId);
|
|
96
64
|
}
|
|
97
65
|
/**
|
|
98
66
|
* Remove done/failed tasks older than maxAgeMs.
|
|
99
67
|
*/
|
|
100
68
|
export function cleanupTasks(maxAgeMs) {
|
|
101
|
-
const dir = ensureTasksDir();
|
|
102
69
|
const now = Date.now();
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const task = JSON.parse(data);
|
|
114
|
-
if ((task.status === "done" || task.status === "failed") && now - new Date(task.updatedAt).getTime() > maxAgeMs) {
|
|
115
|
-
unlinkSync(join(dir, file));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
catch {
|
|
119
|
-
// skip
|
|
120
|
-
}
|
|
121
|
-
}
|
|
70
|
+
const generatedAt = nowIso();
|
|
71
|
+
createRuntimeExchangeStore().update((exchange) => deriveRuntimeExchangeIndexes({
|
|
72
|
+
...exchange,
|
|
73
|
+
generatedAt,
|
|
74
|
+
tasks: exchange.tasks.filter((task) => {
|
|
75
|
+
if (task.status !== "done" && task.status !== "failed")
|
|
76
|
+
return true;
|
|
77
|
+
return now - new Date(task.updatedAt).getTime() <= maxAgeMs;
|
|
78
|
+
}),
|
|
79
|
+
}));
|
|
122
80
|
}
|
|
123
81
|
/**
|
|
124
82
|
* List pending review tasks assigned to a given role.
|
|
125
83
|
*/
|
|
126
84
|
export function listPendingReviews(role) {
|
|
127
|
-
return readAllTasks().filter((
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
normalizeReviewStatus(
|
|
85
|
+
return readAllTasks().filter((task) => task.type === "review" &&
|
|
86
|
+
task.assignee === role &&
|
|
87
|
+
task.status === "pending" &&
|
|
88
|
+
normalizeReviewStatus(task.reviewStatus) === "pending");
|
|
131
89
|
}
|
|
132
90
|
/**
|
|
133
91
|
* List active tasks assigned to a given role (pending or assigned, not done/failed).
|
|
134
92
|
*/
|
|
135
93
|
export function listTasksForRole(role) {
|
|
136
|
-
return readAllTasks().filter((
|
|
94
|
+
return readAllTasks().filter((task) => task.assignee === role && task.status !== "done" && task.status !== "failed");
|
|
137
95
|
}
|
|
138
96
|
//# sourceMappingURL=tasks.js.map
|
package/dist/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/team.d.ts
CHANGED
|
@@ -9,6 +9,35 @@ export interface TeamConfig {
|
|
|
9
9
|
roles: Record<string, RoleConfig>;
|
|
10
10
|
defaultRole: string;
|
|
11
11
|
}
|
|
12
|
+
export interface SessionTeamMetadata {
|
|
13
|
+
teamId: string;
|
|
14
|
+
parentSessionId: string;
|
|
15
|
+
role?: string;
|
|
16
|
+
label?: string;
|
|
17
|
+
order?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function isTeammateSession(session: {
|
|
20
|
+
team?: SessionTeamMetadata;
|
|
21
|
+
} | undefined): boolean;
|
|
22
|
+
export declare function compareTeammateSessions(left: {
|
|
23
|
+
id: string;
|
|
24
|
+
createdAt?: string;
|
|
25
|
+
team?: SessionTeamMetadata;
|
|
26
|
+
}, right: {
|
|
27
|
+
id: string;
|
|
28
|
+
createdAt?: string;
|
|
29
|
+
team?: SessionTeamMetadata;
|
|
30
|
+
}): number;
|
|
31
|
+
export declare function selectDirectTeammates<T extends {
|
|
32
|
+
id: string;
|
|
33
|
+
createdAt?: string;
|
|
34
|
+
team?: SessionTeamMetadata;
|
|
35
|
+
}>(sessions: T[], parentSessionId: string): T[];
|
|
36
|
+
export declare function selectOrphanTeammates<T extends {
|
|
37
|
+
id: string;
|
|
38
|
+
createdAt?: string;
|
|
39
|
+
team?: SessionTeamMetadata;
|
|
40
|
+
}>(sessions: T[], knownParentIds: Iterable<string>): T[];
|
|
12
41
|
export declare function getDefaultTeamConfig(): TeamConfig;
|
|
13
42
|
/**
|
|
14
43
|
* Load team config: project .aimux/team.json → global ~/.aimux/team.json → built-in defaults.
|
package/dist/team.js
CHANGED
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
2
2
|
import { getLocalAimuxDir, getProjectTeamPath, getGlobalTeamPath, getGlobalAimuxDir } from "./paths.js";
|
|
3
|
+
export function isTeammateSession(session) {
|
|
4
|
+
return Boolean(session?.team?.parentSessionId);
|
|
5
|
+
}
|
|
6
|
+
export function compareTeammateSessions(left, right) {
|
|
7
|
+
const leftOrder = typeof left.team?.order === "number" ? left.team.order : Number.POSITIVE_INFINITY;
|
|
8
|
+
const rightOrder = typeof right.team?.order === "number" ? right.team.order : Number.POSITIVE_INFINITY;
|
|
9
|
+
if (leftOrder !== rightOrder)
|
|
10
|
+
return leftOrder - rightOrder;
|
|
11
|
+
const leftCreated = left.createdAt ? Date.parse(left.createdAt) : Number.POSITIVE_INFINITY;
|
|
12
|
+
const rightCreated = right.createdAt ? Date.parse(right.createdAt) : Number.POSITIVE_INFINITY;
|
|
13
|
+
const normalizedLeftCreated = Number.isFinite(leftCreated) ? leftCreated : Number.POSITIVE_INFINITY;
|
|
14
|
+
const normalizedRightCreated = Number.isFinite(rightCreated) ? rightCreated : Number.POSITIVE_INFINITY;
|
|
15
|
+
if (normalizedLeftCreated !== normalizedRightCreated)
|
|
16
|
+
return normalizedLeftCreated - normalizedRightCreated;
|
|
17
|
+
return left.id.localeCompare(right.id);
|
|
18
|
+
}
|
|
19
|
+
export function selectDirectTeammates(sessions, parentSessionId) {
|
|
20
|
+
const byId = new Map();
|
|
21
|
+
for (const session of sessions) {
|
|
22
|
+
if (session.team?.parentSessionId !== parentSessionId)
|
|
23
|
+
continue;
|
|
24
|
+
if (!byId.has(session.id)) {
|
|
25
|
+
byId.set(session.id, session);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return [...byId.values()].sort(compareTeammateSessions);
|
|
29
|
+
}
|
|
30
|
+
export function selectOrphanTeammates(sessions, knownParentIds) {
|
|
31
|
+
const parents = new Set(knownParentIds);
|
|
32
|
+
const byId = new Map();
|
|
33
|
+
for (const session of sessions) {
|
|
34
|
+
const parentSessionId = session.team?.parentSessionId;
|
|
35
|
+
if (!parentSessionId || parents.has(parentSessionId))
|
|
36
|
+
continue;
|
|
37
|
+
if (!byId.has(session.id)) {
|
|
38
|
+
byId.set(session.id, session);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return [...byId.values()].sort(compareTeammateSessions);
|
|
42
|
+
}
|
|
3
43
|
const DEFAULT_TEAM_CONFIG = {
|
|
4
44
|
roles: {
|
|
5
45
|
coder: {
|
package/dist/team.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team.js","sourceRoot":"","sources":["../src/team.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"team.js","sourceRoot":"","sources":["../src/team.ts"],"names":[],"mappings":"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"}
|
package/dist/threads.d.ts
CHANGED
|
@@ -1,38 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
export type
|
|
3
|
-
export type
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
kind: ThreadKind;
|
|
8
|
-
createdAt: string;
|
|
9
|
-
updatedAt: string;
|
|
10
|
-
createdBy: string;
|
|
11
|
-
participants: string[];
|
|
12
|
-
status: ThreadStatus;
|
|
13
|
-
owner?: string;
|
|
14
|
-
waitingOn?: string[];
|
|
15
|
-
worktreePath?: string;
|
|
16
|
-
taskId?: string;
|
|
17
|
-
relatedPlanIds?: string[];
|
|
18
|
-
lastMessageId?: string;
|
|
19
|
-
unreadBy?: string[];
|
|
20
|
-
tags?: string[];
|
|
21
|
-
}
|
|
22
|
-
export interface OrchestrationMessage {
|
|
23
|
-
id: string;
|
|
24
|
-
threadId: string;
|
|
25
|
-
ts: string;
|
|
26
|
-
from: string;
|
|
27
|
-
to?: string[];
|
|
28
|
-
kind: MessageKind;
|
|
29
|
-
body: string;
|
|
30
|
-
taskId?: string;
|
|
31
|
-
planId?: string;
|
|
32
|
-
metadata?: Record<string, string | number | boolean | null>;
|
|
33
|
-
deliveredTo?: string[];
|
|
34
|
-
deliveredAt?: string;
|
|
35
|
-
}
|
|
1
|
+
import { type RuntimeExchangeMessage, type RuntimeExchangeThread } from "./runtime-core/exchange-store.js";
|
|
2
|
+
export type ThreadKind = RuntimeExchangeThread["kind"];
|
|
3
|
+
export type ThreadStatus = RuntimeExchangeThread["status"];
|
|
4
|
+
export type MessageKind = RuntimeExchangeMessage["kind"];
|
|
5
|
+
export type OrchestrationThread = RuntimeExchangeThread;
|
|
6
|
+
export type OrchestrationMessage = RuntimeExchangeMessage;
|
|
36
7
|
export interface ThreadSummary {
|
|
37
8
|
thread: OrchestrationThread;
|
|
38
9
|
latestMessage?: OrchestrationMessage;
|
package/dist/threads.js
CHANGED
|
@@ -1,33 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { getThreadsDir } from "./paths.js";
|
|
4
|
-
function threadsDir() {
|
|
5
|
-
const dir = getThreadsDir();
|
|
6
|
-
if (!existsSync(dir))
|
|
7
|
-
mkdirSync(dir, { recursive: true });
|
|
8
|
-
return dir;
|
|
9
|
-
}
|
|
10
|
-
function threadPath(threadId) {
|
|
11
|
-
return join(threadsDir(), `${threadId}.json`);
|
|
12
|
-
}
|
|
13
|
-
function messagesPath(threadId) {
|
|
14
|
-
return join(threadsDir(), `${threadId}.jsonl`);
|
|
15
|
-
}
|
|
1
|
+
import { deriveRuntimeExchangeIndexes } from "./runtime-core/exchange-derived.js";
|
|
2
|
+
import { createRuntimeExchangeStore, } from "./runtime-core/exchange-store.js";
|
|
16
3
|
function nowIso() {
|
|
17
4
|
return new Date().toISOString();
|
|
18
5
|
}
|
|
19
6
|
function randomId(prefix) {
|
|
20
7
|
return `${prefix}-${Math.random().toString(36).slice(2, 10)}`;
|
|
21
8
|
}
|
|
9
|
+
function unique(values) {
|
|
10
|
+
return [...new Set(values.map((value) => value?.trim()).filter(Boolean))];
|
|
11
|
+
}
|
|
12
|
+
function threadUpdatedForMessage(thread, message, updatedAt) {
|
|
13
|
+
return {
|
|
14
|
+
...thread,
|
|
15
|
+
updatedAt,
|
|
16
|
+
lastMessageId: message.id,
|
|
17
|
+
unreadBy: unique((thread.participants ?? []).filter((id) => id !== message.from)),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
22
20
|
export function createThread(input) {
|
|
21
|
+
const now = nowIso();
|
|
23
22
|
const thread = {
|
|
24
23
|
id: input.id ?? randomId("thread"),
|
|
25
24
|
title: input.title,
|
|
26
25
|
kind: input.kind,
|
|
27
|
-
createdAt:
|
|
28
|
-
updatedAt:
|
|
26
|
+
createdAt: now,
|
|
27
|
+
updatedAt: now,
|
|
29
28
|
createdBy: input.createdBy,
|
|
30
|
-
participants:
|
|
29
|
+
participants: unique(input.participants),
|
|
31
30
|
status: input.status ?? "open",
|
|
32
31
|
owner: input.owner,
|
|
33
32
|
waitingOn: input.waitingOn,
|
|
@@ -38,56 +37,50 @@ export function createThread(input) {
|
|
|
38
37
|
unreadBy: input.unreadBy,
|
|
39
38
|
tags: input.tags,
|
|
40
39
|
};
|
|
41
|
-
|
|
40
|
+
createRuntimeExchangeStore().update((exchange) => deriveRuntimeExchangeIndexes({
|
|
41
|
+
...exchange,
|
|
42
|
+
generatedAt: now,
|
|
43
|
+
threads: [...exchange.threads.filter((existing) => existing.id !== thread.id), thread],
|
|
44
|
+
}));
|
|
42
45
|
return thread;
|
|
43
46
|
}
|
|
44
47
|
export function readThread(threadId) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return JSON.parse(readFileSync(threadPath(threadId), "utf-8"));
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
return undefined;
|
|
52
|
-
}
|
|
48
|
+
return createRuntimeExchangeStore()
|
|
49
|
+
.read()
|
|
50
|
+
.threads.find((thread) => thread.id === threadId);
|
|
53
51
|
}
|
|
54
52
|
export function updateThread(threadId, updater) {
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
53
|
+
const now = nowIso();
|
|
54
|
+
let updated;
|
|
55
|
+
createRuntimeExchangeStore().update((exchange) => {
|
|
56
|
+
const threads = exchange.threads.map((current) => {
|
|
57
|
+
if (current.id !== threadId)
|
|
58
|
+
return current;
|
|
59
|
+
updated = {
|
|
60
|
+
...updater(current),
|
|
61
|
+
id: current.id,
|
|
62
|
+
createdAt: current.createdAt,
|
|
63
|
+
updatedAt: now,
|
|
64
|
+
};
|
|
65
|
+
return updated;
|
|
66
|
+
});
|
|
67
|
+
return deriveRuntimeExchangeIndexes({
|
|
68
|
+
...exchange,
|
|
69
|
+
generatedAt: updated ? now : exchange.generatedAt,
|
|
70
|
+
threads,
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
return updated;
|
|
66
74
|
}
|
|
67
75
|
export function listThreads() {
|
|
68
|
-
|
|
69
|
-
return readdirSync(threadsDir())
|
|
70
|
-
.filter((name) => name.endsWith(".json"))
|
|
71
|
-
.map((name) => {
|
|
72
|
-
try {
|
|
73
|
-
return JSON.parse(readFileSync(join(threadsDir(), name), "utf-8"));
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return undefined;
|
|
77
|
-
}
|
|
78
|
-
})
|
|
79
|
-
.filter((value) => Boolean(value))
|
|
80
|
-
.sort((a, b) => (a.updatedAt < b.updatedAt ? 1 : a.updatedAt > b.updatedAt ? -1 : 0));
|
|
81
|
-
}
|
|
82
|
-
catch {
|
|
83
|
-
return [];
|
|
84
|
-
}
|
|
76
|
+
return [...createRuntimeExchangeStore().read().threads].sort((a, b) => a.updatedAt < b.updatedAt ? 1 : a.updatedAt > b.updatedAt ? -1 : 0);
|
|
85
77
|
}
|
|
86
78
|
export function appendMessage(threadId, input) {
|
|
79
|
+
const now = nowIso();
|
|
87
80
|
const message = {
|
|
88
81
|
id: input.id ?? randomId("msg"),
|
|
89
82
|
threadId,
|
|
90
|
-
ts: input.ts ??
|
|
83
|
+
ts: input.ts ?? now,
|
|
91
84
|
from: input.from,
|
|
92
85
|
to: input.to,
|
|
93
86
|
kind: input.kind,
|
|
@@ -95,61 +88,59 @@ export function appendMessage(threadId, input) {
|
|
|
95
88
|
taskId: input.taskId,
|
|
96
89
|
planId: input.planId,
|
|
97
90
|
metadata: input.metadata,
|
|
91
|
+
deliveredTo: input.deliveredTo,
|
|
92
|
+
deliveredAt: input.deliveredAt,
|
|
98
93
|
};
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
94
|
+
let threadFound = false;
|
|
95
|
+
createRuntimeExchangeStore().update((exchange) => {
|
|
96
|
+
const threads = exchange.threads.map((thread) => {
|
|
97
|
+
if (thread.id !== threadId)
|
|
98
|
+
return thread;
|
|
99
|
+
threadFound = true;
|
|
100
|
+
return threadUpdatedForMessage(thread, message, now);
|
|
101
|
+
});
|
|
102
|
+
if (!threadFound)
|
|
103
|
+
throw new Error(`thread not found: ${threadId}`);
|
|
104
|
+
return deriveRuntimeExchangeIndexes({
|
|
105
|
+
...exchange,
|
|
106
|
+
generatedAt: now,
|
|
107
|
+
threads,
|
|
108
|
+
messages: [...exchange.messages.filter((existing) => existing.id !== message.id), message],
|
|
109
|
+
});
|
|
110
|
+
});
|
|
105
111
|
return message;
|
|
106
112
|
}
|
|
107
113
|
export function readMessages(threadId) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
.split("\n")
|
|
113
|
-
.map((line) => line.trim())
|
|
114
|
-
.filter(Boolean)
|
|
115
|
-
.map((line) => {
|
|
116
|
-
try {
|
|
117
|
-
return JSON.parse(line);
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
return undefined;
|
|
121
|
-
}
|
|
122
|
-
})
|
|
123
|
-
.filter((value) => Boolean(value));
|
|
124
|
-
}
|
|
125
|
-
catch {
|
|
126
|
-
return [];
|
|
127
|
-
}
|
|
114
|
+
return createRuntimeExchangeStore()
|
|
115
|
+
.read()
|
|
116
|
+
.messages.filter((message) => message.threadId === threadId)
|
|
117
|
+
.sort((a, b) => (a.ts < b.ts ? -1 : a.ts > b.ts ? 1 : 0));
|
|
128
118
|
}
|
|
129
119
|
export function updateMessage(threadId, messageId, updater) {
|
|
130
|
-
const messages = readMessages(threadId);
|
|
131
|
-
if (messages.length === 0)
|
|
132
|
-
return undefined;
|
|
133
120
|
let updated;
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
121
|
+
createRuntimeExchangeStore().update((exchange) => {
|
|
122
|
+
const messages = exchange.messages.map((message) => {
|
|
123
|
+
if (message.threadId !== threadId || message.id !== messageId)
|
|
124
|
+
return message;
|
|
125
|
+
updated = {
|
|
126
|
+
...updater(message),
|
|
127
|
+
id: message.id,
|
|
128
|
+
threadId: message.threadId,
|
|
129
|
+
ts: message.ts,
|
|
130
|
+
};
|
|
131
|
+
return updated;
|
|
132
|
+
});
|
|
133
|
+
return {
|
|
134
|
+
...exchange,
|
|
135
|
+
generatedAt: updated ? nowIso() : exchange.generatedAt,
|
|
136
|
+
messages,
|
|
142
137
|
};
|
|
143
|
-
return updated;
|
|
144
138
|
});
|
|
145
|
-
if (!updated)
|
|
146
|
-
return undefined;
|
|
147
|
-
writeFileSync(messagesPath(threadId), nextMessages.map((message) => JSON.stringify(message)).join("\n") + "\n");
|
|
148
139
|
return updated;
|
|
149
140
|
}
|
|
150
141
|
export function markMessageDelivered(threadId, messageId, recipient) {
|
|
151
142
|
return updateMessage(threadId, messageId, (current) => {
|
|
152
|
-
const deliveredTo =
|
|
143
|
+
const deliveredTo = unique([...(current.deliveredTo ?? []), recipient]);
|
|
153
144
|
return {
|
|
154
145
|
...current,
|
|
155
146
|
deliveredTo,
|
package/dist/threads.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../src/threads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../src/threads.ts"],"names":[],"mappings":"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"}
|