@brainervirus/workit-claude-code 8.34.0 → 8.35.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.
- package/.claude-plugin/plugin.json +1 -1
- package/dist/workit.js +101 -7
- package/package.json +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workit",
|
|
3
3
|
"displayName": "Workit",
|
|
4
|
-
"version": "8.
|
|
4
|
+
"version": "8.35.0",
|
|
5
5
|
"description": "Workflow rails for agentic coding: task context on every session, branch policy on shell commands, and the workit method skills",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "BrainerVirus"
|
package/dist/workit.js
CHANGED
|
@@ -9286,7 +9286,7 @@ var package_default;
|
|
|
9286
9286
|
var init_package = __esm(() => {
|
|
9287
9287
|
package_default = {
|
|
9288
9288
|
name: "@brainervirus/workit-cli",
|
|
9289
|
-
version: "8.
|
|
9289
|
+
version: "8.35.0",
|
|
9290
9290
|
private: false,
|
|
9291
9291
|
description: "Workit CLI — setup wizard, doctor, and task control for agentic coding workflows",
|
|
9292
9292
|
keywords: [
|
|
@@ -9324,13 +9324,13 @@ var init_package = __esm(() => {
|
|
|
9324
9324
|
},
|
|
9325
9325
|
dependencies: {
|
|
9326
9326
|
"@babel/parser": "7.29.9",
|
|
9327
|
-
"@brainervirus/workit-cursor": "^8.
|
|
9327
|
+
"@brainervirus/workit-cursor": "^8.35.0",
|
|
9328
9328
|
"@inkjs/ui": "2.0.0",
|
|
9329
9329
|
ink: "7.1.1",
|
|
9330
9330
|
react: "19.2.8"
|
|
9331
9331
|
},
|
|
9332
9332
|
devDependencies: {
|
|
9333
|
-
"@brainervirus/workit-core": "^8.
|
|
9333
|
+
"@brainervirus/workit-core": "^8.35.0"
|
|
9334
9334
|
},
|
|
9335
9335
|
engines: {
|
|
9336
9336
|
node: ">=24"
|
|
@@ -80235,6 +80235,22 @@ function implicitDeleteSkip(cwd, resolved, doc, branch) {
|
|
|
80235
80235
|
return `open PR ${children.data.map((n) => `#${n}`).join(", ")} targets ${branch} (a stack)`;
|
|
80236
80236
|
return null;
|
|
80237
80237
|
}
|
|
80238
|
+
function baseCiState(cwd, resolved, base) {
|
|
80239
|
+
if (!isProtectedTarget(cwd, base))
|
|
80240
|
+
return { ok: true, note: null };
|
|
80241
|
+
const read = resolved.forge.branchChecks(base);
|
|
80242
|
+
if (!read.ok)
|
|
80243
|
+
return { ok: true, note: `base ${base} CI not read (${read.error}); merging anyway` };
|
|
80244
|
+
const { requiredKnown } = read.data;
|
|
80245
|
+
const failing = read.data.checks.filter((check) => check.state === "failing" && (requiredKnown ? check.required === true : check.required !== false && check.conclusion === "failure"));
|
|
80246
|
+
if (failing.length)
|
|
80247
|
+
return { ok: false, failing, sha: read.data.sha, requiredKnown };
|
|
80248
|
+
const pending = read.data.checks.filter((check) => check.state === "pending");
|
|
80249
|
+
return {
|
|
80250
|
+
ok: true,
|
|
80251
|
+
note: pending.length ? `base ${base} CI is still running (${pending.map((check) => check.name).join(", ")}); merging without waiting` : null
|
|
80252
|
+
};
|
|
80253
|
+
}
|
|
80238
80254
|
async function mergePullRequest(cwd, resolved, input, sleep) {
|
|
80239
80255
|
const grant = requireGrant(cwd, "merge");
|
|
80240
80256
|
if (!grant.allowed)
|
|
@@ -80244,6 +80260,9 @@ async function mergePullRequest(cwd, resolved, input, sleep) {
|
|
|
80244
80260
|
return failure3("invalid_input", "--unverified needs --reason <why the user asked for it>");
|
|
80245
80261
|
if (bypass && !grant.allowUnverified)
|
|
80246
80262
|
return refuse(`unverified_refused: workspace ${grant.workspace ? `"${grant.workspace}"` : "(none)"} grants merge: "verified", which never merges without an accepted independent verdict`, "a non-author session verifies the head (workit-review), then merge without --unverified", { reason: "unverified_refused" });
|
|
80263
|
+
const baseRed = input.baseRedOk ?? null;
|
|
80264
|
+
if (baseRed && !baseRed.reason.trim())
|
|
80265
|
+
return failure3("invalid_input", "--base-red-ok needs --reason <why merging onto a red base is fine>");
|
|
80247
80266
|
const number = selectPr(cwd, resolved, { pr: input.pr });
|
|
80248
80267
|
if (!number.ok)
|
|
80249
80268
|
return number;
|
|
@@ -80328,6 +80347,15 @@ async function mergePullRequest(cwd, resolved, input, sleep) {
|
|
|
80328
80347
|
const lane = gate.verification === "proportional" ? `, ${laneLabel(gate)}` : "";
|
|
80329
80348
|
return refuse(gate.need === "self" ? `NEEDS_VERDICT: ${label} has no verdict for ${head.slice(0, 12)}${lane}: the author's own --self verdict is enough (${check.accepted.reasons.join(", ")})` : `NEEDS_VERDICT: ${label} has no accepted independent verdict for ${head.slice(0, 12)}${lane} (${check.accepted.reasons.join(", ")})`, gate.need === "self" ? `after an observed passing \`workit check test\`, the author runs: workit ledger verdict tests-verified --self --how "<what you ran>" --branch ${branch} (or a verifier records one)${bypassHint}` : `an independent session verifies the head and runs: workit ledger verdict verified --how "<what was exercised>" --branch ${branch}${bypassHint}`, { reason: "needs_verdict", verdict: summary });
|
|
80330
80349
|
}
|
|
80350
|
+
const baseCi = baseCiState(cwd, resolved, doc.base);
|
|
80351
|
+
let baseRedOverride = null;
|
|
80352
|
+
if (!baseCi.ok) {
|
|
80353
|
+
const names = baseCi.failing.map((failed) => failed.name).join(", ");
|
|
80354
|
+
const url = baseCi.failing.find((failed) => failed.url)?.url ?? null;
|
|
80355
|
+
if (!baseRed)
|
|
80356
|
+
return refuse(`base_red: ${doc.base} at ${baseCi.sha?.slice(0, 12) ?? "its head"} has failing CI (${names}${baseCi.requiredKnown ? "" : "; the required checks could not be read, so every failed check counts"})${url ? `: ${url}` : ""}; merging ${label} onto it would land on a red base`, `fix ${doc.base} first, or, if the user accepts it: workit pr merge${input.pr ? ` --pr ${doc.number}` : ""} --base-red-ok --reason "<why>"`, { reason: "base_red", blockers: baseCi.failing.map((failed) => failed.name) });
|
|
80357
|
+
baseRedOverride = baseRed;
|
|
80358
|
+
}
|
|
80331
80359
|
const squashMessage = squashMessageFor(cwd, resolved, input, doc);
|
|
80332
80360
|
if (squashMessage && !squashMessage.ok)
|
|
80333
80361
|
return squashMessage;
|
|
@@ -80343,6 +80371,7 @@ async function mergePullRequest(cwd, resolved, input, sleep) {
|
|
|
80343
80371
|
review: verdict.review,
|
|
80344
80372
|
lane: verdict.lane,
|
|
80345
80373
|
...unverified ? { unverified: unverified.recorded } : {},
|
|
80374
|
+
...baseRedOverride ? { baseRedOk: baseRedOverride.reason } : {},
|
|
80346
80375
|
grant: grant.source
|
|
80347
80376
|
});
|
|
80348
80377
|
if (!intent.ok)
|
|
@@ -80371,6 +80400,7 @@ async function mergePullRequest(cwd, resolved, input, sleep) {
|
|
|
80371
80400
|
review: verdict.review,
|
|
80372
80401
|
lane: verdict.lane,
|
|
80373
80402
|
...unverified ? { unverified: unverified.recorded } : {},
|
|
80403
|
+
...baseRedOverride ? { baseRedOk: baseRedOverride.reason } : {},
|
|
80374
80404
|
grant: grant.source,
|
|
80375
80405
|
intent: intentId,
|
|
80376
80406
|
verified: false
|
|
@@ -80427,6 +80457,10 @@ async function mergePullRequest(cwd, resolved, input, sleep) {
|
|
|
80427
80457
|
mergeSha: merged.data.mergeSha,
|
|
80428
80458
|
verdict,
|
|
80429
80459
|
unverified,
|
|
80460
|
+
baseCi: {
|
|
80461
|
+
note: baseRedOverride ? `base ${doc.base} CI is red; merged anyway (--base-red-ok: ${baseRedOverride.reason})` : baseCi.ok ? baseCi.note : null,
|
|
80462
|
+
override: baseRedOverride
|
|
80463
|
+
},
|
|
80430
80464
|
grant: { source: grant.source },
|
|
80431
80465
|
deletedBranch,
|
|
80432
80466
|
recorded,
|
|
@@ -82982,6 +83016,30 @@ function createGitHubForge(options) {
|
|
|
82982
83016
|
};
|
|
82983
83017
|
return success2(status);
|
|
82984
83018
|
},
|
|
83019
|
+
branchChecks(branch) {
|
|
83020
|
+
const contexts = [];
|
|
83021
|
+
let sha = null;
|
|
83022
|
+
let cursor = null;
|
|
83023
|
+
for (let page = 1;page <= maxPages; page += 1) {
|
|
83024
|
+
const data = graphql(BRANCH_CHECKS_QUERY, { owner, name, ref: `refs/heads/${branch}`, contexts: cursor }, `checks on ${branch}`);
|
|
83025
|
+
if (!data.ok)
|
|
83026
|
+
return data;
|
|
83027
|
+
const commit = data.data.repository?.object ?? null;
|
|
83028
|
+
if (!commit)
|
|
83029
|
+
return failure3("not_found", `branch ${branch} was not found`);
|
|
83030
|
+
sha = commit.oid ?? sha;
|
|
83031
|
+
const rollup = commit.statusCheckRollup;
|
|
83032
|
+
if (!rollup)
|
|
83033
|
+
break;
|
|
83034
|
+
contexts.push(...rollup.contexts.nodes);
|
|
83035
|
+
if (!rollup.contexts.pageInfo.hasNextPage)
|
|
83036
|
+
break;
|
|
83037
|
+
cursor = rollup.contexts.pageInfo.endCursor;
|
|
83038
|
+
}
|
|
83039
|
+
const required = requiredContexts(branch);
|
|
83040
|
+
const checks = latestPerName(contexts.map(checkFromContext).filter((check) => check !== null)).map((check) => required ? { ...check, required: required.includes(check.context) } : check);
|
|
83041
|
+
return success2({ sha, checks, requiredKnown: required !== null });
|
|
83042
|
+
},
|
|
82985
83043
|
jobLogTail(job, lines) {
|
|
82986
83044
|
const text = apiText(runner, "gh", apiHost, ["api", `repos/${repo}/actions/jobs/${job.jobId}/logs`], `job ${job.jobId} log`, FORGE_TIMEOUTS.log);
|
|
82987
83045
|
return text.ok ? success2(logTail(text.data, lines)) : text;
|
|
@@ -83179,7 +83237,7 @@ function createGitHubForge(options) {
|
|
|
83179
83237
|
}
|
|
83180
83238
|
};
|
|
83181
83239
|
}
|
|
83182
|
-
var GITHUB_MAX_PAGES = 10, PR_FIELDS = `number url state isDraft isInMergeQueue mergeable mergeStateStatus baseRefName baseRefOid baseRef { target { oid } } headRefName headRefOid reviewDecision`, THREADS = `reviewThreads(first: 100, after: $threads) { pageInfo { hasNextPage endCursor } nodes { id isResolved isOutdated path line comments(first: 1) { nodes { author { login __typename } body url } } } }`, CONTEXTS = `contexts(first: 100, after: $contexts) { pageInfo { hasNextPage endCursor } nodes { __typename ... on CheckRun { name status conclusion detailsUrl databaseId isRequired(pullRequestNumber: $number) checkSuite { workflowRun { databaseId workflow { name } } } } ... on StatusContext { context state targetUrl isRequired(pullRequestNumber: $number) } } }`, PR_STATUS_QUERY, FIND_PR_QUERY = `query($owner: String!, $name: String!, $head: String!) { repository(owner: $owner, name: $name) { pullRequests(headRefName: $head, first: 20, orderBy: { field: CREATED_AT, direction: DESC }) { nodes { number url state baseRefName headRefName headRefOid headRepositoryOwner { login } } } } }`, READY_MUTATION = `mutation($id: ID!) { markPullRequestReadyForReview(input: { pullRequestId: $id }) { pullRequest { isDraft } } }`, DRAFT_MUTATION = `mutation($id: ID!) { convertPullRequestToDraft(input: { pullRequestId: $id }) { pullRequest { isDraft } } }`, REPLY_MUTATION = `mutation($thread: ID!, $body: String!) { addPullRequestReviewThreadReply(input: { pullRequestReviewThreadId: $thread, body: $body }) { comment { url } } }`, RESOLVE_MUTATION = `mutation($thread: ID!) { resolveReviewThread(input: { threadId: $thread }) { thread { isResolved } } }`, THREAD_QUERY = `query($thread: ID!) { node(id: $thread) { ... on PullRequestReviewThread { isResolved pullRequest { number } } } }`, prState = (value) => value === "MERGED" ? "merged" : value === "CLOSED" ? "closed" : "open", FAILING2, safeUrl = (value) => value ? redactText(value) : null, encodeRef = (ref) => ref.split("/").map(encodeURIComponent).join("/");
|
|
83240
|
+
var GITHUB_MAX_PAGES = 10, PR_FIELDS = `number url state isDraft isInMergeQueue mergeable mergeStateStatus baseRefName baseRefOid baseRef { target { oid } } headRefName headRefOid reviewDecision`, THREADS = `reviewThreads(first: 100, after: $threads) { pageInfo { hasNextPage endCursor } nodes { id isResolved isOutdated path line comments(first: 1) { nodes { author { login __typename } body url } } } }`, CONTEXTS = `contexts(first: 100, after: $contexts) { pageInfo { hasNextPage endCursor } nodes { __typename ... on CheckRun { name status conclusion detailsUrl databaseId isRequired(pullRequestNumber: $number) checkSuite { workflowRun { databaseId workflow { name } } } } ... on StatusContext { context state targetUrl isRequired(pullRequestNumber: $number) } } }`, PR_STATUS_QUERY, FIND_PR_QUERY = `query($owner: String!, $name: String!, $head: String!) { repository(owner: $owner, name: $name) { pullRequests(headRefName: $head, first: 20, orderBy: { field: CREATED_AT, direction: DESC }) { nodes { number url state baseRefName headRefName headRefOid headRepositoryOwner { login } } } } }`, BRANCH_CHECKS_QUERY = `query($owner: String!, $name: String!, $ref: String!, $contexts: String) { repository(owner: $owner, name: $name) { object(expression: $ref) { ... on Commit { oid statusCheckRollup { contexts(first: 100, after: $contexts) { pageInfo { hasNextPage endCursor } nodes { __typename ... on CheckRun { name status conclusion detailsUrl databaseId checkSuite { workflowRun { databaseId workflow { name } } } } ... on StatusContext { context state targetUrl } } } } } } } }`, READY_MUTATION = `mutation($id: ID!) { markPullRequestReadyForReview(input: { pullRequestId: $id }) { pullRequest { isDraft } } }`, DRAFT_MUTATION = `mutation($id: ID!) { convertPullRequestToDraft(input: { pullRequestId: $id }) { pullRequest { isDraft } } }`, REPLY_MUTATION = `mutation($thread: ID!, $body: String!) { addPullRequestReviewThreadReply(input: { pullRequestReviewThreadId: $thread, body: $body }) { comment { url } } }`, RESOLVE_MUTATION = `mutation($thread: ID!) { resolveReviewThread(input: { threadId: $thread }) { thread { isResolved } } }`, THREAD_QUERY = `query($thread: ID!) { node(id: $thread) { ... on PullRequestReviewThread { isResolved pullRequest { number } } } }`, prState = (value) => value === "MERGED" ? "merged" : value === "CLOSED" ? "closed" : "open", FAILING2, safeUrl = (value) => value ? redactText(value) : null, encodeRef = (ref) => ref.split("/").map(encodeURIComponent).join("/");
|
|
83183
83241
|
var init_github = __esm(() => {
|
|
83184
83242
|
init_exec();
|
|
83185
83243
|
init_redact();
|
|
@@ -83380,6 +83438,35 @@ function createGitLabForge(options) {
|
|
|
83380
83438
|
};
|
|
83381
83439
|
return success2(status);
|
|
83382
83440
|
},
|
|
83441
|
+
branchChecks(branch) {
|
|
83442
|
+
const tip = baseTip(branch);
|
|
83443
|
+
if (!tip)
|
|
83444
|
+
return failure3("not_found", `branch ${branch} was not found`);
|
|
83445
|
+
const latest = apiJson(runner, "glab", apiHost, api(`${project}/pipelines?ref=${encodeURIComponent(branch)}&sha=${tip}&order_by=id&sort=desc&per_page=1`), `pipelines on ${branch}`);
|
|
83446
|
+
if (!latest.ok)
|
|
83447
|
+
return latest;
|
|
83448
|
+
const pipeline = Array.isArray(latest.data) ? latest.data[0] : undefined;
|
|
83449
|
+
if (!pipeline)
|
|
83450
|
+
return success2({ sha: tip, checks: [], requiredKnown: true });
|
|
83451
|
+
const scope = String(pipeline.project_id ?? encodeURIComponent(repo));
|
|
83452
|
+
const jobs = pages(`projects/${scope}/pipelines/${pipeline.id}/jobs`, `pipeline ${pipeline.id} jobs`);
|
|
83453
|
+
if (!jobs.ok)
|
|
83454
|
+
return jobs;
|
|
83455
|
+
const bridges = pages(`projects/${scope}/pipelines/${pipeline.id}/bridges`, `pipeline ${pipeline.id} bridges`);
|
|
83456
|
+
if (!bridges.ok)
|
|
83457
|
+
return bridges;
|
|
83458
|
+
const checks = [
|
|
83459
|
+
...jobs.data.items.map((job) => checkFromJob(job, pipeline.id, scope)),
|
|
83460
|
+
...bridges.data.items.map((bridge) => checkFromBridge(bridge, pipeline.id, scope))
|
|
83461
|
+
];
|
|
83462
|
+
if (stateOf(pipeline.status, false) === "failing" && !checks.some((check) => check.state === "failing"))
|
|
83463
|
+
checks.push(pipelineCheck("failing", pipeline.status, {
|
|
83464
|
+
id: pipeline.id,
|
|
83465
|
+
project_id: pipeline.project_id ?? 0,
|
|
83466
|
+
web_url: pipeline.web_url
|
|
83467
|
+
}));
|
|
83468
|
+
return success2({ sha: tip, checks, requiredKnown: true });
|
|
83469
|
+
},
|
|
83383
83470
|
jobLogTail(job, lines) {
|
|
83384
83471
|
const scope = job.scope ?? encodeURIComponent(repo);
|
|
83385
83472
|
const text = apiText(runner, "glab", apiHost, ["api", `projects/${scope}/jobs/${job.jobId}/trace`], `job ${job.jobId} trace`, FORGE_TIMEOUTS.log);
|
|
@@ -85487,6 +85574,7 @@ async function merge3(argv, io) {
|
|
|
85487
85574
|
"delete-branch": "boolean",
|
|
85488
85575
|
"keep-branch": "boolean",
|
|
85489
85576
|
unverified: "boolean",
|
|
85577
|
+
"base-red-ok": "boolean",
|
|
85490
85578
|
reason: "value",
|
|
85491
85579
|
subject: "value",
|
|
85492
85580
|
body: "value",
|
|
@@ -85494,7 +85582,11 @@ async function merge3(argv, io) {
|
|
|
85494
85582
|
});
|
|
85495
85583
|
if (typeof flags === "string")
|
|
85496
85584
|
return usage4(io, flags, MERGE_USAGE);
|
|
85497
|
-
const
|
|
85585
|
+
const baseRedOk = flags.booleans.has("base-red-ok");
|
|
85586
|
+
const baseRedReason = flags.values.reason?.trim();
|
|
85587
|
+
if (baseRedOk && !baseRedReason)
|
|
85588
|
+
return usage4(io, "--base-red-ok needs --reason <why merging onto a red base is fine>", MERGE_USAGE);
|
|
85589
|
+
const unverified = baseRedOk && !flags.booleans.has("unverified") ? null : unverifiedFlag(flags);
|
|
85498
85590
|
if (typeof unverified === "string")
|
|
85499
85591
|
return usage4(io, unverified, MERGE_USAGE);
|
|
85500
85592
|
if (flags.positionals.length)
|
|
@@ -85536,6 +85628,7 @@ async function merge3(argv, io) {
|
|
|
85536
85628
|
implicitDelete: !flags.booleans.has("keep-branch") && workspaceDeleteBranch(io.cwd),
|
|
85537
85629
|
actor: actorFromEnv(io.env),
|
|
85538
85630
|
...unverified ? { unverified } : {},
|
|
85631
|
+
...baseRedOk && baseRedReason ? { baseRedOk: { reason: baseRedReason } } : {},
|
|
85539
85632
|
...subject !== undefined ? { subject } : {},
|
|
85540
85633
|
...body !== undefined ? { body } : {}
|
|
85541
85634
|
}, forgeDeps.sleep);
|
|
@@ -85548,6 +85641,7 @@ async function merge3(argv, io) {
|
|
|
85548
85641
|
return emit(io, ok2({ ...result.data, localCleanup: cleanup }), (data) => [
|
|
85549
85642
|
`merged ${connected.data.forge.kind === "github" ? "PR #" : "MR !"}${data.number} (${data.method}) at head ${data.head.slice(0, 12)}${data.mergeSha ? ` -> ${data.mergeSha.slice(0, 12)}` : ""}`,
|
|
85550
85643
|
data.unverified ? `UNVERIFIED: merged without a verdict (--unverified: ${data.unverified.reason}); ledger ${data.unverified.recorded}` : `verdict ${data.verdict.verdictId ?? "?"} accepted for that head${data.verdict.cover ? ` (stack verdict on ${data.verdict.cover.branch} @ ${data.verdict.cover.head.slice(0, 12)})` : data.verdict.carry ? ` (${carryLabel(data.verdict.carry)})` : ""}`,
|
|
85644
|
+
...data.baseCi.note ? [data.baseCi.note] : [],
|
|
85551
85645
|
...data.mergeBack.length ? [
|
|
85552
85646
|
`merge back: ${data.base} is the ${data.mergeBackTrack} production branch; bring it into ${data.mergeBack.join(", ")}`
|
|
85553
85647
|
] : [],
|
|
@@ -85714,7 +85808,7 @@ async function run15(argv, io) {
|
|
|
85714
85808
|
return reply(rest, io);
|
|
85715
85809
|
return usage4(io, sub && !sub.startsWith("-") ? `unknown pr subcommand "${sub}"` : "missing pr subcommand", USAGE8);
|
|
85716
85810
|
}
|
|
85717
|
-
var STATUS_USAGE = "workit pr status [--pr <n> | --branch <b>] [--log-lines 60] [--json]", CREATE_USAGE = "workit pr create [--base <b> | --track <t>] (--title <t> [--body <text> | --body-file <f|->] | --fill) [--issue <#n|ID|url>]… [--refs] [--label <l>]… [--reviewer <login>]… [--draft] [--json]", MERGE_USAGE = "workit pr merge [--pr <n>] [--squash|--merge|--rebase | --method squash|merge|rebase] [--subject <s>] [--body <b> | --body-file <f|->] [--delete-branch | --keep-branch] [--unverified --reason <why>] [--json]", READY_USAGE = "workit pr ready [--pr <n>] [--undo] [--json]", EDIT_USAGE = "workit pr edit [--pr <n>] [--title <t>] [--body-file <f|->] [--add-label <l>]… [--remove-label <l>]… [--add-reviewer <login>]… [--base <b>] [--json]", THREADS_USAGE = "workit pr threads [--pr <n>] [--json]", REPLY_USAGE = "workit pr reply [--pr <n>] --thread <id> [--body-file <f|->] [--resolve] [--json]", USAGE8 = "workit pr status|create|merge|ready|edit|threads|reply ... (workit help pr)", prLabel = (kind, number) => `${kind === "github" ? "PR #" : "MR !"}${number}`, NEED_TEXT, mergedVerdictLine = (landed) => landed === "untracked" ? "merged outside workit (no merge record)" : landed.unverified ? `merged unverified at ${(landed.head ?? "?").slice(0, 12)} (recorded bypass)` : landed.lane === "none" && !landed.verdictId ? `merged at ${(landed.head ?? "?").slice(0, 12)} with no verdict (lane none)` : landed.review === "self-reviewed" ? `merged self-reviewed (lane self) with the author's verdict ${landed.verdictId ?? "?"} at ${(landed.head ?? "?").slice(0, 12)}` : `merged with accepted verdict ${landed.verdictId ?? "?"} at ${(landed.head ?? "?").slice(0, 12)}${landed.intentOnly ? " (merge intent recorded; the merge call itself failed)" : ""}`, acceptedHow = (verdict) => verdict.cover ? `stack verdict ${verdict.cover.verdictId} on ${verdict.cover.branch} @ ${verdict.cover.head.slice(0, 12)}` : verdict.carry ? carryLabel(verdict.carry) : verdict.basis, METHODS2;
|
|
85811
|
+
var STATUS_USAGE = "workit pr status [--pr <n> | --branch <b>] [--log-lines 60] [--json]", CREATE_USAGE = "workit pr create [--base <b> | --track <t>] (--title <t> [--body <text> | --body-file <f|->] | --fill) [--issue <#n|ID|url>]… [--refs] [--label <l>]… [--reviewer <login>]… [--draft] [--json]", MERGE_USAGE = "workit pr merge [--pr <n>] [--squash|--merge|--rebase | --method squash|merge|rebase] [--subject <s>] [--body <b> | --body-file <f|->] [--delete-branch | --keep-branch] [--unverified --reason <why>] [--base-red-ok --reason <why>] [--json]", READY_USAGE = "workit pr ready [--pr <n>] [--undo] [--json]", EDIT_USAGE = "workit pr edit [--pr <n>] [--title <t>] [--body-file <f|->] [--add-label <l>]… [--remove-label <l>]… [--add-reviewer <login>]… [--base <b>] [--json]", THREADS_USAGE = "workit pr threads [--pr <n>] [--json]", REPLY_USAGE = "workit pr reply [--pr <n>] --thread <id> [--body-file <f|->] [--resolve] [--json]", USAGE8 = "workit pr status|create|merge|ready|edit|threads|reply ... (workit help pr)", prLabel = (kind, number) => `${kind === "github" ? "PR #" : "MR !"}${number}`, NEED_TEXT, mergedVerdictLine = (landed) => landed === "untracked" ? "merged outside workit (no merge record)" : landed.unverified ? `merged unverified at ${(landed.head ?? "?").slice(0, 12)} (recorded bypass)` : landed.lane === "none" && !landed.verdictId ? `merged at ${(landed.head ?? "?").slice(0, 12)} with no verdict (lane none)` : landed.review === "self-reviewed" ? `merged self-reviewed (lane self) with the author's verdict ${landed.verdictId ?? "?"} at ${(landed.head ?? "?").slice(0, 12)}` : `merged with accepted verdict ${landed.verdictId ?? "?"} at ${(landed.head ?? "?").slice(0, 12)}${landed.intentOnly ? " (merge intent recorded; the merge call itself failed)" : ""}`, acceptedHow = (verdict) => verdict.cover ? `stack verdict ${verdict.cover.verdictId} on ${verdict.cover.branch} @ ${verdict.cover.head.slice(0, 12)}` : verdict.carry ? carryLabel(verdict.carry) : verdict.basis, METHODS2;
|
|
85718
85812
|
var init_pr = __esm(() => {
|
|
85719
85813
|
init_autonomy();
|
|
85720
85814
|
init_issue_link();
|
|
@@ -106317,7 +106411,7 @@ var VERBS = [
|
|
|
106317
106411
|
},
|
|
106318
106412
|
{
|
|
106319
106413
|
name: "merge",
|
|
106320
|
-
usage: "workit pr merge [--pr <n>] [--squash|--merge|--rebase | --method squash|merge|rebase] [--subject <s>] [--body <b> | --body-file <f|->] [--delete-branch | --keep-branch] [--unverified --reason <why>]",
|
|
106414
|
+
usage: "workit pr merge [--pr <n>] [--squash|--merge|--rebase | --method squash|merge|rebase] [--subject <s>] [--body <b> | --body-file <f|->] [--delete-branch | --keep-branch] [--unverified --reason <why>] [--base-red-ok --reason <why>]",
|
|
106321
106415
|
summary: "Merge when READY, verified by a non-author and granted; --subject/--body set the squash message"
|
|
106322
106416
|
}
|
|
106323
106417
|
],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brainervirus/workit-claude-code",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.35.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Workit Claude Code plugin — session and per-turn task context, branch policy on git shell commands, workit method skills, and verifier/reviewer/implementer agents",
|
|
6
6
|
"keywords": [
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"build": "bun scripts/build.ts"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@brainervirus/workit-cli": "^8.
|
|
43
|
-
"@brainervirus/workit-core": "^8.
|
|
42
|
+
"@brainervirus/workit-cli": "^8.35.0",
|
|
43
|
+
"@brainervirus/workit-core": "^8.35.0"
|
|
44
44
|
},
|
|
45
45
|
"engines": {
|
|
46
46
|
"node": ">=24"
|