oh-my-codex 0.18.12 → 0.18.13
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/Cargo.lock +6 -6
- package/Cargo.toml +1 -1
- package/README.md +7 -0
- package/dist/autopilot/__tests__/ralplan-gate.test.js +621 -0
- package/dist/autopilot/__tests__/ralplan-gate.test.js.map +1 -1
- package/dist/autopilot/ralplan-gate.d.ts.map +1 -1
- package/dist/autopilot/ralplan-gate.js +32 -18
- package/dist/autopilot/ralplan-gate.js.map +1 -1
- package/dist/cli/__tests__/doctor-invalid-config.test.js +35 -0
- package/dist/cli/__tests__/doctor-invalid-config.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +54 -1
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/resume.test.js +217 -1
- package/dist/cli/__tests__/resume.test.js.map +1 -1
- package/dist/cli/__tests__/session-search-help.test.js +3 -2
- package/dist/cli/__tests__/session-search-help.test.js.map +1 -1
- package/dist/cli/__tests__/session-search.test.js +64 -2
- package/dist/cli/__tests__/session-search.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +6 -5
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js +74 -0
- package/dist/cli/__tests__/setup-prompts-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.js +45 -0
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/update.test.js +5 -2
- package/dist/cli/__tests__/update.test.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +9 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +9 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +209 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/project-runtime-codex-homes.d.ts +6 -0
- package/dist/cli/project-runtime-codex-homes.d.ts.map +1 -0
- package/dist/cli/project-runtime-codex-homes.js +27 -0
- package/dist/cli/project-runtime-codex-homes.js.map +1 -0
- package/dist/cli/session-search.d.ts.map +1 -1
- package/dist/cli/session-search.js +8 -1
- package/dist/cli/session-search.js.map +1 -1
- package/dist/cli/setup.d.ts +1 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +168 -4
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +2 -0
- package/dist/cli/update.js.map +1 -1
- package/dist/config/__tests__/codex-hooks.test.js +38 -24
- package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
- package/dist/config/codex-hooks.d.ts +6 -0
- package/dist/config/codex-hooks.d.ts.map +1 -1
- package/dist/config/codex-hooks.js +34 -49
- package/dist/config/codex-hooks.js.map +1 -1
- package/dist/pipeline/__tests__/orchestrator.test.js +125 -0
- package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +109 -0
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/pipeline/orchestrator.js +7 -0
- package/dist/pipeline/orchestrator.js.map +1 -1
- package/dist/ralplan/__tests__/consensus-gate.test.js +440 -1
- package/dist/ralplan/__tests__/consensus-gate.test.js.map +1 -1
- package/dist/ralplan/consensus-gate.d.ts +2 -0
- package/dist/ralplan/consensus-gate.d.ts.map +1 -1
- package/dist/ralplan/consensus-gate.js +173 -71
- package/dist/ralplan/consensus-gate.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +273 -0
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +56 -12
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/codex-native-pre-post.d.ts +1 -0
- package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
- package/dist/scripts/codex-native-pre-post.js +130 -0
- package/dist/scripts/codex-native-pre-post.js.map +1 -1
- package/dist/session-history/__tests__/search.test.js +166 -0
- package/dist/session-history/__tests__/search.test.js.map +1 -1
- package/dist/session-history/search.d.ts +7 -0
- package/dist/session-history/search.d.ts.map +1 -1
- package/dist/session-history/search.js +83 -24
- package/dist/session-history/search.js.map +1 -1
- package/dist/sidecar/__tests__/collector.test.js +60 -0
- package/dist/sidecar/__tests__/collector.test.js.map +1 -1
- package/dist/sidecar/collector.d.ts.map +1 -1
- package/dist/sidecar/collector.js +3 -6
- package/dist/sidecar/collector.js.map +1 -1
- package/dist/verification/__tests__/ci-rust-gates.test.js +4 -2
- package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js +71 -3
- package/dist/verification/__tests__/dev-merge-issue-close-workflow.test.js.map +1 -1
- package/package.json +1 -1
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/src/scripts/__tests__/codex-native-hook.test.ts +363 -0
- package/src/scripts/codex-native-hook.ts +68 -18
- package/src/scripts/codex-native-pre-post.ts +137 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-native-hook.d.ts","sourceRoot":"","sources":["../../src/scripts/codex-native-hook.ts"],"names":[],"mappings":"AA2CA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"codex-native-hook.d.ts","sourceRoot":"","sources":["../../src/scripts/codex-native-hook.ts"],"names":[],"mappings":"AA2CA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AAgCtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAwClE,KAAK,kBAAkB,GACnB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,YAAY,GACZ,aAAa,GACb,MAAM,CAAC;AAEX,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD,UAAU,yBAAyB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6BAA6B,CAAC,EAAE,OAAO,2BAA2B,CAAC;CACpE;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C;AAyZD,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,kBAAkB,GAAG,IAAI,GACvC,MAAM,GAAG,IAAI,CAmBf;AAwoBD,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC/C,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC,GACL,MAAM,GAAG,IAAI,CAuBf;AA6+BD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMnE;AAg6DD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAoVnC;AA6BD,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAGT;AAyMD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAyC3D"}
|
|
@@ -17,7 +17,7 @@ import { detectKeywords, detectPrimaryKeyword, recordSkillActivation, } from "..
|
|
|
17
17
|
import { buildDeepInterviewConfigInstruction } from "../hooks/deep-interview-config-instruction.js";
|
|
18
18
|
import { readTeamModeConfig } from "../config/team-mode.js";
|
|
19
19
|
import { detectNativeStopStallPattern, loadAutoNudgeConfig, normalizeAutoNudgeSignatureText, resolveEffectiveAutoNudgeResponse, } from "./notify-hook/auto-nudge.js";
|
|
20
|
-
import { SLOPPY_FALLBACK_GROUNDING_PATTERNS, SLOPPY_FALLBACK_IMPLEMENTATION_CONTEXT_PATTERNS, SLOPPY_FALLBACK_PHRASE_PATTERNS, buildNativePostToolUseOutput, buildNativePreToolUseOutput, detectMcpTransportFailure, hasAnyPattern, } from "./codex-native-pre-post.js";
|
|
20
|
+
import { SLOPPY_FALLBACK_GROUNDING_PATTERNS, SLOPPY_FALLBACK_IMPLEMENTATION_CONTEXT_PATTERNS, SLOPPY_FALLBACK_PHRASE_PATTERNS, buildNativePostToolUseOutput, buildNativePreToolUseOutput, commandInvokesApplyPatch, detectMcpTransportFailure, hasAnyPattern, } from "./codex-native-pre-post.js";
|
|
21
21
|
import { handleTeamWorkerPostToolUseSuccess } from "./notify-hook/team-worker-posttooluse.js";
|
|
22
22
|
import { maybeNudgeLeaderForAllowedWorkerStop } from "./notify-hook/team-worker-stop.js";
|
|
23
23
|
import { resolveCodexExecutionSurface, } from "./codex-execution-surface.js";
|
|
@@ -2261,6 +2261,31 @@ function isNullDeviceRedirectTarget(target) {
|
|
|
2261
2261
|
const normalized = target.trim().replace(/^['"]|['"]$/g, "").toLowerCase();
|
|
2262
2262
|
return normalized === "/dev/null" || normalized === "nul";
|
|
2263
2263
|
}
|
|
2264
|
+
// Collects same-command literal variable assignments (`NAME="value"`), skipping
|
|
2265
|
+
// any value that involves expansion (`$`, backticks) so unresolved/dynamic
|
|
2266
|
+
// targets stay conservatively blocked.
|
|
2267
|
+
function extractCommandLiteralAssignments(command) {
|
|
2268
|
+
const assignments = new Map();
|
|
2269
|
+
const pattern = /(?:^|[\n;&|(]|&&|\|\|)\s*([A-Za-z_][A-Za-z0-9_]*)=(?:"([^"$`]*)"|'([^']*)'|([^\s"'$`;&|<>]+))/g;
|
|
2270
|
+
for (const match of command.matchAll(pattern)) {
|
|
2271
|
+
const name = safeString(match[1]).trim();
|
|
2272
|
+
if (!name)
|
|
2273
|
+
continue;
|
|
2274
|
+
const value = match[2] ?? match[3] ?? match[4] ?? "";
|
|
2275
|
+
assignments.set(name, value);
|
|
2276
|
+
}
|
|
2277
|
+
return assignments;
|
|
2278
|
+
}
|
|
2279
|
+
// Resolves a redirect/tee target of the form `$NAME`/`${NAME}` against
|
|
2280
|
+
// same-command literal assignments; non-variable or unresolved targets are
|
|
2281
|
+
// returned unchanged so they remain subject to the allowed-path check.
|
|
2282
|
+
function resolveCommandRedirectTarget(target, assignments) {
|
|
2283
|
+
const variableMatch = target.match(/^\$\{?([A-Za-z_][A-Za-z0-9_]*)\}?$/);
|
|
2284
|
+
if (!variableMatch)
|
|
2285
|
+
return target;
|
|
2286
|
+
const resolved = assignments.get(safeString(variableMatch[1]));
|
|
2287
|
+
return resolved !== undefined ? resolved : target;
|
|
2288
|
+
}
|
|
2264
2289
|
function extractDeepInterviewCommandRedirectTargets(command) {
|
|
2265
2290
|
const targets = [];
|
|
2266
2291
|
for (const match of command.matchAll(/(?:^|[^>])>{1,2}\s*(["']?)([^\s&|;<>]+)\1/g)) {
|
|
@@ -2271,7 +2296,7 @@ function extractDeepInterviewCommandRedirectTargets(command) {
|
|
|
2271
2296
|
return targets;
|
|
2272
2297
|
}
|
|
2273
2298
|
function commandHasDeepInterviewWriteIntent(command) {
|
|
2274
|
-
return
|
|
2299
|
+
return commandInvokesApplyPatch(command)
|
|
2275
2300
|
|| extractDeepInterviewCommandRedirectTargets(command).length > 0
|
|
2276
2301
|
|| /\btee\s+(?:-a\s+)?[^\s&|;]+/.test(command)
|
|
2277
2302
|
|| /\bsed\s+(?:[^\n;&|]*\s)?-i(?:\b|['"])/.test(command)
|
|
@@ -2279,11 +2304,13 @@ function commandHasDeepInterviewWriteIntent(command) {
|
|
|
2279
2304
|
|| /\b(?:git\s+(?:checkout|switch|restore|reset|apply|am|merge|rebase)|npm\s+(?:install|i|ci)|pnpm\s+(?:install|i)|yarn\s+(?:install|add))\b/.test(command);
|
|
2280
2305
|
}
|
|
2281
2306
|
function extractDeepInterviewCommandWriteTargets(command) {
|
|
2282
|
-
const
|
|
2307
|
+
const assignments = extractCommandLiteralAssignments(command);
|
|
2308
|
+
const targets = extractDeepInterviewCommandRedirectTargets(command)
|
|
2309
|
+
.map((target) => resolveCommandRedirectTarget(target, assignments));
|
|
2283
2310
|
for (const match of command.matchAll(/\btee\s+(?:-a\s+)?(["']?)([^\s&|;<>]+)\1/g)) {
|
|
2284
2311
|
const candidate = safeString(match[2]).trim();
|
|
2285
2312
|
if (candidate)
|
|
2286
|
-
targets.push(candidate);
|
|
2313
|
+
targets.push(resolveCommandRedirectTarget(candidate, assignments));
|
|
2287
2314
|
}
|
|
2288
2315
|
return targets;
|
|
2289
2316
|
}
|
|
@@ -3293,18 +3320,35 @@ export async function dispatchCodexNativeHook(payload, options = {}) {
|
|
|
3293
3320
|
if (hookEventName === "SessionStart" && nativeSessionId) {
|
|
3294
3321
|
const transcriptPath = safeString(payload.transcript_path ?? payload.transcriptPath).trim();
|
|
3295
3322
|
const subagentSessionStart = readNativeSubagentSessionStartMetadata(transcriptPath);
|
|
3296
|
-
if (subagentSessionStart
|
|
3323
|
+
if (subagentSessionStart) {
|
|
3324
|
+
// A native child/subagent SessionStart carries a parent_thread_id in its
|
|
3325
|
+
// transcript session_meta. Treat it as a child-agent lifecycle event for
|
|
3326
|
+
// notification suppression and subagent tracking even when the canonical
|
|
3327
|
+
// leader session has not been reconciled yet (#2831). A child start must
|
|
3328
|
+
// never promote itself into a root/leader session or emit an independent
|
|
3329
|
+
// session-start notification at session/minimal verbosity.
|
|
3297
3330
|
isSubagentSessionStart = true;
|
|
3298
|
-
|
|
3299
|
-
|
|
3300
|
-
|
|
3301
|
-
|
|
3331
|
+
if (canonicalSessionId) {
|
|
3332
|
+
const belongsToCanonicalSession = await nativeSubagentSessionStartBelongsToCanonicalSession(cwd, canonicalSessionId, currentSessionState, subagentSessionStart);
|
|
3333
|
+
if (belongsToCanonicalSession) {
|
|
3334
|
+
resolvedNativeSessionId = nativeSessionId;
|
|
3335
|
+
await recordNativeSubagentSessionStart(cwd, canonicalSessionId, nativeSessionId, subagentSessionStart, transcriptPath);
|
|
3336
|
+
}
|
|
3337
|
+
else {
|
|
3338
|
+
skipCanonicalSessionStartContext = true;
|
|
3339
|
+
resolvedNativeSessionId =
|
|
3340
|
+
safeString(currentSessionState?.native_session_id).trim() || nativeSessionId;
|
|
3341
|
+
await recordIgnoredNativeSubagentSessionStart(cwd, canonicalSessionId, nativeSessionId, subagentSessionStart, transcriptPath);
|
|
3342
|
+
}
|
|
3302
3343
|
}
|
|
3303
3344
|
else {
|
|
3345
|
+
// No canonical leader session is resolved in this worktree yet. Still
|
|
3346
|
+
// register the child thread under its parent so its later Stop is
|
|
3347
|
+
// recognized as subagent-scoped, skip leader SessionStart context, and
|
|
3348
|
+
// do not reconcile the child as a new root session.
|
|
3304
3349
|
skipCanonicalSessionStartContext = true;
|
|
3305
|
-
resolvedNativeSessionId =
|
|
3306
|
-
|
|
3307
|
-
await recordIgnoredNativeSubagentSessionStart(cwd, canonicalSessionId, nativeSessionId, subagentSessionStart, transcriptPath);
|
|
3350
|
+
resolvedNativeSessionId = nativeSessionId;
|
|
3351
|
+
await recordNativeSubagentSessionStart(cwd, canonicalSessionId, nativeSessionId, subagentSessionStart, transcriptPath);
|
|
3308
3352
|
}
|
|
3309
3353
|
}
|
|
3310
3354
|
else {
|