cuekit 0.0.13 → 0.0.15
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/bin/cuekit.js +94 -41
- package/package.json +1 -1
- package/src/doctor.ts +1 -2
- package/src/update.ts +22 -6
package/bin/cuekit.js
CHANGED
|
@@ -100269,6 +100269,35 @@ var init_react = __esm(async () => {
|
|
|
100269
100269
|
extend2({ "time-to-first-draw": TimeToFirstDrawRenderable });
|
|
100270
100270
|
});
|
|
100271
100271
|
|
|
100272
|
+
// packages/tui/package.json
|
|
100273
|
+
var package_default4;
|
|
100274
|
+
var init_package = __esm(() => {
|
|
100275
|
+
package_default4 = {
|
|
100276
|
+
name: "@cuekit/tui",
|
|
100277
|
+
version: "0.0.15",
|
|
100278
|
+
private: true,
|
|
100279
|
+
type: "module",
|
|
100280
|
+
exports: {
|
|
100281
|
+
".": "./src/index.ts"
|
|
100282
|
+
},
|
|
100283
|
+
scripts: {
|
|
100284
|
+
typecheck: "tsc --noEmit",
|
|
100285
|
+
test: "bun test"
|
|
100286
|
+
},
|
|
100287
|
+
dependencies: {
|
|
100288
|
+
"@cuekit/core": "workspace:*",
|
|
100289
|
+
"@opentui/core": "0.2.1",
|
|
100290
|
+
"@opentui/react": "0.2.1",
|
|
100291
|
+
react: "19.2.5"
|
|
100292
|
+
},
|
|
100293
|
+
devDependencies: {
|
|
100294
|
+
"@cuekit/adapters": "workspace:*",
|
|
100295
|
+
"@cuekit/store": "workspace:*",
|
|
100296
|
+
"@types/react": "19.2.14"
|
|
100297
|
+
}
|
|
100298
|
+
};
|
|
100299
|
+
});
|
|
100300
|
+
|
|
100272
100301
|
// packages/tui/src/attach.ts
|
|
100273
100302
|
function getPaneAttachCommand(view) {
|
|
100274
100303
|
if (view.attach_command)
|
|
@@ -100417,6 +100446,8 @@ var theme;
|
|
|
100417
100446
|
var init_theme = __esm(() => {
|
|
100418
100447
|
theme = {
|
|
100419
100448
|
bg: "#2b2b2b",
|
|
100449
|
+
headerBg: "#1a1a1a",
|
|
100450
|
+
headerFg: "#76c7c8",
|
|
100420
100451
|
panel: "#303030",
|
|
100421
100452
|
panelAlt: "#242424",
|
|
100422
100453
|
row: "#1b1b1b",
|
|
@@ -101819,6 +101850,18 @@ var init_team_list = __esm(() => {
|
|
|
101819
101850
|
});
|
|
101820
101851
|
|
|
101821
101852
|
// packages/tui/src/app.tsx
|
|
101853
|
+
function Header({ mode }) {
|
|
101854
|
+
const modeLabel = mode === "teams" ? "Teams" : mode === "parents" ? "Parent Sessions" : "Tasks";
|
|
101855
|
+
return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
|
|
101856
|
+
height: 1,
|
|
101857
|
+
flexDirection: "row",
|
|
101858
|
+
backgroundColor: theme.headerBg,
|
|
101859
|
+
children: /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("text", {
|
|
101860
|
+
fg: theme.headerFg,
|
|
101861
|
+
children: ` cuekit ${CUEKIT_VERSION} \u2014 ${modeLabel} `
|
|
101862
|
+
}, undefined, false, undefined, this)
|
|
101863
|
+
}, undefined, false, undefined, this);
|
|
101864
|
+
}
|
|
101822
101865
|
function confirmTitle(action) {
|
|
101823
101866
|
if (action.kind === "cleanup-team")
|
|
101824
101867
|
return "Cleanup team";
|
|
@@ -101865,7 +101908,7 @@ function App(props) {
|
|
|
101865
101908
|
const debouncedTeam = import_react14.useMemo(() => teams.find((team2) => team2.team_id === debouncedTeamDetailId), [debouncedTeamDetailId, teams]);
|
|
101866
101909
|
const selectedMember = import_react14.useMemo(() => teamDetail?.members[selectedMemberIndex], [teamDetail, selectedMemberIndex]);
|
|
101867
101910
|
const selectedTeamCounts = selectedTeam?.task_counts ?? teamDetail?.status?.task_counts;
|
|
101868
|
-
const listRows = Math.max(1, terminal.height -
|
|
101911
|
+
const listRows = Math.max(1, terminal.height - 8);
|
|
101869
101912
|
const detailLoadDebounceMs = props.ctx.detailLoadDebounceMs ?? DEFAULT_DETAIL_LOAD_DEBOUNCE_MS;
|
|
101870
101913
|
const taskDetailLoading = Boolean((mode === "tasks" || mode === "parents") && selectedTaskId && detail?.status.task_id !== selectedTaskId);
|
|
101871
101914
|
const teamDetailLoading = Boolean(mode === "teams" && selectedTeamId && teamDetail?.team.team_id !== selectedTeamId);
|
|
@@ -102350,6 +102393,9 @@ function App(props) {
|
|
|
102350
102393
|
flexDirection: "column",
|
|
102351
102394
|
backgroundColor: theme.bg,
|
|
102352
102395
|
children: [
|
|
102396
|
+
/* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV(Header, {
|
|
102397
|
+
mode
|
|
102398
|
+
}, undefined, false, undefined, this),
|
|
102353
102399
|
/* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
|
|
102354
102400
|
flexDirection: "row",
|
|
102355
102401
|
flexGrow: 1,
|
|
@@ -102417,8 +102463,9 @@ function App(props) {
|
|
|
102417
102463
|
]
|
|
102418
102464
|
}, undefined, true, undefined, this);
|
|
102419
102465
|
}
|
|
102420
|
-
var import_react14, AUTO_REFRESH_MS = 3000, DEFAULT_DETAIL_LOAD_DEBOUNCE_MS = 30, LOADING_SPINNER_FRAMES, LOADING_SPINNER_MS = 120;
|
|
102466
|
+
var import_react14, CUEKIT_VERSION, AUTO_REFRESH_MS = 3000, DEFAULT_DETAIL_LOAD_DEBOUNCE_MS = 30, LOADING_SPINNER_FRAMES, LOADING_SPINNER_MS = 120;
|
|
102421
102467
|
var init_app = __esm(async () => {
|
|
102468
|
+
init_package();
|
|
102422
102469
|
init_attach();
|
|
102423
102470
|
init_confirm_dialog();
|
|
102424
102471
|
init_detail_tabs();
|
|
@@ -102434,6 +102481,7 @@ var init_app = __esm(async () => {
|
|
|
102434
102481
|
init_jsx_dev_runtime();
|
|
102435
102482
|
await init_react();
|
|
102436
102483
|
import_react14 = __toESM(require_react(), 1);
|
|
102484
|
+
CUEKIT_VERSION = package_default4.version ?? "unknown";
|
|
102437
102485
|
LOADING_SPINNER_FRAMES = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
|
|
102438
102486
|
});
|
|
102439
102487
|
|
|
@@ -108769,7 +108817,7 @@ function resolveDisplayName(name, aliases) {
|
|
|
108769
108817
|
// packages/mcp/package.json
|
|
108770
108818
|
var package_default = {
|
|
108771
108819
|
name: "@cuekit/mcp",
|
|
108772
|
-
version: "0.0.
|
|
108820
|
+
version: "0.0.15",
|
|
108773
108821
|
private: true,
|
|
108774
108822
|
type: "module",
|
|
108775
108823
|
exports: {
|
|
@@ -108780,23 +108828,12 @@ var package_default = {
|
|
|
108780
108828
|
test: "bun test"
|
|
108781
108829
|
},
|
|
108782
108830
|
dependencies: {
|
|
108783
|
-
"@cuekit/adapters": "
|
|
108784
|
-
"@cuekit/core": "
|
|
108785
|
-
"@cuekit/project-config": "
|
|
108786
|
-
"@cuekit/store": "
|
|
108831
|
+
"@cuekit/adapters": "workspace:*",
|
|
108832
|
+
"@cuekit/core": "workspace:*",
|
|
108833
|
+
"@cuekit/project-config": "workspace:*",
|
|
108834
|
+
"@cuekit/store": "workspace:*",
|
|
108787
108835
|
incur: "0.4.3",
|
|
108788
|
-
"@cuekit/agent-profiles": "
|
|
108789
|
-
},
|
|
108790
|
-
publishConfig: {
|
|
108791
|
-
access: "public"
|
|
108792
|
-
},
|
|
108793
|
-
engines: {
|
|
108794
|
-
bun: ">=1.2.0"
|
|
108795
|
-
},
|
|
108796
|
-
license: "MIT",
|
|
108797
|
-
repository: {
|
|
108798
|
-
type: "git",
|
|
108799
|
-
url: "git+https://github.com/takemo101/cuekit.git"
|
|
108836
|
+
"@cuekit/agent-profiles": "workspace:*"
|
|
108800
108837
|
}
|
|
108801
108838
|
};
|
|
108802
108839
|
|
|
@@ -110035,9 +110072,12 @@ function buildTeamAttentionItemsFromEvents(taskEvents, options = {}) {
|
|
|
110035
110072
|
return [];
|
|
110036
110073
|
const includeFullMessage = options.includeFullMessage ?? true;
|
|
110037
110074
|
const items = taskEvents.flatMap(({ task: task2, events }) => {
|
|
110038
|
-
|
|
110039
|
-
|
|
110040
|
-
|
|
110075
|
+
return events.filter((event) => ATTENTION_TYPES.has(event.type)).filter((event) => {
|
|
110076
|
+
if (task2.team_position === "coordinator" && event.type === "completed") {
|
|
110077
|
+
return false;
|
|
110078
|
+
}
|
|
110079
|
+
return true;
|
|
110080
|
+
}).map((event) => {
|
|
110041
110081
|
const type = event.type;
|
|
110042
110082
|
return {
|
|
110043
110083
|
sequence: event.sequence,
|
|
@@ -110855,6 +110895,17 @@ ${input.strategy.intent}` : undefined,
|
|
|
110855
110895
|
"Use cuekit tools to coordinate: inspect the strategy's recommended team skeleton when useful, review and adjust it before submit_team_tasks, wait with follow_new_tasks, steer when needed, get_team_result, and report a final completed event. Cuekit will not auto-submit worker/reviewer tasks from the skeleton.",
|
|
110856
110896
|
"Report progress after submitting tasks, bounded waits, and steering so the parent can see the current state and avoid appearing idle while work is still in progress.",
|
|
110857
110897
|
"When submitting team tasks, set a clear position whenever the lifecycle lane is known: worker for implementation/investigation, reviewer for review, finisher for PR/release/cleanup finishing, observer for monitoring, and coordinator only for orchestration. Unpositioned team tasks are allowed for ambiguous ad-hoc work, but they will not appear in worker/reviewer/finisher lanes.",
|
|
110898
|
+
`## Coordinator wait loop recipe
|
|
110899
|
+
|
|
110900
|
+
You must stay active until all non-coordinator tasks are terminal. Use this pattern:
|
|
110901
|
+
|
|
110902
|
+
1. submit_team_tasks for workers (position: worker)
|
|
110903
|
+
2. loop { wait_team(follow_new_tasks, timeout_ms: 60000) }
|
|
110904
|
+
- if all workers terminal \u2192 submit reviewer (position: reviewer) or finisher
|
|
110905
|
+
- if blocked/stalled \u2192 steer affected task or report blocked
|
|
110906
|
+
- if attention_items include coordinator blocked \u2192 report immediately
|
|
110907
|
+
3. After reviewer/finisher completes \u2192 get_team_result and emit final completed report
|
|
110908
|
+
4. Never exit while non-coordinator tasks are running without explicit parent direction`,
|
|
110858
110909
|
"When team status or result includes attention_items, inspect them before deciding whether to continue, submit more tasks, steer a task, or emit your final report.",
|
|
110859
110910
|
"Do not emit your final completed report while submitted worker, reviewer, or finisher tasks are still non-terminal. Wait with follow_new_tasks, inspect get_team_result, and steer idle tasks once before deciding they are unusable. If you intentionally skip, cancel, or cannot wait for any submitted non-coordinator task, explain that exception in the final report.",
|
|
110860
110911
|
"After a `position: finisher` task completes and all submitted non-coordinator tasks are terminal or explicitly accounted for, inspect the team result with get_team_result and emit your own final completed report \u2014 do not wait for parent steering. If no finisher was submitted, the coordinator remains responsible for the final durable report under the same condition."
|
|
@@ -111920,8 +111971,9 @@ async function runStartTeamStrategy(ctx, input) {
|
|
|
111920
111971
|
...role ? { role } : {},
|
|
111921
111972
|
...agent_kind ? { agent_kind } : {},
|
|
111922
111973
|
...model ? { model } : {},
|
|
111923
|
-
|
|
111924
|
-
...adapter_options ? { adapter_options } : {}
|
|
111974
|
+
timeout_ms: input.coordinator?.timeout_ms ?? null,
|
|
111975
|
+
...adapter_options ? { adapter_options } : {},
|
|
111976
|
+
metadata: { long_lived: true }
|
|
111925
111977
|
});
|
|
111926
111978
|
if (!submitted.accepted) {
|
|
111927
111979
|
return failure("coordinator_submit_failed", submitted.error.message);
|
|
@@ -112711,7 +112763,7 @@ async function runWaitTeam(ctx, input) {
|
|
|
112711
112763
|
status: aggregateTeamStatus(latest2),
|
|
112712
112764
|
mode: input.mode ?? "all",
|
|
112713
112765
|
done: false,
|
|
112714
|
-
timed_out:
|
|
112766
|
+
timed_out: true,
|
|
112715
112767
|
team_sequence: maxSeq,
|
|
112716
112768
|
scope: { team_id: team2.id, session_id: team2.session_id },
|
|
112717
112769
|
tasks: [],
|
|
@@ -112753,6 +112805,7 @@ async function runWaitTeam(ctx, input) {
|
|
|
112753
112805
|
run_summary: buildTeamRunSummary(ctx, latest),
|
|
112754
112806
|
...nextActionHint ? { next_action_hint: nextActionHint } : {},
|
|
112755
112807
|
...cleanupHint ? { cleanup_hint: cleanupHint } : {},
|
|
112808
|
+
...input.since_team_sequence !== undefined ? { team_sequence: getMaxTeamSequence(ctx.db, team2.id) ?? 0 } : {},
|
|
112756
112809
|
...wait.error ? { error: wait.error } : {}
|
|
112757
112810
|
};
|
|
112758
112811
|
}
|
|
@@ -113666,8 +113719,8 @@ import { dirname as dirname10 } from "path";
|
|
|
113666
113719
|
init_src2();
|
|
113667
113720
|
// packages/cli/package.json
|
|
113668
113721
|
var package_default2 = {
|
|
113669
|
-
name: "
|
|
113670
|
-
version: "0.0.
|
|
113722
|
+
name: "cuekit",
|
|
113723
|
+
version: "0.0.15",
|
|
113671
113724
|
description: "cuekit \u2014 delegation substrate for coding agents",
|
|
113672
113725
|
type: "module",
|
|
113673
113726
|
exports: {
|
|
@@ -113685,15 +113738,7 @@ var package_default2 = {
|
|
|
113685
113738
|
typecheck: "tsc --noEmit",
|
|
113686
113739
|
test: "bun test"
|
|
113687
113740
|
},
|
|
113688
|
-
dependencies: {
|
|
113689
|
-
"@cuekit/adapters": "^0.0.12",
|
|
113690
|
-
"@cuekit/agent-profiles": "^0.0.12",
|
|
113691
|
-
"@cuekit/core": "^0.0.12",
|
|
113692
|
-
"@cuekit/mcp": "^0.0.12",
|
|
113693
|
-
"@cuekit/project-config": "^0.0.12",
|
|
113694
|
-
"@cuekit/store": "^0.0.12",
|
|
113695
|
-
"@cuekit/tui": "^0.0.12"
|
|
113696
|
-
},
|
|
113741
|
+
dependencies: {},
|
|
113697
113742
|
engines: {
|
|
113698
113743
|
bun: ">=1.2.0"
|
|
113699
113744
|
},
|
|
@@ -113716,6 +113761,14 @@ var package_default2 = {
|
|
|
113716
113761
|
homepage: "https://github.com/takemo101/cuekit#readme",
|
|
113717
113762
|
bugs: {
|
|
113718
113763
|
url: "https://github.com/takemo101/cuekit/issues"
|
|
113764
|
+
},
|
|
113765
|
+
optionalDependencies: {
|
|
113766
|
+
"@opentui/core-darwin-arm64": "0.2.1",
|
|
113767
|
+
"@opentui/core-darwin-x64": "0.2.1",
|
|
113768
|
+
"@opentui/core-linux-arm64": "0.2.1",
|
|
113769
|
+
"@opentui/core-linux-x64": "0.2.1",
|
|
113770
|
+
"@opentui/core-win32-arm64": "0.2.1",
|
|
113771
|
+
"@opentui/core-win32-x64": "0.2.1"
|
|
113719
113772
|
}
|
|
113720
113773
|
};
|
|
113721
113774
|
|
|
@@ -114207,18 +114260,18 @@ async function getLatestGitHubRelease() {
|
|
|
114207
114260
|
return { ok: false, reason: error51 instanceof Error ? error51.message : String(error51) };
|
|
114208
114261
|
}
|
|
114209
114262
|
}
|
|
114210
|
-
function installCommand(
|
|
114211
|
-
return `
|
|
114263
|
+
function installCommand(_tag) {
|
|
114264
|
+
return `npm install -g cuekit@latest`;
|
|
114212
114265
|
}
|
|
114213
|
-
var REMOVE_COMMAND = "
|
|
114266
|
+
var REMOVE_COMMAND = "npm uninstall -g cuekit";
|
|
114214
114267
|
async function runUpdate(options = {}) {
|
|
114215
114268
|
const current = options.getCurrentVersion !== undefined ? options.getCurrentVersion() ?? "unknown" : package_default2.version ?? "unknown";
|
|
114216
114269
|
const latest = await (options.getLatestRelease ?? getLatestGitHubRelease)();
|
|
114217
114270
|
const lines = ["cuekit update", "", `Current: ${current}`];
|
|
114218
114271
|
if (latest.ok) {
|
|
114219
|
-
lines.push(`Latest: ${latest.tag}`, "", "Run:", "", ` ${REMOVE_COMMAND}`, ` ${installCommand(latest.tag)}`, "", "
|
|
114272
|
+
lines.push(`Latest: ${latest.tag}`, "", "Run:", "", ` ${REMOVE_COMMAND}`, ` ${installCommand(latest.tag)}`, "", "After installing, restart any MCP client using cuekit.", "", "Note: If you installed cuekit before v0.0.12 via GitHub directly", "(bun install -g github:takemo101/cuekit#...), uninstall with:", " bun remove -g cuekit-workspace", "", "If you installed via Homebrew's npm (/opt/homebrew/bin/cuekit),", "uninstall with:", " /opt/homebrew/bin/npm uninstall -g cuekit", "");
|
|
114220
114273
|
} else {
|
|
114221
|
-
lines.push("Latest: unknown", "", `Could not fetch the latest release tag: ${latest.reason}`, "Open https://github.com/takemo101/cuekit/releases and choose a release tag.", "", "Manual update pattern:", ` ${REMOVE_COMMAND}`, `
|
|
114274
|
+
lines.push("Latest: unknown", "", `Could not fetch the latest release tag: ${latest.reason}`, "Open https://github.com/takemo101/cuekit/releases and choose a release tag.", "", "Manual update pattern:", ` ${REMOVE_COMMAND}`, ` npm install -g cuekit@<version>`, "(<version> is a placeholder, e.g., 0.0.14)", "", "Note: If you installed cuekit before v0.0.12 via GitHub directly", "(bun install -g github:takemo101/cuekit#...), uninstall with:", " bun remove -g cuekit-workspace", "", "If you installed via Homebrew's npm (/opt/homebrew/bin/cuekit),", "uninstall with:", " /opt/homebrew/bin/npm uninstall -g cuekit", "");
|
|
114222
114275
|
}
|
|
114223
114276
|
lines.push("Then restart any MCP client using cuekit.", "");
|
|
114224
114277
|
return { exitCode: 0, stdout: lines.join(`
|
package/package.json
CHANGED
package/src/doctor.ts
CHANGED
|
@@ -410,8 +410,7 @@ export async function runDoctor(options: RunDoctorOptions = {}): Promise<DoctorR
|
|
|
410
410
|
// PATH. This is especially common with herdr or when cuekit itself is
|
|
411
411
|
// already running inside a multiplexer session.
|
|
412
412
|
const anyAdapterFound = checks.some(
|
|
413
|
-
(c) =>
|
|
414
|
-
c.label.startsWith("adapter ") && c.level === "ok" && c.detail.includes("found"),
|
|
413
|
+
(c) => c.label.startsWith("adapter ") && c.level === "ok" && c.detail.includes("found"),
|
|
415
414
|
);
|
|
416
415
|
if (anyAdapterFound && requestedMultiplexer !== "tmux") {
|
|
417
416
|
checks.push({
|
package/src/update.ts
CHANGED
|
@@ -30,11 +30,11 @@ export async function getLatestGitHubRelease(): Promise<UpdateLatestReleaseResul
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
function installCommand(
|
|
34
|
-
return `
|
|
33
|
+
function installCommand(_tag: string): string {
|
|
34
|
+
return `npm install -g cuekit@latest`;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
const REMOVE_COMMAND = "
|
|
37
|
+
const REMOVE_COMMAND = "npm uninstall -g cuekit";
|
|
38
38
|
|
|
39
39
|
export async function runUpdate(options: RunUpdateOptions = {}): Promise<UpdateResult> {
|
|
40
40
|
const current =
|
|
@@ -53,7 +53,15 @@ export async function runUpdate(options: RunUpdateOptions = {}): Promise<UpdateR
|
|
|
53
53
|
` ${REMOVE_COMMAND}`,
|
|
54
54
|
` ${installCommand(latest.tag)}`,
|
|
55
55
|
"",
|
|
56
|
-
"
|
|
56
|
+
"After installing, restart any MCP client using cuekit.",
|
|
57
|
+
"",
|
|
58
|
+
"Note: If you installed cuekit before v0.0.12 via GitHub directly",
|
|
59
|
+
"(bun install -g github:takemo101/cuekit#...), uninstall with:",
|
|
60
|
+
" bun remove -g cuekit-workspace",
|
|
61
|
+
"",
|
|
62
|
+
"If you installed via Homebrew's npm (/opt/homebrew/bin/cuekit),",
|
|
63
|
+
"uninstall with:",
|
|
64
|
+
" /opt/homebrew/bin/npm uninstall -g cuekit",
|
|
57
65
|
"",
|
|
58
66
|
);
|
|
59
67
|
} else {
|
|
@@ -65,8 +73,16 @@ export async function runUpdate(options: RunUpdateOptions = {}): Promise<UpdateR
|
|
|
65
73
|
"",
|
|
66
74
|
"Manual update pattern:",
|
|
67
75
|
` ${REMOVE_COMMAND}`,
|
|
68
|
-
`
|
|
69
|
-
"(<
|
|
76
|
+
` npm install -g cuekit@<version>`,
|
|
77
|
+
"(<version> is a placeholder, e.g., 0.0.14)",
|
|
78
|
+
"",
|
|
79
|
+
"Note: If you installed cuekit before v0.0.12 via GitHub directly",
|
|
80
|
+
"(bun install -g github:takemo101/cuekit#...), uninstall with:",
|
|
81
|
+
" bun remove -g cuekit-workspace",
|
|
82
|
+
"",
|
|
83
|
+
"If you installed via Homebrew's npm (/opt/homebrew/bin/cuekit),",
|
|
84
|
+
"uninstall with:",
|
|
85
|
+
" /opt/homebrew/bin/npm uninstall -g cuekit",
|
|
70
86
|
"",
|
|
71
87
|
);
|
|
72
88
|
}
|