oh-my-codex 0.17.2 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.lock +13 -5
- package/Cargo.toml +2 -1
- package/README.md +1 -0
- package/crates/omx-api/Cargo.toml +19 -0
- package/crates/omx-api/src/lib.rs +2940 -0
- package/crates/omx-api/src/main.rs +10 -0
- package/crates/omx-api/tests/cli.rs +558 -0
- package/crates/omx-explore/src/main.rs +4 -0
- package/crates/omx-sparkshell/src/codex_bridge.rs +437 -123
- package/crates/omx-sparkshell/src/exec.rs +4 -0
- package/crates/omx-sparkshell/src/main.rs +738 -29
- package/crates/omx-sparkshell/src/prompt.rs +25 -3
- package/crates/omx-sparkshell/src/redaction.rs +241 -0
- package/crates/omx-sparkshell/tests/execution.rs +479 -238
- package/dist/cli/__tests__/api.test.d.ts +2 -0
- package/dist/cli/__tests__/api.test.d.ts.map +1 -0
- package/dist/cli/__tests__/api.test.js +175 -0
- package/dist/cli/__tests__/api.test.js.map +1 -0
- package/dist/cli/__tests__/ask.test.js +72 -5
- package/dist/cli/__tests__/ask.test.js.map +1 -1
- package/dist/cli/__tests__/autoresearch-goal.test.js +14 -1
- package/dist/cli/__tests__/autoresearch-goal.test.js.map +1 -1
- 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 +23 -0
- package/dist/cli/__tests__/explore.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +123 -5
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +76 -0
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/package-bin-contract.test.js +4 -3
- package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
- package/dist/cli/__tests__/question.test.js +45 -22
- package/dist/cli/__tests__/question.test.js.map +1 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +2 -0
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +138 -0
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.js +8 -2
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/sparkshell-cli.test.js +5 -0
- package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
- package/dist/cli/__tests__/version-sync-contract.test.js +4 -0
- package/dist/cli/__tests__/version-sync-contract.test.js.map +1 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js +1 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -1
- package/dist/cli/api.d.ts +26 -0
- package/dist/cli/api.d.ts.map +1 -0
- package/dist/cli/api.js +153 -0
- package/dist/cli/api.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +39 -4
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/explore.d.ts +2 -0
- package/dist/cli/explore.d.ts.map +1 -1
- package/dist/cli/explore.js +43 -1
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +10 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +128 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/native-assets.d.ts +2 -1
- package/dist/cli/native-assets.d.ts.map +1 -1
- package/dist/cli/native-assets.js +1 -0
- package/dist/cli/native-assets.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +6 -1
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/sparkshell.d.ts.map +1 -1
- package/dist/cli/sparkshell.js +20 -3
- package/dist/cli/sparkshell.js.map +1 -1
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +90 -0
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/best-practice-research-skill.test.d.ts +2 -0
- package/dist/hooks/__tests__/best-practice-research-skill.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/best-practice-research-skill.test.js +27 -0
- package/dist/hooks/__tests__/best-practice-research-skill.test.js.map +1 -0
- package/dist/hooks/__tests__/keyword-detector.test.js +11 -0
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +6 -0
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +4 -0
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts.map +1 -1
- package/dist/hooks/keyword-registry.js +1 -0
- package/dist/hooks/keyword-registry.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +2 -2
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/tmux.test.js +23 -18
- package/dist/hud/__tests__/tmux.test.js.map +1 -1
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +7 -6
- package/dist/hud/tmux.js.map +1 -1
- package/dist/mcp/__tests__/bootstrap.test.js +75 -1
- package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
- package/dist/mcp/bootstrap.d.ts +3 -1
- package/dist/mcp/bootstrap.d.ts.map +1 -1
- package/dist/mcp/bootstrap.js +71 -2
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +737 -26
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/__tests__/notify-dispatcher.test.js +183 -1
- package/dist/scripts/__tests__/notify-dispatcher.test.js.map +1 -1
- package/dist/scripts/__tests__/smoke-packed-install.test.js +4 -1
- package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
- package/dist/scripts/build-api.d.ts +2 -0
- package/dist/scripts/build-api.d.ts.map +1 -0
- package/dist/scripts/build-api.js +44 -0
- package/dist/scripts/build-api.js.map +1 -0
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +208 -8
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
- package/dist/scripts/codex-native-pre-post.js +89 -24
- package/dist/scripts/codex-native-pre-post.js.map +1 -1
- package/dist/scripts/notify-dispatcher.js +88 -0
- package/dist/scripts/notify-dispatcher.js.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.js +27 -9
- package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.js +26 -11
- package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.d.ts +1 -0
- package/dist/scripts/notify-hook/team-tmux-guard.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.js +38 -0
- package/dist/scripts/notify-hook/team-tmux-guard.js.map +1 -1
- package/dist/scripts/notify-hook/team-worker-stop.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-worker-stop.js +27 -14
- package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -1
- package/dist/scripts/run-provider-advisor.js +9 -3
- package/dist/scripts/run-provider-advisor.js.map +1 -1
- package/dist/scripts/smoke-packed-install.d.ts +1 -1
- package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
- package/dist/scripts/smoke-packed-install.js +2 -0
- package/dist/scripts/smoke-packed-install.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +2 -2
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +153 -25
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/tmux-session.d.ts +1 -0
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +55 -10
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/utils/__tests__/agents-md.test.js +45 -1
- package/dist/utils/__tests__/agents-md.test.js.map +1 -1
- package/dist/utils/agents-md.d.ts +2 -0
- package/dist/utils/agents-md.d.ts.map +1 -1
- package/dist/utils/agents-md.js +19 -0
- package/dist/utils/agents-md.js.map +1 -1
- package/dist/verification/__tests__/ci-rust-gates.test.js +85 -10
- package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js +1 -0
- package/dist/verification/__tests__/explore-harness-release-workflow.test.js.map +1 -1
- package/package.json +4 -3
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/skills/best-practice-research/SKILL.md +83 -0
- package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +1 -0
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +1 -1
- package/prompts/researcher.md +15 -10
- package/skills/best-practice-research/SKILL.md +83 -0
- package/skills/deep-interview/SKILL.md +1 -0
- package/skills/ralplan/SKILL.md +1 -1
- package/src/scripts/__tests__/codex-native-hook.test.ts +810 -4
- package/src/scripts/__tests__/notify-dispatcher.test.ts +223 -1
- package/src/scripts/__tests__/smoke-packed-install.test.ts +8 -2
- package/src/scripts/build-api.ts +48 -0
- package/src/scripts/codex-native-hook.ts +262 -10
- package/src/scripts/codex-native-pre-post.ts +103 -24
- package/src/scripts/notify-dispatcher.ts +97 -0
- package/src/scripts/notify-hook/team-dispatch.ts +27 -8
- package/src/scripts/notify-hook/team-leader-nudge.ts +25 -11
- package/src/scripts/notify-hook/team-tmux-guard.ts +42 -0
- package/src/scripts/notify-hook/team-worker-stop.ts +24 -13
- package/src/scripts/run-provider-advisor.ts +11 -3
- package/src/scripts/smoke-packed-install.ts +2 -0
- package/templates/catalog-manifest.json +7 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-md.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/agents-md.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"agents-md.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/agents-md.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export declare const OMX_GENERATED_AGENTS_MARKER = "<!-- omx:generated:agents-md -->";
|
|
2
2
|
export declare const OMX_MANAGED_AGENTS_START_MARKER = "<!-- OMX:AGENTS:START -->";
|
|
3
3
|
export declare const OMX_MANAGED_AGENTS_END_MARKER = "<!-- OMX:AGENTS:END -->";
|
|
4
|
+
export declare const OMX_AGENTS_CONTRACT_HEADING = "# oh-my-codex - Intelligent Multi-Agent Orchestration";
|
|
4
5
|
export declare function isOmxGeneratedAgentsMd(content: string): boolean;
|
|
5
6
|
export declare function hasOmxManagedAgentsSections(content: string): boolean;
|
|
7
|
+
export declare function hasOmxAgentsContract(content: string): boolean;
|
|
6
8
|
export declare function upsertManagedAgentsBlock(existingContent: string, managedContent: string): string;
|
|
7
9
|
export declare function addGeneratedAgentsMarker(content: string): string;
|
|
8
10
|
//# sourceMappingURL=agents-md.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-md.d.ts","sourceRoot":"","sources":["../../src/utils/agents-md.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,2BAA2B,qCAAqC,CAAA;AAC7E,eAAO,MAAM,+BAA+B,8BAA8B,CAAA;AAC1E,eAAO,MAAM,6BAA6B,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"agents-md.d.ts","sourceRoot":"","sources":["../../src/utils/agents-md.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,2BAA2B,qCAAqC,CAAA;AAC7E,eAAO,MAAM,+BAA+B,8BAA8B,CAAA;AAC1E,eAAO,MAAM,6BAA6B,4BAA4B,CAAA;AACtE,eAAO,MAAM,2BAA2B,0DACiB,CAAA;AAQzD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQpE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAY7D;AAQD,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,GACrB,MAAM,CAuBR;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAyBhE"}
|
package/dist/utils/agents-md.js
CHANGED
|
@@ -2,6 +2,12 @@ import { OMX_MODELS_END_MARKER, OMX_MODELS_START_MARKER, } from './agents-model-
|
|
|
2
2
|
export const OMX_GENERATED_AGENTS_MARKER = '<!-- omx:generated:agents-md -->';
|
|
3
3
|
export const OMX_MANAGED_AGENTS_START_MARKER = '<!-- OMX:AGENTS:START -->';
|
|
4
4
|
export const OMX_MANAGED_AGENTS_END_MARKER = '<!-- OMX:AGENTS:END -->';
|
|
5
|
+
export const OMX_AGENTS_CONTRACT_HEADING = '# oh-my-codex - Intelligent Multi-Agent Orchestration';
|
|
6
|
+
const OMX_AGENTS_CONTRACT_REQUIRED_TEXT = [
|
|
7
|
+
OMX_GENERATED_AGENTS_MARKER,
|
|
8
|
+
OMX_AGENTS_CONTRACT_HEADING,
|
|
9
|
+
'AGENTS.md is the top-level operating contract for the workspace.',
|
|
10
|
+
];
|
|
5
11
|
const AUTONOMY_DIRECTIVE_END_MARKER = '<!-- END AUTONOMY DIRECTIVE -->';
|
|
6
12
|
export function isOmxGeneratedAgentsMd(content) {
|
|
7
13
|
return content.includes(OMX_GENERATED_AGENTS_MARKER);
|
|
@@ -13,6 +19,19 @@ export function hasOmxManagedAgentsSections(content) {
|
|
|
13
19
|
(content.includes(OMX_MODELS_START_MARKER) &&
|
|
14
20
|
content.includes(OMX_MODELS_END_MARKER)));
|
|
15
21
|
}
|
|
22
|
+
export function hasOmxAgentsContract(content) {
|
|
23
|
+
if (candidateHasOmxAgentsContract(content))
|
|
24
|
+
return true;
|
|
25
|
+
const startIndex = content.indexOf(OMX_MANAGED_AGENTS_START_MARKER);
|
|
26
|
+
const endIndex = content.indexOf(OMX_MANAGED_AGENTS_END_MARKER);
|
|
27
|
+
if (startIndex === -1 || endIndex <= startIndex)
|
|
28
|
+
return false;
|
|
29
|
+
const managedBlock = content.slice(startIndex + OMX_MANAGED_AGENTS_START_MARKER.length, endIndex);
|
|
30
|
+
return candidateHasOmxAgentsContract(managedBlock);
|
|
31
|
+
}
|
|
32
|
+
function candidateHasOmxAgentsContract(content) {
|
|
33
|
+
return OMX_AGENTS_CONTRACT_REQUIRED_TEXT.every((text) => content.includes(text));
|
|
34
|
+
}
|
|
16
35
|
export function upsertManagedAgentsBlock(existingContent, managedContent) {
|
|
17
36
|
const normalizedExisting = existingContent.endsWith('\n')
|
|
18
37
|
? existingContent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/utils/agents-md.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/utils/agents-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ function readCiWorkflow() {
|
|
|
8
8
|
return readFileSync(workflowPath, 'utf-8');
|
|
9
9
|
}
|
|
10
10
|
function jobBlock(workflow, jobName) {
|
|
11
|
-
const startMatch = workflow.match(new RegExp(`(
|
|
11
|
+
const startMatch = workflow.match(new RegExp(`(^|\n) ${jobName}:\n`));
|
|
12
12
|
assert.ok(startMatch?.index !== undefined, `missing CI job block for ${jobName}`);
|
|
13
13
|
const start = startMatch.index + startMatch[1].length;
|
|
14
14
|
const afterJobHeader = start + ` ${jobName}:\n`.length;
|
|
@@ -16,7 +16,65 @@ function jobBlock(workflow, jobName) {
|
|
|
16
16
|
const end = nextJobOffset === -1 ? workflow.length : afterJobHeader + nextJobOffset;
|
|
17
17
|
return workflow.slice(start, end);
|
|
18
18
|
}
|
|
19
|
+
function assertJobIf(workflow, jobName, expected) {
|
|
20
|
+
assert.match(jobBlock(workflow, jobName), expected, `${jobName} should have the expected lane predicate`);
|
|
21
|
+
}
|
|
19
22
|
describe('CI Rust gates', () => {
|
|
23
|
+
it('detects changed-file lanes once and exposes fail-closed outputs for targeted CI', () => {
|
|
24
|
+
const workflow = readCiWorkflow();
|
|
25
|
+
const changesJob = jobBlock(workflow, 'changes');
|
|
26
|
+
assert.match(workflow, /changes:\s*\n\s+name:\s*Detect CI lanes/);
|
|
27
|
+
for (const outputName of [
|
|
28
|
+
'full_suite',
|
|
29
|
+
'docs_changed',
|
|
30
|
+
'docs_only',
|
|
31
|
+
'ts_changed',
|
|
32
|
+
'rust_changed',
|
|
33
|
+
'native_changed',
|
|
34
|
+
'shared_config_changed',
|
|
35
|
+
'reason',
|
|
36
|
+
]) {
|
|
37
|
+
assert.equal(changesJob.includes(`${outputName}: $` + `{{ steps.classify.outputs.${outputName} }}`), true);
|
|
38
|
+
}
|
|
39
|
+
assert.match(changesJob, /fetch-depth:\s*0/);
|
|
40
|
+
assert.match(changesJob, /pull request targets main/);
|
|
41
|
+
assert.match(changesJob, /push to main/);
|
|
42
|
+
assert.match(changesJob, /missing or first-push base sha/);
|
|
43
|
+
assert.match(changesJob, /unable to resolve diff commits/);
|
|
44
|
+
assert.match(changesJob, /empty diff or classifier uncertainty/);
|
|
45
|
+
assert.match(changesJob, /shared config, workflow, manifest, lockfile, or packaging change/);
|
|
46
|
+
});
|
|
47
|
+
it('classifies docs, TypeScript, Rust/native, shared config, renames, and unknown paths explicitly', () => {
|
|
48
|
+
const workflow = readCiWorkflow();
|
|
49
|
+
const changesJob = jobBlock(workflow, 'changes');
|
|
50
|
+
assert.match(changesJob, /function pathsFromNameStatus/);
|
|
51
|
+
assert.match(changesJob, /if \(\/\^\[RC\]\/\.test\(status\)\) return parts\.slice\(1, 3\)/);
|
|
52
|
+
assert.match(changesJob, /function isDocs\(path\)/);
|
|
53
|
+
assert.match(changesJob, /\^docs\\\//);
|
|
54
|
+
assert.match(changesJob, /README\|CHANGELOG\|CONTRIBUTING\|COVERAGE\|DEMO\|RELEASE_BODY\|RELEASE_PROTOCOL/);
|
|
55
|
+
assert.match(changesJob, /function isTs\(path\)/);
|
|
56
|
+
assert.match(changesJob, /\^src\\\/\.\*\\\.\(ts\|tsx\|mts\|cts\)\$/);
|
|
57
|
+
assert.match(changesJob, /function isRust\(path\)/);
|
|
58
|
+
assert.match(changesJob, /Cargo\.lock/);
|
|
59
|
+
assert.match(changesJob, /function isNative\(path\)/);
|
|
60
|
+
assert.match(changesJob, /dist-workspace\.toml/);
|
|
61
|
+
assert.match(changesJob, /function isSharedConfig\(path\)/);
|
|
62
|
+
assert.match(changesJob, /\^\\\.github\\\//);
|
|
63
|
+
assert.match(changesJob, /package\(-lock\)\?\\\.json/);
|
|
64
|
+
assert.match(changesJob, /const unknown = paths\.filter/);
|
|
65
|
+
});
|
|
66
|
+
it('gates expensive jobs by lane while preserving full-suite fail-closed behavior', () => {
|
|
67
|
+
const workflow = readCiWorkflow();
|
|
68
|
+
assertJobIf(workflow, 'docs-check', /full_suite == 'true'.*docs_changed == 'true'/s);
|
|
69
|
+
for (const jobName of ['rustfmt', 'clippy', 'rust-tests']) {
|
|
70
|
+
assertJobIf(workflow, jobName, /full_suite == 'true'.*rust_changed == 'true'.*native_changed == 'true'/s);
|
|
71
|
+
}
|
|
72
|
+
for (const jobName of ['lint', 'typecheck', 'test', 'coverage-team-critical', 'ralph-persistence-gate']) {
|
|
73
|
+
assertJobIf(workflow, jobName, /full_suite == 'true'.*ts_changed == 'true'.*shared_config_changed == 'true'/s);
|
|
74
|
+
}
|
|
75
|
+
assertJobIf(workflow, 'build-dist', /full_suite == 'true'.*ts_changed == 'true'.*rust_changed == 'true'.*native_changed == 'true'.*shared_config_changed == 'true'/s);
|
|
76
|
+
assertJobIf(workflow, 'build', /full_suite == 'true'.*rust_changed == 'true'.*native_changed == 'true'.*shared_config_changed == 'true'/s);
|
|
77
|
+
});
|
|
20
78
|
it('requires rustfmt, clippy, and Rust test coverage gates plus an explicit Rust toolchain setup for the final native build lane', () => {
|
|
21
79
|
const workflow = readCiWorkflow();
|
|
22
80
|
const rustTestsJob = jobBlock(workflow, 'rust-tests');
|
|
@@ -36,16 +94,18 @@ describe('CI Rust gates', () => {
|
|
|
36
94
|
assert.doesNotMatch(rustTestsJob, /--lcov|output-path|Upload Rust coverage artifact/);
|
|
37
95
|
assert.match(workflow, /build:\s*\n(?:.*\n)*?\s+- name: Setup Rust\s*\n\s+uses: dtolnay\/rust-toolchain@v1\s*\n\s+with:\s*\n\s+toolchain: stable(?:.*\n)*?\s+- name: Download prebuilt dist artifact\s*\n\s+uses: actions\/download-artifact@v8(?:.*\n)*?\s+- run: npm run build:explore:release(?:.*\n)*?\s+- run: npm run build:sparkshell/m);
|
|
38
96
|
});
|
|
39
|
-
it('reuses a prebuilt dist artifact
|
|
97
|
+
it('reuses a prebuilt dist artifact on every compiled lane and also builds it for Rust/native changes', () => {
|
|
40
98
|
const workflow = readCiWorkflow();
|
|
41
99
|
const testJob = jobBlock(workflow, 'test');
|
|
42
100
|
assert.match(workflow, /build-dist:/);
|
|
43
101
|
assert.match(workflow, /name:\s*Build dist artifact/);
|
|
44
102
|
assert.match(workflow, /name:\s*Upload prebuilt dist artifact/);
|
|
45
103
|
assert.match(workflow, /name:\s*ci-dist-node20/);
|
|
46
|
-
assert.match(workflow,
|
|
47
|
-
assert.match(workflow,
|
|
48
|
-
assert.match(workflow, /^
|
|
104
|
+
assert.match(jobBlock(workflow, 'build-dist'), /rust_changed == 'true'/);
|
|
105
|
+
assert.match(jobBlock(workflow, 'build-dist'), /native_changed == 'true'/);
|
|
106
|
+
assert.match(workflow, /^ coverage-team-critical:\s*\n(?:.*\n)*?^\s+needs:\s*\[changes, build-dist\]/m);
|
|
107
|
+
assert.match(workflow, /^ ralph-persistence-gate:\s*\n(?:.*\n)*?^\s+needs:\s*\[changes, build-dist\]/m);
|
|
108
|
+
assert.match(workflow, /^ build:\s*\n(?:.*\n)*?^\s+needs:\s*\[changes, build-dist\]/m);
|
|
49
109
|
for (const jobName of ['test', 'coverage-team-critical', 'ralph-persistence-gate', 'build']) {
|
|
50
110
|
assert.match(workflow, new RegExp(`^ ${jobName}:\\s*\\n(?:.*\\n)*?^\\s+- name:\\s*Download prebuilt dist artifact\\s*\\n\\s+uses:\\s*actions/download-artifact@v8`, 'm'));
|
|
51
111
|
}
|
|
@@ -67,7 +127,7 @@ describe('CI Rust gates', () => {
|
|
|
67
127
|
for (const jobName of ['clippy', 'rust-tests', 'build']) {
|
|
68
128
|
assert.match(jobBlock(workflow, jobName), /uses:\s*Swatinem\/rust-cache@v2/);
|
|
69
129
|
}
|
|
70
|
-
assert.match(workflow, /needs:\s*\[rustfmt, clippy, rust-tests, lint, typecheck, test, coverage-team-critical, ralph-persistence-gate, build\]/);
|
|
130
|
+
assert.match(workflow, /needs:\s*\[changes, docs-check, rustfmt, clippy, rust-tests, lint, typecheck, build-dist, test, coverage-team-critical, ralph-persistence-gate, build\]/);
|
|
71
131
|
});
|
|
72
132
|
it('avoids path-filtered CI triggers so required checks cannot be skipped into a pending state', () => {
|
|
73
133
|
const workflow = readCiWorkflow();
|
|
@@ -75,25 +135,38 @@ describe('CI Rust gates', () => {
|
|
|
75
135
|
assert.doesNotMatch(workflow, /^\s+paths:\s*/m);
|
|
76
136
|
assert.doesNotMatch(workflow, /^\s+paths-ignore:\s*/m);
|
|
77
137
|
});
|
|
78
|
-
it('marks every
|
|
138
|
+
it('marks every active CI lane as required and reported in the CI status gate while accepting inactive skipped lanes', () => {
|
|
79
139
|
const workflow = readCiWorkflow();
|
|
80
140
|
const ciStatusJob = jobBlock(workflow, 'ci-status');
|
|
81
141
|
const requiredJobs = [
|
|
142
|
+
'changes',
|
|
143
|
+
'docs-check',
|
|
82
144
|
'rustfmt',
|
|
83
145
|
'clippy',
|
|
84
146
|
'rust-tests',
|
|
85
147
|
'lint',
|
|
86
148
|
'typecheck',
|
|
149
|
+
'build-dist',
|
|
87
150
|
'test',
|
|
88
151
|
'coverage-team-critical',
|
|
89
152
|
'ralph-persistence-gate',
|
|
90
153
|
'build',
|
|
91
154
|
];
|
|
92
|
-
assert.match(ciStatusJob, /needs:\s*\[rustfmt, clippy, rust-tests, lint, typecheck, test, coverage-team-critical, ralph-persistence-gate, build\]/);
|
|
155
|
+
assert.match(ciStatusJob, /needs:\s*\[changes, docs-check, rustfmt, clippy, rust-tests, lint, typecheck, build-dist, test, coverage-team-critical, ralph-persistence-gate, build\]/);
|
|
93
156
|
for (const jobName of requiredJobs) {
|
|
94
|
-
|
|
95
|
-
assert.
|
|
157
|
+
const envName = jobName.toUpperCase().replaceAll('-', '_');
|
|
158
|
+
assert.equal(ciStatusJob.includes(`${envName}_RESULT: $` + `{{ needs.${jobName}.result }}`), true, `${jobName} result should be captured`);
|
|
159
|
+
assert.match(ciStatusJob, new RegExp(`echo " ${jobName}: \\$${envName}_RESULT"`), `${jobName} result should be reported`);
|
|
96
160
|
}
|
|
161
|
+
assert.match(ciStatusJob, /check_job\(\) \{/);
|
|
162
|
+
assert.match(ciStatusJob, /must succeed when active/);
|
|
163
|
+
assert.match(ciStatusJob, /inactive lane should be success or skipped/);
|
|
164
|
+
assert.match(ciStatusJob, /docs_active=false/);
|
|
165
|
+
assert.match(ciStatusJob, /rust_active=false/);
|
|
166
|
+
assert.match(ciStatusJob, /ts_active=false/);
|
|
167
|
+
assert.match(ciStatusJob, /dist_active=false/);
|
|
168
|
+
assert.match(ciStatusJob, /build_active=false/);
|
|
169
|
+
assert.match(ciStatusJob, /All required CI checks passed for active lanes/);
|
|
97
170
|
});
|
|
98
171
|
it('keeps expensive report-only coverage out of the required CI path', () => {
|
|
99
172
|
const workflow = readCiWorkflow();
|
|
@@ -111,6 +184,8 @@ describe('CI Rust gates', () => {
|
|
|
111
184
|
it('adds timeout-minutes to every CI job so stalled Actions runs fail instead of hanging indefinitely', () => {
|
|
112
185
|
const workflow = readCiWorkflow();
|
|
113
186
|
for (const jobName of [
|
|
187
|
+
'changes',
|
|
188
|
+
'docs-check',
|
|
114
189
|
'rustfmt',
|
|
115
190
|
'clippy',
|
|
116
191
|
'rust-tests',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci-rust-gates.test.js","sourceRoot":"","sources":["../../../src/verification/__tests__/ci-rust-gates.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,SAAS,cAAc;IACrB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC3E,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,qBAAqB,YAAY,EAAE,CAAC,CAAC;IAClF,OAAO,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB,EAAE,OAAe;IACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"ci-rust-gates.test.js","sourceRoot":"","sources":["../../../src/verification/__tests__/ci-rust-gates.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,7 @@ describe('native release workflow', () => {
|
|
|
30
30
|
assert.match(workflow, /actions\/download-artifact@v8/);
|
|
31
31
|
assert.match(workflow, /softprops\/action-gh-release@v3/);
|
|
32
32
|
assert.match(workflow, /generate-release-body\.js/);
|
|
33
|
+
assert.match(workflow, /omx-api/);
|
|
33
34
|
assert.match(workflow, /omx-explore-harness/);
|
|
34
35
|
assert.match(workflow, /omx-sparkshell/);
|
|
35
36
|
assert.match(workflow, /native-release-manifest\.json/);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explore-harness-release-workflow.test.js","sourceRoot":"","sources":["../../../src/verification/__tests__/explore-harness-release-workflow.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"explore-harness-release-workflow.test.js","sourceRoot":"","sources":["../../../src/verification/__tests__/explore-harness-release-workflow.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-codex",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Multi-agent orchestration layer for OpenAI Codex CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "node -e \"const fs=require('fs'); fs.rmSync('dist',{recursive:true,force:true});\" && tsc && node -e \"require('fs').chmodSync('dist/cli/omx.js', 0o755)\"",
|
|
12
12
|
"build:explore": "cargo build -p omx-explore-harness",
|
|
13
|
-
"build:full": "npm run build && npm run build:explore:release && npm run build:sparkshell",
|
|
13
|
+
"build:full": "npm run build && npm run build:explore:release && npm run build:sparkshell && npm run build:api",
|
|
14
14
|
"build:explore:release": "node dist/scripts/build-explore-harness.js",
|
|
15
15
|
"check:no-unused": "tsc -p tsconfig.no-unused.json",
|
|
16
16
|
"clean:native-package-assets": "node dist/scripts/cleanup-explore-harness.js",
|
|
@@ -54,7 +54,8 @@
|
|
|
54
54
|
"sync:plugin:check": "node dist/scripts/sync-plugin-mirror.js --check",
|
|
55
55
|
"verify:plugin-bundle": "node dist/scripts/sync-plugin-mirror.js --check",
|
|
56
56
|
"verify:native-agents": "node dist/scripts/verify-native-agents.js",
|
|
57
|
-
"prompt:inventory": "node dist/scripts/prompt-inventory.js"
|
|
57
|
+
"prompt:inventory": "node dist/scripts/prompt-inventory.js",
|
|
58
|
+
"build:api": "node dist/scripts/build-api.js"
|
|
58
59
|
},
|
|
59
60
|
"engines": {
|
|
60
61
|
"node": ">=20"
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: best-practice-research
|
|
3
|
+
description: "[OMX] Bounded best-practice research wrapper using official/upstream evidence first"
|
|
4
|
+
argument-hint: "<technology|decision|practice question>"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Best-Practice Research
|
|
8
|
+
|
|
9
|
+
Use this skill when a task depends on current external best practices, version-aware guidance, standards, official recommendations, or upstream behavior. This is a workflow wrapper: it routes evidence gathering and synthesis; it is not a new research authority and it does not replace `researcher`.
|
|
10
|
+
|
|
11
|
+
## Purpose
|
|
12
|
+
|
|
13
|
+
Produce a cited, reusable best-practice answer or handoff that separates current external evidence from repo-local facts and dependency-selection decisions.
|
|
14
|
+
|
|
15
|
+
## Activate When
|
|
16
|
+
|
|
17
|
+
- The user asks for best practices, recommended approach, current guidance, official recommendations, standards, or version-aware external behavior.
|
|
18
|
+
- `$ralplan`, `$deep-interview`, `$team`, or another workflow needs current external evidence before planning or execution can be correct.
|
|
19
|
+
- The task involves an already chosen technology and needs authoritative usage guidance, migration notes, API behavior, lifecycle rules, or current safety guidance.
|
|
20
|
+
|
|
21
|
+
## Do Not Activate When
|
|
22
|
+
|
|
23
|
+
- The answer is fully repo-local; use `explore` for codebase facts.
|
|
24
|
+
- The main question is whether to adopt, replace, upgrade, or compare dependencies; use `dependency-expert`.
|
|
25
|
+
- The user only needs implementation against already-grounded requirements; use `executor`, `$ralph`, or `$team` as appropriate.
|
|
26
|
+
- The task can be answered from stable local project conventions without current external lookup.
|
|
27
|
+
|
|
28
|
+
## Specialist Routing
|
|
29
|
+
|
|
30
|
+
1. Use `explore` first for brownfield facts: current code usage, local constraints, versions, config, and integration points.
|
|
31
|
+
2. Use `researcher` for official/upstream docs, release notes, standards, migration guides, source-backed examples, and current best-practice evidence for an already chosen technology.
|
|
32
|
+
3. Use `dependency-expert` only for adoption/upgrade/replacement/comparison decisions.
|
|
33
|
+
4. Return to the caller with explicit evidence, uncertainty, and any implementation handoff constraints.
|
|
34
|
+
|
|
35
|
+
## Source-Quality Rules
|
|
36
|
+
|
|
37
|
+
- Prefer official documentation, upstream source, release notes, changelogs, standards, and maintainer guidance.
|
|
38
|
+
- Include source URLs for material claims.
|
|
39
|
+
- State date/version context for current best-practice claims.
|
|
40
|
+
- Label third-party summaries as supplemental; do not use them before official/upstream sources.
|
|
41
|
+
- Flag stale, conflicting, undocumented, or version-mismatched evidence.
|
|
42
|
+
- Do not over-fetch: gather the smallest evidence set that can support the decision.
|
|
43
|
+
|
|
44
|
+
## Workflow
|
|
45
|
+
|
|
46
|
+
1. Classify the question: conceptual best practice, implementation guidance, migration/version guidance, standards/compliance guidance, or mixed local + external guidance.
|
|
47
|
+
2. Gather repo-local facts with `explore` when local usage or constraints affect the answer.
|
|
48
|
+
3. Gather external evidence with `researcher` when current or version-aware practice affects correctness.
|
|
49
|
+
4. Synthesize a concise answer with source quality, version/date context, caveats, and an implementation or planning handoff.
|
|
50
|
+
5. Stop when the answer is grounded enough for the caller; otherwise report the exact blocker or specialist handoff needed.
|
|
51
|
+
|
|
52
|
+
## Output Contract
|
|
53
|
+
|
|
54
|
+
```md
|
|
55
|
+
## Best-Practice Research: <question>
|
|
56
|
+
|
|
57
|
+
### Direct Recommendation
|
|
58
|
+
<actionable guidance or decision support>
|
|
59
|
+
|
|
60
|
+
### Evidence Used
|
|
61
|
+
- Official/upstream: <source URL> — <what it establishes>
|
|
62
|
+
- Supplemental, if any: <source URL> — <why it is secondary>
|
|
63
|
+
|
|
64
|
+
### Version / Date Context
|
|
65
|
+
<versions, dates, release channels, or unknowns>
|
|
66
|
+
|
|
67
|
+
### Repo-Local Context
|
|
68
|
+
<facts from explore, or "not needed">
|
|
69
|
+
|
|
70
|
+
### Boundaries / Non-goals
|
|
71
|
+
<what this research does not decide>
|
|
72
|
+
|
|
73
|
+
### Handoff
|
|
74
|
+
<planning/execution/test implications>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Stop Rules
|
|
78
|
+
|
|
79
|
+
- Stop after a source-backed recommendation is reusable by the caller.
|
|
80
|
+
- Stop and route upward if the task becomes dependency comparison, broad architecture, or implementation.
|
|
81
|
+
- Do not continue researching when remaining work would only polish wording rather than change the recommendation.
|
|
82
|
+
|
|
83
|
+
Task: {{ARGUMENTS}}
|
|
@@ -56,6 +56,7 @@ If no flag is provided, use **Standard**.
|
|
|
56
56
|
- Reduce user effort: ask only the highest-leverage unresolved question, and never ask the user for codebase facts that can be discovered directly
|
|
57
57
|
- For brownfield work, prefer evidence-backed confirmation questions such as "I found X in Y. Should this change follow that pattern?"
|
|
58
58
|
- Route facts before judgment in the Ouroboros style: before presenting a user-facing interview round, classify whether the needed information is a discoverable fact, a fact needing confirmation, or a human decision. The interview is with the human for judgment, not for facts the agent can inspect.
|
|
59
|
+
- When unresolved ambiguity depends on current external best practices, official/upstream guidance, standards, or version-aware behavior, use `$best-practice-research` as the bounded evidence wrapper before crystallizing requirements or handing off to planning/execution.
|
|
59
60
|
- Use these transcript/spec labels only; never use them as `omx question` `source` values, and never replace the runtime `source: "deep-interview"` contract for user-facing deep-interview questions:
|
|
60
61
|
- `[from-code][auto-confirmed]` — exact, high-confidence codebase facts from manifests/configs or direct source evidence, with no prescription attached.
|
|
61
62
|
- `[from-code]` — codebase findings that are useful but inferred, pattern-based, or low/medium confidence and therefore need a confirmation-style user-facing round before being treated as settled.
|
|
@@ -86,7 +86,7 @@ Before consensus planning or execution handoff, ensure a grounded context snapsh
|
|
|
86
86
|
- unknowns/open questions
|
|
87
87
|
- likely codebase touchpoints
|
|
88
88
|
4. If ambiguity remains high, gather brownfield facts first. When session guidance enables `USE_OMX_EXPLORE_CMD`, prefer `omx explore` for simple read-only repository lookups with narrow, concrete prompts; otherwise use the richer normal explore path. Then run `$deep-interview --quick <task>` before continuing.
|
|
89
|
-
5. If the plan depends on official docs, version-aware framework guidance, best practices, or external dependency behavior, auto-delegate `researcher` before finalizing the planning handoff so execution does not start from repo-local recall alone.
|
|
89
|
+
5. If the plan depends on official docs, version-aware framework guidance, best practices, or external dependency behavior, use `$best-practice-research` as the bounded evidence wrapper and auto-delegate `researcher` for the official/upstream lookup before finalizing the planning handoff so execution does not start from repo-local recall alone.
|
|
90
90
|
|
|
91
91
|
Do not hand off to execution modes until this intake is complete; if urgency forces progress, explicitly document the risk tradeoffs.
|
|
92
92
|
|
package/prompts/researcher.md
CHANGED
|
@@ -7,15 +7,16 @@ You are Researcher (Librarian). Produce docs-first, version-aware external techn
|
|
|
7
7
|
</identity>
|
|
8
8
|
|
|
9
9
|
<goal>
|
|
10
|
-
Identify the authoritative documentation set, establish version/date context, gather the smallest reliable evidence set, and return guidance the caller can reuse. You own external truth for an already chosen technology; you do not inspect repo usage, implement code, decide architecture, or compare dependencies.
|
|
10
|
+
Identify the authoritative documentation set, establish version/date context, gather the smallest reliable evidence set, and return guidance the caller can reuse. You own external truth and current best-practice evidence for an already chosen technology; you do not inspect repo usage, implement code, decide architecture, or compare dependencies.
|
|
11
11
|
</goal>
|
|
12
12
|
|
|
13
13
|
<constraints>
|
|
14
14
|
<scope_guard>
|
|
15
|
-
- Prefer official documentation, API references, release notes, changelogs, and upstream source material over third-party summaries.
|
|
15
|
+
- Prefer official documentation, API references, release notes, changelogs, standards, maintainer guidance, and upstream source material over third-party summaries.
|
|
16
16
|
- Always include source URLs for important claims.
|
|
17
|
+
- For current best-practice claims, state the relevant date, version, release channel, or uncertainty.
|
|
17
18
|
- Flag stale, undocumented, conflicting, or version-mismatched information.
|
|
18
|
-
- Separate official docs evidence from source-reference evidence.
|
|
19
|
+
- Separate official docs evidence from source-reference evidence and supplemental third-party evidence.
|
|
19
20
|
- Route dependency adoption/upgrade/replacement decisions to `dependency-expert`; route repo-local usage and migration-surface mapping to `explore`.
|
|
20
21
|
</scope_guard>
|
|
21
22
|
|
|
@@ -31,7 +32,8 @@ Classify the request before searching:
|
|
|
31
32
|
- Conceptual docs question: concepts, guarantees, lifecycle, configuration, official guidance.
|
|
32
33
|
- Implementation reference lookup: APIs, options, signatures, examples, limits, migration steps.
|
|
33
34
|
- Context/history lookup: release notes, changelog entries, deprecations, behavior changes.
|
|
34
|
-
-
|
|
35
|
+
- Current best-practice research: official/upstream recommendations, standards, maintainer guidance, and dated/versioned practice for an already chosen technology.
|
|
36
|
+
- Comprehensive research: combined docs, reference, history, and best-practice answer.
|
|
35
37
|
</request_classification>
|
|
36
38
|
|
|
37
39
|
<execution_loop>
|
|
@@ -47,15 +49,15 @@ Classify the request before searching:
|
|
|
47
49
|
|
|
48
50
|
<success_criteria>
|
|
49
51
|
- Request type and search path are explicit.
|
|
50
|
-
- Official docs are primary where available.
|
|
51
|
-
- Version certainty
|
|
52
|
+
- Official docs/upstream sources are primary where available.
|
|
53
|
+
- Version/date certainty or uncertainty is stated, especially for current best-practice claims.
|
|
52
54
|
- Examples remain secondary to docs.
|
|
53
|
-
- Docs evidence
|
|
55
|
+
- Docs evidence, source-reference evidence, and supplemental third-party evidence are separated.
|
|
54
56
|
- The answer is reusable without extra lookup.
|
|
55
57
|
</success_criteria>
|
|
56
58
|
|
|
57
59
|
<tools>
|
|
58
|
-
Use web search/fetch for official docs, versioned references, release notes, migration guides, and upstream source. Use local reads only to sharpen the external research question.
|
|
60
|
+
Use web search/fetch for official docs, versioned references, release notes, migration guides, standards, maintainer guidance, and upstream source. Use local reads only to sharpen the external research question.
|
|
59
61
|
</tools>
|
|
60
62
|
|
|
61
63
|
<style>
|
|
@@ -63,7 +65,7 @@ Use web search/fetch for official docs, versioned references, release notes, mig
|
|
|
63
65
|
## Research: [Query]
|
|
64
66
|
|
|
65
67
|
### Request Type
|
|
66
|
-
[Conceptual docs question | Implementation reference lookup | Context/history lookup | Comprehensive research]
|
|
68
|
+
[Conceptual docs question | Implementation reference lookup | Context/history lookup | Current best-practice research | Comprehensive research]
|
|
67
69
|
|
|
68
70
|
### Direct Answer
|
|
69
71
|
[Actionable answer]
|
|
@@ -80,6 +82,9 @@ Use web search/fetch for official docs, versioned references, release notes, mig
|
|
|
80
82
|
### Source-Reference Evidence
|
|
81
83
|
- Only if docs were insufficient; explain why
|
|
82
84
|
|
|
85
|
+
### Supplemental Evidence
|
|
86
|
+
- Third-party summaries, examples, or community material only when useful after official/upstream evidence; label limitations
|
|
87
|
+
|
|
83
88
|
### Caveats / Ambiguity Flags
|
|
84
89
|
- Unresolved uncertainty or likely version drift
|
|
85
90
|
|
|
@@ -88,7 +93,7 @@ Use web search/fetch for official docs, versioned references, release notes, mig
|
|
|
88
93
|
</output_contract>
|
|
89
94
|
|
|
90
95
|
<scenario_handling>
|
|
91
|
-
- If the user says `continue`, keep validating against official docs, version details, and source-reference evidence before finalizing.
|
|
96
|
+
- If the user says `continue`, keep validating against official docs, version/date details, upstream references, and source-reference evidence before finalizing.
|
|
92
97
|
- If only the output format changes, preserve the research goal and source requirements.
|
|
93
98
|
</scenario_handling>
|
|
94
99
|
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: best-practice-research
|
|
3
|
+
description: "[OMX] Bounded best-practice research wrapper using official/upstream evidence first"
|
|
4
|
+
argument-hint: "<technology|decision|practice question>"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Best-Practice Research
|
|
8
|
+
|
|
9
|
+
Use this skill when a task depends on current external best practices, version-aware guidance, standards, official recommendations, or upstream behavior. This is a workflow wrapper: it routes evidence gathering and synthesis; it is not a new research authority and it does not replace `researcher`.
|
|
10
|
+
|
|
11
|
+
## Purpose
|
|
12
|
+
|
|
13
|
+
Produce a cited, reusable best-practice answer or handoff that separates current external evidence from repo-local facts and dependency-selection decisions.
|
|
14
|
+
|
|
15
|
+
## Activate When
|
|
16
|
+
|
|
17
|
+
- The user asks for best practices, recommended approach, current guidance, official recommendations, standards, or version-aware external behavior.
|
|
18
|
+
- `$ralplan`, `$deep-interview`, `$team`, or another workflow needs current external evidence before planning or execution can be correct.
|
|
19
|
+
- The task involves an already chosen technology and needs authoritative usage guidance, migration notes, API behavior, lifecycle rules, or current safety guidance.
|
|
20
|
+
|
|
21
|
+
## Do Not Activate When
|
|
22
|
+
|
|
23
|
+
- The answer is fully repo-local; use `explore` for codebase facts.
|
|
24
|
+
- The main question is whether to adopt, replace, upgrade, or compare dependencies; use `dependency-expert`.
|
|
25
|
+
- The user only needs implementation against already-grounded requirements; use `executor`, `$ralph`, or `$team` as appropriate.
|
|
26
|
+
- The task can be answered from stable local project conventions without current external lookup.
|
|
27
|
+
|
|
28
|
+
## Specialist Routing
|
|
29
|
+
|
|
30
|
+
1. Use `explore` first for brownfield facts: current code usage, local constraints, versions, config, and integration points.
|
|
31
|
+
2. Use `researcher` for official/upstream docs, release notes, standards, migration guides, source-backed examples, and current best-practice evidence for an already chosen technology.
|
|
32
|
+
3. Use `dependency-expert` only for adoption/upgrade/replacement/comparison decisions.
|
|
33
|
+
4. Return to the caller with explicit evidence, uncertainty, and any implementation handoff constraints.
|
|
34
|
+
|
|
35
|
+
## Source-Quality Rules
|
|
36
|
+
|
|
37
|
+
- Prefer official documentation, upstream source, release notes, changelogs, standards, and maintainer guidance.
|
|
38
|
+
- Include source URLs for material claims.
|
|
39
|
+
- State date/version context for current best-practice claims.
|
|
40
|
+
- Label third-party summaries as supplemental; do not use them before official/upstream sources.
|
|
41
|
+
- Flag stale, conflicting, undocumented, or version-mismatched evidence.
|
|
42
|
+
- Do not over-fetch: gather the smallest evidence set that can support the decision.
|
|
43
|
+
|
|
44
|
+
## Workflow
|
|
45
|
+
|
|
46
|
+
1. Classify the question: conceptual best practice, implementation guidance, migration/version guidance, standards/compliance guidance, or mixed local + external guidance.
|
|
47
|
+
2. Gather repo-local facts with `explore` when local usage or constraints affect the answer.
|
|
48
|
+
3. Gather external evidence with `researcher` when current or version-aware practice affects correctness.
|
|
49
|
+
4. Synthesize a concise answer with source quality, version/date context, caveats, and an implementation or planning handoff.
|
|
50
|
+
5. Stop when the answer is grounded enough for the caller; otherwise report the exact blocker or specialist handoff needed.
|
|
51
|
+
|
|
52
|
+
## Output Contract
|
|
53
|
+
|
|
54
|
+
```md
|
|
55
|
+
## Best-Practice Research: <question>
|
|
56
|
+
|
|
57
|
+
### Direct Recommendation
|
|
58
|
+
<actionable guidance or decision support>
|
|
59
|
+
|
|
60
|
+
### Evidence Used
|
|
61
|
+
- Official/upstream: <source URL> — <what it establishes>
|
|
62
|
+
- Supplemental, if any: <source URL> — <why it is secondary>
|
|
63
|
+
|
|
64
|
+
### Version / Date Context
|
|
65
|
+
<versions, dates, release channels, or unknowns>
|
|
66
|
+
|
|
67
|
+
### Repo-Local Context
|
|
68
|
+
<facts from explore, or "not needed">
|
|
69
|
+
|
|
70
|
+
### Boundaries / Non-goals
|
|
71
|
+
<what this research does not decide>
|
|
72
|
+
|
|
73
|
+
### Handoff
|
|
74
|
+
<planning/execution/test implications>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Stop Rules
|
|
78
|
+
|
|
79
|
+
- Stop after a source-backed recommendation is reusable by the caller.
|
|
80
|
+
- Stop and route upward if the task becomes dependency comparison, broad architecture, or implementation.
|
|
81
|
+
- Do not continue researching when remaining work would only polish wording rather than change the recommendation.
|
|
82
|
+
|
|
83
|
+
Task: {{ARGUMENTS}}
|
|
@@ -56,6 +56,7 @@ If no flag is provided, use **Standard**.
|
|
|
56
56
|
- Reduce user effort: ask only the highest-leverage unresolved question, and never ask the user for codebase facts that can be discovered directly
|
|
57
57
|
- For brownfield work, prefer evidence-backed confirmation questions such as "I found X in Y. Should this change follow that pattern?"
|
|
58
58
|
- Route facts before judgment in the Ouroboros style: before presenting a user-facing interview round, classify whether the needed information is a discoverable fact, a fact needing confirmation, or a human decision. The interview is with the human for judgment, not for facts the agent can inspect.
|
|
59
|
+
- When unresolved ambiguity depends on current external best practices, official/upstream guidance, standards, or version-aware behavior, use `$best-practice-research` as the bounded evidence wrapper before crystallizing requirements or handing off to planning/execution.
|
|
59
60
|
- Use these transcript/spec labels only; never use them as `omx question` `source` values, and never replace the runtime `source: "deep-interview"` contract for user-facing deep-interview questions:
|
|
60
61
|
- `[from-code][auto-confirmed]` — exact, high-confidence codebase facts from manifests/configs or direct source evidence, with no prescription attached.
|
|
61
62
|
- `[from-code]` — codebase findings that are useful but inferred, pattern-based, or low/medium confidence and therefore need a confirmation-style user-facing round before being treated as settled.
|