oh-my-codex 0.18.2 → 0.18.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.toml +1 -1
- package/dist/agents/__tests__/definitions.test.js +9 -0
- package/dist/agents/__tests__/definitions.test.js.map +1 -1
- package/dist/agents/__tests__/native-config.test.js +1 -0
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +10 -0
- package/dist/agents/definitions.js.map +1 -1
- package/dist/auth/__tests__/config-sessions.test.d.ts +2 -0
- package/dist/auth/__tests__/config-sessions.test.d.ts.map +1 -0
- package/dist/auth/__tests__/config-sessions.test.js +48 -0
- package/dist/auth/__tests__/config-sessions.test.js.map +1 -0
- package/dist/auth/__tests__/quota-rotation.test.d.ts +2 -0
- package/dist/auth/__tests__/quota-rotation.test.d.ts.map +1 -0
- package/dist/auth/__tests__/quota-rotation.test.js +33 -0
- package/dist/auth/__tests__/quota-rotation.test.js.map +1 -0
- package/dist/auth/__tests__/redact.test.d.ts +2 -0
- package/dist/auth/__tests__/redact.test.d.ts.map +1 -0
- package/dist/auth/__tests__/redact.test.js +20 -0
- package/dist/auth/__tests__/redact.test.js.map +1 -0
- package/dist/auth/__tests__/storage.test.d.ts +2 -0
- package/dist/auth/__tests__/storage.test.d.ts.map +1 -0
- package/dist/auth/__tests__/storage.test.js +108 -0
- package/dist/auth/__tests__/storage.test.js.map +1 -0
- package/dist/auth/config.d.ts +9 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +77 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/hotswap.d.ts +36 -0
- package/dist/auth/hotswap.d.ts.map +1 -0
- package/dist/auth/hotswap.js +159 -0
- package/dist/auth/hotswap.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/paths.d.ts +12 -0
- package/dist/auth/paths.d.ts.map +1 -0
- package/dist/auth/paths.js +78 -0
- package/dist/auth/paths.js.map +1 -0
- package/dist/auth/quota-detector.d.ts +10 -0
- package/dist/auth/quota-detector.d.ts.map +1 -0
- package/dist/auth/quota-detector.js +40 -0
- package/dist/auth/quota-detector.js.map +1 -0
- package/dist/auth/redact.d.ts +2 -0
- package/dist/auth/redact.d.ts.map +1 -0
- package/dist/auth/redact.js +26 -0
- package/dist/auth/redact.js.map +1 -0
- package/dist/auth/rotation.d.ts +9 -0
- package/dist/auth/rotation.d.ts.map +1 -0
- package/dist/auth/rotation.js +26 -0
- package/dist/auth/rotation.js.map +1 -0
- package/dist/auth/sessions.d.ts +15 -0
- package/dist/auth/sessions.d.ts.map +1 -0
- package/dist/auth/sessions.js +62 -0
- package/dist/auth/sessions.js.map +1 -0
- package/dist/auth/storage.d.ts +27 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +111 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/cli/__tests__/auth.test.d.ts +2 -0
- package/dist/cli/__tests__/auth.test.d.ts.map +1 -0
- package/dist/cli/__tests__/auth.test.js +168 -0
- package/dist/cli/__tests__/auth.test.js.map +1 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js +51 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/explore.test.js +20 -0
- package/dist/cli/__tests__/explore.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +10 -0
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/nested-help-routing.test.js +1 -0
- package/dist/cli/__tests__/nested-help-routing.test.js.map +1 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +30 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +47 -0
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/auth.d.ts +4 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +89 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +19 -7
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/explore.d.ts.map +1 -1
- package/dist/cli/explore.js +12 -0
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +20 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +104 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +11 -3
- package/dist/cli/setup.js.map +1 -1
- package/dist/config/__tests__/deep-interview.test.d.ts +2 -0
- package/dist/config/__tests__/deep-interview.test.d.ts.map +1 -0
- package/dist/config/__tests__/deep-interview.test.js +239 -0
- package/dist/config/__tests__/deep-interview.test.js.map +1 -0
- package/dist/config/__tests__/generator-idempotent.test.js +123 -0
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/deep-interview.d.ts +22 -0
- package/dist/config/deep-interview.d.ts.map +1 -0
- package/dist/config/deep-interview.js +151 -0
- package/dist/config/deep-interview.js.map +1 -0
- package/dist/config/generator.d.ts +5 -2
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +106 -36
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +2 -0
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/explore-routing.test.js +1 -0
- package/dist/hooks/__tests__/explore-routing.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +301 -0
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/deep-interview-config-instruction.d.ts +3 -0
- package/dist/hooks/deep-interview-config-instruction.d.ts.map +1 -0
- package/dist/hooks/deep-interview-config-instruction.js +47 -0
- package/dist/hooks/deep-interview-config-instruction.js.map +1 -0
- package/dist/hooks/explore-routing.d.ts.map +1 -1
- package/dist/hooks/explore-routing.js +1 -0
- package/dist/hooks/explore-routing.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +5 -0
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +52 -8
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hud/__tests__/hud-tmux-injection.test.js +4 -4
- package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +94 -9
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/tmux.test.js +103 -1
- package/dist/hud/__tests__/tmux.test.js.map +1 -1
- package/dist/hud/reconcile.d.ts +1 -1
- package/dist/hud/reconcile.d.ts.map +1 -1
- package/dist/hud/reconcile.js +8 -0
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/hud/tmux.d.ts +7 -0
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +46 -9
- package/dist/hud/tmux.js.map +1 -1
- package/dist/question/deep-interview.d.ts +2 -0
- package/dist/question/deep-interview.d.ts.map +1 -1
- package/dist/question/deep-interview.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +387 -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 +24 -2
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/state/__tests__/planning-gate.test.d.ts +2 -0
- package/dist/state/__tests__/planning-gate.test.d.ts.map +1 -0
- package/dist/state/__tests__/planning-gate.test.js +219 -0
- package/dist/state/__tests__/planning-gate.test.js.map +1 -0
- package/dist/state/workflow-transition.d.ts +23 -0
- package/dist/state/workflow-transition.d.ts.map +1 -1
- package/dist/state/workflow-transition.js +63 -0
- package/dist/state/workflow-transition.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +86 -0
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +7 -0
- package/dist/team/tmux-session.js.map +1 -1
- package/package.json +1 -1
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +10 -0
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +6 -2
- package/prompts/scholastic.md +11 -0
- package/skills/deep-interview/SKILL.md +10 -0
- package/skills/ralplan/SKILL.md +6 -2
- package/src/scripts/__tests__/codex-native-hook.test.ts +485 -0
- package/src/scripts/codex-native-hook.ts +23 -1
- package/templates/catalog-manifest.json +5 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { parse as parseToml } from '@iarna/toml';
|
|
5
|
+
import { findGitLayout } from '../utils/git-layout.js';
|
|
6
|
+
const DEFAULT_PROFILE = 'standard';
|
|
7
|
+
const DEFAULT_ENABLE_CHALLENGE_MODES = true;
|
|
8
|
+
const PROFILE_SPECS = {
|
|
9
|
+
quick: {
|
|
10
|
+
thresholdKey: 'quickThreshold',
|
|
11
|
+
maxRoundsKey: 'quickMaxRounds',
|
|
12
|
+
defaults: { threshold: 0.30, maxRounds: 5 },
|
|
13
|
+
},
|
|
14
|
+
standard: {
|
|
15
|
+
thresholdKey: 'standardThreshold',
|
|
16
|
+
maxRoundsKey: 'standardMaxRounds',
|
|
17
|
+
defaults: { threshold: 0.20, maxRounds: 12 },
|
|
18
|
+
},
|
|
19
|
+
deep: {
|
|
20
|
+
thresholdKey: 'deepThreshold',
|
|
21
|
+
maxRoundsKey: 'deepMaxRounds',
|
|
22
|
+
defaults: { threshold: 0.15, maxRounds: 20 },
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
const DEEP_INTERVIEW_INVOCATION_PATTERN = /(?:^|\s)(?:\$(?:[A-Za-z0-9_-]+:)?deep-interview|deep[-\s]interview)(?=\s|$)/i;
|
|
26
|
+
const PROFILE_FLAG_TOKEN_PATTERN = /^--(quick|standard|deep)$/i;
|
|
27
|
+
function isRecord(value) {
|
|
28
|
+
return Boolean(value && typeof value === 'object' && !Array.isArray(value));
|
|
29
|
+
}
|
|
30
|
+
function normalizeProfile(value) {
|
|
31
|
+
if (typeof value !== 'string')
|
|
32
|
+
return undefined;
|
|
33
|
+
const normalized = value.toLowerCase();
|
|
34
|
+
return normalized === 'quick' || normalized === 'standard' || normalized === 'deep'
|
|
35
|
+
? normalized
|
|
36
|
+
: undefined;
|
|
37
|
+
}
|
|
38
|
+
function normalizeFiniteNumber(value) {
|
|
39
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
40
|
+
}
|
|
41
|
+
function normalizeThreshold(value) {
|
|
42
|
+
const normalized = normalizeFiniteNumber(value);
|
|
43
|
+
return normalized !== undefined && normalized > 0 && normalized <= 1 ? normalized : undefined;
|
|
44
|
+
}
|
|
45
|
+
function normalizeMaxRounds(value) {
|
|
46
|
+
const normalized = normalizeFiniteNumber(value);
|
|
47
|
+
return normalized !== undefined && Number.isInteger(normalized) && normalized > 0 ? normalized : undefined;
|
|
48
|
+
}
|
|
49
|
+
function warnMalformedConfig(configPath, error) {
|
|
50
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
51
|
+
console.warn(`[omx] warning: ignoring malformed deep-interview config at ${configPath}: ${message}`);
|
|
52
|
+
}
|
|
53
|
+
function extractDeepInterviewTable(parsed) {
|
|
54
|
+
if (!isRecord(parsed) || !isRecord(parsed.omx) || !isRecord(parsed.omx.deepInterview))
|
|
55
|
+
return null;
|
|
56
|
+
return parsed.omx.deepInterview;
|
|
57
|
+
}
|
|
58
|
+
function readDeepInterviewConfigTable(configPath) {
|
|
59
|
+
if (!existsSync(configPath))
|
|
60
|
+
return { status: 'missing' };
|
|
61
|
+
try {
|
|
62
|
+
const table = extractDeepInterviewTable(parseToml(readFileSync(configPath, 'utf-8')));
|
|
63
|
+
return table ? { status: 'table', table } : { status: 'no-table' };
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
warnMalformedConfig(configPath, error);
|
|
67
|
+
return { status: 'malformed' };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function resolveProfile(table, text) {
|
|
71
|
+
return parseDeepInterviewProfileFromText(text)
|
|
72
|
+
?? normalizeProfile(table.defaultProfile)
|
|
73
|
+
?? DEFAULT_PROFILE;
|
|
74
|
+
}
|
|
75
|
+
function resolveProfileConfig(table, profile) {
|
|
76
|
+
const spec = PROFILE_SPECS[profile];
|
|
77
|
+
return {
|
|
78
|
+
threshold: normalizeThreshold(table[spec.thresholdKey]) ?? spec.defaults.threshold,
|
|
79
|
+
maxRounds: normalizeMaxRounds(table[spec.maxRoundsKey]) ?? spec.defaults.maxRounds,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function resolveEnableChallengeModes(table) {
|
|
83
|
+
return typeof table.enableChallengeModes === 'boolean'
|
|
84
|
+
? table.enableChallengeModes
|
|
85
|
+
: DEFAULT_ENABLE_CHALLENGE_MODES;
|
|
86
|
+
}
|
|
87
|
+
function buildRuntimeConfig(candidate, table, options) {
|
|
88
|
+
const profile = resolveProfile(table, options.text);
|
|
89
|
+
return {
|
|
90
|
+
profile,
|
|
91
|
+
...resolveProfileConfig(table, profile),
|
|
92
|
+
enableChallengeModes: resolveEnableChallengeModes(table),
|
|
93
|
+
sourcePath: candidate.path,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function parseDeepInterviewProfileFromText(text) {
|
|
97
|
+
const input = text ?? '';
|
|
98
|
+
const invocationMatch = DEEP_INTERVIEW_INVOCATION_PATTERN.exec(input);
|
|
99
|
+
if (!invocationMatch)
|
|
100
|
+
return undefined;
|
|
101
|
+
const afterInvocation = input.slice((invocationMatch.index ?? 0) + invocationMatch[0].length).trimStart();
|
|
102
|
+
for (const token of afterInvocation.split(/\s+/)) {
|
|
103
|
+
if (!token)
|
|
104
|
+
continue;
|
|
105
|
+
if (!token.startsWith('--'))
|
|
106
|
+
return undefined;
|
|
107
|
+
const profile = normalizeProfile(PROFILE_FLAG_TOKEN_PATTERN.exec(token)?.[1]);
|
|
108
|
+
if (profile)
|
|
109
|
+
return profile;
|
|
110
|
+
}
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
export function getDeepInterviewConfigCandidatePaths(options) {
|
|
114
|
+
const home = options.homeDir || homedir();
|
|
115
|
+
const projectRoot = findGitLayout(options.cwd)?.worktreeRoot ?? options.cwd;
|
|
116
|
+
return [
|
|
117
|
+
{ path: join(projectRoot, '.omx', 'config.toml'), precedence: 'project-omx' },
|
|
118
|
+
{ path: join(projectRoot, 'omx.toml'), precedence: 'project-root' },
|
|
119
|
+
{ path: join(home, '.omx', 'config.toml'), precedence: 'user' },
|
|
120
|
+
];
|
|
121
|
+
}
|
|
122
|
+
export function resolveDeepInterviewRuntimeConfig(options) {
|
|
123
|
+
for (const candidate of getDeepInterviewConfigCandidatePaths(options)) {
|
|
124
|
+
const result = readDeepInterviewConfigTable(candidate.path);
|
|
125
|
+
if (result.status === 'malformed' || result.status === 'no-table')
|
|
126
|
+
return null;
|
|
127
|
+
if (result.status === 'table')
|
|
128
|
+
return buildRuntimeConfig(candidate, result.table, options);
|
|
129
|
+
}
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
export function buildDeepInterviewConfigStateFields(config) {
|
|
133
|
+
if (!config)
|
|
134
|
+
return {};
|
|
135
|
+
const deepInterviewConfig = {
|
|
136
|
+
profile: config.profile,
|
|
137
|
+
threshold: config.threshold,
|
|
138
|
+
maxRounds: config.maxRounds,
|
|
139
|
+
enableChallengeModes: config.enableChallengeModes,
|
|
140
|
+
sourcePath: config.sourcePath,
|
|
141
|
+
};
|
|
142
|
+
return {
|
|
143
|
+
deep_interview_config: deepInterviewConfig,
|
|
144
|
+
profile: deepInterviewConfig.profile,
|
|
145
|
+
threshold: deepInterviewConfig.threshold,
|
|
146
|
+
max_rounds: deepInterviewConfig.maxRounds,
|
|
147
|
+
enable_challenge_modes: deepInterviewConfig.enableChallengeModes,
|
|
148
|
+
config_source: deepInterviewConfig.sourcePath,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=deep-interview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-interview.js","sourceRoot":"","sources":["../../src/config/deep-interview.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import type { UnifiedMcpRegistryServer } from "./mcp-registry.js";
|
|
13
13
|
import { type CodexHookFeatureFlag } from "./codex-feature-flags.js";
|
|
14
|
-
import { type ManagedCodexHookOptions } from "./codex-hooks.js";
|
|
14
|
+
import { type ManagedCodexHookTrustState, type ManagedCodexHookOptions } from "./codex-hooks.js";
|
|
15
15
|
import type { HudPreset } from "../hud/types.js";
|
|
16
16
|
interface MergeOptions {
|
|
17
17
|
includeTui?: boolean;
|
|
@@ -71,7 +71,10 @@ export declare function stripOmxTopLevelKeys(config: string): string;
|
|
|
71
71
|
* ignoring Codex's NUX counters or other ephemeral runtime-only writes.
|
|
72
72
|
*/
|
|
73
73
|
export declare function syncProjectScopeTrustStateFromRuntime(projectConfig: string, runtimeConfig: string, projectHooksPath: string): string;
|
|
74
|
-
|
|
74
|
+
type ManagedCodexHookTrustStateMap = Record<string, ManagedCodexHookTrustState>;
|
|
75
|
+
export declare function stripManagedCodexHookTrustState(config: string, options?: {
|
|
76
|
+
managedTrustState?: ManagedCodexHookTrustStateMap;
|
|
77
|
+
}): string;
|
|
75
78
|
export declare function upsertManagedCodexHookTrustState(config: string, pkgRoot: string, codexHooksFile: string | undefined, options?: ManagedCodexHookOptions): string;
|
|
76
79
|
export declare function upsertPluginModeRuntimeFeatureFlags(config: string, codexHookFeatureFlag?: CodexHookFeatureFlag, options?: {
|
|
77
80
|
pluginScopedHooks?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/config/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAML,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC1D,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC9C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,6BAA6B,CAAC,EAAE,OAAO,CAAC;CACzC;AAqBD,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;CACpC;AAED,eAAO,MAAM,mBAAmB,YAAyB,CAAC;AAC1D,eAAO,MAAM,kCAAkC,SAAS,CAAC;AACzD,eAAO,MAAM,4CAA4C,SAAS,CAAC;AAEnE,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,MAAM,GACZ,0BAA0B,GAAG,IAAI,CAQnC;AAMD,eAAO,MAAM,0BAA0B,wmBACgkB,CAAC;AACxmB,eAAO,MAAM,iCAAiC,4oBAC6lB,CAAC;AAqB5oB,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAIpE,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,SAAqB,CAAC;AAE/D,wBAAgB,mBAAmB,CACjC,MAAM,GAAE,SAAsC,GAC7C,MAAM,CAKR;AAmCD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAoBrE;AAED,wBAAsB,sCAAsC,CAC1D,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CASlB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAMD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEnE;AAyED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEvE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAgB7E;AA+GD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EAC7C,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAgBT;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EAC7C,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,EAAE,GAAG,IAAI,CAKjB;AAoED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA2CvE;AA4DD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AA8OD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qCAAqC,CACnD,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CA4DR;AAED,wBAAgB,+BAA+B,
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/config/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/config/generator.js
CHANGED
|
@@ -17,7 +17,7 @@ import { AGENT_DEFINITIONS } from "../agents/definitions.js";
|
|
|
17
17
|
import { DEFAULT_FRONTIER_MODEL } from "./models.js";
|
|
18
18
|
import { DEFAULT_CODEX_HOOK_FEATURE_FLAG, CODEX_HOOK_FEATURE_FLAGS, CODEX_PLUGIN_SCOPED_HOOKS_FEATURE_FLAG, formatCodexHookFeatureFlagLine, normalizeCodexHookFeatureFlag, } from "./codex-feature-flags.js";
|
|
19
19
|
import { OMX_FIRST_PARTY_MCP_SERVER_NAMES, getOmxFirstPartySetupMcpServers, } from "./omx-first-party-mcp.js";
|
|
20
|
-
import {
|
|
20
|
+
import { buildManagedCodexHookTrustState, escapeTomlBasicString, } from "./codex-hooks.js";
|
|
21
21
|
function escapeTomlString(value) {
|
|
22
22
|
return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
23
23
|
}
|
|
@@ -677,59 +677,126 @@ export function syncProjectScopeTrustStateFromRuntime(projectConfig, runtimeConf
|
|
|
677
677
|
return block;
|
|
678
678
|
return `${stripped}\n\n${block}`;
|
|
679
679
|
}
|
|
680
|
-
|
|
680
|
+
function decodeTomlBasicString(raw) {
|
|
681
|
+
try {
|
|
682
|
+
const parsed = TOML.parse(`value = "${raw}"`);
|
|
683
|
+
return typeof parsed.value === "string" ? parsed.value : undefined;
|
|
684
|
+
}
|
|
685
|
+
catch {
|
|
686
|
+
return undefined;
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
function parseHooksStateHeader(line) {
|
|
690
|
+
const match = line.match(/^\s*\[hooks\.state\."((?:\\.|[^"\\])*)"\]\s*(#.*)?$/);
|
|
691
|
+
if (!match)
|
|
692
|
+
return undefined;
|
|
693
|
+
const key = decodeTomlBasicString(match[1] ?? "");
|
|
694
|
+
if (key === undefined)
|
|
695
|
+
return undefined;
|
|
696
|
+
return { key, hasInlineComment: match[2] !== undefined };
|
|
697
|
+
}
|
|
698
|
+
function isTomlTableHeader(line) {
|
|
699
|
+
return /^\s*\[\[?[^\]]+\]?\]\s*(?:#.*)?$/.test(line);
|
|
700
|
+
}
|
|
701
|
+
function isExactlyManagedHookTrustBody(bodyLines, expectedHash) {
|
|
702
|
+
const nonBlank = bodyLines.filter((line) => line.trim().length > 0);
|
|
703
|
+
if (nonBlank.length !== 1)
|
|
704
|
+
return false;
|
|
705
|
+
const expected = expectedHash.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
706
|
+
return new RegExp(`^\\s*trusted_hash\\s*=\\s*"${expected}"\\s*$`).test(nonBlank[0] ?? "");
|
|
707
|
+
}
|
|
708
|
+
function stripProofManagedCodexHookTrustStateTables(config, managedTrustState) {
|
|
709
|
+
if (Object.keys(managedTrustState).length === 0) {
|
|
710
|
+
return { config, preservedConflictKeys: new Set() };
|
|
711
|
+
}
|
|
681
712
|
const lines = config.split(/\r?\n/);
|
|
682
713
|
const kept = [];
|
|
714
|
+
const preservedConflictKeys = new Set();
|
|
683
715
|
for (let i = 0; i < lines.length;) {
|
|
684
|
-
const
|
|
685
|
-
if (
|
|
716
|
+
const header = parseHooksStateHeader(lines[i] ?? "");
|
|
717
|
+
if (!header) {
|
|
686
718
|
kept.push(lines[i]);
|
|
687
719
|
i += 1;
|
|
688
720
|
continue;
|
|
689
721
|
}
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
722
|
+
let tableEnd = lines.length;
|
|
723
|
+
for (let next = i + 1; next < lines.length; next += 1) {
|
|
724
|
+
if (isTomlTableHeader(lines[next] ?? "")) {
|
|
725
|
+
tableEnd = next;
|
|
726
|
+
break;
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
const expectedState = managedTrustState[header.key];
|
|
730
|
+
const removable = expectedState !== undefined &&
|
|
731
|
+
!header.hasInlineComment &&
|
|
732
|
+
isExactlyManagedHookTrustBody(lines.slice(i + 1, tableEnd), expectedState.trusted_hash);
|
|
733
|
+
if (removable) {
|
|
734
|
+
i = tableEnd;
|
|
695
735
|
continue;
|
|
696
736
|
}
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
return kept.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd();
|
|
700
|
-
}
|
|
701
|
-
function managedCodexHookTrustStateHeaders(hookTrustToml) {
|
|
702
|
-
const headers = new Set();
|
|
703
|
-
for (const line of hookTrustToml.split(/\r?\n/)) {
|
|
704
|
-
const trimmed = line.trim();
|
|
705
|
-
if (/^\[hooks\.state\./.test(trimmed)) {
|
|
706
|
-
headers.add(trimmed);
|
|
737
|
+
if (expectedState !== undefined) {
|
|
738
|
+
preservedConflictKeys.add(header.key);
|
|
707
739
|
}
|
|
740
|
+
kept.push(...lines.slice(i, tableEnd));
|
|
741
|
+
i = tableEnd;
|
|
708
742
|
}
|
|
709
|
-
return
|
|
743
|
+
return { config: kept.join("\n"), preservedConflictKeys };
|
|
710
744
|
}
|
|
711
|
-
function
|
|
712
|
-
const managedHeaders = managedCodexHookTrustStateHeaders(hookTrustToml);
|
|
713
|
-
if (managedHeaders.size === 0)
|
|
714
|
-
return config;
|
|
745
|
+
function stripManagedCodexHookTrustStateWithResult(config, options = {}) {
|
|
715
746
|
const lines = config.split(/\r?\n/);
|
|
716
747
|
const kept = [];
|
|
717
748
|
for (let i = 0; i < lines.length;) {
|
|
718
|
-
|
|
749
|
+
const trimmed = lines[i].trim();
|
|
750
|
+
if (trimmed !== OMX_HOOK_TRUST_START_MARKER) {
|
|
719
751
|
kept.push(lines[i]);
|
|
720
752
|
i += 1;
|
|
721
753
|
continue;
|
|
722
754
|
}
|
|
723
|
-
i
|
|
724
|
-
|
|
755
|
+
const nextEndIdx = lines.findIndex((line, index) => index > i && line.trim() === OMX_HOOK_TRUST_END_MARKER);
|
|
756
|
+
const nextStartIdx = lines.findIndex((line, index) => index > i && line.trim() === OMX_HOOK_TRUST_START_MARKER);
|
|
757
|
+
if (nextEndIdx === -1 || (nextStartIdx !== -1 && nextStartIdx < nextEndIdx)) {
|
|
758
|
+
kept.push(lines[i]);
|
|
725
759
|
i += 1;
|
|
760
|
+
continue;
|
|
726
761
|
}
|
|
762
|
+
i = nextEndIdx + 1;
|
|
727
763
|
}
|
|
728
|
-
|
|
764
|
+
const withoutFenced = kept.join("\n");
|
|
765
|
+
const proofStripped = options.managedTrustState
|
|
766
|
+
? stripProofManagedCodexHookTrustStateTables(withoutFenced, options.managedTrustState)
|
|
767
|
+
: { config: withoutFenced, preservedConflictKeys: new Set() };
|
|
768
|
+
return {
|
|
769
|
+
config: proofStripped.config.replace(/\n{3,}/g, "\n\n").trimEnd(),
|
|
770
|
+
preservedConflictKeys: proofStripped.preservedConflictKeys,
|
|
771
|
+
};
|
|
772
|
+
}
|
|
773
|
+
export function stripManagedCodexHookTrustState(config, options = {}) {
|
|
774
|
+
return stripManagedCodexHookTrustStateWithResult(config, options).config;
|
|
775
|
+
}
|
|
776
|
+
function renderManagedCodexHookTrustToml(managedTrustState, excludedKeys = new Set()) {
|
|
777
|
+
return Object.entries(managedTrustState)
|
|
778
|
+
.filter(([key]) => !excludedKeys.has(key))
|
|
779
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
780
|
+
.flatMap(([key, hookState]) => [
|
|
781
|
+
`[hooks.state."${escapeTomlBasicString(key)}"]`,
|
|
782
|
+
`trusted_hash = "${escapeTomlBasicString(hookState.trusted_hash)}"`,
|
|
783
|
+
"",
|
|
784
|
+
])
|
|
785
|
+
.join("\n")
|
|
786
|
+
.trimEnd();
|
|
787
|
+
}
|
|
788
|
+
function buildManagedCodexHookTrustStateForConfig(codexHooksFile, pkgRoot, options = {}) {
|
|
789
|
+
if (!codexHooksFile)
|
|
790
|
+
return {};
|
|
791
|
+
return buildManagedCodexHookTrustState(codexHooksFile, pkgRoot, options);
|
|
729
792
|
}
|
|
730
793
|
export function upsertManagedCodexHookTrustState(config, pkgRoot, codexHooksFile, options = {}) {
|
|
731
|
-
const
|
|
732
|
-
const
|
|
794
|
+
const managedTrustState = buildManagedCodexHookTrustStateForConfig(codexHooksFile, pkgRoot, options);
|
|
795
|
+
const strippedResult = stripManagedCodexHookTrustStateWithResult(config, {
|
|
796
|
+
managedTrustState,
|
|
797
|
+
});
|
|
798
|
+
const stripped = strippedResult.config;
|
|
799
|
+
const hookTrustToml = renderManagedCodexHookTrustToml(managedTrustState, strippedResult.preservedConflictKeys);
|
|
733
800
|
if (!hookTrustToml)
|
|
734
801
|
return `${stripped}\n`;
|
|
735
802
|
return [
|
|
@@ -1560,7 +1627,7 @@ export function mergeSharedMcpRegistryBlock(config, servers, sourcePath) {
|
|
|
1560
1627
|
* OMX table-section block (MCP servers, TUI).
|
|
1561
1628
|
* Contains ONLY [table] sections — no bare keys.
|
|
1562
1629
|
*/
|
|
1563
|
-
function getOmxTablesBlock(pkgRoot, includeTui = true, statusLinePreset = DEFAULT_STATUS_LINE_PRESET, codexHooksFile, hookOptions = {}, includeFirstPartyMcp = false) {
|
|
1630
|
+
function getOmxTablesBlock(pkgRoot, includeTui = true, statusLinePreset = DEFAULT_STATUS_LINE_PRESET, codexHooksFile, hookOptions = {}, includeFirstPartyMcp = false, excludedHookTrustStateKeys = new Set()) {
|
|
1564
1631
|
const lines = [
|
|
1565
1632
|
"",
|
|
1566
1633
|
"# ============================================================",
|
|
@@ -1583,7 +1650,7 @@ function getOmxTablesBlock(pkgRoot, includeTui = true, statusLinePreset = DEFAUL
|
|
|
1583
1650
|
}
|
|
1584
1651
|
}
|
|
1585
1652
|
}
|
|
1586
|
-
const hookTrustToml =
|
|
1653
|
+
const hookTrustToml = renderManagedCodexHookTrustToml(buildManagedCodexHookTrustStateForConfig(codexHooksFile, pkgRoot, hookOptions), excludedHookTrustStateKeys);
|
|
1587
1654
|
if (hookTrustToml) {
|
|
1588
1655
|
lines.push("");
|
|
1589
1656
|
lines.push("# OMX-owned Codex hook trust state");
|
|
@@ -1649,11 +1716,14 @@ export function buildMergedConfig(existingConfig, pkgRoot, options = {}) {
|
|
|
1649
1716
|
existing = `${`notify = ${formatTomlStringArray(userNotifyToPreserve)}`}\n${existing.trimStart()}`;
|
|
1650
1717
|
}
|
|
1651
1718
|
existing = stripOrphanedManagedNotify(existing, pkgRoot);
|
|
1652
|
-
|
|
1653
|
-
existing = stripUnfencedManagedCodexHookTrustState(existing, buildManagedCodexHookTrustToml(options.codexHooksFile, pkgRoot, {
|
|
1719
|
+
const managedTrustState = buildManagedCodexHookTrustStateForConfig(options.codexHooksFile, pkgRoot, {
|
|
1654
1720
|
codexHomeDir: options.codexHomeDir,
|
|
1655
1721
|
platform: options.hookCommandPlatform,
|
|
1656
|
-
})
|
|
1722
|
+
});
|
|
1723
|
+
const hookTrustStrip = stripManagedCodexHookTrustStateWithResult(existing, {
|
|
1724
|
+
managedTrustState,
|
|
1725
|
+
});
|
|
1726
|
+
existing = hookTrustStrip.config;
|
|
1657
1727
|
if (options.modelOverride) {
|
|
1658
1728
|
existing = stripRootLevelKeys(existing, ["model"]);
|
|
1659
1729
|
}
|
|
@@ -1676,7 +1746,7 @@ export function buildMergedConfig(existingConfig, pkgRoot, options = {}) {
|
|
|
1676
1746
|
const tablesBlock = getOmxTablesBlock(pkgRoot, includeTui && !tuiUpsert.hadExistingTui, statusLinePreset, options.codexHooksFile, {
|
|
1677
1747
|
codexHomeDir: options.codexHomeDir,
|
|
1678
1748
|
platform: options.hookCommandPlatform,
|
|
1679
|
-
}, options.includeFirstPartyMcp === true);
|
|
1749
|
+
}, options.includeFirstPartyMcp === true, hookTrustStrip.preservedConflictKeys);
|
|
1680
1750
|
const sharedRegistryBlock = getSharedMcpRegistryBlock(options.sharedMcpServers ?? [], options.sharedMcpRegistrySource, existing);
|
|
1681
1751
|
let body = existing.trimEnd();
|
|
1682
1752
|
if (sharedRegistryBlock) {
|