lazycodex-ai 5.1.38 → 5.1.40
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/cli/index.js +206 -187
- package/dist/cli-node/index.js +206 -187
- 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 +8 -2
- 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/dist/cli.js +157 -151
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +157 -151
- 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/ultrawork/skills/ulw-plan/SKILL.md +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +5 -4
- 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/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- 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/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +5 -4
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +179 -168
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +1 -1
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +5 -4
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook stop",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.1.
|
|
10
|
+
"statusMessage": "(OmO 5.1.40) Checking Ulw-Loop Resume",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook stop"
|
|
12
12
|
}
|
|
13
13
|
]
|
package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.1.
|
|
10
|
+
"statusMessage": "(OmO 5.1.40) Verifying LazyCodex Executor Evidence",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lazycodex-executor-verify\\dist\\cli.js\" hook subagent-stop"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/ultrawork/dist/cli.js\" hook user-prompt-submit",
|
|
9
9
|
"timeout": 5,
|
|
10
|
-
"statusMessage": "(OmO 5.1.
|
|
10
|
+
"statusMessage": "(OmO 5.1.40) Checking Ultrawork Trigger",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ultrawork\\dist\\cli.js\" hook user-prompt-submit"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook user-prompt-submit",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.1.
|
|
10
|
+
"statusMessage": "(OmO 5.1.40) Checking Ulw-Loop Steering",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook user-prompt-submit"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook user-prompt-submit",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 5.1.
|
|
10
|
+
"statusMessage": "(OmO 5.1.40) Loading Project Rules",
|
|
11
11
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook user-prompt-submit"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sisyphuslabs/omo-codex-plugin",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.40",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@sisyphuslabs/omo-codex-plugin",
|
|
9
|
-
"version": "5.1.
|
|
9
|
+
"version": "5.1.40",
|
|
10
10
|
"workspaces": [
|
|
11
11
|
"components/comment-checker",
|
|
12
12
|
"components/git-bash",
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
},
|
|
96
96
|
"components/comment-checker": {
|
|
97
97
|
"name": "@code-yeongyu/codex-comment-checker",
|
|
98
|
-
"version": "5.1.
|
|
98
|
+
"version": "5.1.40",
|
|
99
99
|
"license": "MIT",
|
|
100
100
|
"bin": {
|
|
101
101
|
"omo-comment-checker": "dist/cli.js"
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
},
|
|
118
118
|
"components/git-bash": {
|
|
119
119
|
"name": "@sisyphuslabs/codex-git-bash-hook",
|
|
120
|
-
"version": "5.1.
|
|
120
|
+
"version": "5.1.40",
|
|
121
121
|
"bin": {
|
|
122
122
|
"omo-git-bash-hook": "dist/cli.js"
|
|
123
123
|
},
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
},
|
|
132
132
|
"components/lazycodex-executor-verify": {
|
|
133
133
|
"name": "@code-yeongyu/codex-lazycodex-executor-verify",
|
|
134
|
-
"version": "5.1.
|
|
134
|
+
"version": "5.1.40",
|
|
135
135
|
"license": "MIT",
|
|
136
136
|
"bin": {
|
|
137
137
|
"lazycodex-executor-verify": "dist/cli.js"
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
},
|
|
150
150
|
"components/lsp": {
|
|
151
151
|
"name": "@code-yeongyu/codex-lsp",
|
|
152
|
-
"version": "5.1.
|
|
152
|
+
"version": "5.1.40",
|
|
153
153
|
"license": "MIT",
|
|
154
154
|
"dependencies": {
|
|
155
155
|
"@code-yeongyu/lsp-daemon": "file:../../../../lsp-daemon",
|
|
@@ -171,7 +171,7 @@
|
|
|
171
171
|
},
|
|
172
172
|
"components/rules": {
|
|
173
173
|
"name": "@code-yeongyu/codex-rules",
|
|
174
|
-
"version": "5.1.
|
|
174
|
+
"version": "5.1.40",
|
|
175
175
|
"license": "MIT",
|
|
176
176
|
"dependencies": {
|
|
177
177
|
"picomatch": "^4.0.7"
|
|
@@ -194,7 +194,7 @@
|
|
|
194
194
|
},
|
|
195
195
|
"components/teammode": {
|
|
196
196
|
"name": "@sisyphuslabs/codex-teammode",
|
|
197
|
-
"version": "5.1.
|
|
197
|
+
"version": "5.1.40",
|
|
198
198
|
"devDependencies": {
|
|
199
199
|
"@types/node": "^26.6.2",
|
|
200
200
|
"@vitest/coverage-v8": "5.0.1",
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
},
|
|
209
209
|
"components/telemetry": {
|
|
210
210
|
"name": "@code-yeongyu/codex-telemetry",
|
|
211
|
-
"version": "5.1.
|
|
211
|
+
"version": "5.1.40",
|
|
212
212
|
"license": "MIT",
|
|
213
213
|
"bin": {
|
|
214
214
|
"omo-telemetry": "dist/cli.js"
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
},
|
|
228
228
|
"components/ultrawork": {
|
|
229
229
|
"name": "@code-yeongyu/codex-ultrawork",
|
|
230
|
-
"version": "5.1.
|
|
230
|
+
"version": "5.1.40",
|
|
231
231
|
"license": "MIT",
|
|
232
232
|
"bin": {
|
|
233
233
|
"omo-ultrawork": "dist/cli.js"
|
|
@@ -246,7 +246,7 @@
|
|
|
246
246
|
},
|
|
247
247
|
"components/ulw-execute-continuation": {
|
|
248
248
|
"name": "@code-yeongyu/codex-ulw-execute-continuation",
|
|
249
|
-
"version": "5.1.
|
|
249
|
+
"version": "5.1.40",
|
|
250
250
|
"license": "MIT",
|
|
251
251
|
"bin": {
|
|
252
252
|
"omo-ulw-execute-continuation": "dist/cli.js"
|
|
@@ -264,7 +264,7 @@
|
|
|
264
264
|
},
|
|
265
265
|
"components/ulw-loop": {
|
|
266
266
|
"name": "@code-yeongyu/codex-ulw-loop",
|
|
267
|
-
"version": "5.1.
|
|
267
|
+
"version": "5.1.40",
|
|
268
268
|
"license": "MIT",
|
|
269
269
|
"bin": {
|
|
270
270
|
"omo-ulw-loop": "dist/cli.js",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-master
|
|
3
|
-
description: "
|
|
3
|
+
description: "MUST USE for ANY git operations: atomic commits, rebase/squash/fixup, and history search (blame, bisect, log -S, reflog). Load it before running git yourself, or pass load_skills=['git-master'] to the task that commits. Triggers: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Git Master
|
|
@@ -34,7 +34,7 @@ Example opening (adapt the wording, keep every commitment):
|
|
|
34
34
|
|
|
35
35
|
## INTENT ROUTING - pick ONE intent reference
|
|
36
36
|
|
|
37
|
-
**Review modifiers are a gate trigger, not a style cue.** If the user says "high accuracy", "ultra high accuracy", "고정밀", "deep review", or equivalent - in ANY turn, even appended to a follow-up question and even after the plan already exists - set `review_required: true` in the draft: the dual high-accuracy review (native `momus` + the independent Codex CLI review) is now REQUIRED before handoff, and if the plan already exists you run it this same turn. The review runs under the bounded convergence contract in `full-workflow.md`: a
|
|
37
|
+
**Review modifiers are a gate trigger, not a style cue.** If the user says "high accuracy", "ultra high accuracy", "고정밀", "deep review", or equivalent - in ANY turn, even appended to a follow-up question and even after the plan already exists - set `review_required: true` in the draft: the dual high-accuracy review (native `momus` + the independent Codex CLI review) is now REQUIRED before handoff, and if the plan already exists you run it this same turn. The review runs under the bounded convergence contract in `full-workflow.md`: convergence-bounded rounds (another round only while the previous one raised a new blocker-eligible finding or closed a ledger blocker; a round with neither that still does not approve stops the review), evidence-backed blocker eligibility, and approval-with-notes counting as approval. Answering the current question more carefully does NOT satisfy it. This does NOT choose CLEAR/UNCLEAR and does NOT suppress interview.
|
|
38
38
|
|
|
39
39
|
After grounding, make ONE judgment, record `intent: clear|unclear` plus `review_required`, **ANNOUNCE both to the user in one line**, then load ONE intent reference (you ALSO read `references/full-workflow.md` for the shared mechanics - see below). The test keys on whether the desired **OUTCOME** is clear, NOT on request length. This verdict line and the opening announcement above are the two mandatory user-visible signals of a planning session - it tells the user whether they will be interviewed and whether high-accuracy review is already requested; never skip either.
|
|
40
40
|
|
|
@@ -213,14 +213,15 @@ Every reviewer prompt must carry this intake contract with all angle-bracket val
|
|
|
213
213
|
The first action must open the literal workspace root as a directory descriptor, then traverse `.omo`, `plans`, and the final target with descriptor-relative no-follow opens, `fstat` each ancestor as a directory and the final descriptor as a regular file, and hash all bytes read from that same final descriptor. If the platform cannot guarantee this chain, or any path/runtime/launch/receipt/digest check drifts, return `INCONCLUSIVE` before reviewing. Echo the literal workspace, runtime home, target, digest, round, and launch ID; the parent separately matches the completion envelope to the persisted session/process receipt. Never search or use another artifact.
|
|
214
214
|
|
|
215
215
|
### Bounded convergence (the review must terminate)
|
|
216
|
-
Review
|
|
216
|
+
Review continues until unconditional approval, but a further round runs only while the previous round made progress: it raised at least one NEW blocker-eligible finding (one not already in the ledger and not a restatement of a closed blocker), or it confirmed at least one ledger blocker closed. A round that does neither and still does not approve ends the review: stop, report the outstanding blockers, and ask the user. This is the non-convergence guard, so there is no fixed round count; it terminates because the ledger is frozen after round 1, so every closure shrinks it. An approval whose only remaining items are notes counts as approval. A finding may BLOCK only when it names at least one `blocker_eligibility` category below with its concrete evidence - an IS row no todo closes, no QA scenario proves, or the approach cannot reach for the named user is such a category; every other finding - speculative durability, replay/crash-recovery, schema, CLI-parsing, state-machine, or hardening concerns the accepted scope never required - is recorded as a non-blocking note and becomes implementation/test work, never plan expansion. After round 1 the blocker ledger FREEZES: later rounds verify accepted ledger blockers, regressions introduced by fixes, and new findings that pass eligibility - they never rediscover the plan from scratch. Fixes apply the smallest edit that resolves the cited blocker; neither reviews nor fixes grow the plan's scope. Every reviewer prompt carries this convergence contract alongside the intake contract. On cap exhaustion without approval: STOP, report outstanding blockers, ask the user - continue / accept / adjust.
|
|
217
217
|
|
|
218
218
|
<!-- ulw-plan-review-convergence-contract -->
|
|
219
219
|
```json
|
|
220
220
|
{
|
|
221
|
-
"max_rounds":
|
|
222
|
-
"
|
|
223
|
-
"
|
|
221
|
+
"max_rounds": null,
|
|
222
|
+
"continue_while": "previous_round_raised_new_blocker_eligible_finding_or_closed_ledger_blocker",
|
|
223
|
+
"stop_on": "round_without_new_blocker_eligible_finding_or_ledger_blocker_closure",
|
|
224
|
+
"on_stop_without_approval": "stop_report_outstanding_blockers_ask_user",
|
|
224
225
|
"blocker_eligibility": [
|
|
225
226
|
"explicit_requirement_or_accepted_decision",
|
|
226
227
|
"existing_failing_regression",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// omo-codex-install:
|
|
2
|
+
// omo-codex-install:b408b576ee9f2c827cd2733d966cd724fd27f029332824185037c443d3f8dd57:45ee374af9a88da9712fc3e3f8e220dbdc302cebb6f4025884612f07180b8a02
|
|
3
3
|
var __esm = (fn, res, err) => () => {
|
|
4
4
|
if (fn)
|
|
5
5
|
try {
|
|
@@ -450,6 +450,163 @@ var init_event_id = __esm(() => {
|
|
|
450
450
|
fallbackEventId = createUuidV7Generator();
|
|
451
451
|
});
|
|
452
452
|
|
|
453
|
+
// packages/telemetry-core/src/machine-id.ts
|
|
454
|
+
import { createHash as createHash4 } from "node:crypto";
|
|
455
|
+
import os2 from "node:os";
|
|
456
|
+
function getDefaultTelemetryOsProvider() {
|
|
457
|
+
return os2;
|
|
458
|
+
}
|
|
459
|
+
function getTelemetryDistinctId(machineIdPrefix, osProvider = getDefaultTelemetryOsProvider()) {
|
|
460
|
+
return createHash4("sha256").update(`${machineIdPrefix}${osProvider.hostname()}`).digest("hex");
|
|
461
|
+
}
|
|
462
|
+
var init_machine_id = () => {};
|
|
463
|
+
|
|
464
|
+
// packages/telemetry-core/src/injected-client.ts
|
|
465
|
+
function isTelemetryClientEnabled(input) {
|
|
466
|
+
const env = input.env ?? process.env;
|
|
467
|
+
return !shouldDisableTelemetry({ env, productEnvPrefix: input.product.productEnvPrefix }) && hasTelemetryApiKey(env, input.product.defaultApiKey);
|
|
468
|
+
}
|
|
469
|
+
function createTelemetryClient(input) {
|
|
470
|
+
if (!isTelemetryClientEnabled(input)) {
|
|
471
|
+
return NO_OP_CLIENT;
|
|
472
|
+
}
|
|
473
|
+
const transport = createTransport(input);
|
|
474
|
+
if (transport === null) {
|
|
475
|
+
return NO_OP_CLIENT;
|
|
476
|
+
}
|
|
477
|
+
const sharedProperties = getSharedProperties(input);
|
|
478
|
+
return {
|
|
479
|
+
enabled: true,
|
|
480
|
+
trackActive: ({ dayUTC, distinctId, reason }) => {
|
|
481
|
+
try {
|
|
482
|
+
transport.capture({
|
|
483
|
+
distinctId,
|
|
484
|
+
event: input.product.eventName,
|
|
485
|
+
properties: {
|
|
486
|
+
...sharedProperties,
|
|
487
|
+
$process_person_profile: false,
|
|
488
|
+
day_utc: dayUTC,
|
|
489
|
+
reason
|
|
490
|
+
}
|
|
491
|
+
});
|
|
492
|
+
} catch (error) {
|
|
493
|
+
input.diagnostics?.({
|
|
494
|
+
event: "telemetry_capture_failed",
|
|
495
|
+
source: input.source,
|
|
496
|
+
error,
|
|
497
|
+
errorKind: error instanceof Error ? "error" : "non_error"
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
},
|
|
501
|
+
flush: async () => {
|
|
502
|
+
if (transport.flush === undefined) {
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
await transport.flush();
|
|
506
|
+
},
|
|
507
|
+
shutdown: async () => {
|
|
508
|
+
try {
|
|
509
|
+
await transport.shutdown();
|
|
510
|
+
} catch (error) {
|
|
511
|
+
input.diagnostics?.({
|
|
512
|
+
event: "telemetry_shutdown_failed",
|
|
513
|
+
source: input.source,
|
|
514
|
+
error,
|
|
515
|
+
errorKind: error instanceof Error ? "error" : "non_error"
|
|
516
|
+
});
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
function createTransport(input) {
|
|
522
|
+
const env = input.env ?? process.env;
|
|
523
|
+
const factory = input.transportFactory;
|
|
524
|
+
try {
|
|
525
|
+
return factory(getTelemetryApiKey(env, input.product.defaultApiKey), {
|
|
526
|
+
enableExceptionAutocapture: false,
|
|
527
|
+
enableLocalEvaluation: false,
|
|
528
|
+
strictLocalEvaluation: true,
|
|
529
|
+
disableRemoteConfig: true,
|
|
530
|
+
flushAt: 1,
|
|
531
|
+
flushInterval: 0,
|
|
532
|
+
host: getTelemetryHost(env, input.product.defaultHost),
|
|
533
|
+
disableGeoip: input.product.disableGeoip ?? false,
|
|
534
|
+
...input.product.transportOptions
|
|
535
|
+
});
|
|
536
|
+
} catch (error) {
|
|
537
|
+
input.diagnostics?.({
|
|
538
|
+
event: "telemetry_posthog_init_failed",
|
|
539
|
+
source: input.source,
|
|
540
|
+
error,
|
|
541
|
+
errorKind: error instanceof Error ? "error" : "non_error"
|
|
542
|
+
});
|
|
543
|
+
return null;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
function getSharedProperties(input) {
|
|
547
|
+
const osProvider = input.osProvider ?? getDefaultTelemetryOsProvider();
|
|
548
|
+
const cpuInfo = getSafeCpuInfo(osProvider, input);
|
|
549
|
+
return {
|
|
550
|
+
platform: input.product.platform,
|
|
551
|
+
product_name: input.product.productName,
|
|
552
|
+
package_name: input.product.packageName,
|
|
553
|
+
package_version: input.product.packageVersion,
|
|
554
|
+
runtime: "bun",
|
|
555
|
+
runtime_version: process.versions.bun ?? process.version,
|
|
556
|
+
source: input.source,
|
|
557
|
+
$os: osProvider.platform(),
|
|
558
|
+
$os_version: osProvider.release(),
|
|
559
|
+
os_arch: osProvider.arch(),
|
|
560
|
+
os_type: osProvider.type(),
|
|
561
|
+
cpu_count: cpuInfo.count,
|
|
562
|
+
cpu_model: cpuInfo.model,
|
|
563
|
+
total_memory_gb: Math.round(osProvider.totalmem() / 1024 / 1024 / 1024),
|
|
564
|
+
locale: Intl.DateTimeFormat().resolvedOptions().locale,
|
|
565
|
+
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
566
|
+
shell: process.env.SHELL,
|
|
567
|
+
ci: Boolean(process.env.CI),
|
|
568
|
+
terminal: process.env.TERM_PROGRAM,
|
|
569
|
+
...input.product.additionalProperties
|
|
570
|
+
};
|
|
571
|
+
}
|
|
572
|
+
function getSafeCpuInfo(osProvider, input) {
|
|
573
|
+
try {
|
|
574
|
+
const cpuInfo = osProvider.cpus();
|
|
575
|
+
return {
|
|
576
|
+
count: cpuInfo.length,
|
|
577
|
+
model: cpuInfo[0]?.model
|
|
578
|
+
};
|
|
579
|
+
} catch (error) {
|
|
580
|
+
input.diagnostics?.({
|
|
581
|
+
event: "telemetry_cpu_info_unavailable",
|
|
582
|
+
source: "shared",
|
|
583
|
+
error,
|
|
584
|
+
errorKind: error instanceof Error ? "error" : "non_error"
|
|
585
|
+
});
|
|
586
|
+
return {
|
|
587
|
+
count: 0,
|
|
588
|
+
model: undefined
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
var NO_OP_CLIENT;
|
|
593
|
+
var init_injected_client = __esm(() => {
|
|
594
|
+
init_env();
|
|
595
|
+
init_machine_id();
|
|
596
|
+
NO_OP_CLIENT = {
|
|
597
|
+
enabled: false,
|
|
598
|
+
trackActive: () => {
|
|
599
|
+
return;
|
|
600
|
+
},
|
|
601
|
+
flush: async () => {
|
|
602
|
+
return;
|
|
603
|
+
},
|
|
604
|
+
shutdown: async () => {
|
|
605
|
+
return;
|
|
606
|
+
}
|
|
607
|
+
};
|
|
608
|
+
});
|
|
609
|
+
|
|
453
610
|
// node_modules/.bun/posthog-node@5.52.4/node_modules/posthog-node/dist/extensions/error-tracking/modifiers/module.node.mjs
|
|
454
611
|
import { dirname as dirname11, posix as posix3, sep as sep7 } from "node:path";
|
|
455
612
|
function createModulerModifier() {
|
|
@@ -9823,18 +9980,7 @@ var init_index_node = __esm(() => {
|
|
|
9823
9980
|
};
|
|
9824
9981
|
});
|
|
9825
9982
|
|
|
9826
|
-
// packages/telemetry-core/src/
|
|
9827
|
-
import { createHash as createHash4 } from "node:crypto";
|
|
9828
|
-
import os2 from "node:os";
|
|
9829
|
-
function getDefaultTelemetryOsProvider() {
|
|
9830
|
-
return os2;
|
|
9831
|
-
}
|
|
9832
|
-
function getTelemetryDistinctId(machineIdPrefix, osProvider = getDefaultTelemetryOsProvider()) {
|
|
9833
|
-
return createHash4("sha256").update(`${machineIdPrefix}${osProvider.hostname()}`).digest("hex");
|
|
9834
|
-
}
|
|
9835
|
-
var init_machine_id = () => {};
|
|
9836
|
-
|
|
9837
|
-
// packages/telemetry-core/src/posthog-client.ts
|
|
9983
|
+
// packages/telemetry-core/src/posthog-transport.ts
|
|
9838
9984
|
class PostHogTelemetryTransport {
|
|
9839
9985
|
#client;
|
|
9840
9986
|
constructor(apiKey, options) {
|
|
@@ -9853,161 +9999,20 @@ class PostHogTelemetryTransport {
|
|
|
9853
9999
|
function createDefaultPostHogTransport(apiKey, options) {
|
|
9854
10000
|
return new PostHogTelemetryTransport(apiKey, options);
|
|
9855
10001
|
}
|
|
9856
|
-
|
|
9857
|
-
const env = input.env ?? process.env;
|
|
9858
|
-
return !shouldDisableTelemetry({ env, productEnvPrefix: input.product.productEnvPrefix }) && hasTelemetryApiKey(env, input.product.defaultApiKey);
|
|
9859
|
-
}
|
|
9860
|
-
function createTelemetryClient(input) {
|
|
9861
|
-
if (!isTelemetryClientEnabled(input)) {
|
|
9862
|
-
return NO_OP_CLIENT;
|
|
9863
|
-
}
|
|
9864
|
-
const transport = createTransport(input);
|
|
9865
|
-
if (transport === null) {
|
|
9866
|
-
return NO_OP_CLIENT;
|
|
9867
|
-
}
|
|
9868
|
-
const sharedProperties = getSharedProperties(input);
|
|
9869
|
-
return {
|
|
9870
|
-
enabled: true,
|
|
9871
|
-
trackActive: ({ dayUTC, distinctId, reason }) => {
|
|
9872
|
-
try {
|
|
9873
|
-
transport.capture({
|
|
9874
|
-
distinctId,
|
|
9875
|
-
event: input.product.eventName,
|
|
9876
|
-
properties: {
|
|
9877
|
-
...sharedProperties,
|
|
9878
|
-
$process_person_profile: false,
|
|
9879
|
-
day_utc: dayUTC,
|
|
9880
|
-
reason
|
|
9881
|
-
}
|
|
9882
|
-
});
|
|
9883
|
-
} catch (error) {
|
|
9884
|
-
input.diagnostics?.({
|
|
9885
|
-
event: "telemetry_capture_failed",
|
|
9886
|
-
source: input.source,
|
|
9887
|
-
error,
|
|
9888
|
-
errorKind: error instanceof Error ? "error" : "non_error"
|
|
9889
|
-
});
|
|
9890
|
-
}
|
|
9891
|
-
},
|
|
9892
|
-
flush: async () => {
|
|
9893
|
-
if (transport.flush === undefined) {
|
|
9894
|
-
return;
|
|
9895
|
-
}
|
|
9896
|
-
await transport.flush();
|
|
9897
|
-
},
|
|
9898
|
-
shutdown: async () => {
|
|
9899
|
-
try {
|
|
9900
|
-
await transport.shutdown();
|
|
9901
|
-
} catch (error) {
|
|
9902
|
-
input.diagnostics?.({
|
|
9903
|
-
event: "telemetry_shutdown_failed",
|
|
9904
|
-
source: input.source,
|
|
9905
|
-
error,
|
|
9906
|
-
errorKind: error instanceof Error ? "error" : "non_error"
|
|
9907
|
-
});
|
|
9908
|
-
}
|
|
9909
|
-
}
|
|
9910
|
-
};
|
|
9911
|
-
}
|
|
9912
|
-
function createTransport(input) {
|
|
9913
|
-
const env = input.env ?? process.env;
|
|
9914
|
-
const factory = input.transportFactory ?? createDefaultPostHogTransport;
|
|
9915
|
-
try {
|
|
9916
|
-
return factory(getTelemetryApiKey(env, input.product.defaultApiKey), {
|
|
9917
|
-
enableExceptionAutocapture: false,
|
|
9918
|
-
enableLocalEvaluation: false,
|
|
9919
|
-
strictLocalEvaluation: true,
|
|
9920
|
-
disableRemoteConfig: true,
|
|
9921
|
-
flushAt: 1,
|
|
9922
|
-
flushInterval: 0,
|
|
9923
|
-
host: getTelemetryHost(env, input.product.defaultHost),
|
|
9924
|
-
disableGeoip: input.product.disableGeoip ?? false,
|
|
9925
|
-
...input.product.transportOptions
|
|
9926
|
-
});
|
|
9927
|
-
} catch (error) {
|
|
9928
|
-
input.diagnostics?.({
|
|
9929
|
-
event: "telemetry_posthog_init_failed",
|
|
9930
|
-
source: input.source,
|
|
9931
|
-
error,
|
|
9932
|
-
errorKind: error instanceof Error ? "error" : "non_error"
|
|
9933
|
-
});
|
|
9934
|
-
return null;
|
|
9935
|
-
}
|
|
9936
|
-
}
|
|
9937
|
-
function getSharedProperties(input) {
|
|
9938
|
-
const osProvider = input.osProvider ?? getDefaultTelemetryOsProvider();
|
|
9939
|
-
const cpuInfo = getSafeCpuInfo(osProvider, input);
|
|
9940
|
-
return {
|
|
9941
|
-
platform: input.product.platform,
|
|
9942
|
-
product_name: input.product.productName,
|
|
9943
|
-
package_name: input.product.packageName,
|
|
9944
|
-
package_version: input.product.packageVersion,
|
|
9945
|
-
runtime: "bun",
|
|
9946
|
-
runtime_version: process.versions.bun ?? process.version,
|
|
9947
|
-
source: input.source,
|
|
9948
|
-
$os: osProvider.platform(),
|
|
9949
|
-
$os_version: osProvider.release(),
|
|
9950
|
-
os_arch: osProvider.arch(),
|
|
9951
|
-
os_type: osProvider.type(),
|
|
9952
|
-
cpu_count: cpuInfo.count,
|
|
9953
|
-
cpu_model: cpuInfo.model,
|
|
9954
|
-
total_memory_gb: Math.round(osProvider.totalmem() / 1024 / 1024 / 1024),
|
|
9955
|
-
locale: Intl.DateTimeFormat().resolvedOptions().locale,
|
|
9956
|
-
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
9957
|
-
shell: process.env.SHELL,
|
|
9958
|
-
ci: Boolean(process.env.CI),
|
|
9959
|
-
terminal: process.env.TERM_PROGRAM,
|
|
9960
|
-
...input.product.additionalProperties
|
|
9961
|
-
};
|
|
9962
|
-
}
|
|
9963
|
-
function getSafeCpuInfo(osProvider, input) {
|
|
9964
|
-
try {
|
|
9965
|
-
const cpuInfo = osProvider.cpus();
|
|
9966
|
-
return {
|
|
9967
|
-
count: cpuInfo.length,
|
|
9968
|
-
model: cpuInfo[0]?.model
|
|
9969
|
-
};
|
|
9970
|
-
} catch (error) {
|
|
9971
|
-
input.diagnostics?.({
|
|
9972
|
-
event: "telemetry_cpu_info_unavailable",
|
|
9973
|
-
source: "shared",
|
|
9974
|
-
error,
|
|
9975
|
-
errorKind: error instanceof Error ? "error" : "non_error"
|
|
9976
|
-
});
|
|
9977
|
-
return {
|
|
9978
|
-
count: 0,
|
|
9979
|
-
model: undefined
|
|
9980
|
-
};
|
|
9981
|
-
}
|
|
9982
|
-
}
|
|
9983
|
-
var NO_OP_CLIENT;
|
|
9984
|
-
var init_posthog_client = __esm(() => {
|
|
10002
|
+
var init_posthog_transport = __esm(() => {
|
|
9985
10003
|
init_index_node();
|
|
9986
|
-
init_env();
|
|
9987
|
-
init_machine_id();
|
|
9988
|
-
NO_OP_CLIENT = {
|
|
9989
|
-
enabled: false,
|
|
9990
|
-
trackActive: () => {
|
|
9991
|
-
return;
|
|
9992
|
-
},
|
|
9993
|
-
flush: async () => {
|
|
9994
|
-
return;
|
|
9995
|
-
},
|
|
9996
|
-
shutdown: async () => {
|
|
9997
|
-
return;
|
|
9998
|
-
}
|
|
9999
|
-
};
|
|
10000
10004
|
});
|
|
10001
10005
|
|
|
10002
10006
|
// packages/telemetry-core/src/events.ts
|
|
10003
|
-
var
|
|
10004
|
-
|
|
10005
|
-
|
|
10006
|
-
|
|
10007
|
-
|
|
10008
|
-
|
|
10009
|
-
|
|
10010
|
-
|
|
10007
|
+
var init_events = () => {};
|
|
10008
|
+
|
|
10009
|
+
// packages/telemetry-core/src/posthog-client.ts
|
|
10010
|
+
function createTelemetryClient2(input) {
|
|
10011
|
+
return createTelemetryClient({ ...input, transportFactory: input.transportFactory ?? createDefaultPostHogTransport });
|
|
10012
|
+
}
|
|
10013
|
+
var init_posthog_client = __esm(() => {
|
|
10014
|
+
init_injected_client();
|
|
10015
|
+
init_posthog_transport();
|
|
10011
10016
|
});
|
|
10012
10017
|
|
|
10013
10018
|
// packages/telemetry-core/src/record-daily-active.ts
|
|
@@ -10031,7 +10036,7 @@ var package_default;
|
|
|
10031
10036
|
var init_package = __esm(() => {
|
|
10032
10037
|
package_default = {
|
|
10033
10038
|
name: "@oh-my-opencode/omo-codex",
|
|
10034
|
-
version: "5.1.
|
|
10039
|
+
version: "5.1.40",
|
|
10035
10040
|
type: "module",
|
|
10036
10041
|
private: true,
|
|
10037
10042
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -10161,7 +10166,7 @@ function resolveActivityStateProvider(options) {
|
|
|
10161
10166
|
return () => getPostHogActivityCaptureState(options.now ?? new Date);
|
|
10162
10167
|
}
|
|
10163
10168
|
function createPostHogClient(source, options = {}) {
|
|
10164
|
-
const client =
|
|
10169
|
+
const client = createTelemetryClient2({
|
|
10165
10170
|
diagnostics: writeTelemetryDiagnostic2,
|
|
10166
10171
|
env: options.env ?? process.env,
|
|
10167
10172
|
osProvider: options.osProvider ?? resolveOsProvider(),
|
|
@@ -19458,14 +19463,20 @@ var OmoComputerSettingsLayerSchema = object({
|
|
|
19458
19463
|
var OmoComputerSettingsSchema = OmoComputerSettingsLayerSchema;
|
|
19459
19464
|
|
|
19460
19465
|
// packages/omo-config-core/src/schema/git-master.ts
|
|
19466
|
+
var GIT_ENV_ASSIGNMENT_PATTERN = /^(?:[A-Za-z_][A-Za-z0-9_]*=[A-Za-z0-9_-]*)(?: [A-Za-z_][A-Za-z0-9_]*=[A-Za-z0-9_-]*)*$/;
|
|
19467
|
+
var GitEnvPrefixSchema = string2().refine((value) => value === "" || GIT_ENV_ASSIGNMENT_PATTERN.test(value), {
|
|
19468
|
+
message: 'git_env_prefix must be empty or use shell-safe env assignments like "GIT_MASTER=1"'
|
|
19469
|
+
});
|
|
19461
19470
|
var OmoGitMasterSettingsShape = {
|
|
19462
19471
|
commit_footer: union([boolean2(), string2()]),
|
|
19463
|
-
include_co_authored_by: boolean2()
|
|
19472
|
+
include_co_authored_by: boolean2(),
|
|
19473
|
+
git_env_prefix: GitEnvPrefixSchema
|
|
19464
19474
|
};
|
|
19465
19475
|
var OmoGitMasterSettingsLayerSchema = object(OmoGitMasterSettingsShape).partial().strict();
|
|
19466
19476
|
var OmoGitMasterSettingsSchema = OmoGitMasterSettingsLayerSchema.extend({
|
|
19467
19477
|
commit_footer: union([boolean2(), string2()]).default(false),
|
|
19468
|
-
include_co_authored_by: boolean2().default(false)
|
|
19478
|
+
include_co_authored_by: boolean2().default(false),
|
|
19479
|
+
git_env_prefix: GitEnvPrefixSchema.default("GIT_MASTER=1")
|
|
19469
19480
|
}).strict();
|
|
19470
19481
|
|
|
19471
19482
|
// packages/omo-config-core/src/schema/harness.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-master
|
|
3
|
-
description: "
|
|
3
|
+
description: "MUST USE for ANY git operations: atomic commits, rebase/squash/fixup, and history search (blame, bisect, log -S, reflog). Load it before running git yourself, or pass load_skills=['git-master'] to the task that commits. Triggers: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Git Master
|
|
@@ -34,7 +34,7 @@ Example opening (adapt the wording, keep every commitment):
|
|
|
34
34
|
|
|
35
35
|
## INTENT ROUTING - pick ONE intent reference
|
|
36
36
|
|
|
37
|
-
**Review modifiers are a gate trigger, not a style cue.** If the user says "high accuracy", "ultra high accuracy", "고정밀", "deep review", or equivalent - in ANY turn, even appended to a follow-up question and even after the plan already exists - set `review_required: true` in the draft: the dual high-accuracy review (native `momus` + the independent Oracle review) is now REQUIRED before handoff, and if the plan already exists you run it this same turn. The review runs under the bounded convergence contract in `full-workflow.md`: a
|
|
37
|
+
**Review modifiers are a gate trigger, not a style cue.** If the user says "high accuracy", "ultra high accuracy", "고정밀", "deep review", or equivalent - in ANY turn, even appended to a follow-up question and even after the plan already exists - set `review_required: true` in the draft: the dual high-accuracy review (native `momus` + the independent Oracle review) is now REQUIRED before handoff, and if the plan already exists you run it this same turn. The review runs under the bounded convergence contract in `full-workflow.md`: convergence-bounded rounds (another round only while the previous one raised a new blocker-eligible finding or closed a ledger blocker; a round with neither that still does not approve stops the review), evidence-backed blocker eligibility, and approval-with-notes counting as approval. Answering the current question more carefully does NOT satisfy it. This does NOT choose CLEAR/UNCLEAR and does NOT suppress interview.
|
|
38
38
|
|
|
39
39
|
After grounding, make ONE judgment, record `intent: clear|unclear` plus `review_required`, **ANNOUNCE both to the user in one line**, then load ONE intent reference (you ALSO read `references/full-workflow.md` for the shared mechanics - see below). The test keys on whether the desired **OUTCOME** is clear, NOT on request length. This verdict line and the opening announcement above are the two mandatory user-visible signals of a planning session - it tells the user whether they will be interviewed and whether high-accuracy review is already requested; never skip either.
|
|
40
40
|
|