sneakoscope 10.3.2 → 10.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -12
- package/config/skills-hash-ledger.v1.json +7 -1
- package/crates/sks-core/Cargo.lock +1 -1
- package/crates/sks-core/Cargo.toml +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/config/skills-manifest.json +13 -7
- package/dist/core/agents/agent-effort-policy.js +15 -13
- package/dist/core/agents/native-worker-backend-router.js +13 -8
- package/dist/core/codex-hooks/codex-hook-managed-install.js +56 -2
- package/dist/core/codex-lb/desktop-bridge-migration/retired-runtime-cleanup.js +1 -0
- package/dist/core/codex-native/core-skill-manifest.js +4 -4
- package/dist/core/decisions/cli.js +9 -2
- package/dist/core/decisions/config.js +7 -0
- package/dist/core/decisions/integration.js +54 -12
- package/dist/core/decisions/policy.js +27 -4
- package/dist/core/decisions/questions.js +39 -9
- package/dist/core/decisions/routing.js +15 -10
- package/dist/core/decisions/types.js +11 -25
- package/dist/core/doctor/current-project-guidance.js +38 -1
- package/dist/core/doctor/skill-legacy-surface.js +2 -1
- package/dist/core/hooks-runtime/hook-context.js +1 -1
- package/dist/core/hooks-runtime/jev-spawn-routing.js +21 -2
- package/dist/core/hooks-runtime/managed-guidance-preflight.js +30 -0
- package/dist/core/hooks-runtime/official-subagent-lifecycle.js +3 -3
- package/dist/core/hooks-runtime/parent-orchestration-gate.js +372 -0
- package/dist/core/hooks-runtime/subagent-context.js +13 -3
- package/dist/core/hooks-runtime/subagent-spawn-policy.js +5 -10
- package/dist/core/hooks-runtime.js +46 -8
- package/dist/core/init/skills/inventory.js +5 -1
- package/dist/core/init/skills.js +4 -4
- package/dist/core/init.js +39 -7
- package/dist/core/managed-assets/managed-assets-manifest.js +17 -17
- package/dist/core/pipeline-internals/runtime-core.js +2 -2
- package/dist/core/provider/model-router.js +8 -5
- package/dist/core/recallpulse/policy.js +2 -2
- package/dist/core/recallpulse.js +3 -3
- package/dist/core/release/gate-affected-globs.js +0 -1
- package/dist/core/research/mock-result.js +2 -2
- package/dist/core/research/research-adversarial-review.js +7 -7
- package/dist/core/research/research-claim-synthesizer.js +3 -3
- package/dist/core/research/research-falsification-runner.js +3 -3
- package/dist/core/research/research-super-search.js +5 -2
- package/dist/core/research/research-synthesis-writer.js +2 -2
- package/dist/core/research.js +5 -5
- package/dist/core/routes/dollar-manifest-lite.js +1 -1
- package/dist/core/routes.js +10 -10
- package/dist/core/runtime/task-profile.js +9 -5
- package/dist/core/subagents/model-policy.js +27 -45
- package/dist/core/subagents/model-tiers.js +153 -0
- package/dist/core/subagents/naruto-command-args.js +3 -3
- package/dist/core/subagents/naruto-help-contract.js +18 -13
- package/dist/core/subagents/naruto-host-credentials.js +8 -13
- package/dist/core/subagents/official-subagent-config.js +11 -7
- package/dist/core/subagents/official-subagent-preparation.js +12 -8
- package/dist/core/subagents/official-subagent-prompt.js +33 -33
- package/dist/core/subagents/official-subagent-runner.js +3 -3
- package/dist/core/subagents/role-model-preferences.js +26 -21
- package/dist/core/update/managed-permission-repair.js +462 -0
- package/dist/core/update/update-migration-state/retired-local-decision.js +32 -2
- package/dist/core/update/update-migration-state/simple-stages.js +42 -5
- package/dist/core/update/update-migration-state.js +63 -1
- package/dist/core/update-check.js +35 -8
- package/dist/core/version.js +1 -1
- package/dist/scripts/codex-native-agent-role-content-check.js +10 -5
- package/dist/scripts/codex-native-gate-lib.js +3 -1
- package/dist/scripts/current-surface-update-e2e-check.js +1 -0
- package/dist/scripts/mutation-callsite-coverage-check.js +2 -2
- package/dist/scripts/release-affected-selector-check.js +1 -2
- package/dist/scripts/typed-routing-gate-lib.js +3 -1
- package/package.json +1 -1
- package/release-gates.v2.json +2 -6
package/dist/core/init.js
CHANGED
|
@@ -245,6 +245,38 @@ export function mergeManagedHooksJson(existingContent, commandPrefix, projectRoo
|
|
|
245
245
|
}
|
|
246
246
|
return `${JSON.stringify({ ...root, hooks: nextHooks }, null, 2)}\n`;
|
|
247
247
|
}
|
|
248
|
+
export function pruneRetiredSksHookEvents(existingContent, installedEvents) {
|
|
249
|
+
let root;
|
|
250
|
+
try {
|
|
251
|
+
root = existingContent?.trim() ? JSON.parse(existingContent) : null;
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
return { text: existingContent, removed: [] };
|
|
255
|
+
}
|
|
256
|
+
if (!root || typeof root !== 'object' || Array.isArray(root))
|
|
257
|
+
return { text: existingContent, removed: [] };
|
|
258
|
+
const hooks = root.hooks && typeof root.hooks === 'object' && !Array.isArray(root.hooks) ? root.hooks : null;
|
|
259
|
+
if (!hooks)
|
|
260
|
+
return { text: existingContent, removed: [] };
|
|
261
|
+
const installed = new Set(installedEvents);
|
|
262
|
+
const removed = [];
|
|
263
|
+
const nextHooks = {};
|
|
264
|
+
for (const [eventName, entries] of Object.entries(hooks)) {
|
|
265
|
+
if (installed.has(eventName) || !Array.isArray(entries)) {
|
|
266
|
+
nextHooks[eventName] = entries;
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
const mapped = entries.map((entry) => stripSksManagedHookEntry(entry));
|
|
270
|
+
if (mapped.some((entry, index) => entry !== entries[index]))
|
|
271
|
+
removed.push(eventName);
|
|
272
|
+
const preserved = mapped.filter(Boolean);
|
|
273
|
+
if (preserved.length)
|
|
274
|
+
nextHooks[eventName] = preserved;
|
|
275
|
+
}
|
|
276
|
+
if (!removed.length)
|
|
277
|
+
return { text: existingContent, removed };
|
|
278
|
+
return { text: `${JSON.stringify({ ...root, hooks: nextHooks }, null, 2)}\n`, removed };
|
|
279
|
+
}
|
|
248
280
|
function stripSksManagedHookEntry(entry) {
|
|
249
281
|
if (!entry || typeof entry !== 'object' || Array.isArray(entry) || !Array.isArray(entry.hooks))
|
|
250
282
|
return entry;
|
|
@@ -274,11 +306,11 @@ const AGENTS_BLOCK = [
|
|
|
274
306
|
'## Execution',
|
|
275
307
|
'',
|
|
276
308
|
'- Codex native `/goal` is the only persisted goal owner. Goal objectives must state the outcome, scope, constraints, verification, done-when conditions, stop conditions, and non-goals.',
|
|
277
|
-
'-
|
|
278
|
-
'- The parent owns decomposition, integration, verification, and the final answer. Delegate
|
|
279
|
-
'-
|
|
280
|
-
'- Preserve the user-selected parent model, reasoning effort, and service tier.
|
|
281
|
-
'- SKS child spawns must
|
|
309
|
+
'- Answer, Help, Goal, and tiny DFix stay parent-owned. Implementation routes to Naruto (`$sks-naruto`, alias `$sks-work`; standalone `sks naruto run`), which is parent orchestration only: decompose, assign disjoint slices, spawn, integrate, and verify. Do not implement those slices in the parent thread. The SKS PreToolUse hook denies parent-thread source edits until the first child thread starts and while children are still running; .sneakoscope artifacts stay parent-writable, and Jev may release a confirmed orchestration-scaffolding edit.',
|
|
310
|
+
'- The parent owns decomposition, integration, verification, and the final answer. Delegate implementation slices with disjoint write scopes, reuse capacity across root-owned waves, and never nest subagents.',
|
|
311
|
+
'- Every child runs the newest model of the tier its work needs (fast, balanced, context, or deep); no model family is pinned. When Jev mode is on, Jev picks the tier for each new Naruto child spawn and SKS seals it. A user role preference stays authoritative. Do not pick a child model yourself.',
|
|
312
|
+
'- Preserve the user-selected parent model, reasoning effort, and service tier. Parent settings stay on the parent thread. A role preference wins over the Jev seal for that role.',
|
|
313
|
+
'- SKS child spawns must pass the sealed model and reasoning effort with `fork_turns="none"` or a positive bounded turn count; carry the complete bounded slice contract in `message`. Never use full-history inheritance for children. Full-history forks (`fork_turns="all"`, including the omitted default) inherit the parent agent type, model, and reasoning effort and must not be combined with `agent_type`, `model`, or `reasoning_effort`.',
|
|
282
314
|
'- Route-specific skills own route-specific details. Do not inject unrelated Design, PPT, image, browser, research, DB, or release policy into ordinary work.',
|
|
283
315
|
'- Do not stop at a plan when implementation was requested. Finish the requested outcome, including verification of the changed path, before stopping for review. Stop early only on a hard blocker or when the stated done-when conditions are met.',
|
|
284
316
|
'- User instructions outrank skill guidance. Infer routine details, honor authorization already provided, and finish authorized preparation before asking for a decision that changes scope or has irreversible effects.',
|
|
@@ -1119,8 +1151,8 @@ export function codexAppQuickReference(scope, commandPrefix) {
|
|
|
1119
1151
|
coreEngineeringDirectiveReferenceText(),
|
|
1120
1152
|
'dollar-commands:',
|
|
1121
1153
|
...currentDollarCommands().map((c) => `- \`${sksPrefixedDollarCommand(c.command)}\`: ${c.route}`),
|
|
1122
|
-
'Routing: Answer is read-only, DFix handles tiny edits, and
|
|
1123
|
-
'Subagent context:
|
|
1154
|
+
'Routing: Answer is read-only, DFix handles tiny edits, and Naruto implementation is parent orchestration with child slices enforced by the PreToolUse gate (spawn before any source edit, and no parent edits beside running children). Answer and tiny DFix stay on the parent.',
|
|
1155
|
+
'Subagent context: pass the sealed model and reasoning effort with `fork_turns="none"` or a positive bounded turn count. Each child uses the newest model of its tier; Jev mode picks that tier at each new spawn. Pass the complete bounded slice contract in `message`. Never use `fork_turns="all"` together with a custom model.',
|
|
1124
1156
|
'Goal: Codex native /goal is the only persisted goal owner; no SKS Goal mission, bridge, compatibility loop, or fallback state is allowed.',
|
|
1125
1157
|
'Context: use bounded TriWiki recall when a claim needs project memory; refresh after material changes; validate before handoff/final; use Context7 or official vendor docs when external contracts or versions matter.',
|
|
1126
1158
|
'Completion: report the result, actual verification, and remaining gaps once. Reflection and Honest Mode are optional unless explicitly requested or required by the strict profile.',
|
|
@@ -23,7 +23,7 @@ export const MANAGED_OFFICIAL_SUBAGENT_ROLES = Object.freeze([
|
|
|
23
23
|
filename: 'worker.toml',
|
|
24
24
|
aliases: ['worker'],
|
|
25
25
|
codexName: 'worker',
|
|
26
|
-
description: '
|
|
26
|
+
description: 'Fast-tier execution subagent only for tiny, short-context, mechanical work with an explicit done condition.',
|
|
27
27
|
policy: 'luna_max_mechanical',
|
|
28
28
|
keywords: ['tiny', 'short context', 'single file', 'mechanical', 'repeatable', 'exact rename', 'format only', 'typo', 'simple search', 'typing', '단순 검색', '타이핑'],
|
|
29
29
|
nicknames: ['Kite', 'Moss', 'Pico', 'Reed', 'Vale', 'Wren'],
|
|
@@ -47,14 +47,14 @@ Do not claim success without direct evidence.`
|
|
|
47
47
|
filename: 'implementation-specialist.toml',
|
|
48
48
|
aliases: ['implementation-specialist', 'core-implementer'],
|
|
49
49
|
codexName: 'implementation_specialist',
|
|
50
|
-
description: '
|
|
50
|
+
description: 'Balanced-tier implementation specialist for instructed backend, core, API, lifecycle, and cross-file coding with disjoint ownership.',
|
|
51
51
|
policy: 'sol_high_implementation',
|
|
52
52
|
keywords: ['implementation', 'backend', 'core', 'api', 'lifecycle implementation', 'cross-file coding', 'feature change', '구현', '백엔드', '핵심 로직'],
|
|
53
53
|
nicknames: ['Builder', 'Forge', 'Mason', 'Rivet'],
|
|
54
54
|
instructions: `You are the bounded implementation specialist.
|
|
55
55
|
|
|
56
56
|
Own only the disjoint files and acceptance criteria assigned by the parent.
|
|
57
|
-
Use this role for instructed backend, core, API, lifecycle, and cross-file coding after the parent defines the implementation scope. Escalate review, debugging, planning, architecture, security, release, and ambiguous work to
|
|
57
|
+
Use this role for instructed backend, core, API, lifecycle, and cross-file coding after the parent defines the implementation scope. Escalate review, debugging, planning, architecture, security, release, and ambiguous work to a deep-tier specialist.
|
|
58
58
|
Do not redesign unrelated architecture or integrate sibling work.
|
|
59
59
|
Make the smallest defensible change, run focused verification, and return files, evidence, and residual risks.`
|
|
60
60
|
}),
|
|
@@ -86,7 +86,7 @@ Return a concise result, evidence, risks, and next action.`
|
|
|
86
86
|
filename: 'explorer.toml',
|
|
87
87
|
aliases: ['explorer', 'code-explorer'],
|
|
88
88
|
codexName: 'explorer',
|
|
89
|
-
description: '
|
|
89
|
+
description: 'Context-tier read-only codebase explorer for read-heavy scans, entry points, ownership, dependencies, and distilled evidence.',
|
|
90
90
|
policy: 'terra_max_context_tools',
|
|
91
91
|
sandbox: 'read-only',
|
|
92
92
|
keywords: ['explore', 'map', 'trace', 'inventory', 'locate', 'search', 'read-only', 'large search', 'repository-wide search', '대규모 검색'],
|
|
@@ -104,7 +104,7 @@ Return concise findings with exact paths and symbols.`
|
|
|
104
104
|
filename: 'long-context-analyst.toml',
|
|
105
105
|
aliases: ['long-context-analyst', 'large-context-analyst', 'document-analyst'],
|
|
106
106
|
codexName: 'long_context_analyst',
|
|
107
|
-
description: '
|
|
107
|
+
description: 'Context-tier read-only analyst for large files, long logs, multi-document context, and distilled evidence handoffs.',
|
|
108
108
|
policy: 'terra_max_context_tools',
|
|
109
109
|
sandbox: 'read-only',
|
|
110
110
|
keywords: ['long context', 'large file', 'large codebase', 'multi-document', 'supporting documents', 'extensive logs', 'context compression'],
|
|
@@ -112,7 +112,7 @@ Return concise findings with exact paths and symbols.`
|
|
|
112
112
|
instructions: `You are the long-context evidence analyst.
|
|
113
113
|
|
|
114
114
|
Read large files, long logs, or multiple supporting documents without turning raw context into unsupported conclusions.
|
|
115
|
-
Return a compact, source-addressable summary to the parent and identify which claims still require
|
|
115
|
+
Return a compact, source-addressable summary to the parent and identify which claims still require deep-tier judgment.
|
|
116
116
|
Use bounded TriWiki anchors first, hydrate only relevant sources, and do not edit files or spawn another subagent.`
|
|
117
117
|
}),
|
|
118
118
|
officialSubagentRole({
|
|
@@ -153,13 +153,13 @@ Run only the focused checks needed for the slice and report exact commands and o
|
|
|
153
153
|
filename: 'ui-implementer.toml',
|
|
154
154
|
aliases: ['ui-implementer', 'frontend-specialist'],
|
|
155
155
|
codexName: 'ui_implementer',
|
|
156
|
-
description: '
|
|
156
|
+
description: 'Balanced-tier UI and terminal-interface implementation specialist for instructed visual behavior, interaction, accessibility, and rendered state changes.',
|
|
157
157
|
policy: 'sol_high_implementation',
|
|
158
158
|
keywords: ['ui', 'ux', 'frontend', 'visual', 'terminal', 'accessibility'],
|
|
159
159
|
nicknames: ['Canvas', 'Iris', 'Pixel', 'Turing'],
|
|
160
160
|
instructions: `You are the UI implementation specialist.
|
|
161
161
|
|
|
162
|
-
Execute the coding scope defined by the parent; return unresolved design, debugging, or planning decisions to
|
|
162
|
+
Execute the coding scope defined by the parent; return unresolved design, debugging, or planning decisions to a deep-tier specialist.
|
|
163
163
|
Trace the rendered user-visible behavior before editing.
|
|
164
164
|
Make the smallest change that fixes interaction, layout, accessibility, or terminal presentation.
|
|
165
165
|
Preserve the existing design system and unrelated behavior.
|
|
@@ -170,14 +170,14 @@ Verify the rendered result with the appropriate live or deterministic surface an
|
|
|
170
170
|
filename: 'native-app-specialist.toml',
|
|
171
171
|
aliases: ['native-app-specialist', 'macos-specialist', 'desktop-specialist'],
|
|
172
172
|
codexName: 'native_app_specialist',
|
|
173
|
-
description: '
|
|
173
|
+
description: 'Balanced-tier native desktop coding specialist for instructed macOS AppKit and Swift menu-bar UI, app lifecycle, accessibility, and OS integration changes.',
|
|
174
174
|
policy: 'sol_high_implementation',
|
|
175
175
|
keywords: ['native app', 'macos', 'appkit', 'swift', 'menu bar', 'nsstatusitem', 'nsworkspace', 'tcc', 'desktop app'],
|
|
176
176
|
nicknames: ['Cocoa', 'Darwin', 'Quartz', 'Swift'],
|
|
177
177
|
instructions: `You are the native desktop implementation specialist.
|
|
178
178
|
|
|
179
179
|
Own only the assigned native macOS, AppKit, Swift, or menu-bar files.
|
|
180
|
-
Execute the coding scope defined by the parent; return unresolved architecture, debugging, or planning decisions to
|
|
180
|
+
Execute the coding scope defined by the parent; return unresolved architecture, debugging, or planning decisions to a deep-tier specialist.
|
|
181
181
|
Preserve the project design system, accessibility semantics, app lifecycle, and OS permission boundaries.
|
|
182
182
|
Do not substitute web UI or placeholder assets for required native behavior.
|
|
183
183
|
Verify with the narrowest compile, deterministic template, or live native check available and report exact evidence.`
|
|
@@ -187,7 +187,7 @@ Verify with the narrowest compile, deterministic template, or live native check
|
|
|
187
187
|
filename: 'computer-use-operator.toml',
|
|
188
188
|
aliases: ['computer-use-operator', 'desktop-operator'],
|
|
189
189
|
codexName: 'computer_use_operator',
|
|
190
|
-
description: '
|
|
190
|
+
description: 'Context-tier Computer Use operator for scoped native macOS, desktop-app, and OS-settings interaction or evidence capture.',
|
|
191
191
|
policy: 'terra_max_context_tools',
|
|
192
192
|
sandbox: 'read-only',
|
|
193
193
|
keywords: ['computer use', 'desktop interaction', 'macos inspection', 'system settings', 'native app inspection', 'visual evidence'],
|
|
@@ -196,7 +196,7 @@ Verify with the narrowest compile, deterministic template, or live native check
|
|
|
196
196
|
|
|
197
197
|
Use Codex Computer Use only for the explicit native macOS, desktop-app, OS-settings, or non-web visual slice assigned by the parent.
|
|
198
198
|
Do not target the hosting Codex Desktop app (com.openai.codex). For Codex-linked checks, observe Codex through structured host/process evidence and operate only the external native target.
|
|
199
|
-
Do not replace judgment, debugging, planning, or security review; return captured evidence to the appropriate
|
|
199
|
+
Do not replace judgment, debugging, planning, or security review; return captured evidence to the appropriate deep-tier specialist.
|
|
200
200
|
Honor the parent permission scope, avoid destructive or irreversible UI actions, do not edit source files, and report exactly what was observed or changed.`
|
|
201
201
|
}),
|
|
202
202
|
officialSubagentRole({
|
|
@@ -204,7 +204,7 @@ Honor the parent permission scope, avoid destructive or irreversible UI actions,
|
|
|
204
204
|
filename: 'browser-use-operator.toml',
|
|
205
205
|
aliases: ['browser-use-operator', 'chrome-operator', 'web-operator'],
|
|
206
206
|
codexName: 'browser_use_operator',
|
|
207
|
-
description: '
|
|
207
|
+
description: 'Context-tier Browser/Chrome operator for scoped website, localhost, webapp, and browser-based evidence collection or verification.',
|
|
208
208
|
policy: 'terra_max_context_tools',
|
|
209
209
|
sandbox: 'read-only',
|
|
210
210
|
keywords: ['browser use', 'browser', 'chrome', 'website', 'webapp', 'localhost', 'playwright', 'browser evidence'],
|
|
@@ -212,7 +212,7 @@ Honor the parent permission scope, avoid destructive or irreversible UI actions,
|
|
|
212
212
|
instructions: `You are the scoped Browser/Chrome operator.
|
|
213
213
|
|
|
214
214
|
Use the Codex Chrome Extension path first for websites, localhost, webapps, and browser-based verification, and halt rapidly when the required extension is unavailable.
|
|
215
|
-
Do not perform security, UX, debugging, or product judgment; collect precise browser evidence and hand it to the relevant
|
|
215
|
+
Do not perform security, UX, debugging, or product judgment; collect precise browser evidence and hand it to the relevant deep-tier specialist.
|
|
216
216
|
Honor the parent permission scope, avoid destructive external actions, do not edit source files, and report URLs or sensitive values only in redacted form.`
|
|
217
217
|
}),
|
|
218
218
|
officialSubagentRole({
|
|
@@ -220,14 +220,14 @@ Honor the parent permission scope, avoid destructive external actions, do not ed
|
|
|
220
220
|
filename: 'image-generation-operator.toml',
|
|
221
221
|
aliases: ['image-generation-operator', 'imagegen-operator', 'image-tool-operator'],
|
|
222
222
|
codexName: 'image_generation_operator',
|
|
223
|
-
description: '
|
|
223
|
+
description: 'Context-tier image-generation operator for scoped imagegen and GPT Image execution after the parent seals the visual requirements.',
|
|
224
224
|
policy: 'terra_max_context_tools',
|
|
225
225
|
keywords: ['image generation', 'imagegen', 'gpt image', IMAGEGEN_MODEL, 'generate image', 'edit image', 'visual asset'],
|
|
226
226
|
nicknames: ['Aperture', 'Frame', 'Palette', 'Render'],
|
|
227
227
|
instructions: `You are the scoped image-generation operator.
|
|
228
228
|
|
|
229
229
|
Execute only the sealed image-generation or image-editing instructions supplied by the parent, using the official Codex image generation surface when available.
|
|
230
|
-
Do not perform UX review, art-direction judgment, or product strategy; return generated artifact paths and tool evidence to a
|
|
230
|
+
Do not perform UX review, art-direction judgment, or product strategy; return generated artifact paths and tool evidence to a deep-tier reviewer when judgment is required.
|
|
231
231
|
Write only assigned generated-asset paths, preserve source images, and never fabricate successful image output.`
|
|
232
232
|
}),
|
|
233
233
|
officialSubagentRole({
|
|
@@ -404,7 +404,7 @@ Return release blockers, exact evidence, and the minimal verification still requ
|
|
|
404
404
|
filename: 'docs-maintainer.toml',
|
|
405
405
|
aliases: ['docs-maintainer', 'documentation'],
|
|
406
406
|
codexName: 'docs_maintainer',
|
|
407
|
-
description: '
|
|
407
|
+
description: 'Context-tier documentation maintainer for multi-source README, changelog, migration, and reference consistency after behavior is known.',
|
|
408
408
|
policy: 'terra_max_context_tools',
|
|
409
409
|
keywords: ['docs', 'documentation', 'readme', 'changelog', 'migration guide', 'reference'],
|
|
410
410
|
nicknames: ['Ink', 'Page', 'Scribe', 'Slate'],
|
|
@@ -1108,7 +1108,7 @@ async function prepareResearch(root, route, task, required, opts = {}) {
|
|
|
1108
1108
|
const researchPlan = await writeResearchPlan(dir, task, {});
|
|
1109
1109
|
const pipelinePlan = await writePipelinePlan(dir, { missionId: id, route, task, required, ambiguity: { required: false, status: 'direct_route' } });
|
|
1110
1110
|
await setCurrent(root, routeState(id, route, 'RESEARCH_PREPARED', required, { prompt: task, ...pipelinePlanState(pipelinePlan) }), { sessionKey: opts.sessionKey });
|
|
1111
|
-
return routeContext(route, id, task, required, `Run sks research run latest as a real long-running source-gathering pass, never an automatic mock fallback; do not modify repository source code. Run layered Super Search first and allow only correlated verified-content rows to support real claims. Then run exactly three independent official research_reviewer threads on
|
|
1111
|
+
return routeContext(route, id, task, required, `Run sks research run latest as a real long-running source-gathering pass, never an automatic mock fallback; do not modify repository source code. Run layered Super Search first and allow only correlated verified-content rows to support real claims. Then run exactly three independent official research_reviewer threads on the latest deep-tier model at max effort. Any objection requires a mission-local research_synthesizer revision and a fresh three-thread review cycle; do not launch a custom scheduler or debate pool. Keep subagent-plan.json, subagent-events.jsonl, subagent-parent-summary.json, and subagent-evidence.json current, write research-report.md and ${researchPaperArtifactForPlan(researchPlan)}, and pass the adversarial convergence, Honest Mode, and research-gate.json checks.`, null, root);
|
|
1112
1112
|
}
|
|
1113
1113
|
async function prepareAutoResearch(root, route, task, required, opts = {}) {
|
|
1114
1114
|
const { id, dir } = await createMission(root, { mode: 'autoresearch', prompt: task, sessionKey: opts.sessionKey });
|
|
@@ -1489,7 +1489,7 @@ ${intakeLine}
|
|
|
1489
1489
|
Pipeline plan: .sneakoscope/missions/${id}/${PIPELINE_PLAN_ARTIFACT}
|
|
1490
1490
|
Required skills: ${route.requiredSkills.join(', ')}
|
|
1491
1491
|
Stop gate: ${route.stopGate}
|
|
1492
|
-
Official subagents: ${routeRequiresSubagents(route, visibleTask) ? 'required
|
|
1492
|
+
Official subagents: ${routeRequiresSubagents(route, visibleTask) ? 'required; the parent orchestrates only: spawn a child per independent disjoint slice through official agent threads, wait, then integrate with matched SubagentStart/SubagentStop events and a parent integration summary.' : 'not required by this task profile; keep the work parent-owned unless a concrete independent decomposition emerges.'}
|
|
1493
1493
|
TriWiki: use a coordinate+voxel-overlay context pack when a claim needs project memory; hydrate low-trust claims from source; refresh after new findings or artifact changes; validate before handoffs/final claims. Coordinate-only packs are invalid and must be refreshed before pipeline decisions.
|
|
1494
1494
|
Final closeout: every pipeline final answer must summarize what was done, what changed for the user/repo, what was verified, and any remaining gaps.
|
|
1495
1495
|
${stopFinalizationRitualsEnforced(root) && route.stopGate !== 'none' && reflectionRequiredForRoute(route) ? `Reflection: ${reflectionInstructionText()}` : 'Reflection: not required for this route.'}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { decideSubagentModel, subagentModelProfile } from '../subagents/model-policy.js';
|
|
2
|
+
import { latestTierModelSet } from '../subagents/model-tiers.js';
|
|
2
3
|
const CATEGORY_POLICY = {
|
|
3
4
|
quick: { reasoning: 'low', serviceTier: 'fast' },
|
|
4
5
|
standard: { reasoning: 'medium', serviceTier: 'fast' },
|
|
@@ -10,7 +11,9 @@ const CATEGORY_POLICY = {
|
|
|
10
11
|
refactor: { reasoning: 'max', serviceTier: 'fast' },
|
|
11
12
|
strategy: { reasoning: 'max', serviceTier: 'fast' }
|
|
12
13
|
};
|
|
13
|
-
export
|
|
14
|
+
export function narutoModels() {
|
|
15
|
+
return [...latestTierModelSet()];
|
|
16
|
+
}
|
|
14
17
|
const E2E_WORK_RE = /(e2e|end[-\s]?to[-\s]?end|test_execution|browser|chrome|computer[-\s]?use|computer\s+use|cross[-\s]?app|playwright|selenium|puppeteer|브라우저|컴퓨터\s*유즈)/i;
|
|
15
18
|
export async function routeModel(category, opts = {}) {
|
|
16
19
|
if (opts.narutoOnly) {
|
|
@@ -47,9 +50,9 @@ export function routeNarutoGpt56Model(input = {}) {
|
|
|
47
50
|
|| category === 'ultrabrain'
|
|
48
51
|
|| explicitHighRisk
|
|
49
52
|
});
|
|
50
|
-
const preferred = explicit ||
|
|
53
|
+
const preferred = explicit || automatic.model;
|
|
51
54
|
const available = input.availableModels == null
|
|
52
|
-
?
|
|
55
|
+
? narutoModels()
|
|
53
56
|
: input.availableModels.map(normalizeNarutoGpt56Model).filter((model) => Boolean(model));
|
|
54
57
|
const degraded = new Set((input.degradedModels || []).map((model) => String(model).toLowerCase()));
|
|
55
58
|
const usable = available.filter((model) => !degraded.has(model));
|
|
@@ -65,7 +68,7 @@ export function isNarutoGpt56Model(value) {
|
|
|
65
68
|
}
|
|
66
69
|
export function normalizeNarutoGpt56Model(value) {
|
|
67
70
|
const model = String(value || '').trim().toLowerCase();
|
|
68
|
-
return
|
|
71
|
+
return narutoModels().includes(model) ? model : null;
|
|
69
72
|
}
|
|
70
73
|
export function childInheritsActiveMainModel(_value) {
|
|
71
74
|
return false;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { thinkingSubagentModel, SUBAGENT_EFFORT } from '../subagents/model-policy.js';
|
|
2
2
|
export const RECALLPULSE_DECISION_ARTIFACT = 'recallpulse-decision.json';
|
|
3
3
|
export const RECALLPULSE_HISTORY_ARTIFACT = 'recallpulse-history.jsonl';
|
|
4
4
|
export const MISSION_STATUS_LEDGER_ARTIFACT = 'mission-status-ledger.json';
|
|
@@ -201,7 +201,7 @@ export const RESEARCH_REVIEWER_CONTRACT = Object.freeze([
|
|
|
201
201
|
...agent,
|
|
202
202
|
persona_boundary: 'Apply only the assigned review dimension and report evidence-bound findings.',
|
|
203
203
|
custom_agent: 'research_reviewer',
|
|
204
|
-
model:
|
|
204
|
+
model: thinkingSubagentModel(),
|
|
205
205
|
reasoning_effort: SUBAGENT_EFFORT,
|
|
206
206
|
service_tier: 'fast'
|
|
207
207
|
})));
|
package/dist/core/recallpulse.js
CHANGED
|
@@ -200,7 +200,7 @@ export async function evaluateRecallPulseFixtures(root, opts = {}) {
|
|
|
200
200
|
fixture('repeated-stop-hook-blocker', true, 'Duplicate suppression keys collapse repeated blocker text into one durable status row.'),
|
|
201
201
|
fixture('hook-only-status-visibility', true, 'mission-status-ledger.json preserves recoverable user-visible status.'),
|
|
202
202
|
fixture('research-persona-missing', true, 'Research validation blocks missing agent display_name/persona/persona_boundary.'),
|
|
203
|
-
fixture('research-model-policy-not-sol-max', true, 'Research validation blocks reviewer rows that are not bound to the research_reviewer
|
|
203
|
+
fixture('research-model-policy-not-sol-max', true, 'Research validation blocks reviewer rows that are not bound to the research_reviewer latest deep-tier max policy.'),
|
|
204
204
|
fixture('research-review-evidence-missing', true, 'Research validation blocks reviewer outcomes without source evidence, falsifiers, or probes.'),
|
|
205
205
|
fixture('research-impersonation', true, 'Research validation blocks persona-boundary violations.'),
|
|
206
206
|
fixture('oversized-l1', true, 'L1 token and item limits reject oversized active recall.'),
|
|
@@ -369,7 +369,7 @@ export async function buildRecallPulseGovernanceReport(root, opts = {}) {
|
|
|
369
369
|
],
|
|
370
370
|
migration_paths: {
|
|
371
371
|
existing_missions: 'Run sks recallpulse run <mission-id> and sks recallpulse governance <mission-id> to add report-only artifacts.',
|
|
372
|
-
existing_research_artifacts: 'Research gates require agent display_name/persona/persona_boundary fields and the research_reviewer
|
|
372
|
+
existing_research_artifacts: 'Research gates require agent display_name/persona/persona_boundary fields and the research_reviewer latest deep-tier max binding; old ledgers must be migrated before claiming pass.',
|
|
373
373
|
generated_skills: 'Do not edit generated installed skills directly; rerun init/bootstrap from engine source when generated text needs refreshing.'
|
|
374
374
|
},
|
|
375
375
|
release_gate: 'RecallPulse remains report-only unless packcheck, selftest, sizecheck, registry metadata check, TriWiki validate, and RecallPulse fixture eval pass.'
|
|
@@ -882,7 +882,7 @@ function preservedRoutePersonality(routeId = '', routeName = '') {
|
|
|
882
882
|
ImageUXReview: ("Image UX Review keeps " + IMAGEGEN_MODEL + " annotated raster review identity"),
|
|
883
883
|
ComputerUse: 'Computer Use keeps maximum-speed native Mac/non-web visual lane identity',
|
|
884
884
|
Goal: 'Goal uses Codex native /goal only and creates no SKS-owned persistence, artifact, loop, or fallback state',
|
|
885
|
-
Research: 'Research keeps Super Search evidence, three independent
|
|
885
|
+
Research: 'Research keeps Super Search evidence, three independent deep-tier review dimensions, bounded revision, paper, and falsification identity',
|
|
886
886
|
AutoResearch: 'AutoResearch keeps iterative experiment loop identity',
|
|
887
887
|
DB: 'DB keeps conservative read-first destructive-operation safety identity',
|
|
888
888
|
MadSKS: 'MAD-SKS keeps explicit scoped high-risk authorization identity',
|
|
@@ -31,7 +31,6 @@ export function affectedGlobsFor(id) {
|
|
|
31
31
|
'src/core/routes/design-policy.ts',
|
|
32
32
|
'src/scripts/installed-package-smoke-check.ts',
|
|
33
33
|
'src/scripts/postinstall-safe-side-effects-check.ts',
|
|
34
|
-
'test/blackbox/postinstall-safe-side-effects-packed.test.mjs',
|
|
35
34
|
'test/unit/postinstall-command.test.mjs',
|
|
36
35
|
'test/unit/publish-workflow-safety.test.mjs'
|
|
37
36
|
];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import {
|
|
2
|
+
import { thinkingSubagentModel, SUBAGENT_EFFORT } from '../subagents/model-policy.js';
|
|
3
3
|
import { nowIso, writeJsonAtomic, writeTextAtomic } from '../fsx.js';
|
|
4
4
|
import { CLAIM_EVIDENCE_MATRIX_ARTIFACT, buildClaimEvidenceMatrixFromLedgers, writeClaimEvidenceMatrix } from './claim-evidence-matrix.js';
|
|
5
5
|
import { DEFAULT_RESEARCH_QUALITY_CONTRACT, writeResearchQualityContract } from './research-quality-contract.js';
|
|
@@ -174,7 +174,7 @@ export async function writeMockResearchResult(dir, plan) {
|
|
|
174
174
|
mandate: agent.mandate,
|
|
175
175
|
model_policy: {
|
|
176
176
|
custom_agent: RESEARCH_REVIEWER_CUSTOM_AGENT,
|
|
177
|
-
model:
|
|
177
|
+
model: thinkingSubagentModel(),
|
|
178
178
|
reasoning_effort: SUBAGENT_EFFORT,
|
|
179
179
|
enforcement_source: 'mock_fixture'
|
|
180
180
|
},
|
|
@@ -6,7 +6,7 @@ import { buildOfficialSubagentPrompt } from '../subagents/official-subagent-prom
|
|
|
6
6
|
import { codexAppSessionKey, detectCodexAppSession, runOfficialSubagentWorkflow } from '../subagents/official-subagent-runner.js';
|
|
7
7
|
import { readOfficialSubagentConfig } from '../subagents/official-subagent-config.js';
|
|
8
8
|
import { SUBAGENT_EVENT_LOG_FILENAME, SUBAGENT_EVIDENCE_FILENAME, SUBAGENT_PARENT_SUMMARY_FILENAME, bindTrustworthySubagentParentSummaryToRun, normalizeSubagentParentSummary, persistOrReuseTrustworthySubagentParentSummary, readSubagentEvents, writeSubagentEvidence } from '../subagents/subagent-evidence.js';
|
|
9
|
-
import {
|
|
9
|
+
import { thinkingSubagentModel, SUBAGENT_EFFORT } from '../subagents/model-policy.js';
|
|
10
10
|
import { RESEARCH_AGENT_COUNCIL, RESEARCH_REVIEWER_CONFIG_ARTIFACT, RESEARCH_REVIEWER_CUSTOM_AGENT, researchAgentAgentName, researchPaperArtifactForPlan } from '../research.js';
|
|
11
11
|
import { normalizeResearchSynthesisOutput } from './research-synthesis-writer.js';
|
|
12
12
|
import { buildResearchReviewArtifactDigest, validateResearchReviewArtifactDigest } from './research-review-artifact-digest.js';
|
|
@@ -301,7 +301,7 @@ export function buildResearchAdversarialPlan(plan, maxCycles = 3, maxThreads = R
|
|
|
301
301
|
persona: agent.persona,
|
|
302
302
|
persona_boundary: agent.persona_boundary,
|
|
303
303
|
custom_agent: RESEARCH_REVIEWER_CUSTOM_AGENT,
|
|
304
|
-
model_policy: `${
|
|
304
|
+
model_policy: `${thinkingSubagentModel()} ${SUBAGENT_EFFORT}`,
|
|
305
305
|
model_policy_source: modelPolicyEvidence?.source || RESEARCH_REVIEWER_CONFIG_ARTIFACT,
|
|
306
306
|
model_policy_sha256: modelPolicyEvidence?.sha256 || null
|
|
307
307
|
})),
|
|
@@ -533,7 +533,7 @@ async function finalizeResearchAdversarialArtifacts(input, plan, reviewCycles, r
|
|
|
533
533
|
publication_acceptance_guaranteed: false,
|
|
534
534
|
reviewer_model_policy: {
|
|
535
535
|
custom_agent: RESEARCH_REVIEWER_CUSTOM_AGENT,
|
|
536
|
-
model:
|
|
536
|
+
model: thinkingSubagentModel(),
|
|
537
537
|
reasoning_effort: SUBAGENT_EFFORT,
|
|
538
538
|
enforcement_source: plan?.model_policy_evidence?.source || RESEARCH_REVIEWER_CONFIG_ARTIFACT,
|
|
539
539
|
config_sha256: plan?.model_policy_evidence?.sha256 || null,
|
|
@@ -581,7 +581,7 @@ async function writeCompatibilityCouncilArtifacts(dir, plan, finalReview, gate)
|
|
|
581
581
|
mandate: agent.mandate,
|
|
582
582
|
model_policy: {
|
|
583
583
|
custom_agent: RESEARCH_REVIEWER_CUSTOM_AGENT,
|
|
584
|
-
model:
|
|
584
|
+
model: thinkingSubagentModel(),
|
|
585
585
|
reasoning_effort: SUBAGENT_EFFORT,
|
|
586
586
|
enforcement_source: gate?.reviewer_model_policy?.enforcement_source || RESEARCH_REVIEWER_CONFIG_ARTIFACT,
|
|
587
587
|
config_sha256: gate?.reviewer_model_policy?.config_sha256 || null
|
|
@@ -951,7 +951,7 @@ async function prepareResearchSubagentRun(input, opts) {
|
|
|
951
951
|
})),
|
|
952
952
|
model_policy: {
|
|
953
953
|
custom_agent: plan.phase === 'review' ? RESEARCH_REVIEWER_CUSTOM_AGENT : 'research_synthesizer',
|
|
954
|
-
model:
|
|
954
|
+
model: thinkingSubagentModel(),
|
|
955
955
|
reasoning_effort: SUBAGENT_EFFORT,
|
|
956
956
|
config: plan.phase === 'review' ? RESEARCH_REVIEWER_CONFIG_ARTIFACT : '.codex/agents/research-synthesizer.toml'
|
|
957
957
|
}
|
|
@@ -997,7 +997,7 @@ async function verifyResearchReviewerRoleConfig(root) {
|
|
|
997
997
|
const blockers = [
|
|
998
998
|
...(text.trim() ? [] : ['research_reviewer_agent_config_missing']),
|
|
999
999
|
...(name === RESEARCH_REVIEWER_CUSTOM_AGENT ? [] : [`research_reviewer_name_mismatch:${name || 'missing'}`]),
|
|
1000
|
-
...(model ===
|
|
1000
|
+
...(model === thinkingSubagentModel() ? [] : [`research_reviewer_model_mismatch:${model || 'missing'}`]),
|
|
1001
1001
|
...(effort === SUBAGENT_EFFORT ? [] : [`research_reviewer_effort_mismatch:${effort || 'missing'}`]),
|
|
1002
1002
|
...(sandbox === 'read-only' ? [] : [`research_reviewer_sandbox_mismatch:${sandbox || 'missing'}`])
|
|
1003
1003
|
];
|
|
@@ -1019,7 +1019,7 @@ function mockResearchModelPolicyEvidence() {
|
|
|
1019
1019
|
ok: true,
|
|
1020
1020
|
source: 'mock_fixture:research_reviewer',
|
|
1021
1021
|
name: RESEARCH_REVIEWER_CUSTOM_AGENT,
|
|
1022
|
-
model:
|
|
1022
|
+
model: thinkingSubagentModel(),
|
|
1023
1023
|
reasoning_effort: SUBAGENT_EFFORT,
|
|
1024
1024
|
sandbox_mode: 'read-only',
|
|
1025
1025
|
sha256: null,
|
|
@@ -2,7 +2,7 @@ import path from 'node:path';
|
|
|
2
2
|
import { readJson } from '../fsx.js';
|
|
3
3
|
import { uniqueValues as unique } from '../text/strings.js';
|
|
4
4
|
import { runCodexTask } from '../codex-control/codex-task-runner.js';
|
|
5
|
-
import {
|
|
5
|
+
import { thinkingSubagentModel, SUBAGENT_EFFORT } from '../subagents/model-policy.js';
|
|
6
6
|
import { normalizeClaimEvidenceMatrix, validateClaimEvidenceMatrix } from './claim-evidence-matrix.js';
|
|
7
7
|
export async function synthesizeResearchClaimEvidenceMatrix(input) {
|
|
8
8
|
const result = await runCodexTask({
|
|
@@ -33,7 +33,7 @@ export async function synthesizeResearchClaimEvidenceMatrix(input) {
|
|
|
33
33
|
hardTimeoutMs: input.timeoutMs,
|
|
34
34
|
...(input.deadlineMs === undefined ? {} : { deadlineEpochMs: input.deadlineMs })
|
|
35
35
|
},
|
|
36
|
-
model:
|
|
36
|
+
model: thinkingSubagentModel(),
|
|
37
37
|
reasoningEffort: SUBAGENT_EFFORT,
|
|
38
38
|
modelReasoningEffort: SUBAGENT_EFFORT,
|
|
39
39
|
serviceTier: 'fast'
|
|
@@ -178,7 +178,7 @@ function buildResearchClaimSynthesisPrompt(input) {
|
|
|
178
178
|
const contract = input.plan?.quality_contract || {};
|
|
179
179
|
return [
|
|
180
180
|
'Build a semantic claim-evidence matrix for this Research mission.',
|
|
181
|
-
`This is a judgment-heavy task: use ${
|
|
181
|
+
`This is a judgment-heavy task: use ${thinkingSubagentModel()} with ${SUBAGENT_EFFORT} reasoning.`,
|
|
182
182
|
'Return exactly one JSON object matching sks.claim-evidence-matrix.v1.',
|
|
183
183
|
'Never reuse or merge discovery claim IDs merely because their strings match.',
|
|
184
184
|
'Group sources only when their hydrated notes/content actually support the same written claim.',
|
|
@@ -2,7 +2,7 @@ import path from 'node:path';
|
|
|
2
2
|
import { nowIso, readJson } from '../fsx.js';
|
|
3
3
|
import { uniqueValues as unique } from '../text/strings.js';
|
|
4
4
|
import { runCodexTask } from '../codex-control/codex-task-runner.js';
|
|
5
|
-
import {
|
|
5
|
+
import { thinkingSubagentModel, SUBAGENT_EFFORT } from '../subagents/model-policy.js';
|
|
6
6
|
export async function runResearchFalsification(input) {
|
|
7
7
|
const result = await runCodexTask({
|
|
8
8
|
route: '$Research',
|
|
@@ -32,7 +32,7 @@ export async function runResearchFalsification(input) {
|
|
|
32
32
|
hardTimeoutMs: input.timeoutMs,
|
|
33
33
|
...(input.deadlineMs === undefined ? {} : { deadlineEpochMs: input.deadlineMs })
|
|
34
34
|
},
|
|
35
|
-
model:
|
|
35
|
+
model: thinkingSubagentModel(),
|
|
36
36
|
reasoningEffort: SUBAGENT_EFFORT,
|
|
37
37
|
modelReasoningEffort: SUBAGENT_EFFORT,
|
|
38
38
|
serviceTier: 'fast'
|
|
@@ -107,7 +107,7 @@ export function normalizeResearchFalsification(value, claimMatrix, sourceLedger)
|
|
|
107
107
|
function buildResearchFalsificationPrompt(input) {
|
|
108
108
|
return [
|
|
109
109
|
'Attempt to falsify the key claims in this Research mission before manuscript synthesis.',
|
|
110
|
-
`This is a judgment-heavy task: use ${
|
|
110
|
+
`This is a judgment-heavy task: use ${thinkingSubagentModel()} with ${SUBAGENT_EFFORT} reasoning.`,
|
|
111
111
|
'Return exactly one JSON object matching sks.falsification-ledger.v1.',
|
|
112
112
|
'Do not mark a claim as surviving by default. Compare the written claim with actual source notes/content and counterevidence.',
|
|
113
113
|
'Use only known claim IDs and source IDs. A generic attack with no source-linked reasoning is invalid.',
|
|
@@ -2,10 +2,13 @@ import path from 'node:path';
|
|
|
2
2
|
import { readJson, sha256 } from '../fsx.js';
|
|
3
3
|
import { runCodexTask } from '../codex-control/codex-task-runner.js';
|
|
4
4
|
import { runSuperSearch } from '../super-search/index.js';
|
|
5
|
-
import { TERRA_SUBAGENT_EFFORT
|
|
5
|
+
import { TERRA_SUBAGENT_EFFORT } from '../subagents/model-policy.js';
|
|
6
|
+
import { latestModelForTier } from '../subagents/model-tiers.js';
|
|
6
7
|
import {} from './research-source-shards.js';
|
|
7
8
|
export const RESEARCH_SOURCE_ACQUISITION_MODEL_POLICY = Object.freeze({
|
|
8
|
-
model
|
|
9
|
+
get model() {
|
|
10
|
+
return latestModelForTier('context');
|
|
11
|
+
},
|
|
9
12
|
model_reasoning_effort: TERRA_SUBAGENT_EFFORT
|
|
10
13
|
});
|
|
11
14
|
export async function runResearchSuperSearchShard(input) {
|
|
@@ -2,7 +2,7 @@ import path from 'node:path';
|
|
|
2
2
|
import { readJson, writeJsonAtomic, writeTextAtomic, nowIso } from '../fsx.js';
|
|
3
3
|
import { runCodexTask } from '../codex-control/codex-task-runner.js';
|
|
4
4
|
import { researchPaperArtifactForPlan } from '../research.js';
|
|
5
|
-
import {
|
|
5
|
+
import { thinkingSubagentModel, SUBAGENT_EFFORT } from '../subagents/model-policy.js';
|
|
6
6
|
import { analyzeResearchReportQuality, countWords } from './research-report-quality.js';
|
|
7
7
|
import { analyzeResearchRepetition } from './research-repetition-detector.js';
|
|
8
8
|
import { buildRealisticResearchPaper, buildRealisticResearchReport } from './research-realistic-report.js';
|
|
@@ -78,7 +78,7 @@ export async function runResearchCodexSynthesisWriter(input) {
|
|
|
78
78
|
hardTimeoutMs: input.timeoutMs || 120000,
|
|
79
79
|
...(input.deadlineMs === undefined ? {} : { deadlineEpochMs: input.deadlineMs })
|
|
80
80
|
},
|
|
81
|
-
model:
|
|
81
|
+
model: thinkingSubagentModel(),
|
|
82
82
|
reasoningEffort: SUBAGENT_EFFORT,
|
|
83
83
|
modelReasoningEffort: SUBAGENT_EFFORT,
|
|
84
84
|
serviceTier: 'fast'
|
package/dist/core/research.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import {
|
|
2
|
+
import { thinkingSubagentModel, SUBAGENT_EFFORT } from './subagents/model-policy.js';
|
|
3
3
|
import { appendJsonlBounded, nowIso, readJson, readText, writeJsonAtomic, writeTextAtomic, exists } from './fsx.js';
|
|
4
4
|
import { OUTCOME_RUBRIC } from './proof-field.js';
|
|
5
5
|
import { RESEARCH_REVIEWER_CONTRACT } from './recallpulse.js';
|
|
@@ -100,7 +100,7 @@ export function researchNativeAgentPlan(prompt = '', opts = {}) {
|
|
|
100
100
|
role: persona.role,
|
|
101
101
|
mandate: persona.mandate,
|
|
102
102
|
custom_agent: RESEARCH_REVIEWER_CUSTOM_AGENT,
|
|
103
|
-
model:
|
|
103
|
+
model: thinkingSubagentModel(),
|
|
104
104
|
reasoning_effort: SUBAGENT_EFFORT,
|
|
105
105
|
read_only: true
|
|
106
106
|
}));
|
|
@@ -202,10 +202,10 @@ export function createResearchPlan(prompt, opts = {}) {
|
|
|
202
202
|
policy: 'Assign distinct evidence, method, and falsification review dimensions.',
|
|
203
203
|
effort_policy: {
|
|
204
204
|
custom_agent: RESEARCH_REVIEWER_CUSTOM_AGENT,
|
|
205
|
-
required_model:
|
|
205
|
+
required_model: thinkingSubagentModel(),
|
|
206
206
|
required_effort: SUBAGENT_EFFORT,
|
|
207
207
|
applies_to: 'every_official_adversarial_reviewer',
|
|
208
|
-
rule: 'Every adversarial reviewer uses the verified research_reviewer custom agent configuration
|
|
208
|
+
rule: 'Every adversarial reviewer uses the verified research_reviewer custom agent configuration on the latest deep-tier model at max effort. Long-context and source-tool acquisition uses the context tier; synthesis, falsification, and review use the deep tier.'
|
|
209
209
|
},
|
|
210
210
|
debate_policy: {
|
|
211
211
|
mode: 'independent_adversarial_reviews_with_bounded_revision',
|
|
@@ -473,7 +473,7 @@ export function defaultAgentLedger(plan = null) {
|
|
|
473
473
|
mandate: agent.mandate,
|
|
474
474
|
model_policy: {
|
|
475
475
|
custom_agent: RESEARCH_REVIEWER_CUSTOM_AGENT,
|
|
476
|
-
model:
|
|
476
|
+
model: thinkingSubagentModel(),
|
|
477
477
|
reasoning_effort: SUBAGENT_EFFORT,
|
|
478
478
|
enforcement_source: RESEARCH_REVIEWER_CONFIG_ARTIFACT
|
|
479
479
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IMAGEGEN_MODEL } from '../imagegen/imagegen-model-policy.js';
|
|
2
2
|
import { normalizeDollarSkillName, prefixKnownSksDollarReferences, sksPrefixedDollarCommand } from './dollar-prefix.js';
|
|
3
|
-
const NARUTO_DESCRIPTION = '$Naruto runs
|
|
3
|
+
const NARUTO_DESCRIPTION = '$Naruto runs implementation work through Codex official subagents. The parent orchestrates: it owns decomposition, integration, and verification, spawns a child per disjoint slice, and does not implement slices itself; standalone launches default to the latest deep-tier model. Each child runs the newest model of its tier, Jev mode picks the tier on spawn, and explicit counts and measured host limits are honored. max_threads is a cap, never a target.';
|
|
4
4
|
const COMPUTER_USE_DESCRIPTION = 'Maximum-speed Codex Computer Use lane for native macOS, desktop-app, OS-settings, and non-web visual tasks only. Browser, localhost, website, webapp, and web-based app verification must route through Codex Chrome Extension readiness first.';
|
|
5
5
|
const DOLLAR_COMMANDS_LITE_BASE = [
|
|
6
6
|
{ command: '$DFix', route: 'fast direct fix', description: 'Tiny simple direct edits such as copy, labels, typos, wording, spacing, colors, or clearly scoped one-line changes. Bypasses the general SKS pipeline and runs an ultralight, no-record task-list path.' },
|