lazycodex-ai 5.0.0-beta.82 → 5.0.0-beta.83
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/README.ja.md +2 -2
- package/README.ko.md +2 -2
- package/README.md +4 -4
- package/README.ru.md +2 -2
- package/README.zh-cn.md +2 -2
- package/dist/cli/index.js +392 -112
- package/dist/cli/install-native/index.d.ts +4 -0
- package/dist/cli/install-native/plan.d.ts +11 -0
- package/dist/cli/install-native/run-native-install.d.ts +23 -0
- package/dist/cli/install-native-dev/index.d.ts +4 -0
- package/dist/cli/native-dev-platform-flag.d.ts +5 -0
- package/dist/cli/native-edition-hint.d.ts +10 -0
- package/dist/cli/types.d.ts +3 -2
- package/dist/cli-node/index.js +392 -112
- package/package.json +1 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +84 -11
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +24 -10
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +8 -6
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +21 -4
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +10 -5
- package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +24 -6
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard-native-reviewer.test.ts +207 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +6 -4
- package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +43 -4
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +25 -0
- package/packages/omo-codex/plugin/skills/browser/SKILL.md +89 -0
- package/packages/omo-codex/plugin/skills/browser/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/browser/references/commands.md +90 -0
- package/packages/omo-codex/plugin/skills/browser/references/install.md +71 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +42 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +39 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +59 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +42 -0
- package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +59 -0
- package/packages/omo-codex/plugin/skills/browser/references/remote.md +24 -0
- package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +41 -0
- package/packages/omo-codex/plugin/skills/browser/scripts/browser-env.mjs +41 -0
- package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +51 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +90 -17
- package/packages/shared-skills/skills/browser/ATTRIBUTION.md +25 -0
- package/packages/shared-skills/skills/browser/SKILL.md +89 -0
- package/packages/shared-skills/skills/browser/references/commands.md +90 -0
- package/packages/shared-skills/skills/browser/references/install.md +71 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/README.md +42 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +39 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +59 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/network.md +42 -0
- package/packages/shared-skills/skills/browser/references/recipes/1password.md +59 -0
- package/packages/shared-skills/skills/browser/references/remote.md +24 -0
- package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +41 -0
- package/packages/shared-skills/skills/browser/scripts/browser-env.mjs +41 -0
- package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +51 -0
- package/dist/cli/install-senpi/index.d.ts +0 -1
- package/dist/cli/senpi-edition-hint.d.ts +0 -10
- package/dist/cli/senpi-platform-flag.d.ts +0 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lazycodex-ai",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.83",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -7072,8 +7072,10 @@ var OmoGitMasterSettingsSchema = OmoGitMasterSettingsLayerSchema.extend({
|
|
|
7072
7072
|
|
|
7073
7073
|
// ../../omo-config-core/src/schema/harness.ts
|
|
7074
7074
|
var HARNESS_IDS = ["codex", "opencode", "omo"];
|
|
7075
|
-
var OMO_CONFIG_HARNESS_IDS = ["opencode", "
|
|
7075
|
+
var OMO_CONFIG_HARNESS_IDS = ["opencode", "native", "codex"];
|
|
7076
7076
|
var OmoHarnessIdSchema = _enum(OMO_CONFIG_HARNESS_IDS);
|
|
7077
|
+
var OMO_CONFIG_LEGACY_HARNESS_ALIASES = { senpi: "native" };
|
|
7078
|
+
var OMO_CONFIG_LEGACY_HARNESS_IDS = Object.keys(OMO_CONFIG_LEGACY_HARNESS_ALIASES);
|
|
7077
7079
|
|
|
7078
7080
|
// ../../omo-config-core/src/schema/memory.ts
|
|
7079
7081
|
var OmoMemoryReflectionTriggerSchema = object({
|
|
@@ -7532,6 +7534,7 @@ var OmoConfigProfileSchema = object({
|
|
|
7532
7534
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
7533
7535
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
7534
7536
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
7537
|
+
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
7535
7538
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
7536
7539
|
"[codex]": OmoTypedHarnessConfigSchema.optional()
|
|
7537
7540
|
}).strict();
|
|
@@ -7550,6 +7553,7 @@ var OmoConfigSchema = object({
|
|
|
7550
7553
|
telemetry: OmoTelemetrySettingsSchema.optional(),
|
|
7551
7554
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
7552
7555
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
7556
|
+
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
7553
7557
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
7554
7558
|
"[codex]": OmoTypedHarnessConfigSchema.optional(),
|
|
7555
7559
|
profiles: record(string2(), OmoConfigProfileSchema).default({}),
|
|
@@ -7571,6 +7575,7 @@ var OmoConfigLayerSchema = object({
|
|
|
7571
7575
|
telemetry: OmoTelemetrySettingsLayerSchema.optional(),
|
|
7572
7576
|
disabled_skills: OmoDisabledSkillsSchema.optional(),
|
|
7573
7577
|
"[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
|
|
7578
|
+
"[native]": OmoTypedHarnessConfigSchema.optional(),
|
|
7574
7579
|
"[senpi]": OmoTypedHarnessConfigSchema.optional(),
|
|
7575
7580
|
"[codex]": OmoTypedHarnessConfigSchema.optional(),
|
|
7576
7581
|
profiles: record(string2(), OmoConfigProfileSchema).optional(),
|
|
@@ -7634,6 +7639,54 @@ function canonicalizeLegacyCategoryNames(document) {
|
|
|
7634
7639
|
return { document: canonicalized, renames };
|
|
7635
7640
|
}
|
|
7636
7641
|
|
|
7642
|
+
// ../../omo-config-core/src/schema/legacy-harness-names.ts
|
|
7643
|
+
function canonicalHarnessName(name) {
|
|
7644
|
+
return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, name) ? OMO_CONFIG_LEGACY_HARNESS_ALIASES[name] : name;
|
|
7645
|
+
}
|
|
7646
|
+
function harnessBlockKey(harness) {
|
|
7647
|
+
return `[${harness}]`;
|
|
7648
|
+
}
|
|
7649
|
+
function legacyHarnessOfBlockKey(key) {
|
|
7650
|
+
if (!key.startsWith("[") || !key.endsWith("]"))
|
|
7651
|
+
return;
|
|
7652
|
+
const harness = key.slice(1, -1);
|
|
7653
|
+
return Object.hasOwn(OMO_CONFIG_LEGACY_HARNESS_ALIASES, harness) ? harness : undefined;
|
|
7654
|
+
}
|
|
7655
|
+
function isRecord8(value) {
|
|
7656
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
7657
|
+
}
|
|
7658
|
+
function canonicalizeBlocksIn(container, path, renames) {
|
|
7659
|
+
const result = {};
|
|
7660
|
+
for (const [key, value] of Object.entries(container)) {
|
|
7661
|
+
const legacyHarness = legacyHarnessOfBlockKey(key);
|
|
7662
|
+
if (legacyHarness === undefined) {
|
|
7663
|
+
result[key] = value;
|
|
7664
|
+
continue;
|
|
7665
|
+
}
|
|
7666
|
+
const canonical = harnessBlockKey(canonicalHarnessName(legacyHarness));
|
|
7667
|
+
const dropped = Object.hasOwn(container, canonical);
|
|
7668
|
+
renames.push({ canonical, dropped, legacy: key, path: [...path, key].join(".") });
|
|
7669
|
+
if (!dropped)
|
|
7670
|
+
result[canonical] = value;
|
|
7671
|
+
}
|
|
7672
|
+
return result;
|
|
7673
|
+
}
|
|
7674
|
+
function canonicalizeLegacyHarnessBlocks(document) {
|
|
7675
|
+
if (!isRecord8(document))
|
|
7676
|
+
return { document: {}, renames: [] };
|
|
7677
|
+
const renames = [];
|
|
7678
|
+
const canonicalized = canonicalizeBlocksIn(document, [], renames);
|
|
7679
|
+
const profiles = canonicalized["profiles"];
|
|
7680
|
+
if (isRecord8(profiles)) {
|
|
7681
|
+
const canonicalProfiles = {};
|
|
7682
|
+
for (const [name, profile] of Object.entries(profiles)) {
|
|
7683
|
+
canonicalProfiles[name] = isRecord8(profile) ? canonicalizeBlocksIn(profile, ["profiles", name], renames) : profile;
|
|
7684
|
+
}
|
|
7685
|
+
canonicalized["profiles"] = canonicalProfiles;
|
|
7686
|
+
}
|
|
7687
|
+
return { document: canonicalized, renames };
|
|
7688
|
+
}
|
|
7689
|
+
|
|
7637
7690
|
// ../../../node_modules/.bun/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/scanner.js
|
|
7638
7691
|
function createScanner(text, ignoreTrivia = false) {
|
|
7639
7692
|
const len = text.length;
|
|
@@ -8609,7 +8662,7 @@ function resolveOmoConfigPaths(options) {
|
|
|
8609
8662
|
}
|
|
8610
8663
|
|
|
8611
8664
|
// ../../omo-config-core/src/loader/resolution.ts
|
|
8612
|
-
var HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS])].map((harness) =>
|
|
8665
|
+
var HARNESS_KEYS = [...new Set([...HARNESS_IDS, ...OMO_CONFIG_HARNESS_IDS, ...OMO_CONFIG_LEGACY_HARNESS_IDS])].map((harness) => harnessBlockKey(harness));
|
|
8613
8666
|
function profileName(value) {
|
|
8614
8667
|
return value === "" ? undefined : value;
|
|
8615
8668
|
}
|
|
@@ -8638,7 +8691,13 @@ function withoutControlKeys(config) {
|
|
|
8638
8691
|
function harnessLayer(config, harness) {
|
|
8639
8692
|
if (harness === undefined)
|
|
8640
8693
|
return {};
|
|
8641
|
-
|
|
8694
|
+
const canonical = canonicalHarnessName(harness);
|
|
8695
|
+
const legacyKeys = Object.entries(OMO_CONFIG_LEGACY_HARNESS_ALIASES).filter(([, target]) => target === canonical).map(([legacy]) => harnessBlockKey(legacy));
|
|
8696
|
+
let layer = {};
|
|
8697
|
+
for (const key of [...legacyKeys, harnessBlockKey(canonical)]) {
|
|
8698
|
+
layer = mergeOmoConfigRecords(layer, toRecord(config[key]) ?? {});
|
|
8699
|
+
}
|
|
8700
|
+
return layer;
|
|
8642
8701
|
}
|
|
8643
8702
|
function resolveOmoConfigView(options) {
|
|
8644
8703
|
const profiles = toRecord(options.config["profiles"]);
|
|
@@ -8689,6 +8748,7 @@ var DEFAULT_RAW_CONFIG = {
|
|
|
8689
8748
|
function stripResolutionControlKeys(config) {
|
|
8690
8749
|
const {
|
|
8691
8750
|
"[codex]": _codex,
|
|
8751
|
+
"[native]": _native,
|
|
8692
8752
|
"[opencode]": _opencode,
|
|
8693
8753
|
"[senpi]": _senpi,
|
|
8694
8754
|
profiles: _profiles,
|
|
@@ -8714,21 +8774,21 @@ function hasUnsafeUnrecognizedKey(issues) {
|
|
|
8714
8774
|
function hasTamperedPrototype(value) {
|
|
8715
8775
|
if (Array.isArray(value))
|
|
8716
8776
|
return value.some((entry) => hasTamperedPrototype(entry));
|
|
8717
|
-
if (!
|
|
8777
|
+
if (!isRecord9(value))
|
|
8718
8778
|
return false;
|
|
8719
8779
|
const prototype = Object.getPrototypeOf(value);
|
|
8720
8780
|
if (prototype !== Object.prototype && prototype !== null)
|
|
8721
8781
|
return true;
|
|
8722
8782
|
return Object.values(value).some((entry) => hasTamperedPrototype(entry));
|
|
8723
8783
|
}
|
|
8724
|
-
function
|
|
8784
|
+
function isRecord9(value) {
|
|
8725
8785
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
8726
8786
|
}
|
|
8727
8787
|
function containerAt(record, path) {
|
|
8728
8788
|
let container = record;
|
|
8729
8789
|
for (const segment of path) {
|
|
8730
8790
|
const next = container[segment];
|
|
8731
|
-
if (!
|
|
8791
|
+
if (!isRecord9(next))
|
|
8732
8792
|
return null;
|
|
8733
8793
|
container = next;
|
|
8734
8794
|
}
|
|
@@ -8839,6 +8899,15 @@ function legacyCategoryDiagnostic(path, renames) {
|
|
|
8839
8899
|
issuePaths: renames.map((rename) => rename.path)
|
|
8840
8900
|
};
|
|
8841
8901
|
}
|
|
8902
|
+
function legacyHarnessDiagnostic(path, renames) {
|
|
8903
|
+
const detail = renames.map((rename) => rename.dropped ? `${rename.path} ignored because ${rename.canonical} is also configured` : `${rename.path} renamed to ${rename.canonical}`).join(", ");
|
|
8904
|
+
return {
|
|
8905
|
+
kind: "deprecated-keys",
|
|
8906
|
+
message: `Deprecated harness block in ${path}: ${detail}. Rename it; the alias is removed in a future release.`,
|
|
8907
|
+
path,
|
|
8908
|
+
issuePaths: renames.map((rename) => rename.path)
|
|
8909
|
+
};
|
|
8910
|
+
}
|
|
8842
8911
|
function loadOmoConfig(options = {}) {
|
|
8843
8912
|
const fileSystem = options.fileSystem ?? DEFAULT_READ_FILE_SYSTEM;
|
|
8844
8913
|
const cwd = options.cwd ?? process.cwd();
|
|
@@ -8861,8 +8930,12 @@ function loadOmoConfig(options = {}) {
|
|
|
8861
8930
|
if (canonicalized.renames.length > 0) {
|
|
8862
8931
|
diagnostics.push(legacyCategoryDiagnostic(candidate.path, canonicalized.renames));
|
|
8863
8932
|
}
|
|
8864
|
-
|
|
8865
|
-
|
|
8933
|
+
const harnessCanonicalized = canonicalizeLegacyHarnessBlocks(canonicalized.document);
|
|
8934
|
+
if (harnessCanonicalized.renames.length > 0) {
|
|
8935
|
+
diagnostics.push(legacyHarnessDiagnostic(candidate.path, harnessCanonicalized.renames));
|
|
8936
|
+
}
|
|
8937
|
+
layers.push({ config: harnessCanonicalized.document, source: loaded.source });
|
|
8938
|
+
merged = mergeOmoConfigRecords(merged, harnessCanonicalized.document);
|
|
8866
8939
|
}
|
|
8867
8940
|
}
|
|
8868
8941
|
const requestedProfile = resolveOmoProfileName({
|
|
@@ -11266,10 +11339,10 @@ function readCatalogMultiAgentVersion(model, cachePath) {
|
|
|
11266
11339
|
} catch {
|
|
11267
11340
|
return null;
|
|
11268
11341
|
}
|
|
11269
|
-
if (!
|
|
11342
|
+
if (!isRecord10(cache) || !Array.isArray(cache.models))
|
|
11270
11343
|
return null;
|
|
11271
11344
|
for (const entry of cache.models) {
|
|
11272
|
-
if (!
|
|
11345
|
+
if (!isRecord10(entry))
|
|
11273
11346
|
continue;
|
|
11274
11347
|
if (entry.slug !== model && entry.id !== model)
|
|
11275
11348
|
continue;
|
|
@@ -11294,7 +11367,7 @@ function readRootModelCatalogPath(config) {
|
|
|
11294
11367
|
const single = config.match(/^\s*model_catalog_json\s*=\s*'([^']+)'/m);
|
|
11295
11368
|
return single?.[1] ?? null;
|
|
11296
11369
|
}
|
|
11297
|
-
function
|
|
11370
|
+
function isRecord10(value) {
|
|
11298
11371
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
11299
11372
|
}
|
|
11300
11373
|
function removeFeatureFlagSetting(config, featureName) {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
|
|
9
9
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
|
|
10
10
|
"timeout": 30,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Checking Bootstrap Provisioning"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sisyphuslabs/codex-bootstrap",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.83",
|
|
4
4
|
"description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": true,
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
|
|
10
10
|
"timeout": 5,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Recommending Git Bash MCP"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"type": "command",
|
|
21
21
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
|
|
22
22
|
"timeout": 5,
|
|
23
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
23
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Resetting Git Bash MCP Reminder"
|
|
24
24
|
}
|
|
25
25
|
]
|
|
26
26
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
|
|
10
10
|
"timeout": 10,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Verifying LazyCodex Executor Evidence"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-yeongyu/codex-lazycodex-executor-verify",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.83",
|
|
4
4
|
"description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "npm@11.12.1",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "5.0.0-beta.
|
|
4
|
-
"inputDigest": "sha256:
|
|
3
|
+
"version": "5.0.0-beta.83",
|
|
4
|
+
"inputDigest": "sha256:c2a4d0a5733ce0a84a7b045a3c294a3b1b17f06e421e60a6f19ce486a03aaa2f",
|
|
5
5
|
"outputs": [
|
|
6
6
|
{
|
|
7
7
|
"path": "cli.d.ts",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
|
|
10
10
|
"timeout": 60,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Checking LSP Diagnostics"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"type": "command",
|
|
22
22
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
|
|
23
23
|
"timeout": 5,
|
|
24
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
24
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Resetting LSP Diagnostics Cache"
|
|
25
25
|
}
|
|
26
26
|
]
|
|
27
27
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Loading Project Rules"
|
|
11
11
|
}
|
|
12
12
|
]
|
|
13
13
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"type": "command",
|
|
20
20
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
|
|
21
21
|
"timeout": 10,
|
|
22
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
22
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Loading Project Rules"
|
|
23
23
|
}
|
|
24
24
|
]
|
|
25
25
|
}
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"type": "command",
|
|
33
33
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
|
|
34
34
|
"timeout": 10,
|
|
35
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
35
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Matching Project Rules"
|
|
36
36
|
}
|
|
37
37
|
]
|
|
38
38
|
}
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"type": "command",
|
|
46
46
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
|
|
47
47
|
"timeout": 10,
|
|
48
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
48
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Resetting Project Rule Cache"
|
|
49
49
|
}
|
|
50
50
|
]
|
|
51
51
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
|
|
10
10
|
"timeout": 10,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Checking Thread Title Hygiene"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-yeongyu/codex-telemetry",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.83",
|
|
4
4
|
"description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "npm@11.12.1",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
|
|
9
9
|
"timeout": 5,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Checking Ultrawork Trigger"
|
|
11
11
|
}
|
|
12
12
|
]
|
|
13
13
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-yeongyu/codex-ultrawork",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.83",
|
|
4
4
|
"description": "Codex plugin that injects the ultrawork orchestration directive and ships LazyCodex planning, review, QA, and gate agent roles.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "npm@11.12.1",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/ulw-execute-continuation/dist/cli.js\" hook stop",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
10
|
+
"statusMessage": "(OmO 5.0.0-beta.83) Checking Ulw-Execute Continuation"
|
|
11
11
|
}
|
|
12
12
|
]
|
|
13
13
|
}
|
|
@@ -1362,12 +1362,24 @@ var REVIEWER_ROLES_BY_SURFACE = {
|
|
|
1362
1362
|
gateReview: "lazycodex-gate-reviewer"
|
|
1363
1363
|
},
|
|
1364
1364
|
"omo-senpi": {
|
|
1365
|
-
codeReview: "omo-
|
|
1366
|
-
manualQa: "omo-
|
|
1367
|
-
gateReview: "omo-
|
|
1365
|
+
codeReview: "omo-native-code-reviewer",
|
|
1366
|
+
manualQa: "omo-native-qa-executor",
|
|
1367
|
+
gateReview: "omo-native-gate-reviewer"
|
|
1368
1368
|
}
|
|
1369
1369
|
};
|
|
1370
|
-
var
|
|
1370
|
+
var LEGACY_REVIEWER_AGENT_ALIASES = {
|
|
1371
|
+
"omo-senpi-code-reviewer": REVIEWER_ROLES_BY_SURFACE["omo-senpi"].codeReview,
|
|
1372
|
+
"omo-senpi-qa-executor": REVIEWER_ROLES_BY_SURFACE["omo-senpi"].manualQa,
|
|
1373
|
+
"omo-senpi-gate-reviewer": REVIEWER_ROLES_BY_SURFACE["omo-senpi"].gateReview
|
|
1374
|
+
};
|
|
1375
|
+
function canonicalReviewerAgentName(reviewer) {
|
|
1376
|
+
return LEGACY_REVIEWER_AGENT_ALIASES[reviewer] ?? reviewer;
|
|
1377
|
+
}
|
|
1378
|
+
var CANONICAL_GATE_REVIEW_NAMES = Object.values(REVIEWER_ROLES_BY_SURFACE).map((roles) => roles.gateReview);
|
|
1379
|
+
var GATE_REVIEWER_AGENT_NAMES = new Set([
|
|
1380
|
+
...CANONICAL_GATE_REVIEW_NAMES,
|
|
1381
|
+
...Object.entries(LEGACY_REVIEWER_AGENT_ALIASES).filter(([, canonical]) => CANONICAL_GATE_REVIEW_NAMES.includes(canonical)).map(([legacy]) => legacy)
|
|
1382
|
+
]);
|
|
1371
1383
|
var REQUIRED_GATE_SECTIONS_BY_SURFACE = {
|
|
1372
1384
|
lazycodex: ["manualQa", "gateReview", "iteration", "criteriaCoverage"],
|
|
1373
1385
|
"omo-senpi": ["manualQa", "gateReview", "iteration", "criteriaCoverage"]
|
|
@@ -4437,11 +4449,12 @@ var SPAWN_TOOL_TOKENS = new Set([
|
|
|
4437
4449
|
]);
|
|
4438
4450
|
var DEFAULT_FANOUT_LIMIT = 24;
|
|
4439
4451
|
var DEFAULT_REVIEW_SPAWN_LIMIT = 3;
|
|
4440
|
-
var GATE_MESSAGE_PATTERN = /lazycodex-gate-reviewer|omo-senpi-gate-reviewer|final gate review/i;
|
|
4452
|
+
var GATE_MESSAGE_PATTERN = /lazycodex-gate-reviewer|omo-native-gate-reviewer|omo-senpi-gate-reviewer|final gate review/i;
|
|
4441
4453
|
var REVIEW_AGENT_TYPES = [
|
|
4442
4454
|
...Object.values(REVIEWER_ROLES_BY_SURFACE).map((roles) => roles.gateReview),
|
|
4443
4455
|
...Object.values(REVIEWER_ROLES_BY_SURFACE).map((roles) => roles.codeReview),
|
|
4444
|
-
...Object.values(REVIEWER_ROLES_BY_SURFACE).map((roles) => roles.manualQa)
|
|
4456
|
+
...Object.values(REVIEWER_ROLES_BY_SURFACE).map((roles) => roles.manualQa),
|
|
4457
|
+
...Object.keys(LEGACY_REVIEWER_AGENT_ALIASES)
|
|
4445
4458
|
];
|
|
4446
4459
|
var REVIEW_AGENT_TYPE_SET = new Set(REVIEW_AGENT_TYPES);
|
|
4447
4460
|
function applySpawnGuards(payload, options = {}) {
|
|
@@ -4623,16 +4636,17 @@ function reviewAgentType(toolInput) {
|
|
|
4623
4636
|
return GATE_MESSAGE_PATTERN.test(message) ? reviewerRolesFor(resolveToolkitSurface()).gateReview : null;
|
|
4624
4637
|
}
|
|
4625
4638
|
function activeSurfaceReviewerAlias(reviewer) {
|
|
4639
|
+
const canonical = canonicalReviewerAgentName(reviewer);
|
|
4626
4640
|
const activeRoles = reviewerRolesFor(resolveToolkitSurface());
|
|
4627
4641
|
for (const roles of Object.values(REVIEWER_ROLES_BY_SURFACE)) {
|
|
4628
|
-
if (
|
|
4642
|
+
if (canonical === roles.codeReview)
|
|
4629
4643
|
return activeRoles.codeReview;
|
|
4630
|
-
if (
|
|
4644
|
+
if (canonical === roles.manualQa)
|
|
4631
4645
|
return activeRoles.manualQa;
|
|
4632
|
-
if (
|
|
4646
|
+
if (canonical === roles.gateReview)
|
|
4633
4647
|
return activeRoles.gateReview;
|
|
4634
4648
|
}
|
|
4635
|
-
return
|
|
4649
|
+
return canonical;
|
|
4636
4650
|
}
|
|
4637
4651
|
function deny(reason) {
|
|
4638
4652
|
return `${JSON.stringify({
|
|
@@ -7,7 +7,7 @@ import { readUlwLoopPlanSync } from "./plan-io.js";
|
|
|
7
7
|
import { atomicWriteJson, isNonEmptyFile, readAdmissionBreaker, readCount, readCounts } from "./spawn-budget-io.js";
|
|
8
8
|
import { spawnRoleDenial } from "./spawn-role-guard.js";
|
|
9
9
|
import { isStateLockTimeout, withStateLockSync } from "./state-lock.js";
|
|
10
|
-
import { GATE_REVIEWER_AGENT_NAMES, REVIEWER_ROLES_BY_SURFACE, resolveToolkitSurface, reviewerRolesFor, } from "./surface.js";
|
|
10
|
+
import { canonicalReviewerAgentName, GATE_REVIEWER_AGENT_NAMES, LEGACY_REVIEWER_AGENT_ALIASES, REVIEWER_ROLES_BY_SURFACE, resolveToolkitSurface, reviewerRolesFor, } from "./surface.js";
|
|
11
11
|
// spawn_agent = v1; collaborationspawn_agent = the delimiter-free flattened v2
|
|
12
12
|
// hook token from codex-rs hook_names.rs; collaboration.spawn_agent = the
|
|
13
13
|
// dotted token observed live in the task-1 probe (hook-tool-tokens.txt).
|
|
@@ -19,11 +19,12 @@ const SPAWN_TOOL_TOKENS = new Set([
|
|
|
19
19
|
]);
|
|
20
20
|
export const DEFAULT_FANOUT_LIMIT = 24;
|
|
21
21
|
const DEFAULT_REVIEW_SPAWN_LIMIT = 3;
|
|
22
|
-
const GATE_MESSAGE_PATTERN = /lazycodex-gate-reviewer|omo-senpi-gate-reviewer|final gate review/i;
|
|
22
|
+
const GATE_MESSAGE_PATTERN = /lazycodex-gate-reviewer|omo-native-gate-reviewer|omo-senpi-gate-reviewer|final gate review/i;
|
|
23
23
|
const REVIEW_AGENT_TYPES = [
|
|
24
24
|
...Object.values(REVIEWER_ROLES_BY_SURFACE).map((roles) => roles.gateReview),
|
|
25
25
|
...Object.values(REVIEWER_ROLES_BY_SURFACE).map((roles) => roles.codeReview),
|
|
26
26
|
...Object.values(REVIEWER_ROLES_BY_SURFACE).map((roles) => roles.manualQa),
|
|
27
|
+
...Object.keys(LEGACY_REVIEWER_AGENT_ALIASES),
|
|
27
28
|
];
|
|
28
29
|
const REVIEW_AGENT_TYPE_SET = new Set(REVIEW_AGENT_TYPES);
|
|
29
30
|
export function applySpawnGuards(payload, options = {}) {
|
|
@@ -230,16 +231,17 @@ function reviewAgentType(toolInput) {
|
|
|
230
231
|
return GATE_MESSAGE_PATTERN.test(message) ? reviewerRolesFor(resolveToolkitSurface()).gateReview : null;
|
|
231
232
|
}
|
|
232
233
|
function activeSurfaceReviewerAlias(reviewer) {
|
|
234
|
+
const canonical = canonicalReviewerAgentName(reviewer);
|
|
233
235
|
const activeRoles = reviewerRolesFor(resolveToolkitSurface());
|
|
234
236
|
for (const roles of Object.values(REVIEWER_ROLES_BY_SURFACE)) {
|
|
235
|
-
if (
|
|
237
|
+
if (canonical === roles.codeReview)
|
|
236
238
|
return activeRoles.codeReview;
|
|
237
|
-
if (
|
|
239
|
+
if (canonical === roles.manualQa)
|
|
238
240
|
return activeRoles.manualQa;
|
|
239
|
-
if (
|
|
241
|
+
if (canonical === roles.gateReview)
|
|
240
242
|
return activeRoles.gateReview;
|
|
241
243
|
}
|
|
242
|
-
return
|
|
244
|
+
return canonical;
|
|
243
245
|
}
|
|
244
246
|
function deny(reason) {
|
|
245
247
|
return `${JSON.stringify({
|
|
@@ -5,6 +5,8 @@ export interface UlwLoopReviewerRoles {
|
|
|
5
5
|
readonly gateReview: string;
|
|
6
6
|
}
|
|
7
7
|
export declare const REVIEWER_ROLES_BY_SURFACE: Readonly<Record<UlwLoopToolkitSurface, UlwLoopReviewerRoles>>;
|
|
8
|
+
export declare const LEGACY_REVIEWER_AGENT_ALIASES: Readonly<Record<string, string>>;
|
|
9
|
+
export declare function canonicalReviewerAgentName(reviewer: string): string;
|
|
8
10
|
export declare const GATE_REVIEWER_AGENT_NAMES: ReadonlySet<string>;
|
|
9
11
|
export type UlwLoopGateSection = "codeReview" | "manualQa" | "gateReview" | "iteration" | "criteriaCoverage";
|
|
10
12
|
export declare const REQUIRED_GATE_SECTIONS_BY_SURFACE: Readonly<Record<UlwLoopToolkitSurface, readonly UlwLoopGateSection[]>>;
|
|
@@ -8,12 +8,29 @@ export const REVIEWER_ROLES_BY_SURFACE = {
|
|
|
8
8
|
gateReview: "lazycodex-gate-reviewer",
|
|
9
9
|
},
|
|
10
10
|
"omo-senpi": {
|
|
11
|
-
codeReview: "omo-
|
|
12
|
-
manualQa: "omo-
|
|
13
|
-
gateReview: "omo-
|
|
11
|
+
codeReview: "omo-native-code-reviewer",
|
|
12
|
+
manualQa: "omo-native-qa-executor",
|
|
13
|
+
gateReview: "omo-native-gate-reviewer",
|
|
14
14
|
},
|
|
15
15
|
};
|
|
16
|
-
|
|
16
|
+
// The reviewer agents were renamed omo-senpi-* -> omo-native-*. The retired spellings stay
|
|
17
|
+
// resolvable for one release line so a caller that still names one is recognized rather than
|
|
18
|
+
// silently treated as a non-review spawn.
|
|
19
|
+
export const LEGACY_REVIEWER_AGENT_ALIASES = {
|
|
20
|
+
"omo-senpi-code-reviewer": REVIEWER_ROLES_BY_SURFACE["omo-senpi"].codeReview,
|
|
21
|
+
"omo-senpi-qa-executor": REVIEWER_ROLES_BY_SURFACE["omo-senpi"].manualQa,
|
|
22
|
+
"omo-senpi-gate-reviewer": REVIEWER_ROLES_BY_SURFACE["omo-senpi"].gateReview,
|
|
23
|
+
};
|
|
24
|
+
export function canonicalReviewerAgentName(reviewer) {
|
|
25
|
+
return LEGACY_REVIEWER_AGENT_ALIASES[reviewer] ?? reviewer;
|
|
26
|
+
}
|
|
27
|
+
const CANONICAL_GATE_REVIEW_NAMES = Object.values(REVIEWER_ROLES_BY_SURFACE).map((roles) => roles.gateReview);
|
|
28
|
+
export const GATE_REVIEWER_AGENT_NAMES = new Set([
|
|
29
|
+
...CANONICAL_GATE_REVIEW_NAMES,
|
|
30
|
+
...Object.entries(LEGACY_REVIEWER_AGENT_ALIASES)
|
|
31
|
+
.filter(([, canonical]) => CANONICAL_GATE_REVIEW_NAMES.includes(canonical))
|
|
32
|
+
.map(([legacy]) => legacy),
|
|
33
|
+
]);
|
|
17
34
|
export const REQUIRED_GATE_SECTIONS_BY_SURFACE = {
|
|
18
35
|
lazycodex: ["manualQa", "gateReview", "iteration", "criteriaCoverage"],
|
|
19
36
|
"omo-senpi": ["manualQa", "gateReview", "iteration", "criteriaCoverage"],
|