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 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 - 7);
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.12",
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": "^0.0.12",
108784
- "@cuekit/core": "^0.0.12",
108785
- "@cuekit/project-config": "^0.0.12",
108786
- "@cuekit/store": "^0.0.12",
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": "^0.0.12"
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
- if (task2.team_position === "coordinator")
110039
- return [];
110040
- return events.filter((event) => ATTENTION_TYPES.has(event.type)).map((event) => {
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
- ...input.coordinator?.timeout_ms !== undefined ? { timeout_ms: input.coordinator.timeout_ms } : {},
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: false,
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: "@cuekit/cli",
113670
- version: "0.0.12",
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(tag) {
114211
- return `bun install -g github:${REPO}#${tag}`;
114263
+ function installCommand(_tag) {
114264
+ return `npm install -g cuekit@latest`;
114212
114265
  }
114213
- var REMOVE_COMMAND = "bun remove -g cuekit-workspace";
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)}`, "", "Removing first avoids Bun global GitHub dependency-loop errors when upgrading from an older cuekit 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}`, ` ${installCommand("<release-tag>")}`, "(<release-tag> is a placeholder, not a discovered version.)", "");
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cuekit",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "description": "cuekit — delegation substrate for coding agents",
5
5
  "type": "module",
6
6
  "exports": {
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(tag: string): string {
34
- return `bun install -g github:${REPO}#${tag}`;
33
+ function installCommand(_tag: string): string {
34
+ return `npm install -g cuekit@latest`;
35
35
  }
36
36
 
37
- const REMOVE_COMMAND = "bun remove -g cuekit-workspace";
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
- "Removing first avoids Bun global GitHub dependency-loop errors when upgrading from an older cuekit tag.",
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
- ` ${installCommand("<release-tag>")}`,
69
- "(<release-tag> is a placeholder, not a discovered version.)",
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
  }