oxe-cc 1.5.1 → 1.7.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/AGENTS.md +1 -1
- package/CHANGELOG.md +45 -0
- package/README.md +19 -15
- package/bin/lib/oxe-agent-install.cjs +125 -24
- package/bin/lib/oxe-dashboard.cjs +21 -5
- package/bin/lib/oxe-project-health.cjs +120 -42
- package/bin/lib/oxe-release.cjs +77 -4
- package/bin/oxe-cc.js +155 -78
- package/commands/oxe/debug.md +6 -1
- package/commands/oxe/discuss.md +7 -2
- package/commands/oxe/execute.md +7 -2
- package/commands/oxe/plan-agent.md +7 -2
- package/commands/oxe/plan.md +7 -2
- package/commands/oxe/scan.md +6 -1
- package/commands/oxe/spec.md +6 -1
- package/commands/oxe/verify.md +6 -1
- package/docs/CONTENT-MIGRATION-AUDIT.md +49 -0
- package/docs/RELEASE-READINESS.md +8 -0
- package/docs/RUNTIME-SMOKE-MATRIX.md +9 -2
- package/lib/runtime/compiler/graph-compiler.js +32 -0
- package/lib/runtime/context/context-pack-builder.d.ts +15 -0
- package/lib/runtime/context/context-pack-builder.js +78 -0
- package/lib/runtime/events/catalog.d.ts +1 -1
- package/lib/runtime/events/catalog.js +5 -0
- package/lib/runtime/executor/action-tool-map.d.ts +3 -0
- package/lib/runtime/executor/action-tool-map.js +41 -0
- package/lib/runtime/executor/built-in-tools.d.ts +8 -0
- package/lib/runtime/executor/built-in-tools.js +267 -0
- package/lib/runtime/executor/index.d.ts +6 -0
- package/lib/runtime/executor/index.js +12 -0
- package/lib/runtime/executor/llm-task-executor.d.ts +29 -0
- package/lib/runtime/executor/llm-task-executor.js +138 -0
- package/lib/runtime/executor/node-prompt-builder.d.ts +3 -0
- package/lib/runtime/executor/node-prompt-builder.js +36 -0
- package/lib/runtime/executor/stream-completion.d.ts +38 -0
- package/lib/runtime/executor/stream-completion.js +105 -0
- package/lib/runtime/index.d.ts +1 -0
- package/lib/runtime/index.js +2 -0
- package/lib/runtime/models/failure.d.ts +5 -0
- package/lib/runtime/models/failure.js +2 -0
- package/lib/runtime/plugins/capability-adapter.d.ts +9 -0
- package/lib/runtime/plugins/capability-adapter.js +111 -8
- package/lib/runtime/plugins/plugin-abi.d.ts +8 -0
- package/lib/runtime/plugins/plugin-registry.d.ts +2 -1
- package/lib/runtime/plugins/plugin-registry.js +6 -1
- package/lib/runtime/reducers/run-state-reducer.js +39 -2
- package/lib/runtime/scheduler/scheduler.d.ts +14 -2
- package/lib/runtime/scheduler/scheduler.js +131 -11
- package/lib/runtime/verification/verification-manifest.d.ts +5 -2
- package/lib/sdk/index.cjs +10 -5
- package/lib/sdk/index.d.ts +21 -10
- package/oxe/agents/oxe-assumptions-analyzer.md +136 -0
- package/oxe/agents/oxe-codebase-mapper.md +142 -0
- package/oxe/agents/oxe-debugger.md +145 -0
- package/oxe/agents/oxe-executor.md +139 -0
- package/oxe/agents/oxe-integration-checker.md +142 -0
- package/oxe/agents/oxe-plan-checker.md +143 -0
- package/oxe/agents/oxe-planner.md +151 -0
- package/oxe/agents/oxe-research-synthesizer.md +146 -0
- package/oxe/agents/oxe-researcher.md +163 -0
- package/oxe/agents/oxe-ui-auditor.md +151 -0
- package/oxe/agents/oxe-ui-checker.md +157 -0
- package/oxe/agents/oxe-ui-researcher.md +179 -0
- package/oxe/agents/oxe-validation-auditor.md +154 -0
- package/oxe/agents/oxe-verifier.md +132 -0
- package/oxe/personas/README.md +91 -39
- package/oxe/personas/architect.md +149 -37
- package/oxe/personas/db-specialist.md +149 -36
- package/oxe/personas/debugger.md +155 -38
- package/oxe/personas/executor.md +164 -38
- package/oxe/personas/planner.md +165 -36
- package/oxe/personas/researcher.md +148 -35
- package/oxe/personas/ui-specialist.md +164 -36
- package/oxe/personas/verifier.md +174 -39
- package/oxe/templates/CONFIG.md +3 -3
- package/oxe/templates/EXECUTION-RUNTIME.template.md +1 -1
- package/oxe/templates/FIXTURE-PACK.template.json +29 -22
- package/oxe/templates/FIXTURE-PACK.template.md +20 -11
- package/oxe/templates/IMPLEMENTATION-PACK.template.json +55 -39
- package/oxe/templates/IMPLEMENTATION-PACK.template.md +28 -16
- package/oxe/templates/INVESTIGATION.template.md +38 -38
- package/oxe/templates/PLAN.template.md +63 -32
- package/oxe/templates/REFERENCE-ANCHORS.template.md +18 -14
- package/oxe/templates/RESEARCH.template.md +11 -11
- package/oxe/templates/SPEC.template.md +6 -6
- package/oxe/templates/SUMMARY.template.md +33 -3
- package/oxe/templates/config.template.json +1 -1
- package/oxe/workflows/debug.md +9 -7
- package/oxe/workflows/execute.md +31 -28
- package/oxe/workflows/forensics.md +5 -3
- package/oxe/workflows/milestone.md +12 -12
- package/oxe/workflows/next.md +1 -1
- package/oxe/workflows/plan.md +409 -132
- package/oxe/workflows/references/adaptive-discovery.md +27 -27
- package/oxe/workflows/references/flow-robustness-contract.md +80 -80
- package/oxe/workflows/references/session-path-resolution.md +71 -71
- package/oxe/workflows/references/workflow-runtime-contracts.json +127 -127
- package/oxe/workflows/scan.md +355 -69
- package/oxe/workflows/spec.md +302 -9
- package/oxe/workflows/ui-review.md +5 -4
- package/oxe/workflows/ui-spec.md +4 -3
- package/oxe/workflows/verify.md +12 -9
- package/oxe/workflows/workstream.md +16 -16
- package/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/runtime/src/compiler/graph-compiler.ts +40 -0
- package/packages/runtime/src/context/context-pack-builder.ts +80 -0
- package/packages/runtime/src/events/catalog.ts +5 -0
- package/packages/runtime/src/executor/action-tool-map.ts +46 -0
- package/packages/runtime/src/executor/built-in-tools.ts +276 -0
- package/packages/runtime/src/executor/index.ts +6 -0
- package/packages/runtime/src/executor/llm-task-executor.ts +194 -0
- package/packages/runtime/src/executor/node-prompt-builder.ts +45 -0
- package/packages/runtime/src/executor/stream-completion.ts +145 -0
- package/packages/runtime/src/index.ts +3 -0
- package/packages/runtime/src/models/failure.ts +11 -0
- package/packages/runtime/src/plugins/capability-adapter.ts +117 -10
- package/packages/runtime/src/plugins/plugin-abi.ts +9 -0
- package/packages/runtime/src/plugins/plugin-registry.ts +10 -1
- package/packages/runtime/src/reducers/run-state-reducer.ts +59 -2
- package/packages/runtime/src/scheduler/scheduler.ts +152 -14
- package/packages/runtime/src/verification/verification-manifest.ts +12 -8
- package/vscode-extension/oxe-agents-1.6.0.vsix +0 -0
- package/vscode-extension/oxe-agents-1.7.0.vsix +0 -0
- package/vscode-extension/package.json +1 -1
package/bin/lib/oxe-release.cjs
CHANGED
|
@@ -5,6 +5,7 @@ const path = require('path');
|
|
|
5
5
|
const { spawnSync } = require('child_process');
|
|
6
6
|
|
|
7
7
|
const oxeManifest = require('./oxe-manifest.cjs');
|
|
8
|
+
const runtimeSemantics = require('./oxe-runtime-semantics.cjs');
|
|
8
9
|
|
|
9
10
|
const REQUIRED_RUNTIMES = [
|
|
10
11
|
'cursor',
|
|
@@ -269,6 +270,8 @@ function loadRuntimeSmokeReport(projectRoot) {
|
|
|
269
270
|
&& item.oxe_present
|
|
270
271
|
&& item.workflow_resolution_ok
|
|
271
272
|
&& item.wrapper_drift_ok !== false
|
|
273
|
+
&& item.extra_checks_ok !== false
|
|
274
|
+
&& item.agent_checks_ok !== false
|
|
272
275
|
&& item.uninstall_ok
|
|
273
276
|
);
|
|
274
277
|
});
|
|
@@ -301,11 +304,42 @@ function readVersionSnapshot(projectRoot) {
|
|
|
301
304
|
};
|
|
302
305
|
}
|
|
303
306
|
|
|
307
|
+
function inspectCanonicalSource(projectRoot) {
|
|
308
|
+
const workflowsDir = path.join(projectRoot, 'oxe', 'workflows');
|
|
309
|
+
const referencesDir = path.join(workflowsDir, 'references');
|
|
310
|
+
const contractsPath = path.join(referencesDir, 'workflow-runtime-contracts.json');
|
|
311
|
+
const commandsDir = path.join(projectRoot, 'commands', 'oxe');
|
|
312
|
+
const workflowFiles = fs.existsSync(workflowsDir)
|
|
313
|
+
? fs.readdirSync(workflowsDir).filter((name) => name.endsWith('.md'))
|
|
314
|
+
: [];
|
|
315
|
+
const registryIssues = runtimeSemantics.validateWorkflowContractsRegistry();
|
|
316
|
+
return {
|
|
317
|
+
workflowsDir,
|
|
318
|
+
referencesDir,
|
|
319
|
+
contractsPath,
|
|
320
|
+
commandsDir,
|
|
321
|
+
workflowsPresent: fs.existsSync(workflowsDir),
|
|
322
|
+
referencesPresent: fs.existsSync(referencesDir),
|
|
323
|
+
commandsPresent: fs.existsSync(commandsDir),
|
|
324
|
+
contractsPresent: fs.existsSync(contractsPath),
|
|
325
|
+
workflowCount: workflowFiles.length,
|
|
326
|
+
contractVersion: runtimeSemantics.CONTRACT_VERSION,
|
|
327
|
+
registryIssues,
|
|
328
|
+
ok: fs.existsSync(workflowsDir)
|
|
329
|
+
&& fs.existsSync(referencesDir)
|
|
330
|
+
&& fs.existsSync(commandsDir)
|
|
331
|
+
&& fs.existsSync(contractsPath)
|
|
332
|
+
&& workflowFiles.length > 0
|
|
333
|
+
&& registryIssues.length === 0,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
|
|
304
337
|
function buildReleaseManifest(projectRoot, options = {}) {
|
|
305
338
|
const packageRoot = path.resolve(options.packageRoot || projectRoot);
|
|
306
339
|
const paths = releasePaths(projectRoot);
|
|
307
340
|
const versions = readVersionSnapshot(projectRoot);
|
|
308
341
|
const runtimeEntry = path.join(packageRoot, 'lib', 'runtime', 'index.js');
|
|
342
|
+
const canonicalSource = inspectCanonicalSource(projectRoot);
|
|
309
343
|
const wrapperSync = options.skipWrapperSync ? {
|
|
310
344
|
before: collectWrapperHashes(projectRoot),
|
|
311
345
|
after: collectWrapperHashes(projectRoot),
|
|
@@ -313,6 +347,7 @@ function buildReleaseManifest(projectRoot, options = {}) {
|
|
|
313
347
|
mismatches: [],
|
|
314
348
|
ok: true,
|
|
315
349
|
} : syncWrappers(projectRoot, packageRoot);
|
|
350
|
+
const semanticsAudit = runtimeSemantics.auditRuntimeTargets(projectRoot);
|
|
316
351
|
const smoke = loadRuntimeSmokeReport(projectRoot);
|
|
317
352
|
const recovery = loadRecoveryFixtureReport(projectRoot);
|
|
318
353
|
const multiAgent = loadMultiAgentSoakReport(projectRoot);
|
|
@@ -332,6 +367,12 @@ function buildReleaseManifest(projectRoot, options = {}) {
|
|
|
332
367
|
path: runtimeEntry,
|
|
333
368
|
ok: fs.existsSync(runtimeEntry),
|
|
334
369
|
},
|
|
370
|
+
canonical_source: canonicalSource,
|
|
371
|
+
semantics: {
|
|
372
|
+
contractVersion: runtimeSemantics.CONTRACT_VERSION,
|
|
373
|
+
registryPath: runtimeSemantics.CONTRACTS_PATH,
|
|
374
|
+
audit: semanticsAudit,
|
|
375
|
+
},
|
|
335
376
|
wrappers: {
|
|
336
377
|
hash_before_sync: wrapperSync.before,
|
|
337
378
|
hash_after_sync: wrapperSync.after,
|
|
@@ -354,8 +395,8 @@ function buildReleaseManifest(projectRoot, options = {}) {
|
|
|
354
395
|
return manifest;
|
|
355
396
|
}
|
|
356
397
|
|
|
357
|
-
function
|
|
358
|
-
const
|
|
398
|
+
function evaluateReleaseManifest(manifest, options = {}) {
|
|
399
|
+
const enforceSync = options.enforceSync !== false;
|
|
359
400
|
const blockers = [];
|
|
360
401
|
const warnings = [];
|
|
361
402
|
const versions = manifest.versions;
|
|
@@ -378,10 +419,22 @@ function checkReleaseConsistency(projectRoot, options = {}) {
|
|
|
378
419
|
if (!versions.changelog.date) blockers.push('CHANGELOG.md topo sem data');
|
|
379
420
|
if (!versions.changelog.hasHighlights) blockers.push('CHANGELOG.md topo sem highlights');
|
|
380
421
|
}
|
|
422
|
+
const canonical = manifest.canonical_source || {};
|
|
423
|
+
if (!canonical.ok) {
|
|
424
|
+
blockers.push('árvore canónica ausente ou inválida');
|
|
425
|
+
}
|
|
426
|
+
if (!canonical.workflowsPresent) blockers.push('oxe/workflows ausente');
|
|
427
|
+
if (!canonical.referencesPresent) blockers.push('oxe/workflows/references ausente');
|
|
428
|
+
if (!canonical.commandsPresent) blockers.push('commands/oxe ausente');
|
|
429
|
+
if (!canonical.contractsPresent) blockers.push('workflow-runtime-contracts.json ausente');
|
|
430
|
+
if (canonical.workflowCount === 0) blockers.push('oxe/workflows sem workflows canónicos');
|
|
431
|
+
if (Array.isArray(canonical.registryIssues) && canonical.registryIssues.length) {
|
|
432
|
+
blockers.push('workflow-runtime-contracts.json inválido');
|
|
433
|
+
}
|
|
381
434
|
if (!manifest.runtime_compiled.ok) {
|
|
382
435
|
blockers.push('runtime não compilado (lib/runtime/index.js ausente)');
|
|
383
436
|
}
|
|
384
|
-
if (!manifest.wrappers.sync.ok) {
|
|
437
|
+
if (enforceSync && !manifest.wrappers.sync.ok) {
|
|
385
438
|
if (manifest.wrappers.sync.scripts.some((entry) => !entry.ok)) {
|
|
386
439
|
blockers.push('sync de wrappers falhou');
|
|
387
440
|
}
|
|
@@ -389,6 +442,10 @@ function checkReleaseConsistency(projectRoot, options = {}) {
|
|
|
389
442
|
blockers.push('wrappers ficam dirty após sync-runtime-metadata/sync:cursor');
|
|
390
443
|
}
|
|
391
444
|
}
|
|
445
|
+
const semanticsAudit = manifest.semantics && manifest.semantics.audit;
|
|
446
|
+
if (!semanticsAudit || semanticsAudit.ok !== true) {
|
|
447
|
+
blockers.push('drift semântico entre workflows e wrappers');
|
|
448
|
+
}
|
|
392
449
|
if (!manifest.reports.runtime_smoke.present || !manifest.reports.runtime_smoke.ok) {
|
|
393
450
|
blockers.push('runtime smoke matrix incompleta ou com falhas');
|
|
394
451
|
}
|
|
@@ -406,10 +463,23 @@ function checkReleaseConsistency(projectRoot, options = {}) {
|
|
|
406
463
|
blockers,
|
|
407
464
|
warnings,
|
|
408
465
|
manifest,
|
|
409
|
-
manifestPath: releasePaths(
|
|
466
|
+
manifestPath: releasePaths(manifest.project_root).manifest,
|
|
410
467
|
};
|
|
411
468
|
}
|
|
412
469
|
|
|
470
|
+
function checkReleaseConsistency(projectRoot, options = {}) {
|
|
471
|
+
const manifest = buildReleaseManifest(projectRoot, options);
|
|
472
|
+
return evaluateReleaseManifest(manifest, { enforceSync: true });
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
function inspectReleaseReadiness(projectRoot, options = {}) {
|
|
476
|
+
const manifest = buildReleaseManifest(projectRoot, {
|
|
477
|
+
...options,
|
|
478
|
+
skipWrapperSync: true,
|
|
479
|
+
});
|
|
480
|
+
return evaluateReleaseManifest(manifest, { enforceSync: false });
|
|
481
|
+
}
|
|
482
|
+
|
|
413
483
|
module.exports = {
|
|
414
484
|
REQUIRED_RUNTIMES,
|
|
415
485
|
WRAPPER_TARGETS,
|
|
@@ -419,5 +489,8 @@ module.exports = {
|
|
|
419
489
|
loadRecoveryFixtureReport,
|
|
420
490
|
loadMultiAgentSoakReport,
|
|
421
491
|
buildReleaseManifest,
|
|
492
|
+
inspectCanonicalSource,
|
|
493
|
+
evaluateReleaseManifest,
|
|
494
|
+
inspectReleaseReadiness,
|
|
422
495
|
checkReleaseConsistency,
|
|
423
496
|
};
|
package/bin/oxe-cc.js
CHANGED
|
@@ -1668,10 +1668,11 @@ function runStatusFull(target) {
|
|
|
1668
1668
|
sp = oxeHealth.scopedOxePaths(target, activeSession);
|
|
1669
1669
|
}
|
|
1670
1670
|
|
|
1671
|
-
printSection('OXE ▸ status --full');
|
|
1672
|
-
console.log(` ${c ? green : ''}Projeto:${c ? reset : ''} ${c ? cyan : ''}${target}${c ? reset : ''}`);
|
|
1673
|
-
console.log(` ${c ? green : ''}Sessão:${c ? reset : ''} ${c ? cyan : ''}${activeSession || 'modo legado'}${c ? reset : ''}`);
|
|
1674
|
-
console.log(` ${c ? green : ''}
|
|
1671
|
+
printSection('OXE ▸ status --full');
|
|
1672
|
+
console.log(` ${c ? green : ''}Projeto:${c ? reset : ''} ${c ? cyan : ''}${target}${c ? reset : ''}`);
|
|
1673
|
+
console.log(` ${c ? green : ''}Sessão:${c ? reset : ''} ${c ? cyan : ''}${activeSession || 'modo legado'}${c ? reset : ''}`);
|
|
1674
|
+
console.log(` ${c ? green : ''}Workspace mode:${c ? reset : ''} ${report.workspaceMode || 'oxe_project'}`);
|
|
1675
|
+
console.log(` ${c ? green : ''}Fase:${c ? reset : ''} ${report.phase || '—'}`);
|
|
1675
1676
|
|
|
1676
1677
|
const healthColor = report.healthStatus === 'healthy' ? green : report.healthStatus === 'warning' ? yellow : red;
|
|
1677
1678
|
console.log(` ${c ? green : ''}Saúde:${c ? reset : ''} ${c ? healthColor : ''}${report.healthStatus}${c ? reset : ''}`);
|
|
@@ -1701,23 +1702,40 @@ function runStatusFull(target) {
|
|
|
1701
1702
|
console.log(` ${coverageCell(codebaseExists, 'codebase scan')} ${coverageCell(specExists, 'SPEC.md')} ${coverageCell(planExists, 'PLAN.md')} ${coverageCell(verifyExists, 'VERIFY.md')} ${coverageCell(lessonsExists, 'LESSONS.md')}`);
|
|
1702
1703
|
|
|
1703
1704
|
// Readiness gate
|
|
1704
|
-
const
|
|
1705
|
-
|
|
1706
|
-
&& report.
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1705
|
+
const packageMode = report.workspaceMode === 'product_package';
|
|
1706
|
+
const ready = packageMode
|
|
1707
|
+
? Boolean(report.releaseReadiness && report.releaseReadiness.ok)
|
|
1708
|
+
: specExists
|
|
1709
|
+
&& planExists
|
|
1710
|
+
&& report.executionRationalityReady
|
|
1711
|
+
&& !report.planWarn.length
|
|
1712
|
+
&& !report.runtimeWarn.length;
|
|
1713
|
+
const gateColor = ready ? green : yellow;
|
|
1714
|
+
console.log(`\n ${c ? yellow : ''}Readiness gate${c ? reset : ''}`);
|
|
1715
|
+
console.log(` ${c ? gateColor : ''}${ready ? (packageMode ? '✓ Pronto para publicar' : '✓ Pronto para executar') : (packageMode ? '✗ Não pronto para publicar' : '✗ Não pronto para executar')}${c ? reset : ''}`);
|
|
1716
|
+
if (packageMode) {
|
|
1717
|
+
const releaseReadiness = report.releaseReadiness || { blockers: [], warnings: [] };
|
|
1718
|
+
if (Array.isArray(releaseReadiness.blockers) && releaseReadiness.blockers.length) {
|
|
1719
|
+
for (const blocker of releaseReadiness.blockers) {
|
|
1720
|
+
console.log(` ${c ? red : ''} • ${blocker}${c ? reset : ''}`);
|
|
1721
|
+
}
|
|
1722
|
+
}
|
|
1723
|
+
if (Array.isArray(releaseReadiness.warnings) && releaseReadiness.warnings.length) {
|
|
1724
|
+
for (const warning of releaseReadiness.warnings) {
|
|
1725
|
+
console.log(` ${c ? yellow : ''} • ${warning}${c ? reset : ''}`);
|
|
1726
|
+
}
|
|
1727
|
+
}
|
|
1728
|
+
} else {
|
|
1729
|
+
if (!specExists) console.log(` ${c ? dim : ''} • SPEC.md ausente — rode /oxe-spec${c ? reset : ''}`);
|
|
1730
|
+
if (!planExists) console.log(` ${c ? dim : ''} • PLAN.md ausente — rode /oxe-plan${c ? reset : ''}`);
|
|
1731
|
+
if (report.planWarn.length) {
|
|
1732
|
+
for (const w of report.planWarn) {
|
|
1733
|
+
console.log(` ${c ? yellow : ''} • ${w}${c ? reset : ''}`);
|
|
1734
|
+
}
|
|
1735
|
+
}
|
|
1736
|
+
if (planExists) {
|
|
1737
|
+
console.log(` ${c ? dim : ''} • Artefatos racionais:${c ? reset : ''} implementation=${report.implementationPackReady ? 'ok' : 'pendente'} · anchors=${report.referenceAnchorsReady ? 'ok' : 'pendente'} · fixtures=${report.fixturePackReady ? 'ok' : 'pendente'}`);
|
|
1717
1738
|
}
|
|
1718
|
-
}
|
|
1719
|
-
if (planExists) {
|
|
1720
|
-
console.log(` ${c ? dim : ''} • Artefatos racionais:${c ? reset : ''} implementation=${report.implementationPackReady ? 'ok' : 'pendente'} · anchors=${report.referenceAnchorsReady ? 'ok' : 'pendente'} · fixtures=${report.fixturePackReady ? 'ok' : 'pendente'}`);
|
|
1721
1739
|
}
|
|
1722
1740
|
|
|
1723
1741
|
// Active run summary
|
|
@@ -1804,7 +1822,7 @@ function runStatusFull(target) {
|
|
|
1804
1822
|
}
|
|
1805
1823
|
|
|
1806
1824
|
// Plan self-evaluation
|
|
1807
|
-
if (report.planSelfEvaluation) {
|
|
1825
|
+
if (!packageMode && report.planSelfEvaluation) {
|
|
1808
1826
|
const pse = report.planSelfEvaluation;
|
|
1809
1827
|
const threshold = report.planConfidenceThreshold || 90;
|
|
1810
1828
|
console.log(`\n ${c ? yellow : ''}Autoavaliação do plano${c ? reset : ''}`);
|
|
@@ -1840,11 +1858,13 @@ function runStatus(target, opts = {}) {
|
|
|
1840
1858
|
const next = report.next;
|
|
1841
1859
|
|
|
1842
1860
|
if (opts.json) {
|
|
1843
|
-
/** @type {Record<string, unknown>} */
|
|
1844
|
-
const payload = {
|
|
1845
|
-
oxeStatusSchema: 5,
|
|
1846
|
-
projectRoot: path.resolve(target),
|
|
1847
|
-
|
|
1861
|
+
/** @type {Record<string, unknown>} */
|
|
1862
|
+
const payload = {
|
|
1863
|
+
oxeStatusSchema: 5,
|
|
1864
|
+
projectRoot: path.resolve(target),
|
|
1865
|
+
workspaceMode: report.workspaceMode || 'oxe_project',
|
|
1866
|
+
releaseReadiness: report.releaseReadiness || null,
|
|
1867
|
+
nextStep: report.next.step,
|
|
1848
1868
|
cursorCmd: report.next.cursorCmd,
|
|
1849
1869
|
reason: report.next.reason,
|
|
1850
1870
|
artifacts: report.next.artifacts,
|
|
@@ -1921,9 +1941,10 @@ function runStatus(target, opts = {}) {
|
|
|
1921
1941
|
return;
|
|
1922
1942
|
}
|
|
1923
1943
|
|
|
1924
|
-
printSection('OXE ▸ status');
|
|
1925
|
-
const c = useAnsiColors();
|
|
1926
|
-
console.log(` ${c ? green : ''}Projeto:${c ? reset : ''} ${c ? cyan : ''}${target}${c ? reset : ''}`);
|
|
1944
|
+
printSection('OXE ▸ status');
|
|
1945
|
+
const c = useAnsiColors();
|
|
1946
|
+
console.log(` ${c ? green : ''}Projeto:${c ? reset : ''} ${c ? cyan : ''}${target}${c ? reset : ''}`);
|
|
1947
|
+
console.log(` ${c ? dim : ''}Workspace mode:${c ? reset : ''} ${report.workspaceMode || 'oxe_project'}`);
|
|
1927
1948
|
|
|
1928
1949
|
const wfTgt = oxeWorkflows.resolveWorkflowsDir(target);
|
|
1929
1950
|
if (!wfTgt) {
|
|
@@ -1954,16 +1975,24 @@ function runStatus(target, opts = {}) {
|
|
|
1954
1975
|
}
|
|
1955
1976
|
|
|
1956
1977
|
// Explicit blockage diagnosis
|
|
1957
|
-
const
|
|
1958
|
-
const
|
|
1959
|
-
const
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
}
|
|
1965
|
-
|
|
1966
|
-
}
|
|
1978
|
+
const packageMode = report.workspaceMode === 'product_package';
|
|
1979
|
+
const specMissing = !fs.existsSync(path.join(target, '.oxe', 'SPEC.md'));
|
|
1980
|
+
const planMissing = !fs.existsSync(path.join(target, '.oxe', 'PLAN.md'));
|
|
1981
|
+
const verifyMissing = !fs.existsSync(path.join(target, '.oxe', 'VERIFY.md'));
|
|
1982
|
+
if (packageMode) {
|
|
1983
|
+
const releaseReadiness = report.releaseReadiness || { ok: false, blockers: [], warnings: [] };
|
|
1984
|
+
if (!releaseReadiness.ok && Array.isArray(releaseReadiness.blockers) && releaseReadiness.blockers.length) {
|
|
1985
|
+
console.log(` ${c ? yellow : ''}⚠ Release blockers:${c ? reset : ''} ${releaseReadiness.blockers[0]}`);
|
|
1986
|
+
} else if (Array.isArray(releaseReadiness.warnings) && releaseReadiness.warnings.length) {
|
|
1987
|
+
console.log(` ${c ? dim : ''}Obs.:${c ? reset : ''} release warnings ativas — ${releaseReadiness.warnings[0]}`);
|
|
1988
|
+
}
|
|
1989
|
+
} else if (specMissing) {
|
|
1990
|
+
console.log(` ${c ? yellow : ''}⚠ Bloqueio:${c ? reset : ''} SPEC.md ausente — rode ${c ? cyan : ''}/oxe-spec${c ? reset : ''} antes de planejar`);
|
|
1991
|
+
} else if (planMissing) {
|
|
1992
|
+
console.log(` ${c ? yellow : ''}⚠ Bloqueio:${c ? reset : ''} PLAN.md ausente — rode ${c ? cyan : ''}/oxe-plan${c ? reset : ''}`);
|
|
1993
|
+
} else if (verifyMissing && !planMissing) {
|
|
1994
|
+
console.log(` ${c ? dim : ''}Obs.:${c ? reset : ''} VERIFY.md ainda não gerado — rode ${c ? cyan : ''}/oxe-verify${c ? reset : ''} após executar`);
|
|
1995
|
+
}
|
|
1967
1996
|
|
|
1968
1997
|
if (opts.hints) {
|
|
1969
1998
|
console.log(`\n ${c ? cyan : ''}Lembretes (rotina OXE)${reset}`);
|
|
@@ -2701,10 +2730,14 @@ function runInstall(opts) {
|
|
|
2701
2730
|
copyDir(path.join(PKG_ROOT, 'oxe', 'templates'), path.join(nested, 'templates'), copyOpts, true);
|
|
2702
2731
|
// Personas: copiar para .oxe/personas/ (não sobrescreve personalizações do projeto)
|
|
2703
2732
|
const personasSrc = path.join(PKG_ROOT, 'oxe', 'personas');
|
|
2704
|
-
if (fs.existsSync(personasSrc)) {
|
|
2705
|
-
copyDir(personasSrc, path.join(nested, 'personas'), copyOpts, false);
|
|
2706
|
-
}
|
|
2707
|
-
|
|
2733
|
+
if (fs.existsSync(personasSrc)) {
|
|
2734
|
+
copyDir(personasSrc, path.join(nested, 'personas'), copyOpts, false);
|
|
2735
|
+
}
|
|
2736
|
+
const agentsSrc = path.join(PKG_ROOT, 'oxe', 'agents');
|
|
2737
|
+
if (fs.existsSync(agentsSrc)) {
|
|
2738
|
+
copyDir(agentsSrc, path.join(nested, 'agents'), copyOpts, false);
|
|
2739
|
+
}
|
|
2740
|
+
// Schemas: copiar para .oxe/schemas/ (ex.: plan-agents.schema.json para validação local)
|
|
2708
2741
|
const schemasSrc = path.join(PKG_ROOT, 'oxe', 'schemas');
|
|
2709
2742
|
if (fs.existsSync(schemasSrc)) {
|
|
2710
2743
|
copyDir(schemasSrc, path.join(nested, 'schemas'), copyOpts, false);
|
|
@@ -2719,10 +2752,11 @@ function runInstall(opts) {
|
|
|
2719
2752
|
if (fs.existsSync(cRules)) copyDir(cRules, path.join(cursorBase, 'rules'), copyOpts, idePathRewrite);
|
|
2720
2753
|
}
|
|
2721
2754
|
|
|
2722
|
-
const doAgentClis = opts.copilotCli || opts.allAgents;
|
|
2723
|
-
if (doAgentClis) {
|
|
2724
|
-
const cCmd = path.join(PKG_ROOT, '.cursor', 'commands');
|
|
2725
|
-
const
|
|
2755
|
+
const doAgentClis = opts.copilotCli || opts.allAgents;
|
|
2756
|
+
if (doAgentClis) {
|
|
2757
|
+
const cCmd = path.join(PKG_ROOT, '.cursor', 'commands');
|
|
2758
|
+
const canonicalAgents = path.join(PKG_ROOT, 'oxe', 'agents');
|
|
2759
|
+
const clBase = installClaudeBase(opts);
|
|
2726
2760
|
const cpHome = installCopilotCliHome(opts);
|
|
2727
2761
|
const clDest = path.join(clBase, 'commands');
|
|
2728
2762
|
const cpCmdDest = path.join(cpHome, 'commands');
|
|
@@ -2731,16 +2765,24 @@ function runInstall(opts) {
|
|
|
2731
2765
|
console.log(
|
|
2732
2766
|
` ${c ? green : ''}cli${c ? reset : ''} ${c ? dim : ''}Claude/Copilot: skills em${c ? reset : ''} ${c ? cyan : ''}${cpSkills}${c ? reset : ''} ${c ? dim : ''}(/oxe, /oxe-scan, …); comandos .md:${c ? reset : ''} ${c ? cyan : ''}${clDest}${c ? reset : ''} ${c ? dim : ''}+${c ? reset : ''} ${c ? cyan : ''}${cpCmdDest}${c ? reset : ''}`
|
|
2733
2767
|
);
|
|
2734
|
-
installOxeCopilotCliSkills(cCmd, cpHome, copyOpts, idePathRewrite);
|
|
2735
|
-
copyDir(cCmd, clDest, copyOpts, idePathRewrite);
|
|
2736
|
-
copyDir(cCmd, cpCmdDest, copyOpts, idePathRewrite);
|
|
2737
|
-
|
|
2768
|
+
installOxeCopilotCliSkills(cCmd, cpHome, copyOpts, idePathRewrite);
|
|
2769
|
+
copyDir(cCmd, clDest, copyOpts, idePathRewrite);
|
|
2770
|
+
copyDir(cCmd, cpCmdDest, copyOpts, idePathRewrite);
|
|
2771
|
+
if (fs.existsSync(canonicalAgents)) {
|
|
2772
|
+
oxeAgentInstall.installCanonicalAgentMarkdowns(
|
|
2773
|
+
canonicalAgents,
|
|
2774
|
+
agentPaths.claudeAgentsDir,
|
|
2775
|
+
copyOpts
|
|
2776
|
+
);
|
|
2777
|
+
}
|
|
2778
|
+
} else {
|
|
2738
2779
|
console.warn(`${yellow}aviso:${reset} pasta ausente ${cCmd} — ignorando comandos CLI`);
|
|
2739
2780
|
}
|
|
2740
2781
|
}
|
|
2741
2782
|
|
|
2742
|
-
const cCmdAgents = path.join(PKG_ROOT, '.cursor', 'commands');
|
|
2743
|
-
|
|
2783
|
+
const cCmdAgents = path.join(PKG_ROOT, '.cursor', 'commands');
|
|
2784
|
+
const canonicalAgents = path.join(PKG_ROOT, 'oxe', 'agents');
|
|
2785
|
+
if (fs.existsSync(cCmdAgents) && (opts.allAgents || anyGranularAgent(opts))) {
|
|
2744
2786
|
const logO = (d) => console.log(`${dim}omitido${reset} ${d} (já existe — use --force)`);
|
|
2745
2787
|
const logW = (msg) => console.log(`${dim}agents${reset} ${msg}`);
|
|
2746
2788
|
console.log(
|
|
@@ -2758,27 +2800,41 @@ function runInstall(opts) {
|
|
|
2758
2800
|
if (opts.agentCodex || opts.allAgents) {
|
|
2759
2801
|
oxeAgentInstall.installCodexPrompts(cCmdAgents, agentPaths, copyOpts, idePathRewrite, logO, logW);
|
|
2760
2802
|
}
|
|
2761
|
-
if (opts.agentAntigravity || opts.allAgents) {
|
|
2762
|
-
oxeAgentInstall.installSkillTreeFromCursorCommands(
|
|
2803
|
+
if (opts.agentAntigravity || opts.allAgents) {
|
|
2804
|
+
oxeAgentInstall.installSkillTreeFromCursorCommands(
|
|
2763
2805
|
cCmdAgents,
|
|
2764
2806
|
agentPaths.antigravitySkillsRoot,
|
|
2765
2807
|
copyOpts,
|
|
2766
2808
|
idePathRewrite,
|
|
2767
2809
|
logO,
|
|
2768
|
-
logW
|
|
2769
|
-
);
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2810
|
+
logW
|
|
2811
|
+
);
|
|
2812
|
+
oxeAgentInstall.installCanonicalAgentSkills(
|
|
2813
|
+
canonicalAgents,
|
|
2814
|
+
agentPaths.antigravitySkillsRoot,
|
|
2815
|
+
copyOpts,
|
|
2816
|
+
logO,
|
|
2817
|
+
logW
|
|
2818
|
+
);
|
|
2819
|
+
}
|
|
2820
|
+
if (opts.agentCodex || opts.allAgents) {
|
|
2821
|
+
oxeAgentInstall.installSkillTreeFromCursorCommands(
|
|
2773
2822
|
cCmdAgents,
|
|
2774
2823
|
agentPaths.codexAgentsSkillsRoot,
|
|
2775
2824
|
copyOpts,
|
|
2776
2825
|
idePathRewrite,
|
|
2777
2826
|
logO,
|
|
2778
|
-
logW
|
|
2779
|
-
);
|
|
2780
|
-
|
|
2781
|
-
|
|
2827
|
+
logW
|
|
2828
|
+
);
|
|
2829
|
+
oxeAgentInstall.installCanonicalAgentSkills(
|
|
2830
|
+
canonicalAgents,
|
|
2831
|
+
agentPaths.codexAgentsSkillsRoot,
|
|
2832
|
+
copyOpts,
|
|
2833
|
+
logO,
|
|
2834
|
+
logW
|
|
2835
|
+
);
|
|
2836
|
+
}
|
|
2837
|
+
}
|
|
2782
2838
|
|
|
2783
2839
|
if (opts.copilot) {
|
|
2784
2840
|
const gh = path.join(PKG_ROOT, '.github');
|
|
@@ -2868,10 +2924,11 @@ function runInstall(opts) {
|
|
|
2868
2924
|
addTracked(copilotPromptsDirPath(opts), (n) => n.startsWith('oxe-'));
|
|
2869
2925
|
trackFile(copilotWorkspaceManifestPath(opts));
|
|
2870
2926
|
}
|
|
2871
|
-
trackFile(runtimeSemanticsManifestPath(opts));
|
|
2872
|
-
if (opts.copilotCli || opts.allAgents) {
|
|
2873
|
-
addTracked(path.join(installClaudeBase(opts), 'commands'), (n) => oxeAgentInstall.isOxeCommandMarkdownName(n));
|
|
2874
|
-
addTracked(
|
|
2927
|
+
trackFile(runtimeSemanticsManifestPath(opts));
|
|
2928
|
+
if (opts.copilotCli || opts.allAgents) {
|
|
2929
|
+
addTracked(path.join(installClaudeBase(opts), 'commands'), (n) => oxeAgentInstall.isOxeCommandMarkdownName(n));
|
|
2930
|
+
addTracked(agentPaths.claudeAgentsDir, (n) => oxeAgentInstall.isOxeAgentMarkdownName(n));
|
|
2931
|
+
addTracked(path.join(cpCliHome, 'commands'), (n) => oxeAgentInstall.isOxeCommandMarkdownName(n));
|
|
2875
2932
|
const skRoot = path.join(cpCliHome, 'skills');
|
|
2876
2933
|
if (fs.existsSync(skRoot)) {
|
|
2877
2934
|
for (const sub of fs.readdirSync(skRoot, { withFileTypes: true })) {
|
|
@@ -3007,8 +3064,8 @@ function uninstallLocalIdeFromProject(u, removedPaths) {
|
|
|
3007
3064
|
track(manifest);
|
|
3008
3065
|
}
|
|
3009
3066
|
|
|
3010
|
-
if (u.copilotCli || u.allAgents) {
|
|
3011
|
-
for (const base of [path.join(proj, '.claude'), path.join(proj, '.copilot')]) {
|
|
3067
|
+
if (u.copilotCli || u.allAgents) {
|
|
3068
|
+
for (const base of [path.join(proj, '.claude'), path.join(proj, '.copilot')]) {
|
|
3012
3069
|
const cmdDir = path.join(base, 'commands');
|
|
3013
3070
|
if (!fs.existsSync(cmdDir)) continue;
|
|
3014
3071
|
for (const name of fs.readdirSync(cmdDir)) {
|
|
@@ -3017,9 +3074,19 @@ function uninstallLocalIdeFromProject(u, removedPaths) {
|
|
|
3017
3074
|
unlinkQuiet(p, u);
|
|
3018
3075
|
track(p);
|
|
3019
3076
|
}
|
|
3020
|
-
}
|
|
3021
|
-
}
|
|
3022
|
-
const
|
|
3077
|
+
}
|
|
3078
|
+
}
|
|
3079
|
+
const claudeAgentsDir = path.join(proj, '.claude', 'agents');
|
|
3080
|
+
if (fs.existsSync(claudeAgentsDir)) {
|
|
3081
|
+
for (const name of fs.readdirSync(claudeAgentsDir)) {
|
|
3082
|
+
if (oxeAgentInstall.isOxeAgentMarkdownName(name)) {
|
|
3083
|
+
const p = path.join(claudeAgentsDir, name);
|
|
3084
|
+
unlinkQuiet(p, u);
|
|
3085
|
+
track(p);
|
|
3086
|
+
}
|
|
3087
|
+
}
|
|
3088
|
+
}
|
|
3089
|
+
const skillsRoot = path.join(proj, '.copilot', 'skills');
|
|
3023
3090
|
if (fs.existsSync(skillsRoot)) {
|
|
3024
3091
|
for (const ent of fs.readdirSync(skillsRoot, { withFileTypes: true })) {
|
|
3025
3092
|
if (!ent.isDirectory() || !/^oxe($|-)/.test(ent.name)) continue;
|
|
@@ -3342,8 +3409,8 @@ function runUninstall(u) {
|
|
|
3342
3409
|
cleanupLegacyCopilotVsCode(ideOpts, u, removedPaths);
|
|
3343
3410
|
}
|
|
3344
3411
|
|
|
3345
|
-
if (u.copilotCli) {
|
|
3346
|
-
for (const base of [claudeUserDir(ideOpts), copilotUserDir(ideOpts)]) {
|
|
3412
|
+
if (u.copilotCli) {
|
|
3413
|
+
for (const base of [claudeUserDir(ideOpts), copilotUserDir(ideOpts)]) {
|
|
3347
3414
|
const cmdDir = path.join(base, 'commands');
|
|
3348
3415
|
if (!fs.existsSync(cmdDir)) continue;
|
|
3349
3416
|
for (const name of fs.readdirSync(cmdDir)) {
|
|
@@ -3352,9 +3419,19 @@ function runUninstall(u) {
|
|
|
3352
3419
|
unlinkQuiet(p, u);
|
|
3353
3420
|
removedPaths.push(p);
|
|
3354
3421
|
}
|
|
3355
|
-
}
|
|
3356
|
-
}
|
|
3357
|
-
const
|
|
3422
|
+
}
|
|
3423
|
+
}
|
|
3424
|
+
const claudeAgentsDir = path.join(claudeUserDir(ideOpts), 'agents');
|
|
3425
|
+
if (fs.existsSync(claudeAgentsDir)) {
|
|
3426
|
+
for (const name of fs.readdirSync(claudeAgentsDir)) {
|
|
3427
|
+
if (oxeAgentInstall.isOxeAgentMarkdownName(name)) {
|
|
3428
|
+
const p = path.join(claudeAgentsDir, name);
|
|
3429
|
+
unlinkQuiet(p, u);
|
|
3430
|
+
removedPaths.push(p);
|
|
3431
|
+
}
|
|
3432
|
+
}
|
|
3433
|
+
}
|
|
3434
|
+
const skillsRoot = path.join(copilotUserDir(ideOpts), 'skills');
|
|
3358
3435
|
if (fs.existsSync(skillsRoot)) {
|
|
3359
3436
|
for (const ent of fs.readdirSync(skillsRoot, { withFileTypes: true })) {
|
|
3360
3437
|
if (!ent.isDirectory() || !/^oxe($|-)/.test(ent.name)) continue;
|
package/commands/oxe/debug.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oxe:debug
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Diagnóstica falhas com metodologia RCA: hipóteses explícitas → evidência → reprodução controlada
|
|
5
|
+
→ causa raiz → hotfix mínimo. Não corrige sintomas — rasteia até a causa raiz antes de propor
|
|
6
|
+
qualquer mudança. Documenta o diagnóstico completo em DEBUG.md (sintoma, hipóteses testadas,
|
|
7
|
+
root cause, hotfix aplicado, evidência de resolução). Após o hotfix, orienta execução de
|
|
8
|
+
/oxe-verify para confirmar que os critérios A* afetados ainda passam.
|
|
4
9
|
argument-hint: "[Tn ou erro/stack]"
|
|
5
10
|
allowed-tools:
|
|
6
11
|
- Read
|
package/commands/oxe/discuss.md
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oxe:discuss
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: >
|
|
4
|
+
Conduz sessão estruturada de resolução de decisões técnicas antes do planejamento. Identifica
|
|
5
|
+
trade-offs relevantes, apresenta alternativas com critérios objetivos, registra a decisão
|
|
6
|
+
escolhida com motivo e impacto em DISCUSS.md como D-NN. Cada D-NN fechado aqui é vinculado a
|
|
7
|
+
tarefas Tn no PLAN.md e verificado pelo Verificador após execução. Usar quando: `discuss_before_plan`
|
|
8
|
+
está ativo no config, há decisão arquitetural aberta, ou o Arquiteto sinalizou bloqueio.
|
|
9
|
+
argument-hint: "[decisão a tomar | contexto do trade-off | D-NN a reabrir]"
|
|
5
10
|
allowed-tools:
|
|
6
11
|
- Read
|
|
7
12
|
- Bash
|
package/commands/oxe/execute.md
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oxe:execute
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: >
|
|
4
|
+
Executa as tarefas do PLAN.md onda por onda, com write set mínimo e verificação obrigatória
|
|
5
|
+
antes de avançar. Compila o grafo de execução via LlmTaskExecutor, respeita dependências entre
|
|
6
|
+
tarefas, particiona tools idempotentes (paralelas) e mutáveis (seriais), e registra evidência
|
|
7
|
+
auditável por Tn. Modo --debug ativa diagnóstico de falha inline. --checkpoint '<nome>' cria
|
|
8
|
+
ponto de restauração antes de ondas de alto risco.
|
|
9
|
+
argument-hint: "[onda|Tn | --debug | --deep-diagnosis | --checkpoint '<nome>' | --note 'texto' | --iterative]"
|
|
5
10
|
allowed-tools:
|
|
6
11
|
- Read
|
|
7
12
|
- Bash
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oxe:plan-agent
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: >
|
|
4
|
+
Gera PLAN.md e plan-agents.json — blueprint de execução multi-agente com ondas paralelas.
|
|
5
|
+
Cada agente recebe persona (executor, db-specialist, ui-specialist, etc.), escopo de tarefas,
|
|
6
|
+
dependências entre agentes e lifecycle state rastreável. Ideal para planos com 3+ domínios
|
|
7
|
+
distintos (backend, frontend, banco) onde paralelismo real de agentes é possível. --replan
|
|
8
|
+
regenera o runId, preserva tarefas concluídas e alinha STATE.md.
|
|
9
|
+
argument-hint: "[--replan | <contexto adicional de domínios>]"
|
|
5
10
|
allowed-tools:
|
|
6
11
|
- Read
|
|
7
12
|
- Write
|
package/commands/oxe/plan.md
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oxe:plan
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: >
|
|
4
|
+
Decompõe os critérios A* da SPEC em tarefas GraphNode com mutation_scope explícito, action_type
|
|
5
|
+
correto e verify command determinístico. Projeta ondas que maximizam paralelismo respeitando
|
|
6
|
+
dependências e mutation_scope disjunto. Aplica rubrica de confiança em 6 dimensões e quality gate
|
|
7
|
+
de 19 itens. Gera IMPLEMENTATION-PACK, REFERENCE-ANCHORS e FIXTURE-PACK junto com o PLAN.md.
|
|
8
|
+
--replan preserva histórico e atualiza tarefas sem apagar o trabalho anterior.
|
|
9
|
+
argument-hint: "[--replan | --agents (gera blueprint de agentes junto)]"
|
|
5
10
|
allowed-tools:
|
|
6
11
|
- Read
|
|
7
12
|
- Write
|
package/commands/oxe/scan.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oxe:scan
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Analisa o codebase e produz os sete documentos em .oxe/codebase/ (OVERVIEW, STACK, STRUCTURE,
|
|
5
|
+
TESTING, INTEGRATIONS, CONVENTIONS, CONCERNS). Detecta padrão arquitetural dominante, domínios
|
|
6
|
+
funcionais e sugere profile scale-adaptive. Modo bootstrap (do zero) ou refresh (incremental).
|
|
7
|
+
Cada documento passa por gate de qualidade com critérios e anti-padrões por tipo. O mapa
|
|
8
|
+
resultante alimenta spec, plan e o contexto do LlmTaskExecutor.
|
|
4
9
|
argument-hint: "[área opcional, ex. auth, api]"
|
|
5
10
|
allowed-tools:
|
|
6
11
|
- Read
|
package/commands/oxe/spec.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oxe:spec
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Conduz as 5 fases do processo de especificação: perguntas (blocos coesos por domínio), pesquisa
|
|
5
|
+
(investigação de incertezas técnicas), requisitos (tabela R-ID com v1/v2/fora e critérios A*
|
|
6
|
+
verificáveis), elevação de robustez (checklist de segurança por domínio AUTH/API/DB/FRONTEND/FILE),
|
|
7
|
+
e aprovação com roteiro ROADMAP.md. Flags: --refresh (atualiza codebase/ antes), --full (scan
|
|
8
|
+
completo), --research (Fase 2 explícita), --ui (gera UI-SPEC.md ao final).
|
|
4
9
|
argument-hint: "[descrição da feature | --refresh | --full | --research | --ui]"
|
|
5
10
|
allowed-tools:
|
|
6
11
|
- Read
|
package/commands/oxe/verify.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oxe:verify
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
Audita a implementação em quatro camadas: pré-execução (ambiente e commits), por tarefa Tn
|
|
5
|
+
(verify command de cada task), por critério A* (cobertura completa da SPEC), e fidelidade de
|
|
6
|
+
decisões D-NN. Produz VERIFY.md com evidência observável por critério, classifica findings por
|
|
7
|
+
severidade, gera checklist UAT para validação humana, e fecha o ciclo com retro automática.
|
|
8
|
+
--security adiciona auditoria de segurança baseline. --gaps foca em A* sem cobertura.
|
|
4
9
|
argument-hint: "[Tn | --gaps | --security | --ui | --pr | --diff branchA...branchB | --skip-retro]"
|
|
5
10
|
allowed-tools:
|
|
6
11
|
- Read
|