@brainervirus/workit-cli 8.7.0 → 8.8.0

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.
Files changed (2) hide show
  1. package/dist/index.js +49 -7
  2. package/package.json +4 -4
package/dist/index.js CHANGED
@@ -65,7 +65,7 @@ var package_default;
65
65
  var init_package = __esm(() => {
66
66
  package_default = {
67
67
  name: "@brainervirus/workit-cli",
68
- version: "8.7.0",
68
+ version: "8.8.0",
69
69
  private: false,
70
70
  description: "Workit CLI — setup wizard, doctor, and task control for agentic coding workflows",
71
71
  keywords: [
@@ -103,9 +103,9 @@ var init_package = __esm(() => {
103
103
  },
104
104
  dependencies: {
105
105
  "@babel/parser": "7.29.9",
106
- "@brainervirus/workit-core": "^8.7.0",
107
- "@brainervirus/workit-cursor": "^8.7.0",
108
- "@brainervirus/workit-opencode": "^8.7.0",
106
+ "@brainervirus/workit-core": "^8.8.0",
107
+ "@brainervirus/workit-cursor": "^8.8.0",
108
+ "@brainervirus/workit-opencode": "^8.8.0",
109
109
  "@inkjs/ui": "2.0.0",
110
110
  ink: "7.1.1",
111
111
  react: "19.2.8"
@@ -15136,6 +15136,9 @@ function summarizeRow(row) {
15136
15136
  case "pr.created":
15137
15137
  summary = `#${row.pr ?? "?"} -> ${text("base")} at ${(row.head ?? "?").slice(0, 12)}${row.created === false ? " (existing)" : ""}`;
15138
15138
  break;
15139
+ case "pr.status":
15140
+ summary = `#${row.pr ?? "?"} ${text("state") && text("state") !== "open" ? `${text("state")} ` : ""}checks ${text("checks") || "?"} at ${(row.head ?? "?").slice(0, 12)}`;
15141
+ break;
15139
15142
  case "pr.merged":
15140
15143
  summary = `#${row.pr ?? "?"} ${text("method")} at ${(row.head ?? "?").slice(0, 12)}${text("mergeSha") ? ` -> ${text("mergeSha").slice(0, 12)}` : ""}`;
15141
15144
  break;
@@ -63192,7 +63195,7 @@ function cursorHookDrift(installed, pluginDir) {
63192
63195
  if (pluginDir)
63193
63196
  commands.push(canonicalHookEntry(event, pluginDir).command);
63194
63197
  const entry = Array.isArray(list) ? list[0] : undefined;
63195
- if (!isRecord4(entry) || !commands.includes(entry.command) || entry.failClosed === true || event === "preToolUse" && entry.matcher !== canonical.matcher)
63198
+ if (!isRecord4(entry) || !commands.includes(entry.command) || entry.failClosed === true || event === "stop" && entry.loop_limit !== canonical.loop_limit || event === "preToolUse" && entry.matcher !== canonical.matcher)
63196
63199
  drift.push(event);
63197
63200
  }
63198
63201
  return drift;
@@ -63215,7 +63218,11 @@ function cursorHooksEntry(pluginDir) {
63215
63218
  }
63216
63219
  var OPENCODE_NPM_PIN = "@brainervirus/workit-opencode", isRecord4 = (v) => v !== null && typeof v === "object" && !Array.isArray(v), named = (s, name) => s === name || s.startsWith(`${name}@`), CURSOR_RUNTIME_PACKAGE = "@brainervirus/workit-cursor@latest", cursorHookLauncher = (pluginDir) => pluginDir ? `node "${shellQuotedPath(path26.join(pluginDir, "hooks", "launch.mjs"))}"` : 'node "${CURSOR_PLUGIN_ROOT}/hooks/launch.mjs"', shellQuotedPath = (file) => path26.sep === "\\" ? file : file.replace(/([$`"\\])/g, "\\$1"), CURSOR_HOOK_RUN_COMMAND, CURSOR_PRETOOLUSE_MATCHER = "Write|Edit|Delete|Shell|Remove|ApplyPatch|Apply_Patch|Patch|Rename|Mkdir|Mv|Cp|Touch", CURSOR_HOOK_EVENTS, canonicalHookEntry = (event, pluginDir) => {
63217
63220
  const command = `${cursorHookLauncher(pluginDir)} workit-cursor-hook`;
63218
- return event === "preToolUse" ? { command, matcher: CURSOR_PRETOOLUSE_MATCHER, failClosed: false } : { command, failClosed: false };
63221
+ if (event === "preToolUse")
63222
+ return { command, matcher: CURSOR_PRETOOLUSE_MATCHER, failClosed: false };
63223
+ if (event === "stop")
63224
+ return { command, loop_limit: 1, failClosed: false };
63225
+ return { command, failClosed: false };
63219
63226
  };
63220
63227
  var init_registration = __esm(() => {
63221
63228
  CURSOR_HOOK_RUN_COMMAND = `${cursorHookLauncher()} workit-cursor-hook`;
@@ -63224,6 +63231,7 @@ var init_registration = __esm(() => {
63224
63231
  "beforeShellExecution",
63225
63232
  "subagentStart",
63226
63233
  "subagentStop",
63234
+ "stop",
63227
63235
  "preCompact"
63228
63236
  ];
63229
63237
  });
@@ -73295,6 +73303,33 @@ function buildStatusDoc(cwd, resolved, status, options) {
73295
73303
  babysit: babysitAction(blockers[0]?.next ?? "READY", blockers[0]?.reason ?? null, status.draft || blockers.some((blocker) => blocker.next === "MARK_READY"))
73296
73304
  });
73297
73305
  }
73306
+ function recordPrStatus(cwd, doc, actor) {
73307
+ const checks = doc.checks.state;
73308
+ const state = doc.state;
73309
+ if (state !== "open" && state !== "merged" && state !== "closed")
73310
+ return;
73311
+ if (state === "open" && checks !== "passing" && checks !== "failing" && checks !== "pending")
73312
+ return;
73313
+ try {
73314
+ const ledger = readLedger(cwd);
73315
+ if (!ledger.ok)
73316
+ return;
73317
+ const last = ledger.value.rows.findLast((row) => row.type === "pr.status" && row.observer === "workit_cli" && row.pr === doc.number && row.repo === doc.repo);
73318
+ if (last && last.head === doc.head.sha && last.checks === checks && (last.state ?? "open") === state)
73319
+ return;
73320
+ appendObserved(cwd, {
73321
+ type: "pr.status",
73322
+ actor,
73323
+ branch: doc.head.branch,
73324
+ head: doc.head.sha,
73325
+ pr: doc.number,
73326
+ repo: doc.repo,
73327
+ forge: doc.forge,
73328
+ state,
73329
+ checks
73330
+ });
73331
+ } catch {}
73332
+ }
73298
73333
  function prStatusReport(cwd, resolved, options = {}) {
73299
73334
  const number = selectPr(cwd, resolved, options);
73300
73335
  if (!number.ok)
@@ -73309,6 +73344,8 @@ function prStatusReport(cwd, resolved, options = {}) {
73309
73344
  });
73310
73345
  if (!doc.ok)
73311
73346
  return doc;
73347
+ if (options.actor)
73348
+ recordPrStatus(cwd, doc.data, options.actor);
73312
73349
  return success2({ doc: doc.data, raw: status.data });
73313
73350
  }
73314
73351
  function waitVerdict(doc, options) {
@@ -73434,6 +73471,7 @@ function recordAccepted(cwd, resolved, status, accepted, options) {
73434
73471
  var MAX_LOG_TAILS = 5, GITLAB_MERGEABLE, GITHUB_MERGEABLE, NO_CHECKS_GRACE_MS = 90000;
73435
73472
  var init_report = __esm(() => {
73436
73473
  init_rev();
73474
+ init_ledger();
73437
73475
  init_reruns();
73438
73476
  GITLAB_MERGEABLE = new Set(["mergeable"]);
73439
73477
  GITHUB_MERGEABLE = new Set(["clean", "unstable", "has_hooks"]);
@@ -76595,7 +76633,8 @@ async function status(argv, io) {
76595
76633
  pr,
76596
76634
  branch: flags.values.branch ?? null,
76597
76635
  logLines: logLines ?? 60,
76598
- identity: connected.data.identity
76636
+ identity: connected.data.identity,
76637
+ actor: actorFromEnv(io.env)
76599
76638
  });
76600
76639
  if (!report.ok)
76601
76640
  return forgeFail(io, report);
@@ -76966,6 +77005,7 @@ async function wait(argv, io) {
76966
77005
  const number = selectPr(io.cwd, resolved, { pr, branch: flags.values.branch ?? null });
76967
77006
  if (!number.ok)
76968
77007
  return forgeFail(io, number);
77008
+ const actor = actorFromEnv(io.env);
76969
77009
  let polls = 0;
76970
77010
  let errors = 0;
76971
77011
  let status = null;
@@ -76980,6 +77020,7 @@ async function wait(argv, io) {
76980
77020
  const doc = buildStatusDoc(io.cwd, resolved, status, { logLines: 0, behind: false });
76981
77021
  if (!doc.ok)
76982
77022
  return forgeFail(io, doc);
77023
+ recordPrStatus(io.cwd, doc.data, actor);
76983
77024
  verdict = waitVerdict(doc.data, { head, elapsedMs });
76984
77025
  if (verdict.state !== "waiting")
76985
77026
  break;
@@ -77106,6 +77147,7 @@ async function run11(argv, io) {
77106
77147
  var WAIT_USAGE = "workit ci wait [--pr <n> | --branch <b>] [--head <sha>] [--timeout 20m] [--interval 30s] [--json]", RERUN_USAGE = "workit ci rerun [--pr <n> | --branch <b>] [--check <name>… | --failed] --reason flake|infra [--force] [--json]", ONE_POLL_MS = 20000, MAX_POLL_ERRORS = 3, seconds = (ms) => `${Math.round(ms / 1000)}s`;
77107
77148
  var init_ci = __esm(() => {
77108
77149
  init_report();
77150
+ init_ledger();
77109
77151
  init_autonomy();
77110
77152
  init_output();
77111
77153
  init_forge_common();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brainervirus/workit-cli",
3
- "version": "8.7.0",
3
+ "version": "8.8.0",
4
4
  "private": false,
5
5
  "description": "Workit CLI — setup wizard, doctor, and task control for agentic coding workflows",
6
6
  "keywords": [
@@ -38,9 +38,9 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@babel/parser": "7.29.9",
41
- "@brainervirus/workit-core": "^8.7.0",
42
- "@brainervirus/workit-cursor": "^8.7.0",
43
- "@brainervirus/workit-opencode": "^8.7.0",
41
+ "@brainervirus/workit-core": "^8.8.0",
42
+ "@brainervirus/workit-cursor": "^8.8.0",
43
+ "@brainervirus/workit-opencode": "^8.8.0",
44
44
  "@inkjs/ui": "2.0.0",
45
45
  "ink": "7.1.1",
46
46
  "react": "19.2.8"