@spec-box/sdd 0.10.0 → 0.12.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/README.md +57 -6
- package/assets/help/log.md +12 -0
- package/assets/help/packet.md +19 -0
- package/assets/help/result.md +28 -0
- package/assets/hosts/claude/agent.md +4 -2
- package/assets/hosts/claude/project.md +3 -0
- package/assets/hosts/codex/AGENTS.md +7 -0
- package/assets/hosts/codex/agent.md +9 -0
- package/assets/hosts/codex/headless-result.md +2 -0
- package/assets/roles/challenger.md +9 -2
- package/assets/roles/implementer.md +9 -20
- package/assets/roles/planner.md +17 -31
- package/assets/roles/researcher.md +14 -30
- package/assets/roles/reviewer.md +4 -7
- package/assets/roles/tester.md +11 -17
- package/assets/roles/verifier.md +14 -20
- package/assets/schema/sbox-answer.schema.json +2 -2
- package/assets/skills/sbox-browser.md +4 -0
- package/assets/skills/sbox-contract.md +4 -0
- package/assets/skills/sbox-run.md +34 -14
- package/assets/skills/sbox-wiki.md +3 -0
- package/dist/adapters/host/claude/index.js +17 -25
- package/dist/adapters/host/claude/index.js.map +1 -1
- package/dist/adapters/host/codex/index.js +56 -0
- package/dist/adapters/host/codex/index.js.map +1 -0
- package/dist/adapters/host/index.js +10 -3
- package/dist/adapters/host/index.js.map +1 -1
- package/dist/adapters/runner/codex.js +31 -7
- package/dist/adapters/runner/codex.js.map +1 -1
- package/dist/browser/cli.js +2 -0
- package/dist/browser/cli.js.map +1 -1
- package/dist/cli/commands/host.js +3 -4
- package/dist/cli/commands/host.js.map +1 -1
- package/dist/cli/commands/models.js +25 -0
- package/dist/cli/commands/models.js.map +1 -0
- package/dist/cli/commands/protocol.js +6 -4
- package/dist/cli/commands/protocol.js.map +1 -1
- package/dist/cli/help-command.js +29 -0
- package/dist/cli/help-command.js.map +1 -0
- package/dist/cli/main.js +5 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/contract/cli.js +2 -0
- package/dist/contract/cli.js.map +1 -1
- package/dist/core/change.js +5 -3
- package/dist/core/change.js.map +1 -1
- package/dist/core/config.js +8 -6
- package/dist/core/config.js.map +1 -1
- package/dist/core/help.js +65 -0
- package/dist/core/help.js.map +1 -0
- package/dist/core/model-policy.js +54 -0
- package/dist/core/model-policy.js.map +1 -0
- package/dist/core/packet.js +45 -26
- package/dist/core/packet.js.map +1 -1
- package/dist/core/phases.js +14 -3
- package/dist/core/phases.js.map +1 -1
- package/dist/core/report.js +23 -5
- package/dist/core/report.js.map +1 -1
- package/dist/core/result.js +2 -3
- package/dist/core/result.js.map +1 -1
- package/dist/core/run.js +13 -10
- package/dist/core/run.js.map +1 -1
- package/dist/core/runner.js +0 -23
- package/dist/core/runner.js.map +1 -1
- package/dist/core/skills.js +5 -4
- package/dist/core/skills.js.map +1 -1
- package/dist/wiki/cli.js +2 -0
- package/dist/wiki/cli.js.map +1 -1
- package/docs/design.md +43 -18
- package/package.json +1 -1
package/dist/core/config.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { modelProfilesSchema, roleProfilesSchema } from './model-policy.js';
|
|
1
2
|
import { specSchema } from '../contract/config.js';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import YAML from 'yaml';
|
|
@@ -6,7 +7,6 @@ import { SboxError } from './errors.js';
|
|
|
6
7
|
import { SBOX_DIR, CONFIG_FILE, exists, readText, writeText } from './paths.js';
|
|
7
8
|
export const AUTONOMY_PROFILES = ['supervised', 'checkpoint', 'autonomous'];
|
|
8
9
|
export const GATES = ['proposal', 'plan', 'tests'];
|
|
9
|
-
const modelsSchema = z.record(z.string(), z.string());
|
|
10
10
|
export const configSchema = z.object({
|
|
11
11
|
version: z.literal(1),
|
|
12
12
|
spec: specSchema,
|
|
@@ -21,16 +21,17 @@ export const configSchema = z.object({
|
|
|
21
21
|
runner: z
|
|
22
22
|
.object({
|
|
23
23
|
default: z.enum(['claude', 'codex']).default('claude'),
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
efforts: z.
|
|
27
|
-
defaultEffort: z.
|
|
24
|
+
roleProfiles: roleProfilesSchema,
|
|
25
|
+
models: z.never({ error: 'runner.models удалён: используйте runner.claude.profiles / runner.codex.profiles' }).optional(),
|
|
26
|
+
efforts: z.never({ error: 'runner.efforts удалён: effort задаётся внутри профиля раннера' }).optional(),
|
|
27
|
+
defaultEffort: z.never({ error: 'runner.defaultEffort удалён: effort задаётся внутри профиля раннера' }).optional(),
|
|
28
28
|
/** Каталог вне репозитория для событий и stderr запусков. */
|
|
29
29
|
stateDir: z.string().default('~/.sbox/runs'),
|
|
30
30
|
timeoutMinutes: z.number().positive().default(120),
|
|
31
31
|
idleTimeoutMinutes: z.number().positive().default(20),
|
|
32
32
|
claude: z
|
|
33
33
|
.object({
|
|
34
|
+
profiles: modelProfilesSchema('claude'),
|
|
34
35
|
executable: z.string().optional(),
|
|
35
36
|
permissionMode: z.enum(['default', 'acceptEdits', 'bypassPermissions']).default('acceptEdits'),
|
|
36
37
|
allowedTools: z.array(z.string()).default(['Read', 'Grep', 'Glob', 'Bash', 'Edit', 'Write', 'MultiEdit', 'NotebookEdit']),
|
|
@@ -41,11 +42,12 @@ export const configSchema = z.object({
|
|
|
41
42
|
.prefault({}),
|
|
42
43
|
codex: z
|
|
43
44
|
.object({
|
|
45
|
+
profiles: modelProfilesSchema('codex'),
|
|
44
46
|
executable: z.string().default('codex'),
|
|
45
47
|
sandboxWrite: z.string().default('workspace-write'),
|
|
46
48
|
sandboxRead: z.string().default('read-only'),
|
|
47
49
|
approvalPolicy: z.string().default('on-request'),
|
|
48
|
-
extraConfig: z.array(z.string()).default([]),
|
|
50
|
+
extraConfig: z.array(z.string().refine(value => !/^\s*["']?(?:model|model_reasoning_effort)["']?\s*=/.test(value), { message: 'Модель и effort задаются в runner.codex.profiles, не в extraConfig' })).default([]),
|
|
49
51
|
})
|
|
50
52
|
.prefault({}),
|
|
51
53
|
})
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAU,CAAC;AAGrF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAG5D,MAAM,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { SboxError } from './errors.js';
|
|
4
|
+
import { assetsDir, exists, findProjectRoot, readText, sboxDir } from './paths.js';
|
|
5
|
+
import { parseDoc } from './project-docs.js';
|
|
6
|
+
import { loadSkills } from './skills.js';
|
|
7
|
+
const SKILL_PREFIX = 'sbox-';
|
|
8
|
+
/** Темы, у которых есть собственный бинарник с командой help. */
|
|
9
|
+
const TOOL_TOPICS = new Set(['browser', 'contract', 'wiki']);
|
|
10
|
+
/** Команда справки для скилла: у инструмента свой бинарник (`sbox-browser help`), у остальных тема sbox (`sbox help <тема>`). */
|
|
11
|
+
export function helpCommandFor(skillName) {
|
|
12
|
+
const topic = skillName.startsWith(SKILL_PREFIX) ? skillName.slice(SKILL_PREFIX.length) : skillName;
|
|
13
|
+
return TOOL_TOPICS.has(topic) ? `${skillName} help` : `sbox help ${topic}`;
|
|
14
|
+
}
|
|
15
|
+
function firstHeading(body) {
|
|
16
|
+
const m = body.match(/^#\s+(.+)$/m);
|
|
17
|
+
return m ? m[1].trim() : '';
|
|
18
|
+
}
|
|
19
|
+
function readHelpDir(dir, source) {
|
|
20
|
+
if (!exists(dir))
|
|
21
|
+
return [];
|
|
22
|
+
return fs
|
|
23
|
+
.readdirSync(dir)
|
|
24
|
+
.filter((f) => f.endsWith('.md'))
|
|
25
|
+
.sort()
|
|
26
|
+
.map((f) => {
|
|
27
|
+
const file = path.join(dir, f);
|
|
28
|
+
const doc = parseDoc(readText(file));
|
|
29
|
+
const description = typeof doc.frontmatter.description === 'string' ? doc.frontmatter.description : firstHeading(doc.body);
|
|
30
|
+
return { topic: path.basename(f, '.md'), description, text: doc.body.trim(), source, file };
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** Темы справки: встроенные файлы и скиллы, поверх них темы и скиллы проекта, если команда вызвана внутри проекта. */
|
|
34
|
+
export function loadHelpTopics(cwd) {
|
|
35
|
+
const root = findProjectRoot(cwd ?? process.cwd());
|
|
36
|
+
const byTopic = new Map();
|
|
37
|
+
for (const t of readHelpDir(path.join(assetsDir(), 'help'), 'builtin'))
|
|
38
|
+
byTopic.set(t.topic, t);
|
|
39
|
+
for (const s of loadSkills(root)) {
|
|
40
|
+
const topic = s.name.startsWith(SKILL_PREFIX) ? s.name.slice(SKILL_PREFIX.length) : s.name;
|
|
41
|
+
byTopic.set(topic, { topic, description: s.description, text: parseDoc(s.text).body.trim(), source: s.source, file: s.file });
|
|
42
|
+
}
|
|
43
|
+
if (root)
|
|
44
|
+
for (const t of readHelpDir(path.join(sboxDir(root), 'help'), 'project'))
|
|
45
|
+
byTopic.set(t.topic, t);
|
|
46
|
+
return [...byTopic.values()].sort((a, b) => a.topic.localeCompare(b.topic));
|
|
47
|
+
}
|
|
48
|
+
export function findHelpTopic(topics, name) {
|
|
49
|
+
const key = name.startsWith(SKILL_PREFIX) ? name.slice(SKILL_PREFIX.length) : name;
|
|
50
|
+
return topics.find((t) => t.topic === key) ?? null;
|
|
51
|
+
}
|
|
52
|
+
export function requireHelpTopic(topics, name) {
|
|
53
|
+
const topic = findHelpTopic(topics, name);
|
|
54
|
+
if (!topic)
|
|
55
|
+
throw new SboxError('NO_HELP_TOPIC', `Нет темы справки «${name}»`, `Темы: ${topics.map((t) => t.topic).join(', ')}; список с описаниями: sbox help`);
|
|
56
|
+
return topic;
|
|
57
|
+
}
|
|
58
|
+
/** Указатель тем: одна строка на тему; у инструментов та же справка доступна как `sbox-<тема> help`. */
|
|
59
|
+
export function renderHelpIndex(topics) {
|
|
60
|
+
const lines = ['Справка sbox для агентов и людей. Руководство по теме: sbox help <тема>; опции команды: <инструмент> <команда> --help.', ''];
|
|
61
|
+
for (const t of topics)
|
|
62
|
+
lines.push(`- ${t.topic}${TOOL_TOPICS.has(t.topic) ? ` (sbox-${t.topic} help)` : ''} — ${t.description}`);
|
|
63
|
+
return lines.join('\n');
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/core/help.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const ROLE_NAMES = ['researcher', 'planner', 'challenger', 'tester', 'implementer', 'reviewer', 'verifier', 'distiller'];
|
|
3
|
+
export const MODEL_PROFILES = ['simple', 'medium', 'complex'];
|
|
4
|
+
export const profileSchema = z.enum(MODEL_PROFILES);
|
|
5
|
+
export const complexityLevelSchema = z.enum(['простая', 'обычная', 'высокая']);
|
|
6
|
+
export const complexitySchema = z.object({ implementation: complexityLevelSchema, review: complexityLevelSchema });
|
|
7
|
+
export const roleProfilesSchema = z.partialRecord(z.enum(ROLE_NAMES), profileSchema).default({});
|
|
8
|
+
const effortSchema = z.enum(['none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max']);
|
|
9
|
+
/** Сохраняем имеющиеся идентификаторы моделей; проект может заменить любую пару. */
|
|
10
|
+
export const DEFAULT_MODEL_PROFILES = {
|
|
11
|
+
claude: {
|
|
12
|
+
simple: { model: 'claude-sonnet-5', effort: 'low' },
|
|
13
|
+
medium: { model: 'claude-sonnet-5', effort: 'medium' },
|
|
14
|
+
complex: { model: 'claude-opus-5', effort: 'high' },
|
|
15
|
+
},
|
|
16
|
+
codex: {
|
|
17
|
+
simple: { model: 'gpt-5.6-terra', effort: 'low' },
|
|
18
|
+
medium: { model: 'gpt-5.6-terra', effort: 'medium' },
|
|
19
|
+
complex: { model: 'gpt-5.6-sol', effort: 'high' },
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export function modelProfilesSchema(runner) {
|
|
23
|
+
const entry = (profile) => z.object({
|
|
24
|
+
model: z.string().trim().min(1).default(DEFAULT_MODEL_PROFILES[runner][profile].model),
|
|
25
|
+
effort: effortSchema.default(DEFAULT_MODEL_PROFILES[runner][profile].effort).refine(value => runner === 'claude' ? !['none', 'minimal'].includes(value) : value !== 'max', { message: `Недопустимый effort для ${runner}` }),
|
|
26
|
+
}).strict().prefault({});
|
|
27
|
+
return z.object({ simple: entry('simple'), medium: entry('medium'), complex: entry('complex') }).strict().prefault({});
|
|
28
|
+
}
|
|
29
|
+
export const DEFAULT_ROLE_PROFILES = {
|
|
30
|
+
researcher: 'medium', planner: 'complex', challenger: 'complex', tester: 'medium',
|
|
31
|
+
implementer: 'medium', reviewer: 'complex', verifier: 'medium', distiller: 'simple',
|
|
32
|
+
};
|
|
33
|
+
export function selectProfile(config, role, complexity) {
|
|
34
|
+
const explicit = config.runner.roleProfiles[role];
|
|
35
|
+
if (explicit)
|
|
36
|
+
return explicit;
|
|
37
|
+
// Независимое ревью не ослабляется оценкой сложности автора плана.
|
|
38
|
+
const level = role === 'implementer' || role === 'tester' ? complexity?.implementation : undefined;
|
|
39
|
+
if (level)
|
|
40
|
+
return { простая: 'simple', обычная: 'medium', высокая: 'complex' }[level];
|
|
41
|
+
return DEFAULT_ROLE_PROFILES[role];
|
|
42
|
+
}
|
|
43
|
+
export function resolveModel(config, runner, role, complexity, profileOverride) {
|
|
44
|
+
const profile = profileOverride ?? selectProfile(config, role, complexity);
|
|
45
|
+
return { runner, profile, ...config.runner[runner].profiles[profile] };
|
|
46
|
+
}
|
|
47
|
+
export const hostAgentName = (role, profile) => `sbox-${role}-${profile}`;
|
|
48
|
+
/** При автоматических возвратах сложность можно повысить, но нельзя незаметно понизить. */
|
|
49
|
+
export function higherComplexity(previous, next) {
|
|
50
|
+
const order = ['простая', 'обычная', 'высокая'];
|
|
51
|
+
return previous && order.indexOf(previous) > order.indexOf(next) ? previous : next;
|
|
52
|
+
}
|
|
53
|
+
export const claudeAgentName = hostAgentName;
|
|
54
|
+
//# sourceMappingURL=model-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-policy.js","sourceRoot":"","sources":["../../src/core/model-policy.ts"],"names":[],"mappings":"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"}
|
package/dist/core/packet.js
CHANGED
|
@@ -1,23 +1,21 @@
|
|
|
1
|
+
import { resolveModel, hostAgentName } from './model-policy.js';
|
|
1
2
|
import fs from 'node:fs';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import { loadRoleText } from './roles.js';
|
|
5
|
+
import { helpCommandFor } from './help.js';
|
|
6
|
+
import { loadSkills } from './skills.js';
|
|
4
7
|
import { artifactInstructions, artifactStates, loadWorkflow, pendingArtifacts } from './schema.js';
|
|
5
8
|
import { applicableDecisions, docsDir, docsForRole, loadDecisions } from './project-docs.js';
|
|
6
9
|
import { readChangeSet } from './changeset.js';
|
|
7
10
|
import { loadWiki } from './wiki.js';
|
|
8
11
|
import { wiringForChange } from './wiring.js';
|
|
9
12
|
import { exists, toPosix } from './paths.js';
|
|
10
|
-
const RESULT_FORMAT =
|
|
11
|
-
\`\`\`yaml
|
|
12
|
-
# sbox-result
|
|
13
|
-
status: готово | утверждение | заблокировано
|
|
14
|
-
blocker: { category: артефакт | тесты | реализация | внешний | пользователь | нет, artifact: <id>, message: <текст> }
|
|
15
|
-
\`\`\`
|
|
16
|
-
Дополнительные поля по роли: request (researcher: разбор запроса дословными цитатами со статусом подтверждено | противоречит | не проверено), complexity, size и deviations (planner на propose: отступления proposal от запроса или evidence с решением и причиной), questions (planner на plan), findings (reviewer), checks и gaps (verifier), dispositions и delivery_narrative (reviewer в фазе review), protected (tester), verified (implementer, verifier).`;
|
|
13
|
+
const RESULT_FORMAT = 'Ответ заканчивается блоком `# sbox-result` по образцу из раздела «Содержимое resultFile» твоей роли; поля всех ролей и статусы: `sbox help result`.';
|
|
17
14
|
const OBJECTIVES = {
|
|
18
15
|
'researcher:research': 'Собрать Evidence Pack по запросу: текущее поведение, затронутые capability и код, границы, доказательства, пробелы. Записать в evidence/research.md.',
|
|
19
16
|
'planner:propose': 'Написать proposal.md по запросу и evidence. Оценить размер изменения, сложность реализации и ревью.',
|
|
20
17
|
'planner:plan': 'Написать дельты спецификаций, design.md с общей картиной, контрактами, решениями и приоритизированными вопросами, затем tasks.md.',
|
|
18
|
+
'challenger:challenge': 'Независимо проверить план, дельты и задачи против запроса, evidence и кода; найти пропущенные сценарии и неподтверждённые допущения. Вернуть findings; артефакты не менять.',
|
|
21
19
|
'tester:cover': 'Написать автотесты по сценариям дельт на уровнях из testing.md, заполнить coverage.yaml и при необходимости test-plan.md, запустить тесты и убедиться, что новые падают по ожидаемой причине.',
|
|
22
20
|
'reviewer:tests_review': 'Проверить тесты против дельт спецификаций и дизайна: полнота покрытия сценариев, соответствие сценарию, отсутствие продуктовой логики в тестах, именование. Вернуть findings.',
|
|
23
21
|
'implementer:implement': 'Выполнить задачи из tasks.md, не изменяя защищённые файлы. Довести тесты из coverage.yaml до зелёных, отметить выполненные задачи.',
|
|
@@ -27,7 +25,7 @@ const OBJECTIVES = {
|
|
|
27
25
|
const WRITE_OWNERSHIP = {
|
|
28
26
|
researcher: ['evidence/research.md'],
|
|
29
27
|
planner: ['proposal.md', 'specs/**', 'design.md', 'tasks.md'],
|
|
30
|
-
challenger: [
|
|
28
|
+
challenger: [],
|
|
31
29
|
tester: ['coverage.yaml', 'test-plan.md', '<тестовые файлы по testing.md>'],
|
|
32
30
|
implementer: ['<продуктовый код>', 'tasks.md (только отметки [x])'],
|
|
33
31
|
reviewer: [],
|
|
@@ -36,6 +34,7 @@ const WRITE_OWNERSHIP = {
|
|
|
36
34
|
};
|
|
37
35
|
export function buildPacket(ctx) {
|
|
38
36
|
const { root, config, change, dir, role, phase } = ctx;
|
|
37
|
+
const execution = resolveModel(config, ctx.runner ?? config.runner.default, role, change.complexity);
|
|
39
38
|
const workflow = loadWorkflow(root);
|
|
40
39
|
const states = artifactStates(workflow, change, dir);
|
|
41
40
|
const artifacts = {};
|
|
@@ -64,7 +63,7 @@ export function buildPacket(ctx) {
|
|
|
64
63
|
'Не вызывать других агентов и не расширять объём задачи.',
|
|
65
64
|
'Не менять истину спецификаций: только дельты в specs/ изменения.',
|
|
66
65
|
'Соблюдать соглашения проекта из conventions.md и правила проекта из списка rules.',
|
|
67
|
-
'Журнал log.md из files.log: запись [CODE] сильнее факта из evidence или раннего артефакта, если она появилась позже. Опровергнутый факт фиксируй командой из
|
|
66
|
+
'Журнал log.md из files.log: запись [CODE] сильнее факта из evidence или раннего артефакта, если она появилась позже. Опровергнутый факт фиксируй командой `sbox log add` из tools, evidence не правь; противоречие утверждённому артефакту это блокер категории «артефакт».',
|
|
68
67
|
];
|
|
69
68
|
if (role === 'implementer' && change.protected.length > 0) {
|
|
70
69
|
constraints.push(`Защищённые файлы, менять запрещено: ${change.protected.join(', ')}`);
|
|
@@ -85,6 +84,7 @@ export function buildPacket(ctx) {
|
|
|
85
84
|
version: 1,
|
|
86
85
|
change: { id: change.id, title: change.title, dir: rel(dir), phase, size: change.size, status: change.status, base_revision: change.base_revision },
|
|
87
86
|
role,
|
|
87
|
+
execution: { ...execution, agent: hostAgentName(role, execution.profile) },
|
|
88
88
|
phase,
|
|
89
89
|
runId,
|
|
90
90
|
objective: OBJECTIVES[`${role}:${phase}`] ?? `Выполнить роль ${role} в фазе ${phase}.`,
|
|
@@ -112,24 +112,37 @@ export function buildPacket(ctx) {
|
|
|
112
112
|
verificationReport: role === 'reviewer' && phase === 'review' ? change.verification : null,
|
|
113
113
|
wiring,
|
|
114
114
|
context: config.context ?? null,
|
|
115
|
-
|
|
116
|
-
commands: {
|
|
117
|
-
status: `sbox status --change ${change.id} --json`,
|
|
118
|
-
instructions: `sbox instructions <artifact> --change ${change.id} --json`,
|
|
119
|
-
validate: `sbox validate --change ${change.id} --json`,
|
|
120
|
-
specList: 'sbox-contract index --json',
|
|
121
|
-
wikiIndex: 'sbox-wiki index --json',
|
|
122
|
-
wikiSearch: 'sbox-wiki search <query> --json',
|
|
123
|
-
wikiGet: 'sbox-wiki get <id> --json',
|
|
124
|
-
specShow: 'sbox-contract show <capability-id> --json',
|
|
125
|
-
contractDiff: `sbox-contract diff --delta ${quote(rel(path.join(dir, 'specs')))} --preview --json`,
|
|
126
|
-
changeset: `sbox changeset show --change ${change.id} --json`,
|
|
127
|
-
log: `sbox log add --change ${change.id} --tag CODE "<факт с путём>"`,
|
|
128
|
-
browser: 'sbox-browser goto <url> | snapshot | click <eN|селектор> | fill <eN> <текст> | text | console --errors | requests | screenshot (вход человека: sbox-browser login <url> --profile <имя>; справка: sbox-browser --help)',
|
|
129
|
-
},
|
|
115
|
+
tools: packetTools(root, change, dir, role, phase),
|
|
130
116
|
rolePrompt: loadRoleText(root, role),
|
|
131
117
|
};
|
|
132
118
|
}
|
|
119
|
+
const shellQuote = (value) => "'" + value.replaceAll("'", "'\"'\"'") + "'";
|
|
120
|
+
/**
|
|
121
|
+
* Указатель инструментов (docs/design.md, раздел 5): процесс sbox всегда, остальные инструменты по metadata.roles скиллов,
|
|
122
|
+
* их частые команды из metadata.commands. Команды отчёта здесь нет: report сдаёт оркестратор или раннер.
|
|
123
|
+
*/
|
|
124
|
+
function packetTools(root, change, dir, role, phase) {
|
|
125
|
+
const specsDir = shellQuote(toPosix(path.relative(root, path.join(dir, 'specs'))));
|
|
126
|
+
const sbox = {
|
|
127
|
+
tool: 'sbox',
|
|
128
|
+
when: 'состояние изменения, проверка артефактов и дельт, журнал изменения; темы справки: result, log, packet',
|
|
129
|
+
help: 'sbox help [тема]',
|
|
130
|
+
commands: [
|
|
131
|
+
`sbox status --change ${change.id} --json`,
|
|
132
|
+
`sbox validate --change ${change.id} --json`,
|
|
133
|
+
`sbox log add --change ${change.id} --tag CODE "<факт с путём>"`,
|
|
134
|
+
...(role === 'planner' ? [`sbox instructions <artifact> --change ${change.id} --json`] : []),
|
|
135
|
+
...(phase === 'verify' || phase === 'review' ? [`sbox changeset show --change ${change.id} --json`] : []),
|
|
136
|
+
],
|
|
137
|
+
};
|
|
138
|
+
const extra = {
|
|
139
|
+
'sbox-contract': role === 'planner' || role === 'challenger' || role === 'verifier' || role === 'reviewer' ? [`sbox-contract diff --delta ${specsDir} --preview --json`] : [],
|
|
140
|
+
};
|
|
141
|
+
const skills = loadSkills(root)
|
|
142
|
+
.filter((s) => s.roles.includes(role))
|
|
143
|
+
.map((s) => ({ tool: s.name, when: s.description, help: helpCommandFor(s.name), commands: [...s.commands, ...(extra[s.name] ?? [])] }));
|
|
144
|
+
return [sbox, ...skills];
|
|
145
|
+
}
|
|
133
146
|
function verificationFor(role) {
|
|
134
147
|
switch (role) {
|
|
135
148
|
case 'planner':
|
|
@@ -154,7 +167,7 @@ function feedbackFor(change, phase) {
|
|
|
154
167
|
for (const [gate, state] of Object.entries(change.gates)) {
|
|
155
168
|
if (state.state === 'rejected' && state.comment)
|
|
156
169
|
parts.push(`Гейт ${gate} отклонён: ${state.comment}`);
|
|
157
|
-
if (state.state === 'approved' && state.answers && Object.keys(state.answers).length > 0) {
|
|
170
|
+
if ((state.state === 'approved' || state.reason === 'plan_changed') && state.answers && Object.keys(state.answers).length > 0) {
|
|
158
171
|
parts.push(`Ответы на вопросы гейта ${gate}: ${Object.entries(state.answers).map(([q, a]) => `${q}=${a}`).join('; ')}`);
|
|
159
172
|
}
|
|
160
173
|
}
|
|
@@ -174,7 +187,13 @@ export function renderPrompt(packet) {
|
|
|
174
187
|
JSON.stringify(data, null, 2),
|
|
175
188
|
'```',
|
|
176
189
|
'',
|
|
177
|
-
`Запиши полный ответ (Markdown и завершающий блок \`# sbox-result\`) в файл \`${packet.resultFile}\` и продублируй его в последнем сообщении.`,
|
|
190
|
+
packet.execution.runner === 'codex' ? '' : `Запиши полный ответ (Markdown и завершающий блок \`# sbox-result\`) в файл \`${packet.resultFile}\` и продублируй его в последнем сообщении.`,
|
|
178
191
|
].join('\n');
|
|
179
192
|
}
|
|
193
|
+
/** Содержимое packet.json: без текста роли, который агент хоста уже получил системным промптом, а headless-раннер добавляет в промпт сам (renderPrompt). */
|
|
194
|
+
export function packetFileJson(packet) {
|
|
195
|
+
const data = { ...packet };
|
|
196
|
+
delete data.rolePrompt;
|
|
197
|
+
return JSON.stringify(data, null, 2);
|
|
198
|
+
}
|
|
180
199
|
//# sourceMappingURL=packet.js.map
|
package/dist/core/packet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packet.js","sourceRoot":"","sources":["../../src/core/packet.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"packet.js","sourceRoot":"","sources":["../../src/core/packet.ts"],"names":[],"mappings":"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"}
|
package/dist/core/phases.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { enabledGates } from './config.js';
|
|
2
2
|
import { SboxError } from './errors.js';
|
|
3
|
-
export
|
|
3
|
+
export { ROLE_NAMES as ROLES } from './model-policy.js';
|
|
4
|
+
import { ROLE_NAMES as ROLES } from './model-policy.js';
|
|
4
5
|
/** Порядок фаз (docs/design.md, раздел 4). intake выполняет CLI при создании изменения. */
|
|
5
6
|
export const PHASE_ORDER = [
|
|
6
7
|
'intake',
|
|
7
8
|
'research',
|
|
8
9
|
'propose',
|
|
9
10
|
'plan',
|
|
11
|
+
'challenge',
|
|
10
12
|
'cover',
|
|
11
13
|
'tests_review',
|
|
12
14
|
'implement',
|
|
@@ -19,6 +21,7 @@ export const ROLE_BY_PHASE = {
|
|
|
19
21
|
research: 'researcher',
|
|
20
22
|
propose: 'planner',
|
|
21
23
|
plan: 'planner',
|
|
24
|
+
challenge: 'challenger',
|
|
22
25
|
cover: 'tester',
|
|
23
26
|
tests_review: 'reviewer',
|
|
24
27
|
implement: 'implementer',
|
|
@@ -100,7 +103,7 @@ export function completePhase(change, config, phase) {
|
|
|
100
103
|
if (gate) {
|
|
101
104
|
const state = change.gates[gate];
|
|
102
105
|
if (gateEnabled(change, config, gate) && state?.state !== 'approved') {
|
|
103
|
-
change.gates[gate] = { state: 'pending', ...(state?.rejected_times ? { rejected_times: state.rejected_times } : {}) };
|
|
106
|
+
change.gates[gate] = { state: 'pending', ...(state?.answers ? { answers: state.answers } : {}), ...(state?.rejected_times ? { rejected_times: state.rejected_times } : {}) };
|
|
104
107
|
change.status = 'waiting_approval';
|
|
105
108
|
change.phase = phase;
|
|
106
109
|
return;
|
|
@@ -125,7 +128,7 @@ export function approveGate(change, gate, by, comment, answers) {
|
|
|
125
128
|
if (!state || state.state !== 'pending') {
|
|
126
129
|
throw new SboxError('GATE_NOT_PENDING', `Гейт ${gate} не ожидает решения (состояние: ${state?.state ?? 'нет'}).`);
|
|
127
130
|
}
|
|
128
|
-
change.gates[gate] = { state: 'approved', by, at: new Date().toISOString(), ...(comment ? { comment } : {}), ...(answers ? { answers } : {}), ...(state.rejected_times ? { rejected_times: state.rejected_times } : {}) };
|
|
131
|
+
change.gates[gate] = { state: 'approved', by, at: new Date().toISOString(), ...(comment ? { comment } : {}), ...((answers ?? state.answers) ? { answers: answers ?? state.answers } : {}), ...(state.rejected_times ? { rejected_times: state.rejected_times } : {}) };
|
|
129
132
|
change.status = 'active';
|
|
130
133
|
advance(change, PHASE_OF_GATE[gate]);
|
|
131
134
|
}
|
|
@@ -153,6 +156,14 @@ export function routeBlocker(change, config, input) {
|
|
|
153
156
|
change.status = 'blocked';
|
|
154
157
|
return null;
|
|
155
158
|
}
|
|
159
|
+
// Изменённый план и зависящие от него тесты требуют нового утверждения.
|
|
160
|
+
if (target === 'plan') {
|
|
161
|
+
for (const gate of ['plan', 'tests']) {
|
|
162
|
+
const previous = change.gates[gate];
|
|
163
|
+
if (previous)
|
|
164
|
+
change.gates[gate] = { ...previous, state: 'skipped', reason: 'plan_changed', comment: input.message };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
156
167
|
const limit = change.returns_limit ?? config.limits.returnsPerPhase;
|
|
157
168
|
const count = (change.returns[target] ?? 0) + 1;
|
|
158
169
|
change.returns[target] = count;
|
package/dist/core/phases.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phases.js","sourceRoot":"","sources":["../../src/core/phases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0B,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,
|
|
1
|
+
{"version":3,"file":"phases.js","sourceRoot":"","sources":["../../src/core/phases.ts"],"names":[],"mappings":"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"}
|
package/dist/core/report.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { higherComplexity } from './model-policy.js';
|
|
1
2
|
import { createHash } from 'node:crypto';
|
|
2
3
|
import fs from 'node:fs';
|
|
3
4
|
import path from 'node:path';
|
|
@@ -29,13 +30,25 @@ export async function applyReport(input) {
|
|
|
29
30
|
fs.mkdirSync(rdir, { recursive: true });
|
|
30
31
|
const resultFile = path.join(rdir, 'result.md');
|
|
31
32
|
writeText(resultFile, markdown);
|
|
33
|
+
// Для интерактивного запуска сохраняем отдельно запрошенные настройки из пакета.
|
|
34
|
+
let requestedExecution = null;
|
|
35
|
+
const packetPath = path.join(rdir, 'packet.json');
|
|
36
|
+
if (exists(packetPath)) {
|
|
37
|
+
try {
|
|
38
|
+
requestedExecution = JSON.parse(readText(packetPath)).execution ?? null;
|
|
39
|
+
}
|
|
40
|
+
catch { /* старый или повреждённый пакет не доказывает настройки запуска */ }
|
|
41
|
+
}
|
|
32
42
|
const receiptBase = {
|
|
33
43
|
id: runId,
|
|
34
44
|
role,
|
|
35
45
|
phase,
|
|
36
46
|
attempt: input.receipt?.attempt ?? 1,
|
|
47
|
+
requested_execution: requestedExecution,
|
|
37
48
|
runner: input.receipt?.runner ?? null,
|
|
38
49
|
model: input.receipt?.model ?? null,
|
|
50
|
+
profile: input.receipt?.profile ?? null,
|
|
51
|
+
effort: input.receipt?.effort ?? null,
|
|
39
52
|
session: input.receipt?.session ?? null,
|
|
40
53
|
// В интерактивном режиме старт запуска это момент выдачи пакета: packet.json не архивируется и не коммитится, поэтому время фиксируется здесь.
|
|
41
54
|
started: input.receipt?.started ?? (exists(path.join(rdir, 'packet.json')) ? fs.statSync(path.join(rdir, 'packet.json')).mtime.toISOString() : null),
|
|
@@ -61,6 +74,8 @@ export async function applyReport(input) {
|
|
|
61
74
|
finished: receiptBase.finished,
|
|
62
75
|
...(receiptBase.runner ? { runner: receiptBase.runner } : {}),
|
|
63
76
|
...(receiptBase.model ? { model: receiptBase.model } : {}),
|
|
77
|
+
...(receiptBase.profile ? { profile: receiptBase.profile } : {}),
|
|
78
|
+
...(receiptBase.effort ? { effort: receiptBase.effort } : {}),
|
|
64
79
|
...(receiptBase.session ? { session: receiptBase.session } : {}),
|
|
65
80
|
...(receiptBase.started ? { started: receiptBase.started } : {}),
|
|
66
81
|
...(receiptBase.cost_usd !== null ? { cost_usd: receiptBase.cost_usd } : {}),
|
|
@@ -100,8 +115,8 @@ export async function applyReport(input) {
|
|
|
100
115
|
if (result.complexity) {
|
|
101
116
|
const prev = change.complexity;
|
|
102
117
|
change.complexity = {
|
|
103
|
-
implementation: prev?.implementation
|
|
104
|
-
review: prev?.review
|
|
118
|
+
implementation: higherComplexity(prev?.implementation, result.complexity.implementation),
|
|
119
|
+
review: higherComplexity(prev?.review, result.complexity.review),
|
|
105
120
|
};
|
|
106
121
|
}
|
|
107
122
|
if (role === 'tester' && result.protected && result.protected.length > 0) {
|
|
@@ -151,10 +166,10 @@ export async function applyReport(input) {
|
|
|
151
166
|
phase,
|
|
152
167
|
});
|
|
153
168
|
}
|
|
154
|
-
else if (role === 'reviewer' && (result.findings ?? []).some((f) => f.level === 'blocking')) {
|
|
169
|
+
else if ((role === 'reviewer' || role === 'challenger') && (result.findings ?? []).some((f) => f.level === 'blocking')) {
|
|
155
170
|
runStatus = 'blocked';
|
|
156
171
|
routeBlocker(change, config, {
|
|
157
|
-
category: phase === 'tests_review' ? 'тесты' : 'реализация',
|
|
172
|
+
category: role === 'challenger' ? 'артефакт' : phase === 'tests_review' ? 'тесты' : 'реализация',
|
|
158
173
|
message: (result.findings ?? []).filter((f) => f.level === 'blocking').map((f) => `${f.file ? `${f.file}: ` : ''}${f.text}`).join(' | '),
|
|
159
174
|
role,
|
|
160
175
|
phase,
|
|
@@ -213,7 +228,7 @@ const EVIDENCE_NAMES = {
|
|
|
213
228
|
'reviewer:tests_review': (n) => `tests-review-${n}.md`,
|
|
214
229
|
'reviewer:review': (n) => `review-${n}.md`,
|
|
215
230
|
'verifier:verify': (n) => `verify-${n}.md`,
|
|
216
|
-
'challenger:
|
|
231
|
+
'challenger:challenge': (n) => `challenge-${n}.md`,
|
|
217
232
|
};
|
|
218
233
|
/** Имя файла evidence для запуска роли: порядковый номер считается по запускам той же роли и фазы до этого запуска (runId null: до текущего момента). */
|
|
219
234
|
function evidenceName(change, role, phase, runId) {
|
|
@@ -239,6 +254,9 @@ async function checkPhaseDone(input) {
|
|
|
239
254
|
const out = [];
|
|
240
255
|
const workflow = loadWorkflow(root);
|
|
241
256
|
const states = artifactStates(workflow, change, dir);
|
|
257
|
+
if (role === 'challenger' && result.findings === undefined) {
|
|
258
|
+
out.push(diag('error', 'CHALLENGE_FINDINGS_MISSING', 'Аудит требует findings: список замечаний или [] при их отсутствии', 'findings'));
|
|
259
|
+
}
|
|
242
260
|
if (role === 'researcher' && phase === 'research')
|
|
243
261
|
out.push(...checkRequestMap(root, dir, change, result));
|
|
244
262
|
if (role === 'planner' && phase === 'propose') {
|