@brainervirus/workit-claude-code 8.40.1 → 8.40.3
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-hook.js +119 -119
- package/dist/workit.js +181 -112
- package/package.json +3 -3
package/dist/workit.js
CHANGED
|
@@ -9317,7 +9317,7 @@ var package_default;
|
|
|
9317
9317
|
var init_package = __esm(() => {
|
|
9318
9318
|
package_default = {
|
|
9319
9319
|
name: "@brainervirus/workit-cli",
|
|
9320
|
-
version: "8.40.
|
|
9320
|
+
version: "8.40.3",
|
|
9321
9321
|
private: false,
|
|
9322
9322
|
description: "Workit CLI — setup wizard, doctor, and task control for agentic coding workflows",
|
|
9323
9323
|
keywords: [
|
|
@@ -9355,13 +9355,13 @@ var init_package = __esm(() => {
|
|
|
9355
9355
|
},
|
|
9356
9356
|
dependencies: {
|
|
9357
9357
|
"@babel/parser": "7.29.9",
|
|
9358
|
-
"@brainervirus/workit-cursor": "^8.40.
|
|
9358
|
+
"@brainervirus/workit-cursor": "^8.40.3",
|
|
9359
9359
|
"@inkjs/ui": "2.0.0",
|
|
9360
9360
|
ink: "7.1.1",
|
|
9361
9361
|
react: "19.2.8"
|
|
9362
9362
|
},
|
|
9363
9363
|
devDependencies: {
|
|
9364
|
-
"@brainervirus/workit-core": "^8.40.
|
|
9364
|
+
"@brainervirus/workit-core": "^8.40.3"
|
|
9365
9365
|
},
|
|
9366
9366
|
engines: {
|
|
9367
9367
|
node: ">=24"
|
|
@@ -9779,34 +9779,20 @@ function configuredGrants(entry) {
|
|
|
9779
9779
|
const legacy = fromAutoApprove(record.autoApprove);
|
|
9780
9780
|
return legacy ? { grants: legacy, source: "autoApprove" } : { grants: {}, source: "default" };
|
|
9781
9781
|
}
|
|
9782
|
-
function
|
|
9783
|
-
const override = grantsOverride();
|
|
9784
|
-
if (override)
|
|
9785
|
-
return {
|
|
9786
|
-
workspace: null,
|
|
9787
|
-
grants: { ...DEFAULT_GRANTS },
|
|
9788
|
-
configured: [],
|
|
9789
|
-
source: "default",
|
|
9790
|
-
accountConfigured: false,
|
|
9791
|
-
defaultEndpoint: DEFAULT_ENDPOINT,
|
|
9792
|
-
configuredEndpoint: null,
|
|
9793
|
-
effectiveEndpoint: DEFAULT_ENDPOINT,
|
|
9794
|
-
verification: DEFAULT_VERIFICATION,
|
|
9795
|
-
note: override
|
|
9796
|
-
};
|
|
9797
|
-
const workspace = resolveWorkspaceFrom(cwd, grantsDir(), process.env.WORKFLOW_WORKSPACE_NAME?.trim() || undefined);
|
|
9782
|
+
function autonomyOf(workspace) {
|
|
9798
9783
|
const { grants, source } = configuredGrants(workspace);
|
|
9799
9784
|
const full = { ...DEFAULT_GRANTS, ...grants };
|
|
9800
9785
|
const configured = GRANT_KINDS.filter((kind) => grants[kind] !== undefined);
|
|
9801
9786
|
const accountConfigured = Boolean(workspace?.vcs?.account);
|
|
9787
|
+
const name = workspace?.name ?? null;
|
|
9802
9788
|
return {
|
|
9803
|
-
workspace:
|
|
9789
|
+
workspace: name,
|
|
9804
9790
|
grants: full,
|
|
9805
9791
|
configured,
|
|
9806
9792
|
source,
|
|
9807
9793
|
accountConfigured,
|
|
9808
9794
|
...endpointView(workspace, {
|
|
9809
|
-
workspace:
|
|
9795
|
+
workspace: name,
|
|
9810
9796
|
grants: full,
|
|
9811
9797
|
configured,
|
|
9812
9798
|
accountConfigured
|
|
@@ -9814,6 +9800,64 @@ function resolveAutonomy(cwd) {
|
|
|
9814
9800
|
verification: verificationOf(workspace)
|
|
9815
9801
|
};
|
|
9816
9802
|
}
|
|
9803
|
+
function capByFolder(named, folder, name) {
|
|
9804
|
+
if (folder?.workspace === named.workspace)
|
|
9805
|
+
return named;
|
|
9806
|
+
const nothing = !folder || folder.configured.length > 0 && !folder.accountConfigured;
|
|
9807
|
+
const grants = { ...named.grants };
|
|
9808
|
+
const lowered = [];
|
|
9809
|
+
for (const kind of GRANT_KINDS) {
|
|
9810
|
+
const floor = !nothing && folder.grants[kind];
|
|
9811
|
+
if (!raises(kind, floor, grants[kind]))
|
|
9812
|
+
continue;
|
|
9813
|
+
grants[kind] = floor;
|
|
9814
|
+
lowered.push(kind);
|
|
9815
|
+
}
|
|
9816
|
+
const ceiling = !nothing && folder.effectiveEndpoint || DEFAULT_ENDPOINT;
|
|
9817
|
+
const endpoint = raisesEndpoint(ceiling, named.effectiveEndpoint);
|
|
9818
|
+
if (endpoint)
|
|
9819
|
+
lowered.push("defaultEndpoint");
|
|
9820
|
+
const strict = folder?.verification ?? "independent";
|
|
9821
|
+
const looser = VERIFICATION_MODES.indexOf(named.verification) < VERIFICATION_MODES.indexOf(strict);
|
|
9822
|
+
if (looser)
|
|
9823
|
+
lowered.push("verification");
|
|
9824
|
+
if (lowered.length === 0)
|
|
9825
|
+
return named;
|
|
9826
|
+
return {
|
|
9827
|
+
...named,
|
|
9828
|
+
grants,
|
|
9829
|
+
...endpoint ? { effectiveEndpoint: ceiling, endpointReason: undefined } : {},
|
|
9830
|
+
verification: looser ? strict : named.verification,
|
|
9831
|
+
note: `WORKFLOW_WORKSPACE_NAME=${name}: ${lowered.join(", ")} capped at ${folder ? `workspace ${folder.workspace}` : "nothing (tied workspaces)"}; a name never raises grants`
|
|
9832
|
+
};
|
|
9833
|
+
}
|
|
9834
|
+
function resolveAutonomy(cwd) {
|
|
9835
|
+
const override = grantsOverride();
|
|
9836
|
+
if (override)
|
|
9837
|
+
return {
|
|
9838
|
+
workspace: null,
|
|
9839
|
+
grants: { ...DEFAULT_GRANTS },
|
|
9840
|
+
configured: [],
|
|
9841
|
+
source: "default",
|
|
9842
|
+
accountConfigured: false,
|
|
9843
|
+
defaultEndpoint: DEFAULT_ENDPOINT,
|
|
9844
|
+
configuredEndpoint: null,
|
|
9845
|
+
effectiveEndpoint: DEFAULT_ENDPOINT,
|
|
9846
|
+
verification: DEFAULT_VERIFICATION,
|
|
9847
|
+
note: override
|
|
9848
|
+
};
|
|
9849
|
+
const name = process.env.WORKFLOW_WORKSPACE_NAME?.trim() || undefined;
|
|
9850
|
+
const named = autonomyOf(resolveWorkspaceFrom(cwd, grantsDir(), name));
|
|
9851
|
+
if (name === undefined)
|
|
9852
|
+
return named;
|
|
9853
|
+
let folder;
|
|
9854
|
+
try {
|
|
9855
|
+
folder = autonomyOf(resolveWorkspaceFrom(cwd, grantsDir()));
|
|
9856
|
+
} catch {
|
|
9857
|
+
folder = null;
|
|
9858
|
+
}
|
|
9859
|
+
return capByFolder(named, folder, name);
|
|
9860
|
+
}
|
|
9817
9861
|
function requireGrant(cwd, kind, options = {}) {
|
|
9818
9862
|
let autonomy;
|
|
9819
9863
|
try {
|
|
@@ -18967,8 +19011,97 @@ var init_policy_resolver = __esm(() => {
|
|
|
18967
19011
|
init_derive();
|
|
18968
19012
|
});
|
|
18969
19013
|
|
|
18970
|
-
// packages/workit-core/src/core/task-
|
|
19014
|
+
// packages/workit-core/src/core/task-view.ts
|
|
18971
19015
|
import { realpathSync as realpathSync4 } from "node:fs";
|
|
19016
|
+
function contextRootError(store, context) {
|
|
19017
|
+
try {
|
|
19018
|
+
realpathSync4(context.root);
|
|
19019
|
+
const root = checkoutRootOf(context.root);
|
|
19020
|
+
if (root !== store.root && !sameDirectoryIdentity(root, store.root))
|
|
19021
|
+
return failure2("invalid_input", "operation context root does not match the task store root");
|
|
19022
|
+
} catch {
|
|
19023
|
+
return failure2("invalid_input", "operation context root cannot be resolved");
|
|
19024
|
+
}
|
|
19025
|
+
return success(null, null, null);
|
|
19026
|
+
}
|
|
19027
|
+
function helperEntry(task, context, requireSession = false, requireActive = false) {
|
|
19028
|
+
const workerId = context.workerId ?? null;
|
|
19029
|
+
if (workerId === null)
|
|
19030
|
+
return failure2("permission_denied", "operation is lead-only");
|
|
19031
|
+
const worker = task.workers.find((entry) => entry.id === workerId);
|
|
19032
|
+
if (!worker)
|
|
19033
|
+
return failure2("permission_denied", "worker is not assigned to this task");
|
|
19034
|
+
if (worker.data.session && !sameSession2(worker.data.session, context))
|
|
19035
|
+
return failure2("permission_denied", "worker session does not match the caller");
|
|
19036
|
+
if (requireSession && (!worker.data.session || !sameSession2(worker.data.session, context)))
|
|
19037
|
+
return failure2("permission_denied", "worker session has not been observed");
|
|
19038
|
+
if (requireActive && worker.data.state !== "running")
|
|
19039
|
+
return failure2("permission_denied", "worker is not active");
|
|
19040
|
+
return success(null, null, worker);
|
|
19041
|
+
}
|
|
19042
|
+
function helperTaskGuard(task, context, allowRead = false) {
|
|
19043
|
+
if ((context.workerId ?? null) === null)
|
|
19044
|
+
return success(null, null, null);
|
|
19045
|
+
const worker = helperEntry(task, context);
|
|
19046
|
+
if (!worker.ok)
|
|
19047
|
+
return worker;
|
|
19048
|
+
return allowRead ? success(null, null, null) : failure2("permission_denied", "helpers cannot control task lifecycle or scope");
|
|
19049
|
+
}
|
|
19050
|
+
function taskView(store, context, task, capture = true, freshness = treeFreshness(store.root)) {
|
|
19051
|
+
const workspace = store.readWorkspace();
|
|
19052
|
+
if (!workspace.ok)
|
|
19053
|
+
return workspace;
|
|
19054
|
+
if (!workspace.data)
|
|
19055
|
+
return failure2("not_found", "workspace not found");
|
|
19056
|
+
const historical = task.status === "closed" ? task.candidates.at(-1) : undefined;
|
|
19057
|
+
const current = historical ? success(null, null, historical) : capture ? captureCandidate(store.root, task.intent.data.scope, environment()) : success(null, null, task.candidates.at(-1) ?? null);
|
|
19058
|
+
if (!current.ok)
|
|
19059
|
+
return current;
|
|
19060
|
+
const evaluationWorkspace = workspace.data;
|
|
19061
|
+
const tree = freshness;
|
|
19062
|
+
const requirements = evaluateRequirements(task, evaluationWorkspace, context.capabilities, current.data, store.root, context.caller, tree);
|
|
19063
|
+
return success(task.revision, workspace.data.revision, {
|
|
19064
|
+
task,
|
|
19065
|
+
workspace: evaluationWorkspace,
|
|
19066
|
+
capabilities: context.capabilities,
|
|
19067
|
+
requirements,
|
|
19068
|
+
evidence: evaluateEvidence(task, current.data, tree)
|
|
19069
|
+
});
|
|
19070
|
+
}
|
|
19071
|
+
function compactContext(store, context, taskId, freshness, origin = null) {
|
|
19072
|
+
const root = contextRootError(store, context);
|
|
19073
|
+
if (!root.ok)
|
|
19074
|
+
return root;
|
|
19075
|
+
const base = origin && store.readStoreTask(origin.taskId);
|
|
19076
|
+
const inherited = base?.ok && base.data ? {
|
|
19077
|
+
origin: origin.origin,
|
|
19078
|
+
taskId: base.data.id,
|
|
19079
|
+
decisions: base.data.decisions.filter((entry) => entry.data.revoked === null)
|
|
19080
|
+
} : null;
|
|
19081
|
+
if (taskId === null)
|
|
19082
|
+
return success(null, null, inherited?.decisions.length ? compactTaskContext(null, inherited) : "");
|
|
19083
|
+
const task = store.readTask(taskId);
|
|
19084
|
+
if (!task.ok)
|
|
19085
|
+
return task;
|
|
19086
|
+
const helper = helperTaskGuard(task.data, context, true);
|
|
19087
|
+
if (!helper.ok)
|
|
19088
|
+
return helper;
|
|
19089
|
+
const view = taskView(store, context, task.data, false, freshness ?? signalFreshness(store.root));
|
|
19090
|
+
if (!view.ok)
|
|
19091
|
+
return view;
|
|
19092
|
+
return success(view.revision, view.workspaceRevision, compactTaskContext(view.data, inherited));
|
|
19093
|
+
}
|
|
19094
|
+
var environment = () => [], sameSession2 = (value, context) => typeof value === "object" && value !== null && value.kind === "host" && value.host === context.caller.host && value.handle === context.caller.actor;
|
|
19095
|
+
var init_task_view = __esm(() => {
|
|
19096
|
+
init_task_contract();
|
|
19097
|
+
init_paths();
|
|
19098
|
+
init_task_store();
|
|
19099
|
+
init_task_context();
|
|
19100
|
+
init_task_evaluation();
|
|
19101
|
+
});
|
|
19102
|
+
|
|
19103
|
+
// packages/workit-core/src/core/task-engine.ts
|
|
19104
|
+
import { realpathSync as realpathSync5 } from "node:fs";
|
|
18972
19105
|
|
|
18973
19106
|
class WorkitCore {
|
|
18974
19107
|
store;
|
|
@@ -18982,15 +19115,7 @@ class WorkitCore {
|
|
|
18982
19115
|
return this.context.workerId !== null && this.context.workerId !== undefined;
|
|
18983
19116
|
}
|
|
18984
19117
|
contextRootError() {
|
|
18985
|
-
|
|
18986
|
-
realpathSync4(this.context.root);
|
|
18987
|
-
const root = checkoutRootOf(this.context.root);
|
|
18988
|
-
if (root !== this.store.root && !sameDirectoryIdentity(root, this.store.root))
|
|
18989
|
-
return failure2("invalid_input", "operation context root does not match the task store root");
|
|
18990
|
-
} catch {
|
|
18991
|
-
return failure2("invalid_input", "operation context root cannot be resolved");
|
|
18992
|
-
}
|
|
18993
|
-
return success(null, null, null);
|
|
19118
|
+
return contextRootError(this.store, this.context);
|
|
18994
19119
|
}
|
|
18995
19120
|
fillRevisions(input, task, workspace) {
|
|
18996
19121
|
if (input.expectedRevision === undefined && task)
|
|
@@ -19038,27 +19163,10 @@ class WorkitCore {
|
|
|
19038
19163
|
return success(null, null, { ...request, taskId: found.data.task.id });
|
|
19039
19164
|
}
|
|
19040
19165
|
helperEntry(task, requireSession = false, requireActive = false) {
|
|
19041
|
-
|
|
19042
|
-
if (workerId === null)
|
|
19043
|
-
return failure2("permission_denied", "operation is lead-only");
|
|
19044
|
-
const worker = task.workers.find((entry) => entry.id === workerId);
|
|
19045
|
-
if (!worker)
|
|
19046
|
-
return failure2("permission_denied", "worker is not assigned to this task");
|
|
19047
|
-
if (worker.data.session && !sameSession2(worker.data.session, this.context))
|
|
19048
|
-
return failure2("permission_denied", "worker session does not match the caller");
|
|
19049
|
-
if (requireSession && (!worker.data.session || !sameSession2(worker.data.session, this.context)))
|
|
19050
|
-
return failure2("permission_denied", "worker session has not been observed");
|
|
19051
|
-
if (requireActive && worker.data.state !== "running")
|
|
19052
|
-
return failure2("permission_denied", "worker is not active");
|
|
19053
|
-
return success(null, null, worker);
|
|
19166
|
+
return helperEntry(task, this.context, requireSession, requireActive);
|
|
19054
19167
|
}
|
|
19055
19168
|
helperTaskGuard(task, allowRead = false) {
|
|
19056
|
-
|
|
19057
|
-
return success(null, null, null);
|
|
19058
|
-
const worker = this.helperEntry(task);
|
|
19059
|
-
if (!worker.ok)
|
|
19060
|
-
return worker;
|
|
19061
|
-
return allowRead ? success(null, null, null) : failure2("permission_denied", "helpers cannot control task lifecycle or scope");
|
|
19169
|
+
return helperTaskGuard(task, this.context, allowRead);
|
|
19062
19170
|
}
|
|
19063
19171
|
activeWorkerBlocker(task) {
|
|
19064
19172
|
if (task.workers.some((entry) => workerBlocksTransition("close", entry.data.state)))
|
|
@@ -19968,48 +20076,10 @@ class WorkitCore {
|
|
|
19968
20076
|
});
|
|
19969
20077
|
}
|
|
19970
20078
|
compactContext(taskId, freshness, origin = null) {
|
|
19971
|
-
|
|
19972
|
-
if (!root.ok)
|
|
19973
|
-
return root;
|
|
19974
|
-
const base = origin && this.store.readStoreTask(origin.taskId);
|
|
19975
|
-
const inherited = base?.ok && base.data ? {
|
|
19976
|
-
origin: origin.origin,
|
|
19977
|
-
taskId: base.data.id,
|
|
19978
|
-
decisions: base.data.decisions.filter((entry) => entry.data.revoked === null)
|
|
19979
|
-
} : null;
|
|
19980
|
-
if (taskId === null)
|
|
19981
|
-
return success(null, null, inherited?.decisions.length ? compactTaskContext(null, inherited) : "");
|
|
19982
|
-
const task = this.store.readTask(taskId);
|
|
19983
|
-
if (!task.ok)
|
|
19984
|
-
return task;
|
|
19985
|
-
const helper = this.helperTaskGuard(task.data, true);
|
|
19986
|
-
if (!helper.ok)
|
|
19987
|
-
return helper;
|
|
19988
|
-
const view = this.view(task.data, false, freshness ?? signalFreshness(this.store.root));
|
|
19989
|
-
if (!view.ok)
|
|
19990
|
-
return view;
|
|
19991
|
-
return success(view.revision, view.workspaceRevision, compactTaskContext(view.data, inherited));
|
|
20079
|
+
return compactContext(this.store, this.context, taskId, freshness, origin);
|
|
19992
20080
|
}
|
|
19993
|
-
view(task, capture = true, freshness
|
|
19994
|
-
|
|
19995
|
-
if (!workspace.ok)
|
|
19996
|
-
return workspace;
|
|
19997
|
-
if (!workspace.data)
|
|
19998
|
-
return failure2("not_found", "workspace not found");
|
|
19999
|
-
const historical = task.status === "closed" ? task.candidates.at(-1) : undefined;
|
|
20000
|
-
const current = historical ? success(null, null, historical) : capture ? captureCandidate(this.store.root, task.intent.data.scope, environment()) : success(null, null, task.candidates.at(-1) ?? null);
|
|
20001
|
-
if (!current.ok)
|
|
20002
|
-
return current;
|
|
20003
|
-
const evaluationWorkspace = workspace.data;
|
|
20004
|
-
const tree = freshness;
|
|
20005
|
-
const requirements = evaluateRequirements(task, evaluationWorkspace, this.context.capabilities, current.data, this.store.root, this.context.caller, tree);
|
|
20006
|
-
return success(task.revision, workspace.data.revision, {
|
|
20007
|
-
task,
|
|
20008
|
-
workspace: evaluationWorkspace,
|
|
20009
|
-
capabilities: this.context.capabilities,
|
|
20010
|
-
requirements,
|
|
20011
|
-
evidence: evaluateEvidence(task, current.data, tree)
|
|
20012
|
-
});
|
|
20081
|
+
view(task, capture = true, freshness) {
|
|
20082
|
+
return taskView(this.store, this.context, task, capture, freshness);
|
|
20013
20083
|
}
|
|
20014
20084
|
reconcileResume(view, observations = []) {
|
|
20015
20085
|
const root = this.contextRootError();
|
|
@@ -20020,7 +20090,7 @@ class WorkitCore {
|
|
|
20020
20090
|
if (view.task.workspaceId !== view.workspace.id)
|
|
20021
20091
|
return failure2("invalid_input", "task and workspace bindings are invalid");
|
|
20022
20092
|
try {
|
|
20023
|
-
if (
|
|
20093
|
+
if (realpathSync5(view.workspace.root) !== this.store.root)
|
|
20024
20094
|
return failure2("invalid_input", "task view root does not match the task store");
|
|
20025
20095
|
} catch {
|
|
20026
20096
|
return failure2("invalid_input", "task view root cannot be resolved");
|
|
@@ -20280,7 +20350,7 @@ var MAX_JUDGED_REFS = 5, workspaceVerification = (root) => {
|
|
|
20280
20350
|
host: context.caller.host,
|
|
20281
20351
|
session: { kind: "host", host: context.caller.host, handle: context.caller.actor },
|
|
20282
20352
|
workerId: context.workerId ?? null
|
|
20283
|
-
}),
|
|
20353
|
+
}), verifiedWorkers, sameValue = (left, right) => {
|
|
20284
20354
|
try {
|
|
20285
20355
|
return canonicalJson(left) === canonicalJson(right);
|
|
20286
20356
|
} catch {
|
|
@@ -20599,8 +20669,7 @@ var init_task_engine = __esm(() => {
|
|
|
20599
20669
|
init_ledger();
|
|
20600
20670
|
init_rev();
|
|
20601
20671
|
init_autonomy();
|
|
20602
|
-
|
|
20603
|
-
init_paths();
|
|
20672
|
+
init_task_view();
|
|
20604
20673
|
init_store_lock();
|
|
20605
20674
|
init_task_context();
|
|
20606
20675
|
init_workers();
|
|
@@ -21242,10 +21311,10 @@ var init_context_read = __esm(() => {
|
|
|
21242
21311
|
});
|
|
21243
21312
|
|
|
21244
21313
|
// packages/workit-core/src/core.ts
|
|
21245
|
-
import { existsSync as existsSync8, realpathSync as
|
|
21314
|
+
import { existsSync as existsSync8, realpathSync as realpathSync6 } from "node:fs";
|
|
21246
21315
|
import path26 from "node:path";
|
|
21247
21316
|
function resolveInside(root, candidate) {
|
|
21248
|
-
const base =
|
|
21317
|
+
const base = realpathSync6(root);
|
|
21249
21318
|
const target = path26.resolve(base, candidate);
|
|
21250
21319
|
if (target !== base && !target.startsWith(base + path26.sep)) {
|
|
21251
21320
|
throw new Error("path must stay inside repository root");
|
|
@@ -21253,7 +21322,7 @@ function resolveInside(root, candidate) {
|
|
|
21253
21322
|
let ancestor = target;
|
|
21254
21323
|
while (!existsSync8(ancestor))
|
|
21255
21324
|
ancestor = path26.dirname(ancestor);
|
|
21256
|
-
const canonicalAncestor =
|
|
21325
|
+
const canonicalAncestor = realpathSync6(ancestor);
|
|
21257
21326
|
if (canonicalAncestor !== base && !canonicalAncestor.startsWith(base + path26.sep)) {
|
|
21258
21327
|
throw new Error("path must stay inside repository root");
|
|
21259
21328
|
}
|
|
@@ -66007,7 +66076,7 @@ import {
|
|
|
66007
66076
|
existsSync as existsSync12,
|
|
66008
66077
|
readFileSync as readFileSync13,
|
|
66009
66078
|
readdirSync as readdirSync6,
|
|
66010
|
-
realpathSync as
|
|
66079
|
+
realpathSync as realpathSync7,
|
|
66011
66080
|
statSync as statSync2
|
|
66012
66081
|
} from "node:fs";
|
|
66013
66082
|
import os9 from "node:os";
|
|
@@ -66447,7 +66516,7 @@ var resolveWindowsShimScript = (shim) => {
|
|
|
66447
66516
|
return found;
|
|
66448
66517
|
}, isClaudeWorkitInstalled = (home, env = process.env, cwd = process.cwd()) => claudeWorkitInstalls(home, env, cwd).length > 0, findNpmCli = (npm) => {
|
|
66449
66518
|
try {
|
|
66450
|
-
const resolved =
|
|
66519
|
+
const resolved = realpathSync7(npm);
|
|
66451
66520
|
if (path33.basename(resolved) === "npm-cli.js")
|
|
66452
66521
|
return resolved;
|
|
66453
66522
|
} catch {}
|
|
@@ -66945,7 +67014,7 @@ import {
|
|
|
66945
67014
|
readdirSync as readdirSync9,
|
|
66946
67015
|
mkdirSync as mkdirSync7,
|
|
66947
67016
|
readFileSync as readFileSync17,
|
|
66948
|
-
realpathSync as
|
|
67017
|
+
realpathSync as realpathSync8,
|
|
66949
67018
|
rmSync as rmSync3,
|
|
66950
67019
|
statSync as statSync5
|
|
66951
67020
|
} from "node:fs";
|
|
@@ -67168,7 +67237,7 @@ function applyHostPermissions(plan, options = {}) {
|
|
|
67168
67237
|
continue;
|
|
67169
67238
|
}
|
|
67170
67239
|
try {
|
|
67171
|
-
const target = change.before === null ? change.file :
|
|
67240
|
+
const target = change.before === null ? change.file : realpathSync8(change.file);
|
|
67172
67241
|
if (change.before !== null) {
|
|
67173
67242
|
const backups = path38.join(paths.stateDir, "host-permissions-backup");
|
|
67174
67243
|
mkdirSync7(backups, { recursive: true, mode: 448 });
|
|
@@ -69983,7 +70052,7 @@ import {
|
|
|
69983
70052
|
mkdtempSync as mkdtempSync2,
|
|
69984
70053
|
readFileSync as readFileSync19,
|
|
69985
70054
|
readdirSync as readdirSync11,
|
|
69986
|
-
realpathSync as
|
|
70055
|
+
realpathSync as realpathSync9,
|
|
69987
70056
|
renameSync as renameSync5,
|
|
69988
70057
|
rmSync as rmSync5,
|
|
69989
70058
|
statSync as statSync7,
|
|
@@ -70429,7 +70498,7 @@ function applyOpenCode(root, res) {
|
|
|
70429
70498
|
};
|
|
70430
70499
|
}
|
|
70431
70500
|
function copyPluginDir(src, dest) {
|
|
70432
|
-
const realSrc =
|
|
70501
|
+
const realSrc = realpathSync9(src);
|
|
70433
70502
|
const marker = path40.join(dest, ".workit-root");
|
|
70434
70503
|
const destIsLink = existsSync17(dest) && lstatSync6(dest).isSymbolicLink();
|
|
70435
70504
|
const synced = !destIsLink && readFileSafe(marker)?.trim() === realSrc && samePluginContent(realSrc, dest, dest);
|
|
@@ -70868,7 +70937,7 @@ var TOKEN_PLACEHOLDER3 = "YOUR_TOKEN_HERE", YT_OVERRIDES, VCS_OVERRIDES, SETUP_O
|
|
|
70868
70937
|
return (require2.resolve.paths(name) ?? []).map((dir) => path40.join(dir, name));
|
|
70869
70938
|
}, realRoot = (root) => {
|
|
70870
70939
|
try {
|
|
70871
|
-
return
|
|
70940
|
+
return realpathSync9(root);
|
|
70872
70941
|
} catch {
|
|
70873
70942
|
return root;
|
|
70874
70943
|
}
|
|
@@ -71928,7 +71997,7 @@ var init_wizard_state = __esm(() => {
|
|
|
71928
71997
|
});
|
|
71929
71998
|
|
|
71930
71999
|
// packages/workit-cli/src/admin/uninstall.ts
|
|
71931
|
-
import { existsSync as existsSync19, readFileSync as readFileSync21, realpathSync as
|
|
72000
|
+
import { existsSync as existsSync19, readFileSync as readFileSync21, realpathSync as realpathSync10, rmSync as rmSync7, writeFileSync as writeFileSync12 } from "node:fs";
|
|
71932
72001
|
import os14 from "node:os";
|
|
71933
72002
|
import path43 from "node:path";
|
|
71934
72003
|
function cleanCursorSettings(settings, pluginDir) {
|
|
@@ -72236,7 +72305,7 @@ var resolveUninstallPaths = (options = {}) => {
|
|
|
72236
72305
|
return false;
|
|
72237
72306
|
}
|
|
72238
72307
|
try {
|
|
72239
|
-
return
|
|
72308
|
+
return realpathSync10(actionPath) === realpathSync10(expected);
|
|
72240
72309
|
} catch {
|
|
72241
72310
|
return true;
|
|
72242
72311
|
}
|
|
@@ -106830,7 +106899,7 @@ import {
|
|
|
106830
106899
|
readdirSync as readdirSync15,
|
|
106831
106900
|
readFileSync as readFileSync30,
|
|
106832
106901
|
readlinkSync as readlinkSync3,
|
|
106833
|
-
realpathSync as
|
|
106902
|
+
realpathSync as realpathSync11,
|
|
106834
106903
|
renameSync as renameSync7,
|
|
106835
106904
|
rmSync as rmSync9,
|
|
106836
106905
|
statSync as statSync11,
|
|
@@ -106967,7 +107036,7 @@ function linkNodeModules(origin, target, repo, copy) {
|
|
|
106967
107036
|
if (entry.isSymbolicLink()) {
|
|
106968
107037
|
let real;
|
|
106969
107038
|
try {
|
|
106970
|
-
real =
|
|
107039
|
+
real = realpathSync11(from);
|
|
106971
107040
|
} catch {
|
|
106972
107041
|
continue;
|
|
106973
107042
|
}
|
|
@@ -106983,11 +107052,11 @@ function linkNodeModules(origin, target, repo, copy) {
|
|
|
106983
107052
|
function copySymlink(repo, tree, from, to) {
|
|
106984
107053
|
let real = null;
|
|
106985
107054
|
try {
|
|
106986
|
-
real =
|
|
107055
|
+
real = realpathSync11(from);
|
|
106987
107056
|
} catch {
|
|
106988
107057
|
real = null;
|
|
106989
107058
|
}
|
|
106990
|
-
const realRepo =
|
|
107059
|
+
const realRepo = realpathSync11(repo);
|
|
106991
107060
|
if (real && inside5(realRepo, real)) {
|
|
106992
107061
|
symlinkSync(path72.relative(path72.dirname(to), path72.join(tree, path72.relative(realRepo, real))), to);
|
|
106993
107062
|
return;
|
|
@@ -107001,7 +107070,7 @@ function writeInside(copy, file, content) {
|
|
|
107001
107070
|
const target = path72.join(copy, file);
|
|
107002
107071
|
try {
|
|
107003
107072
|
const stat = lstatSync8(target);
|
|
107004
|
-
if (!stat.isFile() || !inside5(
|
|
107073
|
+
if (!stat.isFile() || !inside5(realpathSync11(copy), realpathSync11(path72.dirname(target))))
|
|
107005
107074
|
return false;
|
|
107006
107075
|
} catch {
|
|
107007
107076
|
return false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brainervirus/workit-claude-code",
|
|
3
|
-
"version": "8.40.
|
|
3
|
+
"version": "8.40.3",
|
|
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.40.
|
|
43
|
-
"@brainervirus/workit-core": "^8.40.
|
|
42
|
+
"@brainervirus/workit-cli": "^8.40.3",
|
|
43
|
+
"@brainervirus/workit-core": "^8.40.3"
|
|
44
44
|
},
|
|
45
45
|
"engines": {
|
|
46
46
|
"node": ">=24"
|