@brainervirus/workit-opencode 8.0.0 → 8.1.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/dist/plugin.js +262 -248
- package/package.json +2 -2
package/dist/plugin.js
CHANGED
|
@@ -3,12 +3,12 @@ function define(plugin) {
|
|
|
3
3
|
return plugin;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
-
// packages/workit-
|
|
7
|
-
import { spawnSync as
|
|
6
|
+
// packages/workit-core/src/core.ts
|
|
7
|
+
import { spawnSync as spawnSync13 } from "node:child_process";
|
|
8
8
|
import { existsSync as existsSync7, realpathSync as realpathSync5 } from "node:fs";
|
|
9
9
|
import path19 from "node:path";
|
|
10
10
|
|
|
11
|
-
// packages/workit-
|
|
11
|
+
// packages/workit-core/src/core/task-contract.ts
|
|
12
12
|
import { createHash, randomUUID } from "node:crypto";
|
|
13
13
|
|
|
14
14
|
// node_modules/zod/v4/core/util.js
|
|
@@ -7740,7 +7740,7 @@ function refine(fn, _params = {}) {
|
|
|
7740
7740
|
function superRefine(fn, params) {
|
|
7741
7741
|
return _superRefine(fn, params);
|
|
7742
7742
|
}
|
|
7743
|
-
// packages/workit-
|
|
7743
|
+
// packages/workit-core/src/core/task-contract.ts
|
|
7744
7744
|
var SCHEMA_VERSION = 1;
|
|
7745
7745
|
var POLICY_VERSION = "1.0.0";
|
|
7746
7746
|
var OPERATION_FAMILIES = [
|
|
@@ -8595,7 +8595,7 @@ function requirementId(input) {
|
|
|
8595
8595
|
}
|
|
8596
8596
|
});
|
|
8597
8597
|
}
|
|
8598
|
-
// packages/workit-
|
|
8598
|
+
// packages/workit-core/src/core/operation-input.ts
|
|
8599
8599
|
var str = (d, values) => ({
|
|
8600
8600
|
type: "string",
|
|
8601
8601
|
...values ? { enum: values } : {},
|
|
@@ -8991,7 +8991,7 @@ function parseAdvertisedOperation(family, input, host) {
|
|
|
8991
8991
|
}))
|
|
8992
8992
|
});
|
|
8993
8993
|
}
|
|
8994
|
-
// packages/workit-
|
|
8994
|
+
// packages/workit-core/src/core/task-store.ts
|
|
8995
8995
|
import { createHash as createHash4, randomUUID as randomUUID3 } from "node:crypto";
|
|
8996
8996
|
import * as fs7 from "node:fs";
|
|
8997
8997
|
import path6 from "node:path";
|
|
@@ -9597,7 +9597,7 @@ function acquireFileLockSync(targetPath, options) {
|
|
|
9597
9597
|
}
|
|
9598
9598
|
}
|
|
9599
9599
|
}
|
|
9600
|
-
// packages/workit-
|
|
9600
|
+
// packages/workit-core/src/core/package-root.ts
|
|
9601
9601
|
import { existsSync } from "node:fs";
|
|
9602
9602
|
import path3 from "node:path";
|
|
9603
9603
|
import { fileURLToPath } from "node:url";
|
|
@@ -9616,12 +9616,12 @@ var assetRoot = () => {
|
|
|
9616
9616
|
return existsSync(assets) ? assets : root;
|
|
9617
9617
|
};
|
|
9618
9618
|
|
|
9619
|
-
// packages/workit-
|
|
9619
|
+
// packages/workit-core/src/core/store-lock.ts
|
|
9620
9620
|
import { spawnSync as spawnSync2 } from "node:child_process";
|
|
9621
9621
|
import fs5 from "node:fs";
|
|
9622
9622
|
import { hostname } from "node:os";
|
|
9623
9623
|
|
|
9624
|
-
// packages/workit-
|
|
9624
|
+
// packages/workit-core/src/store/paths.ts
|
|
9625
9625
|
import { spawnSync } from "node:child_process";
|
|
9626
9626
|
import { createHash as createHash2 } from "node:crypto";
|
|
9627
9627
|
import fs4 from "node:fs";
|
|
@@ -9901,7 +9901,7 @@ var checkoutSlug = (root) => {
|
|
|
9901
9901
|
return `${base}-${shortHash(canonical)}`;
|
|
9902
9902
|
};
|
|
9903
9903
|
|
|
9904
|
-
// packages/workit-
|
|
9904
|
+
// packages/workit-core/src/core/store-lock.ts
|
|
9905
9905
|
var metadataLockSchema = object({
|
|
9906
9906
|
pid: number2().int().nonnegative().safe(),
|
|
9907
9907
|
processStart: string2().nullable(),
|
|
@@ -10032,7 +10032,7 @@ var clearAbandonedReclaimGuard = (lockPath, nowMs = Date.now()) => {
|
|
|
10032
10032
|
}
|
|
10033
10033
|
};
|
|
10034
10034
|
|
|
10035
|
-
// packages/workit-
|
|
10035
|
+
// packages/workit-core/src/store/event-log.ts
|
|
10036
10036
|
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
10037
10037
|
import fs6 from "node:fs";
|
|
10038
10038
|
import path5 from "node:path";
|
|
@@ -10192,7 +10192,7 @@ var retryTransient = (run) => {
|
|
|
10192
10192
|
};
|
|
10193
10193
|
var renameWithRetry = (from, to) => retryTransient(() => fs6.renameSync(from, to));
|
|
10194
10194
|
|
|
10195
|
-
// packages/workit-
|
|
10195
|
+
// packages/workit-core/src/store/patch.ts
|
|
10196
10196
|
var isPlainObject2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
10197
10197
|
var equal = (left, right) => {
|
|
10198
10198
|
if (left === right)
|
|
@@ -10302,7 +10302,7 @@ var isPatch = (value) => Array.isArray(value) && value.every((op) => {
|
|
|
10302
10302
|
return false;
|
|
10303
10303
|
});
|
|
10304
10304
|
|
|
10305
|
-
// packages/workit-
|
|
10305
|
+
// packages/workit-core/src/store/reduce.ts
|
|
10306
10306
|
import { createHash as createHash3 } from "node:crypto";
|
|
10307
10307
|
var OPENING_TYPES = new Set([
|
|
10308
10308
|
"task.opened",
|
|
@@ -10433,7 +10433,7 @@ function eventType(before, after) {
|
|
|
10433
10433
|
return "task.updated";
|
|
10434
10434
|
}
|
|
10435
10435
|
|
|
10436
|
-
// packages/workit-
|
|
10436
|
+
// packages/workit-core/src/store/notes.ts
|
|
10437
10437
|
var SLOT = Symbol.for("workit.migrationReporter");
|
|
10438
10438
|
var reportMigration = (report) => {
|
|
10439
10439
|
try {
|
|
@@ -10444,7 +10444,7 @@ var reportMigration = (report) => {
|
|
|
10444
10444
|
};
|
|
10445
10445
|
var migrationReporterInstalled = () => typeof globalThis[SLOT] === "function";
|
|
10446
10446
|
|
|
10447
|
-
// packages/workit-
|
|
10447
|
+
// packages/workit-core/src/core/task-store.ts
|
|
10448
10448
|
var MIGRATION_PENDING = "workit migration pending";
|
|
10449
10449
|
var STORE_FORMAT = 3;
|
|
10450
10450
|
var STORE_MIN_RUNTIME = "3.0.0";
|
|
@@ -12080,18 +12080,18 @@ class TaskStore {
|
|
|
12080
12080
|
return failure2(recovery ? "recovery_required" : "storage_error", `lock operation failed: ${String(error)}`, { path: lockPath });
|
|
12081
12081
|
}
|
|
12082
12082
|
}
|
|
12083
|
-
// packages/workit-
|
|
12083
|
+
// packages/workit-core/src/core/workers.ts
|
|
12084
12084
|
var UNCERTAIN_WORKER_STATES = ["dispatching", "running", "cancelling", "unknown"];
|
|
12085
12085
|
var isUncertainWorker = (state) => UNCERTAIN_WORKER_STATES.includes(state);
|
|
12086
12086
|
var workerBlocksTransition = (transition, state) => transition === "pause" ? false : isUncertainWorker(state);
|
|
12087
12087
|
|
|
12088
|
-
// packages/workit-
|
|
12088
|
+
// packages/workit-core/src/core/task-evaluation.ts
|
|
12089
12089
|
import { createHash as createHash7 } from "node:crypto";
|
|
12090
12090
|
import * as fs11 from "node:fs";
|
|
12091
12091
|
import { spawnSync as spawnSync6 } from "node:child_process";
|
|
12092
12092
|
import path11 from "node:path";
|
|
12093
12093
|
|
|
12094
|
-
// packages/workit-
|
|
12094
|
+
// packages/workit-core/src/check-config.ts
|
|
12095
12095
|
import { spawnSync as spawnSync3 } from "node:child_process";
|
|
12096
12096
|
import fs8 from "node:fs";
|
|
12097
12097
|
import path7 from "node:path";
|
|
@@ -12296,7 +12296,7 @@ function checkCommand(args, version, onPath = workitAvailable()) {
|
|
|
12296
12296
|
return onPath ? `workit check ${args}` : `npx -y @brainervirus/workit-cli@${version} check ${args}`;
|
|
12297
12297
|
}
|
|
12298
12298
|
|
|
12299
|
-
// packages/workit-
|
|
12299
|
+
// packages/workit-core/src/git/rev.ts
|
|
12300
12300
|
import { spawnSync as spawnSync4 } from "node:child_process";
|
|
12301
12301
|
import { createHash as createHash5 } from "node:crypto";
|
|
12302
12302
|
import fs9 from "node:fs";
|
|
@@ -12477,11 +12477,11 @@ function pushRemoteName(cwd, branch) {
|
|
|
12477
12477
|
return remotes.length === 1 ? remotes[0] : null;
|
|
12478
12478
|
}
|
|
12479
12479
|
|
|
12480
|
-
// packages/workit-
|
|
12480
|
+
// packages/workit-core/src/core/policy/derive.ts
|
|
12481
12481
|
import { existsSync as existsSync3 } from "node:fs";
|
|
12482
12482
|
import path10 from "node:path";
|
|
12483
12483
|
|
|
12484
|
-
// packages/workit-
|
|
12484
|
+
// packages/workit-core/src/ledger.ts
|
|
12485
12485
|
import { spawnSync as spawnSync5 } from "node:child_process";
|
|
12486
12486
|
import { createHash as createHash6, randomBytes as randomBytes2 } from "node:crypto";
|
|
12487
12487
|
import fs10 from "node:fs";
|
|
@@ -12723,7 +12723,7 @@ var independenceReasons = (row, authors) => {
|
|
|
12723
12723
|
reasons.push("self");
|
|
12724
12724
|
return reasons;
|
|
12725
12725
|
};
|
|
12726
|
-
function effectiveOf(rows, authors) {
|
|
12726
|
+
function effectiveOf(rows, authors, sameCode) {
|
|
12727
12727
|
let effective = null;
|
|
12728
12728
|
for (const row of rows) {
|
|
12729
12729
|
if (!effective) {
|
|
@@ -12734,7 +12734,7 @@ function effectiveOf(rows, authors) {
|
|
|
12734
12734
|
const effIndependent = independenceReasons(effective, authors).length === 0;
|
|
12735
12735
|
if (effIndependent && !rowIndependent)
|
|
12736
12736
|
continue;
|
|
12737
|
-
if (effIndependent && FAILING.has(String(effective.result)) && row.actor.session === effective.actor.session)
|
|
12737
|
+
if (effIndependent && FAILING.has(String(effective.result)) && row.actor.session === effective.actor.session && sameCode(effective, row))
|
|
12738
12738
|
continue;
|
|
12739
12739
|
effective = row;
|
|
12740
12740
|
}
|
|
@@ -12765,16 +12765,22 @@ function checkVerdicts(cwd, branch, rows) {
|
|
|
12765
12765
|
const head = branchHead(cwd, branch);
|
|
12766
12766
|
const fallbackBase = defaultBase(cwd);
|
|
12767
12767
|
const keyCache = new Map;
|
|
12768
|
-
const
|
|
12769
|
-
if (!base || !
|
|
12768
|
+
const keysAt = (base, at) => {
|
|
12769
|
+
if (!base || !at)
|
|
12770
12770
|
return { patchId: null, diffHash: null };
|
|
12771
|
-
|
|
12771
|
+
const cacheKey = `${base}\x00${at}`;
|
|
12772
|
+
let key = keyCache.get(cacheKey);
|
|
12772
12773
|
if (!key) {
|
|
12773
|
-
key = { patchId: patchId(cwd, base,
|
|
12774
|
-
keyCache.set(
|
|
12774
|
+
key = { patchId: patchId(cwd, base, at), diffHash: diffHash(cwd, base, at) };
|
|
12775
|
+
keyCache.set(cacheKey, key);
|
|
12775
12776
|
}
|
|
12776
12777
|
return key;
|
|
12777
12778
|
};
|
|
12779
|
+
const keyFor = (base) => keysAt(base, head);
|
|
12780
|
+
const sameCode = (failed, row) => verdictBasis(failed, {
|
|
12781
|
+
head: row.head,
|
|
12782
|
+
...keysAt(failed.base ?? fallbackBase, row.head)
|
|
12783
|
+
}) !== "stale" || restackCarries(rows, branch, failed.head, row.head);
|
|
12778
12784
|
const authors = authorSessions(cwd, rows, branch, { base: fallbackBase, head });
|
|
12779
12785
|
const byKind = new Map;
|
|
12780
12786
|
for (const row of rows)
|
|
@@ -12784,7 +12790,7 @@ function checkVerdicts(cwd, branch, rows) {
|
|
|
12784
12790
|
}
|
|
12785
12791
|
const verdicts = [];
|
|
12786
12792
|
for (const [kind, list] of byKind) {
|
|
12787
|
-
const row = effectiveOf(list, authors);
|
|
12793
|
+
const row = effectiveOf(list, authors, sameCode);
|
|
12788
12794
|
if (!row)
|
|
12789
12795
|
continue;
|
|
12790
12796
|
let basis = verdictBasis(row, { head, ...keyFor(row.base ?? fallbackBase) });
|
|
@@ -12810,11 +12816,11 @@ function checkVerdicts(cwd, branch, rows) {
|
|
|
12810
12816
|
verdicts.sort((a, b) => a.verdict.seq - b.verdict.seq);
|
|
12811
12817
|
const newestCurrent = verdicts.findLast((entry) => entry.current) ?? verdicts.at(-1) ?? null;
|
|
12812
12818
|
const failing = verdicts.find((entry) => entry.current && entry.independent && FAILING.has(String(entry.verdict.result)));
|
|
12813
|
-
const newestAccepted = verdicts.findLast((entry) => entry.accepted) ?? null;
|
|
12819
|
+
const newestAccepted = verdicts.findLast((entry) => entry.accepted && STRONG_RESULTS.has(String(entry.verdict.result))) ?? null;
|
|
12814
12820
|
const accepted = newestAccepted && !failing ? { accepted: true, verdict: newestAccepted.verdict, reasons: [] } : {
|
|
12815
12821
|
accepted: false,
|
|
12816
12822
|
verdict: failing?.verdict ?? null,
|
|
12817
|
-
reasons: failing ? ["failing_verdict"] : newestCurrent
|
|
12823
|
+
reasons: failing ? ["failing_verdict"] : !newestCurrent ? ["no_verdict"] : newestCurrent.reasons.length ? newestCurrent.reasons : ["type_check_only"]
|
|
12818
12824
|
};
|
|
12819
12825
|
const selfEntry = failing ? undefined : verdicts.findLast((entry) => entry.current && !entry.independent && STRONG_RESULTS.has(String(entry.verdict.result)));
|
|
12820
12826
|
return {
|
|
@@ -12830,9 +12836,9 @@ function checkVerdicts(cwd, branch, rows) {
|
|
|
12830
12836
|
authors: [...authors].toSorted()
|
|
12831
12837
|
};
|
|
12832
12838
|
}
|
|
12833
|
-
var OBSERVED_ONLY = new Set(["check", ...PR_ROW_TYPES]);
|
|
12839
|
+
var OBSERVED_ONLY = new Set(["check", "merge.unverified", ...PR_ROW_TYPES]);
|
|
12834
12840
|
|
|
12835
|
-
// packages/workit-
|
|
12841
|
+
// packages/workit-core/src/core/policy/derive.ts
|
|
12836
12842
|
var RULES = {
|
|
12837
12843
|
test: "check:test",
|
|
12838
12844
|
self: "verdict:self",
|
|
@@ -13031,7 +13037,7 @@ function writeBlockers(task, root) {
|
|
|
13031
13037
|
});
|
|
13032
13038
|
}
|
|
13033
13039
|
|
|
13034
|
-
// packages/workit-
|
|
13040
|
+
// packages/workit-core/src/core/task-evaluation.ts
|
|
13035
13041
|
var digestBytes = (value) => createHash7("sha256").update(value).digest("hex");
|
|
13036
13042
|
var inside = (root, candidate) => candidate === root || candidate.startsWith(`${root}${path11.sep}`);
|
|
13037
13043
|
var relative = (root, candidate) => path11.relative(root, candidate).split(path11.sep).join("/") || ".";
|
|
@@ -13697,7 +13703,7 @@ function evaluateClosure(requestedOutcome, view) {
|
|
|
13697
13703
|
});
|
|
13698
13704
|
}
|
|
13699
13705
|
|
|
13700
|
-
// packages/workit-
|
|
13706
|
+
// packages/workit-core/src/core/methods.ts
|
|
13701
13707
|
var METHODS = {
|
|
13702
13708
|
"workit-shape": { dimensions: ["challenge", "decisions", "artifacts", "continuity"] },
|
|
13703
13709
|
"workit-bdd": { dimensions: ["testing"] },
|
|
@@ -13805,7 +13811,7 @@ Skills: load the skill, never act from memory of it (slash aliases /wk-<name>).
|
|
|
13805
13811
|
- architecture, deepen modules (user-invoked; offer it): workit-architecture
|
|
13806
13812
|
`.trim();
|
|
13807
13813
|
|
|
13808
|
-
// packages/workit-
|
|
13814
|
+
// packages/workit-core/src/core/task-context.ts
|
|
13809
13815
|
function reconcileResume(view, observations = []) {
|
|
13810
13816
|
if (observations.length > 0)
|
|
13811
13817
|
return failure2("permission_denied", "worker observations require native host verification");
|
|
@@ -13919,78 +13925,13 @@ var exportDigest = (bundle) => sha256({
|
|
|
13919
13925
|
sourceWorkspaceId: bundle.sourceWorkspaceId,
|
|
13920
13926
|
task: bundle.task
|
|
13921
13927
|
});
|
|
13922
|
-
// packages/workit-
|
|
13928
|
+
// packages/workit-core/src/core/branch.ts
|
|
13923
13929
|
import { createHash as createHash10 } from "node:crypto";
|
|
13924
13930
|
|
|
13925
|
-
// packages/workit-
|
|
13926
|
-
import {
|
|
13927
|
-
var run = (cwd, args) => {
|
|
13928
|
-
try {
|
|
13929
|
-
const stdout = execFileSync("git", args, {
|
|
13930
|
-
cwd,
|
|
13931
|
-
encoding: "utf8",
|
|
13932
|
-
stdio: ["pipe", "pipe", "pipe"]
|
|
13933
|
-
});
|
|
13934
|
-
return { stdout: stdout.trimEnd(), stderr: "", exitCode: 0 };
|
|
13935
|
-
} catch (error) {
|
|
13936
|
-
const e = error;
|
|
13937
|
-
return {
|
|
13938
|
-
stdout: (e.stdout ?? "").trimEnd(),
|
|
13939
|
-
stderr: (e.stderr ?? "").trimEnd(),
|
|
13940
|
-
exitCode: e.status ?? 1
|
|
13941
|
-
};
|
|
13942
|
-
}
|
|
13943
|
-
};
|
|
13944
|
-
var gitContext = (workspaceRoot, paths = []) => {
|
|
13945
|
-
const cwd = workspaceRoot;
|
|
13946
|
-
let failure;
|
|
13947
|
-
const runHere = (args) => {
|
|
13948
|
-
const result = run(cwd, args);
|
|
13949
|
-
if (!failure && result.exitCode !== 0) {
|
|
13950
|
-
failure = { stderr: result.stderr, exitCode: result.exitCode };
|
|
13951
|
-
}
|
|
13952
|
-
return result.stdout;
|
|
13953
|
-
};
|
|
13954
|
-
const branch = runHere(["rev-parse", "--abbrev-ref", "HEAD"]) || "unknown";
|
|
13955
|
-
const status_short = runHere(["status", "--porcelain"]);
|
|
13956
|
-
const staged = [];
|
|
13957
|
-
const unstaged = [];
|
|
13958
|
-
const untracked = [];
|
|
13959
|
-
for (const line of status_short.split(`
|
|
13960
|
-
`).filter(Boolean)) {
|
|
13961
|
-
const code = line.slice(0, 2);
|
|
13962
|
-
const file = line.slice(3);
|
|
13963
|
-
if (code === "??") {
|
|
13964
|
-
untracked.push(file);
|
|
13965
|
-
} else {
|
|
13966
|
-
if (code[0] !== " " && code[0] !== "?")
|
|
13967
|
-
staged.push(file);
|
|
13968
|
-
if (code[1] !== " " && code[1] !== "?")
|
|
13969
|
-
unstaged.push(file);
|
|
13970
|
-
}
|
|
13971
|
-
}
|
|
13972
|
-
const pathArgs = paths.length ? ["--", ...paths] : [];
|
|
13973
|
-
const diff_stat = runHere(["diff", "--stat", ...pathArgs]);
|
|
13974
|
-
const cached_stat = runHere(["diff", "--cached", "--stat", ...pathArgs]);
|
|
13975
|
-
const stagedSet = new Set(staged);
|
|
13976
|
-
const unstagedSet = new Set(unstaged);
|
|
13977
|
-
const partial_staged = [...stagedSet].filter((f) => unstagedSet.has(f));
|
|
13978
|
-
return {
|
|
13979
|
-
workspace_root: cwd,
|
|
13980
|
-
branch,
|
|
13981
|
-
status_short,
|
|
13982
|
-
staged,
|
|
13983
|
-
unstaged,
|
|
13984
|
-
untracked,
|
|
13985
|
-
diff_stat: [diff_stat, cached_stat].filter(Boolean).join(`
|
|
13986
|
-
`),
|
|
13987
|
-
partial_staged: partial_staged.length > 0,
|
|
13988
|
-
partial_staged_files: partial_staged,
|
|
13989
|
-
...failure ? { stderr: failure.stderr, exitCode: failure.exitCode } : {}
|
|
13990
|
-
};
|
|
13991
|
-
};
|
|
13931
|
+
// packages/workit-core/src/core/branch-policy.ts
|
|
13932
|
+
import { spawnSync as spawnSync7 } from "node:child_process";
|
|
13992
13933
|
|
|
13993
|
-
// packages/workit-
|
|
13934
|
+
// packages/workit-core/src/core/config.ts
|
|
13994
13935
|
import {
|
|
13995
13936
|
copyFileSync as copyFileSync2,
|
|
13996
13937
|
cpSync as cpSync2,
|
|
@@ -14003,7 +13944,7 @@ import {
|
|
|
14003
13944
|
import os2 from "node:os";
|
|
14004
13945
|
import path12 from "node:path";
|
|
14005
13946
|
|
|
14006
|
-
// packages/workit-
|
|
13947
|
+
// packages/workit-core/src/core/boundary.ts
|
|
14007
13948
|
import { statSync as statSync2 } from "node:fs";
|
|
14008
13949
|
var EVENT = {
|
|
14009
13950
|
initialization: "initialization",
|
|
@@ -14039,7 +13980,7 @@ var changedSourcesSinceLoad = (marker) => {
|
|
|
14039
13980
|
return changed;
|
|
14040
13981
|
};
|
|
14041
13982
|
|
|
14042
|
-
// packages/workit-
|
|
13983
|
+
// packages/workit-core/src/core/config.ts
|
|
14043
13984
|
var diagnosticLogger;
|
|
14044
13985
|
var PRESETS = {
|
|
14045
13986
|
gitflow: {
|
|
@@ -14114,6 +14055,7 @@ var DEFAULTS = {
|
|
|
14114
14055
|
},
|
|
14115
14056
|
commitPolicy: { preset: "conventional" }
|
|
14116
14057
|
};
|
|
14058
|
+
var unchosenBranchPolicy = new WeakSet([DEFAULTS]);
|
|
14117
14059
|
var readSafe = (p) => {
|
|
14118
14060
|
try {
|
|
14119
14061
|
return readFileSync3(p, "utf8");
|
|
@@ -14138,22 +14080,21 @@ var parseConfigResult = (raw, file) => {
|
|
|
14138
14080
|
const locale = LOCALE_RE.test(String(input.locale ?? "")) ? input.locale : DEFAULTS.locale;
|
|
14139
14081
|
const preset = Object.hasOwn(PRESETS, input.branchPolicy?.preset) ? input.branchPolicy?.preset : "gitflow";
|
|
14140
14082
|
const commitPreset = COMMIT_PRESETS.includes(String(input.commitPolicy?.preset ?? "")) ? input.commitPolicy?.preset : "conventional";
|
|
14141
|
-
|
|
14142
|
-
|
|
14143
|
-
|
|
14144
|
-
|
|
14145
|
-
|
|
14146
|
-
|
|
14147
|
-
|
|
14148
|
-
|
|
14149
|
-
|
|
14150
|
-
}
|
|
14151
|
-
commitPolicy: {
|
|
14152
|
-
preset: commitPreset,
|
|
14153
|
-
...typeof input.commitPolicy?.pattern === "string" ? { pattern: input.commitPolicy.pattern } : {}
|
|
14154
|
-
}
|
|
14083
|
+
const config = {
|
|
14084
|
+
locale,
|
|
14085
|
+
localeOptions: Array.isArray(input.localeOptions) ? input.localeOptions : DEFAULTS.localeOptions,
|
|
14086
|
+
branchPolicy: mergePreset(preset, {
|
|
14087
|
+
allowed: Array.isArray(input.branchPolicy?.allowed) ? input.branchPolicy.allowed : undefined,
|
|
14088
|
+
protectedNames: Array.isArray(input.branchPolicy?.protected) ? input.branchPolicy.protected : undefined
|
|
14089
|
+
}, DEFAULTS),
|
|
14090
|
+
commitPolicy: {
|
|
14091
|
+
preset: commitPreset,
|
|
14092
|
+
...typeof input.commitPolicy?.pattern === "string" ? { pattern: input.commitPolicy.pattern } : {}
|
|
14155
14093
|
}
|
|
14156
14094
|
};
|
|
14095
|
+
if (!Object.hasOwn(PRESETS, input.branchPolicy?.preset))
|
|
14096
|
+
unchosenBranchPolicy.add(config);
|
|
14097
|
+
return { status: "valid", path: file, config };
|
|
14157
14098
|
};
|
|
14158
14099
|
var readConfigTyped = (dir) => {
|
|
14159
14100
|
const file = path12.join(dir ?? configDir(), "config.json");
|
|
@@ -14179,9 +14120,11 @@ var writeConfig = (config) => {
|
|
|
14179
14120
|
};
|
|
14180
14121
|
var vcsConfigPath = () => process.env.WORKFLOW_VCS_CONFIG ?? path12.join(configDir(), "vcs.json");
|
|
14181
14122
|
var branchGlobPattern = (glob) => new RegExp(`^${glob.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*")}$`, "i");
|
|
14182
|
-
var resolveBranchPolicy = (config, workspace) => {
|
|
14123
|
+
var resolveBranchPolicy = (config, workspace, repoPreset) => {
|
|
14183
14124
|
const wp = workspace?.branchPolicy ?? {};
|
|
14184
|
-
const
|
|
14125
|
+
const workspacePreset = Object.hasOwn(PRESETS, wp.preset);
|
|
14126
|
+
const detected = !workspacePreset && unchosenBranchPolicy.has(config) ? repoPreset?.() ?? null : null;
|
|
14127
|
+
const preset = workspacePreset ? wp.preset : detected ?? config.branchPolicy?.preset ?? "gitflow";
|
|
14185
14128
|
const merged = mergePreset(preset, {
|
|
14186
14129
|
allowed: wp.allowed,
|
|
14187
14130
|
protectedNames: wp.protected
|
|
@@ -14190,9 +14133,10 @@ var resolveBranchPolicy = (config, workspace) => {
|
|
|
14190
14133
|
return {
|
|
14191
14134
|
preset,
|
|
14192
14135
|
allowed,
|
|
14193
|
-
protected: new Set(merged.protected.map((p) => p.toLowerCase())),
|
|
14136
|
+
protected: new Set([...merged.protected, ...detected ? PRESETS.gitflow.protected : []].map((p) => p.toLowerCase())),
|
|
14194
14137
|
integration: wp.integration === "merge" ? "merge" : "pr",
|
|
14195
|
-
defaultTargetBranch: preset === "github-flow" ? "main" : preset === "trunk-based" ? "master" : "develop"
|
|
14138
|
+
defaultTargetBranch: preset === "github-flow" ? "main" : preset === "trunk-based" ? "master" : "develop",
|
|
14139
|
+
detected: detected !== null
|
|
14196
14140
|
};
|
|
14197
14141
|
};
|
|
14198
14142
|
var COMMIT_PRESETS = [
|
|
@@ -14214,7 +14158,139 @@ var resolveCommitPolicy = (config, workspace) => {
|
|
|
14214
14158
|
return config.commitPolicy ?? { preset: "conventional" };
|
|
14215
14159
|
};
|
|
14216
14160
|
|
|
14217
|
-
// packages/workit-
|
|
14161
|
+
// packages/workit-core/src/core/branch-policy.ts
|
|
14162
|
+
var PREFIXES = {
|
|
14163
|
+
feature: "feature/*",
|
|
14164
|
+
bugfix: "bugfix/*",
|
|
14165
|
+
release: "release/*",
|
|
14166
|
+
hotfix: "hotfix/*"
|
|
14167
|
+
};
|
|
14168
|
+
var branchNames = (workspaceRoot) => {
|
|
14169
|
+
const r = spawnSync7("git", ["for-each-ref", "--format=%(refname)", "refs/heads", "refs/remotes/origin"], { cwd: workspaceRoot, encoding: "utf8" });
|
|
14170
|
+
if (r.status !== 0)
|
|
14171
|
+
return new Set;
|
|
14172
|
+
return new Set((r.stdout ?? "").split(`
|
|
14173
|
+
`).filter(Boolean).map((ref) => ref.startsWith("refs/heads/") ? ref.slice("refs/heads/".length) : ref.slice("refs/remotes/origin/".length)));
|
|
14174
|
+
};
|
|
14175
|
+
var detectBranchPolicy = (workspaceRoot) => {
|
|
14176
|
+
const names = branchNames(workspaceRoot);
|
|
14177
|
+
const develop = names.has("develop");
|
|
14178
|
+
const main = names.has("main");
|
|
14179
|
+
const master = names.has("master");
|
|
14180
|
+
const root = main ? "main" : master ? "master" : null;
|
|
14181
|
+
if (develop) {
|
|
14182
|
+
return {
|
|
14183
|
+
preset: "gitflow",
|
|
14184
|
+
developBranch: "develop",
|
|
14185
|
+
integration: "merge",
|
|
14186
|
+
protected: root ? [root, "develop"] : ["develop"],
|
|
14187
|
+
allowed: [...PRESETS.gitflow.allowed],
|
|
14188
|
+
prefixes: PREFIXES
|
|
14189
|
+
};
|
|
14190
|
+
}
|
|
14191
|
+
if (root === "main") {
|
|
14192
|
+
return {
|
|
14193
|
+
preset: "github-flow",
|
|
14194
|
+
developBranch: null,
|
|
14195
|
+
integration: "pr",
|
|
14196
|
+
protected: [root],
|
|
14197
|
+
allowed: ["*"],
|
|
14198
|
+
prefixes: PREFIXES
|
|
14199
|
+
};
|
|
14200
|
+
}
|
|
14201
|
+
if (root === "master") {
|
|
14202
|
+
return {
|
|
14203
|
+
preset: "trunk-based",
|
|
14204
|
+
developBranch: null,
|
|
14205
|
+
integration: "pr",
|
|
14206
|
+
protected: [root],
|
|
14207
|
+
allowed: ["*"],
|
|
14208
|
+
prefixes: PREFIXES
|
|
14209
|
+
};
|
|
14210
|
+
}
|
|
14211
|
+
return {
|
|
14212
|
+
preset: "gitflow",
|
|
14213
|
+
developBranch: null,
|
|
14214
|
+
integration: "merge",
|
|
14215
|
+
protected: [],
|
|
14216
|
+
allowed: [],
|
|
14217
|
+
prefixes: PREFIXES
|
|
14218
|
+
};
|
|
14219
|
+
};
|
|
14220
|
+
var repoBranchPreset = (workspaceRoot) => {
|
|
14221
|
+
const detected = detectBranchPolicy(workspaceRoot);
|
|
14222
|
+
return detected.developBranch || detected.allowed.length ? detected.preset : null;
|
|
14223
|
+
};
|
|
14224
|
+
|
|
14225
|
+
// packages/workit-core/src/core/git.ts
|
|
14226
|
+
import { execFileSync } from "node:child_process";
|
|
14227
|
+
var run = (cwd, args) => {
|
|
14228
|
+
try {
|
|
14229
|
+
const stdout = execFileSync("git", args, {
|
|
14230
|
+
cwd,
|
|
14231
|
+
encoding: "utf8",
|
|
14232
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
14233
|
+
});
|
|
14234
|
+
return { stdout: stdout.trimEnd(), stderr: "", exitCode: 0 };
|
|
14235
|
+
} catch (error) {
|
|
14236
|
+
const e = error;
|
|
14237
|
+
return {
|
|
14238
|
+
stdout: (e.stdout ?? "").trimEnd(),
|
|
14239
|
+
stderr: (e.stderr ?? "").trimEnd(),
|
|
14240
|
+
exitCode: e.status ?? 1
|
|
14241
|
+
};
|
|
14242
|
+
}
|
|
14243
|
+
};
|
|
14244
|
+
var gitContext = (workspaceRoot, paths = []) => {
|
|
14245
|
+
const cwd = workspaceRoot;
|
|
14246
|
+
let failure;
|
|
14247
|
+
const runHere = (args) => {
|
|
14248
|
+
const result = run(cwd, args);
|
|
14249
|
+
if (!failure && result.exitCode !== 0) {
|
|
14250
|
+
failure = { stderr: result.stderr, exitCode: result.exitCode };
|
|
14251
|
+
}
|
|
14252
|
+
return result.stdout;
|
|
14253
|
+
};
|
|
14254
|
+
const branch = runHere(["rev-parse", "--abbrev-ref", "HEAD"]) || "unknown";
|
|
14255
|
+
const status_short = runHere(["status", "--porcelain"]);
|
|
14256
|
+
const staged = [];
|
|
14257
|
+
const unstaged = [];
|
|
14258
|
+
const untracked = [];
|
|
14259
|
+
for (const line of status_short.split(`
|
|
14260
|
+
`).filter(Boolean)) {
|
|
14261
|
+
const code = line.slice(0, 2);
|
|
14262
|
+
const file = line.slice(3);
|
|
14263
|
+
if (code === "??") {
|
|
14264
|
+
untracked.push(file);
|
|
14265
|
+
} else {
|
|
14266
|
+
if (code[0] !== " " && code[0] !== "?")
|
|
14267
|
+
staged.push(file);
|
|
14268
|
+
if (code[1] !== " " && code[1] !== "?")
|
|
14269
|
+
unstaged.push(file);
|
|
14270
|
+
}
|
|
14271
|
+
}
|
|
14272
|
+
const pathArgs = paths.length ? ["--", ...paths] : [];
|
|
14273
|
+
const diff_stat = runHere(["diff", "--stat", ...pathArgs]);
|
|
14274
|
+
const cached_stat = runHere(["diff", "--cached", "--stat", ...pathArgs]);
|
|
14275
|
+
const stagedSet = new Set(staged);
|
|
14276
|
+
const unstagedSet = new Set(unstaged);
|
|
14277
|
+
const partial_staged = [...stagedSet].filter((f) => unstagedSet.has(f));
|
|
14278
|
+
return {
|
|
14279
|
+
workspace_root: cwd,
|
|
14280
|
+
branch,
|
|
14281
|
+
status_short,
|
|
14282
|
+
staged,
|
|
14283
|
+
unstaged,
|
|
14284
|
+
untracked,
|
|
14285
|
+
diff_stat: [diff_stat, cached_stat].filter(Boolean).join(`
|
|
14286
|
+
`),
|
|
14287
|
+
partial_staged: partial_staged.length > 0,
|
|
14288
|
+
partial_staged_files: partial_staged,
|
|
14289
|
+
...failure ? { stderr: failure.stderr, exitCode: failure.exitCode } : {}
|
|
14290
|
+
};
|
|
14291
|
+
};
|
|
14292
|
+
|
|
14293
|
+
// packages/workit-core/src/core/workspaces.ts
|
|
14218
14294
|
import { createHash as createHash8 } from "node:crypto";
|
|
14219
14295
|
import { readFileSync as readFileSync4, realpathSync as realpathSync3 } from "node:fs";
|
|
14220
14296
|
import path13 from "node:path";
|
|
@@ -14619,18 +14695,18 @@ function workspaceDefaultTarget(cwd, globalDefault) {
|
|
|
14619
14695
|
const wp = ws?.branchPolicy ?? {};
|
|
14620
14696
|
const hasWorkspacePolicy = typeof wp.preset === "string" && Object.hasOwn(PRESETS, wp.preset);
|
|
14621
14697
|
const selected = resolveRuntimeWorkspacePolicy(cwd, "branch", process.env.WORKFLOW_PROFILE?.trim() || undefined);
|
|
14622
|
-
const policyDefault = resolveBranchPolicy(readConfig(), selected.policy ? { branchPolicy: selected.policy } : null).defaultTargetBranch;
|
|
14698
|
+
const policyDefault = resolveBranchPolicy(readConfig(), selected.policy ? { branchPolicy: selected.policy } : null, () => repoBranchPreset(cwd)).defaultTargetBranch;
|
|
14623
14699
|
return String(ws?.vcs?.defaultTargetBranch ?? (hasWorkspacePolicy ? policyDefault : globalDefault ?? policyDefault) ?? "develop");
|
|
14624
14700
|
}
|
|
14625
14701
|
|
|
14626
|
-
// packages/workit-
|
|
14702
|
+
// packages/workit-core/src/core/vcs-config.ts
|
|
14627
14703
|
import fs12 from "node:fs";
|
|
14628
14704
|
import path14 from "node:path";
|
|
14629
|
-
import { spawnSync as
|
|
14705
|
+
import { spawnSync as spawnSync9 } from "node:child_process";
|
|
14630
14706
|
|
|
14631
|
-
// packages/workit-
|
|
14707
|
+
// packages/workit-core/src/core/release-tracks.ts
|
|
14632
14708
|
import { createHash as createHash9 } from "node:crypto";
|
|
14633
|
-
import { spawnSync as
|
|
14709
|
+
import { spawnSync as spawnSync8 } from "node:child_process";
|
|
14634
14710
|
class ReleaseTrackError extends Error {
|
|
14635
14711
|
}
|
|
14636
14712
|
var KNOWN_FIELDS = new Set([
|
|
@@ -14915,7 +14991,7 @@ function resolveReleaseTrack(input) {
|
|
|
14915
14991
|
return fallback(`${branch} has the same or unrelated fork points with ${[...new Set(newest.map((fork) => `${fork.ref} (${fork.track.name === IMPLICIT ? "workspace default" : fork.track.name})`))].join(" and ")}`);
|
|
14916
14992
|
}
|
|
14917
14993
|
var git4 = (cwd, args) => {
|
|
14918
|
-
const run =
|
|
14994
|
+
const run = spawnSync8("git", args, {
|
|
14919
14995
|
cwd,
|
|
14920
14996
|
encoding: "utf8",
|
|
14921
14997
|
timeout: 20000,
|
|
@@ -15026,11 +15102,11 @@ function resolveTrackFor(cwd, options) {
|
|
|
15026
15102
|
return resolution;
|
|
15027
15103
|
}
|
|
15028
15104
|
|
|
15029
|
-
// packages/workit-
|
|
15105
|
+
// packages/workit-core/src/core/vcs-config.ts
|
|
15030
15106
|
var workspacesPath = () => path14.join(configDir(), "workspaces.json");
|
|
15031
15107
|
var vcsCwd = (cwd) => cwd ?? process.env.WORKFLOW_WORKSPACE_ROOT ?? process.cwd();
|
|
15032
15108
|
var remoteProvider = (cwd) => {
|
|
15033
|
-
const r =
|
|
15109
|
+
const r = spawnSync9("git", ["remote", "get-url", "origin"], { cwd, encoding: "utf8" });
|
|
15034
15110
|
if (r.status !== 0)
|
|
15035
15111
|
return null;
|
|
15036
15112
|
const url = (r.stdout ?? "").trim();
|
|
@@ -15067,7 +15143,7 @@ var remoteEndpoint = (remote) => {
|
|
|
15067
15143
|
var configuredSshEndpoint = (host) => {
|
|
15068
15144
|
if (host.startsWith("-"))
|
|
15069
15145
|
return null;
|
|
15070
|
-
const resolved =
|
|
15146
|
+
const resolved = spawnSync9("ssh", ["-G", host], {
|
|
15071
15147
|
encoding: "utf8",
|
|
15072
15148
|
timeout: 5000,
|
|
15073
15149
|
maxBuffer: 1024 * 1024,
|
|
@@ -15240,7 +15316,7 @@ function mergedPrStyle(limit = 6, cwd) {
|
|
|
15240
15316
|
`).filter((l) => l.startsWith("## ")).map((l) => l.trim()),
|
|
15241
15317
|
descriptionPreview: desc.slice(0, 600)
|
|
15242
15318
|
});
|
|
15243
|
-
const remoteResult =
|
|
15319
|
+
const remoteResult = spawnSync9("git", ["remote", "get-url", "--push", "--all", "origin"], {
|
|
15244
15320
|
cwd,
|
|
15245
15321
|
encoding: "utf8"
|
|
15246
15322
|
});
|
|
@@ -15256,7 +15332,7 @@ function mergedPrStyle(limit = 6, cwd) {
|
|
|
15256
15332
|
if (!hostingApiHostMatches(remote, host))
|
|
15257
15333
|
return { ok: false, error: "PR style target does not match the provider host" };
|
|
15258
15334
|
if (provider === "gitlab") {
|
|
15259
|
-
const run = (args) =>
|
|
15335
|
+
const run = (args) => spawnSync9("glab", ["api", ...args], {
|
|
15260
15336
|
cwd,
|
|
15261
15337
|
encoding: "utf8",
|
|
15262
15338
|
env
|
|
@@ -15276,7 +15352,7 @@ function mergedPrStyle(limit = 6, cwd) {
|
|
|
15276
15352
|
});
|
|
15277
15353
|
}
|
|
15278
15354
|
} else if (provider === "github") {
|
|
15279
|
-
const r =
|
|
15355
|
+
const r = spawnSync9("gh", [
|
|
15280
15356
|
"pr",
|
|
15281
15357
|
"list",
|
|
15282
15358
|
"--repo",
|
|
@@ -15308,7 +15384,7 @@ function mergedPrStyle(limit = 6, cwd) {
|
|
|
15308
15384
|
};
|
|
15309
15385
|
}
|
|
15310
15386
|
|
|
15311
|
-
// packages/workit-
|
|
15387
|
+
// packages/workit-core/src/core/branch.ts
|
|
15312
15388
|
var withReleaseTracks = (workspaceRoot, policy) => {
|
|
15313
15389
|
const read = workspaceReleaseTracks(workspaceRoot);
|
|
15314
15390
|
if (read.error)
|
|
@@ -15337,7 +15413,7 @@ function effectiveWorkspacePolicy(workspaceRoot, kind, profileName) {
|
|
|
15337
15413
|
const selected = resolveRuntimeWorkspacePolicy(workspaceRoot, kind, profileName?.trim() || process.env.WORKFLOW_PROFILE?.trim() || undefined);
|
|
15338
15414
|
const config = readConfig();
|
|
15339
15415
|
return kind === "branch" ? {
|
|
15340
|
-
branchPolicy: withReleaseTracks(workspaceRoot, resolveBranchPolicy(config, selected.policy ? { branchPolicy: selected.policy } : null)),
|
|
15416
|
+
branchPolicy: withReleaseTracks(workspaceRoot, resolveBranchPolicy(config, selected.policy ? { branchPolicy: selected.policy } : null, () => repoBranchPreset(workspaceRoot))),
|
|
15341
15417
|
provenance: { branchPolicy: selected.source }
|
|
15342
15418
|
} : {
|
|
15343
15419
|
commitPolicy: resolveCommitPolicy(config, selected.policy ? { commitPolicy: selected.policy } : null),
|
|
@@ -15401,7 +15477,7 @@ var validateBranchNameFor = (workspaceRoot, name) => {
|
|
|
15401
15477
|
}
|
|
15402
15478
|
};
|
|
15403
15479
|
|
|
15404
|
-
// packages/workit-
|
|
15480
|
+
// packages/workit-core/src/core/route-intent.ts
|
|
15405
15481
|
var shellBranchTarget = (command) => {
|
|
15406
15482
|
if (!command.trim() || /[\r\n;&|<>`'"$()\\*?{}~!#]/u.test(command) || command.includes("[") || command.includes("]"))
|
|
15407
15483
|
return null;
|
|
@@ -15416,10 +15492,10 @@ var shellBranchPolicyViolation = (root, command) => {
|
|
|
15416
15492
|
const target = shellBranchTarget(command);
|
|
15417
15493
|
return target === null ? null : validateBranchNameFor(root, target);
|
|
15418
15494
|
};
|
|
15419
|
-
// packages/workit-
|
|
15495
|
+
// packages/workit-core/src/core/task-engine.ts
|
|
15420
15496
|
import { realpathSync as realpathSync4 } from "node:fs";
|
|
15421
15497
|
|
|
15422
|
-
// packages/workit-
|
|
15498
|
+
// packages/workit-core/src/core/policy-resolver.ts
|
|
15423
15499
|
function resolvePolicy(input) {
|
|
15424
15500
|
const ids = input.constraints.map((constraint) => constraint.id);
|
|
15425
15501
|
if (new Set(ids).size !== ids.length)
|
|
@@ -15475,7 +15551,7 @@ function diffPolicy(previous, next, reason, now) {
|
|
|
15475
15551
|
return parsed.data;
|
|
15476
15552
|
}
|
|
15477
15553
|
|
|
15478
|
-
// packages/workit-
|
|
15554
|
+
// packages/workit-core/src/core/policy/judgment.ts
|
|
15479
15555
|
var isObject6 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
15480
15556
|
var squash = (key) => key.toLowerCase().replace(/[_-]/g, "");
|
|
15481
15557
|
var ALIASES = {
|
|
@@ -15599,11 +15675,11 @@ function normalizeJudgment(raw, previous) {
|
|
|
15599
15675
|
return success(null, null, { judgment: parsed.data, ignored, legacy });
|
|
15600
15676
|
}
|
|
15601
15677
|
|
|
15602
|
-
// packages/workit-
|
|
15678
|
+
// packages/workit-core/src/autonomy.ts
|
|
15603
15679
|
import os3 from "node:os";
|
|
15604
15680
|
import path15 from "node:path";
|
|
15605
15681
|
|
|
15606
|
-
// packages/workit-
|
|
15682
|
+
// packages/workit-core/src/core/safe-write.ts
|
|
15607
15683
|
import {
|
|
15608
15684
|
closeSync as closeSync2,
|
|
15609
15685
|
fchmodSync,
|
|
@@ -15626,7 +15702,7 @@ function writeFileExclusive(file, content, mode) {
|
|
|
15626
15702
|
}
|
|
15627
15703
|
}
|
|
15628
15704
|
|
|
15629
|
-
// packages/workit-
|
|
15705
|
+
// packages/workit-core/src/autonomy.ts
|
|
15630
15706
|
var accountHome = () => {
|
|
15631
15707
|
try {
|
|
15632
15708
|
return os3.userInfo().homedir;
|
|
@@ -15761,7 +15837,7 @@ function resolveAutonomy(cwd) {
|
|
|
15761
15837
|
var suggested = (kind) => kind === "merge" ? "verified" : "true";
|
|
15762
15838
|
var grantHint = (workspace, kind) => `ask the user to run, in their own terminal: workit grant set ${workspace ?? "<workspace>"} ${kind}=${suggested(kind)}`;
|
|
15763
15839
|
|
|
15764
|
-
// packages/workit-
|
|
15840
|
+
// packages/workit-core/src/core/task-engine.ts
|
|
15765
15841
|
var workspaceVerification = (root) => {
|
|
15766
15842
|
try {
|
|
15767
15843
|
return resolveAutonomy(root).verification;
|
|
@@ -17346,8 +17422,8 @@ class WorkitCore {
|
|
|
17346
17422
|
return this.summary(changed.data.task);
|
|
17347
17423
|
}
|
|
17348
17424
|
}
|
|
17349
|
-
// packages/workit-
|
|
17350
|
-
import { spawnSync as
|
|
17425
|
+
// packages/workit-core/src/core/repo-context.ts
|
|
17426
|
+
import { spawnSync as spawnSync10 } from "node:child_process";
|
|
17351
17427
|
import { existsSync as existsSync6, readFileSync as readFileSync5, readdirSync as readdirSync4 } from "node:fs";
|
|
17352
17428
|
import path16 from "node:path";
|
|
17353
17429
|
var isSafeContextRange = (value) => value.length <= 4096 && (() => {
|
|
@@ -17376,7 +17452,7 @@ var invalidRange = (cwd) => ({
|
|
|
17376
17452
|
cwd
|
|
17377
17453
|
});
|
|
17378
17454
|
var runGit = (cwd, args) => {
|
|
17379
|
-
const result =
|
|
17455
|
+
const result = spawnSync10("git", args, { cwd, encoding: "utf8" });
|
|
17380
17456
|
return {
|
|
17381
17457
|
stdout: (result.stdout ?? "").trimEnd(),
|
|
17382
17458
|
stderr: (result.stderr ?? "").trimEnd(),
|
|
@@ -17816,20 +17892,20 @@ function releaseNotesContext(root, rangeOrTag) {
|
|
|
17816
17892
|
return { stdout, stderr: "", exitCode: 0, cwd };
|
|
17817
17893
|
}
|
|
17818
17894
|
|
|
17819
|
-
// packages/workit-
|
|
17820
|
-
import { spawnSync as
|
|
17895
|
+
// packages/workit-core/src/core/tracker-issues.ts
|
|
17896
|
+
import { spawnSync as spawnSync12 } from "node:child_process";
|
|
17821
17897
|
|
|
17822
|
-
// packages/workit-
|
|
17898
|
+
// packages/workit-core/src/core/pr-create.ts
|
|
17823
17899
|
import fs13 from "node:fs";
|
|
17824
17900
|
import path17 from "node:path";
|
|
17825
|
-
import { spawnSync as
|
|
17826
|
-
// packages/workit-
|
|
17901
|
+
import { spawnSync as spawnSync11 } from "node:child_process";
|
|
17902
|
+
// packages/workit-core/src/forge/pr-body.ts
|
|
17827
17903
|
function parseGhIssue(value) {
|
|
17828
17904
|
const m = /issues\/(\d+)/.exec(value);
|
|
17829
17905
|
return m ? m[1] : String(value).trim().replace(/^#/, "");
|
|
17830
17906
|
}
|
|
17831
17907
|
|
|
17832
|
-
// packages/workit-
|
|
17908
|
+
// packages/workit-core/src/core/pr-create.ts
|
|
17833
17909
|
function whichOnPath(tool) {
|
|
17834
17910
|
const names = process.platform === "win32" ? [tool, `${tool}.exe`, `${tool}.cmd`] : [tool];
|
|
17835
17911
|
for (const dir of (process.env.PATH ?? "").split(path17.delimiter)) {
|
|
@@ -17847,7 +17923,7 @@ function whichOnPath(tool) {
|
|
|
17847
17923
|
}
|
|
17848
17924
|
var hostingCliAvailable = (provider) => whichOnPath(provider === "gitlab" ? "glab" : "gh") !== null;
|
|
17849
17925
|
var pushRemote = (cwd) => {
|
|
17850
|
-
const result =
|
|
17926
|
+
const result = spawnSync11("git", ["remote", "get-url", "--push", "--all", "origin"], {
|
|
17851
17927
|
cwd,
|
|
17852
17928
|
encoding: "utf8"
|
|
17853
17929
|
});
|
|
@@ -17857,7 +17933,7 @@ var pushRemote = (cwd) => {
|
|
|
17857
17933
|
return urls.length === 1 ? urls[0] : null;
|
|
17858
17934
|
};
|
|
17859
17935
|
|
|
17860
|
-
// packages/workit-
|
|
17936
|
+
// packages/workit-core/src/core/tracker-issues.ts
|
|
17861
17937
|
var repoPathFromRemote = (remote) => {
|
|
17862
17938
|
let rest = (remote || "").trim().replace(/\/+$/, "");
|
|
17863
17939
|
if (!rest)
|
|
@@ -17878,7 +17954,7 @@ var defaultCli = (bin, available) => {
|
|
|
17878
17954
|
if (!available)
|
|
17879
17955
|
return null;
|
|
17880
17956
|
return (args, root) => {
|
|
17881
|
-
const out =
|
|
17957
|
+
const out = spawnSync12(bin, args, {
|
|
17882
17958
|
cwd: root,
|
|
17883
17959
|
encoding: "utf8",
|
|
17884
17960
|
env: { ...process.env, PATH: process.env.PATH ?? "" }
|
|
@@ -17955,19 +18031,19 @@ var fetchGitLabIssueBody = async (ref, root, deps = {}) => {
|
|
|
17955
18031
|
return tryCliTriple(deps.cli ?? defaultCli("glab", hostingCliAvailable("gitlab")), "glab", ["issue", "view", id, "-R", repoArg, "-F", "json"], root, id, ["iid"], ["description"]);
|
|
17956
18032
|
};
|
|
17957
18033
|
|
|
17958
|
-
// packages/workit-
|
|
18034
|
+
// packages/workit-core/src/core/youtrack.ts
|
|
17959
18035
|
import fs14 from "node:fs";
|
|
17960
18036
|
import path18 from "node:path";
|
|
17961
18037
|
|
|
17962
|
-
// packages/workit-
|
|
18038
|
+
// packages/workit-core/src/core/templates.ts
|
|
17963
18039
|
var repoRoot2 = assetRoot();
|
|
17964
18040
|
|
|
17965
|
-
// packages/workit-
|
|
18041
|
+
// packages/workit-core/src/core/scripts.ts
|
|
17966
18042
|
var PLUGIN_ROOT = packageRoot();
|
|
17967
18043
|
var ASSET_ROOT = assetRoot();
|
|
17968
18044
|
var resolveWorkspaceRoot = (explicit) => explicit || process.cwd();
|
|
17969
18045
|
|
|
17970
|
-
// packages/workit-
|
|
18046
|
+
// packages/workit-core/src/core/youtrack.ts
|
|
17971
18047
|
var ISSUE_RE = /^[A-Z]+-\d+$/;
|
|
17972
18048
|
var TOKEN_PLACEHOLDER = "YOUR_TOKEN_HERE";
|
|
17973
18049
|
var youTrackConfigPath = () => process.env.WORKFLOW_YOUTRACK_CONFIG ?? path18.join(configDir(), "youtrack.json");
|
|
@@ -18294,7 +18370,7 @@ var fetchYouTrackIssueBody = async (issue, creds = youTrackToken, request = youT
|
|
|
18294
18370
|
}
|
|
18295
18371
|
};
|
|
18296
18372
|
|
|
18297
|
-
// packages/workit-
|
|
18373
|
+
// packages/workit-core/src/core/context-read.ts
|
|
18298
18374
|
var contextReadSchema = object({
|
|
18299
18375
|
kind: _enum([
|
|
18300
18376
|
"git",
|
|
@@ -18405,7 +18481,7 @@ var readExternalContext = async (root, payload) => {
|
|
|
18405
18481
|
}
|
|
18406
18482
|
};
|
|
18407
18483
|
|
|
18408
|
-
// packages/workit-
|
|
18484
|
+
// packages/workit-core/src/core.ts
|
|
18409
18485
|
var ok = (data) => ({ ok: true, data, error: null });
|
|
18410
18486
|
var fail = (error, data = null) => ({
|
|
18411
18487
|
ok: false,
|
|
@@ -18454,7 +18530,7 @@ function resolveInside(root, candidate) {
|
|
|
18454
18530
|
}
|
|
18455
18531
|
function run2(root, executable, args, env = {}) {
|
|
18456
18532
|
const cwd = realpathSync5(root);
|
|
18457
|
-
const result =
|
|
18533
|
+
const result = spawnSync13(executable, args, {
|
|
18458
18534
|
cwd,
|
|
18459
18535
|
encoding: "utf8",
|
|
18460
18536
|
env: { ...process.env, ...env }
|
|
@@ -18466,7 +18542,7 @@ function run2(root, executable, args, env = {}) {
|
|
|
18466
18542
|
cwd
|
|
18467
18543
|
};
|
|
18468
18544
|
}
|
|
18469
|
-
// packages/workit-
|
|
18545
|
+
// packages/workit-core/src/hooks/descriptor.ts
|
|
18470
18546
|
var support = (descriptor, axis) => {
|
|
18471
18547
|
if (axis.startsWith("event:"))
|
|
18472
18548
|
return descriptor.events[axis.slice("event:".length)].support;
|
|
@@ -18490,7 +18566,7 @@ var capabilitiesFor = (descriptor, observed = {}) => descriptor.capabilities.map
|
|
|
18490
18566
|
refs: rule.refs.map((handle) => ({ kind: "host", host: descriptor.host, handle }))
|
|
18491
18567
|
};
|
|
18492
18568
|
});
|
|
18493
|
-
// packages/workit-
|
|
18569
|
+
// packages/workit-core/src/hooks/context.ts
|
|
18494
18570
|
import path20 from "node:path";
|
|
18495
18571
|
var MIGRATION_PENDING_NOTE = "workit migration pending — run `workit task status`";
|
|
18496
18572
|
var migrationPending = (result) => !result.ok && result.code === "needs_input" && (result.error ?? "").startsWith(MIGRATION_PENDING);
|
|
@@ -18587,12 +18663,12 @@ function entryCompactContext(store, entry, session, context) {
|
|
|
18587
18663
|
cache.delete(cache.keys().next().value);
|
|
18588
18664
|
return compact.data;
|
|
18589
18665
|
}
|
|
18590
|
-
// packages/workit-
|
|
18666
|
+
// packages/workit-core/src/hooks/policy.ts
|
|
18591
18667
|
var shellPolicy = (cwd, command) => {
|
|
18592
18668
|
const policy = shellBranchPolicyViolation(cwd, command);
|
|
18593
18669
|
return policy && !policy.ok ? { kind: "deny", reason: `branch_policy_denied: ${policy.error}`, unblock: null } : { kind: "none" };
|
|
18594
18670
|
};
|
|
18595
|
-
// packages/workit-
|
|
18671
|
+
// packages/workit-core/src/hooks/write-gate.ts
|
|
18596
18672
|
import { realpathSync as realpathSync6 } from "node:fs";
|
|
18597
18673
|
import path21 from "node:path";
|
|
18598
18674
|
var NONE2 = { kind: "none" };
|
|
@@ -18704,11 +18780,11 @@ var segmentsOf = (command) => {
|
|
|
18704
18780
|
flushSegment();
|
|
18705
18781
|
return segments;
|
|
18706
18782
|
};
|
|
18707
|
-
var
|
|
18783
|
+
var PREFIXES2 = new Set(["sudo", "command", "env", "nohup", "time", "exec", "xargs"]);
|
|
18708
18784
|
var operands = (words) => words.filter((item) => !item.startsWith("-"));
|
|
18709
18785
|
var editsOf = (input) => {
|
|
18710
18786
|
let words = input;
|
|
18711
|
-
while (words.length && (
|
|
18787
|
+
while (words.length && (PREFIXES2.has(words[0]) || /^\w+=/.test(words[0])))
|
|
18712
18788
|
words = words.slice(1);
|
|
18713
18789
|
const [verb, ...args] = words;
|
|
18714
18790
|
const name = (verb?.split(/[\\/]/).at(-1) ?? "").toLowerCase();
|
|
@@ -18853,7 +18929,7 @@ function writeGate(cwd, paths) {
|
|
|
18853
18929
|
return NONE2;
|
|
18854
18930
|
}
|
|
18855
18931
|
}
|
|
18856
|
-
// packages/workit-
|
|
18932
|
+
// packages/workit-core/src/hooks/hosts/fields.ts
|
|
18857
18933
|
var SHELLS = new Set(["sh", "bash", "zsh", "dash", "pwsh", "powershell", "cmd"]);
|
|
18858
18934
|
var WRITE_TOOLS = new Set([
|
|
18859
18935
|
"write",
|
|
@@ -18874,24 +18950,24 @@ var WRITE_TOOLS = new Set([
|
|
|
18874
18950
|
"editfile",
|
|
18875
18951
|
"writefile"
|
|
18876
18952
|
]);
|
|
18877
|
-
// packages/workit-
|
|
18953
|
+
// packages/workit-core/src/hooks/handle.ts
|
|
18878
18954
|
var offered = new Set;
|
|
18879
18955
|
var CLAUDE_JUDGES = new Set(["workit:verifier", "workit:reviewer"]);
|
|
18880
|
-
// packages/workit-
|
|
18956
|
+
// packages/workit-core/src/hooks/hosts/claude-code.ts
|
|
18881
18957
|
var SOURCES = new Set(["startup", "resume", "clear", "compact", "fork"]);
|
|
18882
18958
|
var SHELL_TOOLS = new Set(["Bash", "PowerShell"]);
|
|
18883
18959
|
var CONTEXT_EVENTS = new Set(["SessionStart", "UserPromptSubmit", "SubagentStart"]);
|
|
18884
18960
|
|
|
18885
|
-
// packages/workit-
|
|
18961
|
+
// packages/workit-core/src/hooks/hosts/codex.ts
|
|
18886
18962
|
var SHELL_TOOLS2 = new Set(["bash", "unified-exec"]);
|
|
18887
18963
|
var SOURCES2 = new Set(["startup", "resume", "clear", "compact"]);
|
|
18888
18964
|
|
|
18889
|
-
// packages/workit-
|
|
18965
|
+
// packages/workit-core/src/hooks/hosts/cursor.ts
|
|
18890
18966
|
var BLOCKING = new Set(["preToolUse", "beforeShellExecution", "subagentStart"]);
|
|
18891
18967
|
|
|
18892
|
-
// packages/workit-
|
|
18968
|
+
// packages/workit-core/src/hooks/run.ts
|
|
18893
18969
|
if (false) {}
|
|
18894
|
-
// packages/workit-
|
|
18970
|
+
// packages/workit-core/src/hooks/hosts/opencode.ts
|
|
18895
18971
|
var OPENCODE_DESCRIPTOR = {
|
|
18896
18972
|
host: "opencode",
|
|
18897
18973
|
label: "OpenCode",
|
|
@@ -18960,7 +19036,7 @@ var OPENCODE_DESCRIPTOR = {
|
|
|
18960
19036
|
// packages/workit-opencode/src/shared/init-apply.ts
|
|
18961
19037
|
import path26 from "node:path";
|
|
18962
19038
|
|
|
18963
|
-
// packages/workit-
|
|
19039
|
+
// packages/workit-core/src/core/gitignore.ts
|
|
18964
19040
|
import { existsSync as existsSync8, readFileSync as readFileSync6, writeFileSync as writeFileSync4 } from "node:fs";
|
|
18965
19041
|
import path22 from "node:path";
|
|
18966
19042
|
var GITIGNORE_ENTRIES = [
|
|
@@ -19008,7 +19084,7 @@ var ensureProjectGitignore = (workspaceRoot, confirmed) => {
|
|
|
19008
19084
|
return { ok: true, path: file, added };
|
|
19009
19085
|
};
|
|
19010
19086
|
|
|
19011
|
-
// packages/workit-
|
|
19087
|
+
// packages/workit-core/src/core/hygiene.ts
|
|
19012
19088
|
import { existsSync as existsSync9, readFileSync as readFileSync7, writeFileSync as writeFileSync5 } from "node:fs";
|
|
19013
19089
|
import path23 from "node:path";
|
|
19014
19090
|
var repoRoot3 = assetRoot();
|
|
@@ -19072,77 +19148,15 @@ var ensureHygieneFiles = (root, opts) => {
|
|
|
19072
19148
|
return { ok: true, created };
|
|
19073
19149
|
};
|
|
19074
19150
|
|
|
19075
|
-
// packages/workit-
|
|
19151
|
+
// packages/workit-core/src/core/init.ts
|
|
19076
19152
|
import fs15 from "node:fs";
|
|
19077
19153
|
import path25 from "node:path";
|
|
19078
19154
|
import { spawnSync as spawnSync14 } from "node:child_process";
|
|
19079
19155
|
|
|
19080
|
-
// packages/workit-
|
|
19156
|
+
// packages/workit-core/src/core/workspace-branch-policy.ts
|
|
19081
19157
|
import { mkdirSync as mkdirSync4, readFileSync as readFileSync8, renameSync as renameSync3, rmSync as rmSync2, writeFileSync as writeFileSync6 } from "node:fs";
|
|
19082
19158
|
import path24 from "node:path";
|
|
19083
19159
|
import { isDeepStrictEqual } from "node:util";
|
|
19084
|
-
|
|
19085
|
-
// packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/branch-policy.ts
|
|
19086
|
-
import { spawnSync as spawnSync13 } from "node:child_process";
|
|
19087
|
-
var PREFIXES2 = {
|
|
19088
|
-
feature: "feature/*",
|
|
19089
|
-
bugfix: "bugfix/*",
|
|
19090
|
-
release: "release/*",
|
|
19091
|
-
hotfix: "hotfix/*"
|
|
19092
|
-
};
|
|
19093
|
-
var detectBranchPolicy = (workspaceRoot) => {
|
|
19094
|
-
const branchExists = (name) => {
|
|
19095
|
-
const r = spawnSync13("git", ["branch", "--list", name], {
|
|
19096
|
-
cwd: workspaceRoot,
|
|
19097
|
-
encoding: "utf8"
|
|
19098
|
-
});
|
|
19099
|
-
return r.status === 0 && (r.stdout ?? "").trim() !== "";
|
|
19100
|
-
};
|
|
19101
|
-
const develop = branchExists("develop");
|
|
19102
|
-
const main = branchExists("main");
|
|
19103
|
-
const master = branchExists("master");
|
|
19104
|
-
const root = main ? "main" : master ? "master" : null;
|
|
19105
|
-
if (develop) {
|
|
19106
|
-
return {
|
|
19107
|
-
preset: "gitflow",
|
|
19108
|
-
developBranch: "develop",
|
|
19109
|
-
integration: "merge",
|
|
19110
|
-
protected: root ? [root, "develop"] : ["develop"],
|
|
19111
|
-
allowed: [...PRESETS.gitflow.allowed],
|
|
19112
|
-
prefixes: PREFIXES2
|
|
19113
|
-
};
|
|
19114
|
-
}
|
|
19115
|
-
if (root === "main") {
|
|
19116
|
-
return {
|
|
19117
|
-
preset: "github-flow",
|
|
19118
|
-
developBranch: null,
|
|
19119
|
-
integration: "pr",
|
|
19120
|
-
protected: [root],
|
|
19121
|
-
allowed: ["*"],
|
|
19122
|
-
prefixes: PREFIXES2
|
|
19123
|
-
};
|
|
19124
|
-
}
|
|
19125
|
-
if (root === "master") {
|
|
19126
|
-
return {
|
|
19127
|
-
preset: "trunk-based",
|
|
19128
|
-
developBranch: null,
|
|
19129
|
-
integration: "pr",
|
|
19130
|
-
protected: [root],
|
|
19131
|
-
allowed: ["*"],
|
|
19132
|
-
prefixes: PREFIXES2
|
|
19133
|
-
};
|
|
19134
|
-
}
|
|
19135
|
-
return {
|
|
19136
|
-
preset: "gitflow",
|
|
19137
|
-
developBranch: null,
|
|
19138
|
-
integration: "merge",
|
|
19139
|
-
protected: [],
|
|
19140
|
-
allowed: [],
|
|
19141
|
-
prefixes: PREFIXES2
|
|
19142
|
-
};
|
|
19143
|
-
};
|
|
19144
|
-
|
|
19145
|
-
// packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/workspace-branch-policy.ts
|
|
19146
19160
|
var readFileSafe = (p) => {
|
|
19147
19161
|
try {
|
|
19148
19162
|
return readFileSync8(p, "utf8");
|
|
@@ -19244,7 +19258,7 @@ function applyWorkspaceBranchPolicy(opts) {
|
|
|
19244
19258
|
};
|
|
19245
19259
|
}
|
|
19246
19260
|
|
|
19247
|
-
// packages/workit-
|
|
19261
|
+
// packages/workit-core/src/core/init.ts
|
|
19248
19262
|
var TOKEN_PLACEHOLDER2 = "YOUR_TOKEN_HERE";
|
|
19249
19263
|
var readJson = (p) => {
|
|
19250
19264
|
try {
|
|
@@ -20173,7 +20187,7 @@ var evaluateShellPermission = (root, event) => {
|
|
|
20173
20187
|
import { existsSync as existsSync11, readFileSync as readFileSync9 } from "node:fs";
|
|
20174
20188
|
import path30 from "node:path";
|
|
20175
20189
|
|
|
20176
|
-
// packages/workit-
|
|
20190
|
+
// packages/workit-core/src/core/skill-manifests.ts
|
|
20177
20191
|
var WORKIT_METHOD_SKILLS = [
|
|
20178
20192
|
"workit-shape",
|
|
20179
20193
|
"workit-implement",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brainervirus/workit-opencode",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.1.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Workit OpenCode plugin — native tools, adaptive policy, and sixteen method skills",
|
|
6
6
|
"keywords": [
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"typecheck": "tsc --noEmit"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@brainervirus/workit-core": "^8.
|
|
42
|
+
"@brainervirus/workit-core": "^8.1.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@opencode/plugin": "2.0.18"
|