oxe-cc 1.7.0 → 1.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -0
- package/README.md +37 -37
- package/bin/lib/oxe-agent-install.cjs +24 -8
- package/bin/lib/oxe-manifest.cjs +20 -13
- package/bin/lib/oxe-operational.cjs +234 -41
- package/bin/lib/oxe-project-health.cjs +219 -52
- package/bin/lib/oxe-rationality.cjs +9 -7
- package/bin/oxe-cc.js +443 -236
- package/lib/runtime/compiler/graph-compiler.js +1 -1
- package/lib/runtime/executor/action-tool-map.js +4 -0
- package/lib/runtime/executor/built-in-tools.js +27 -0
- package/lib/runtime/executor/llm-task-executor.d.ts +4 -1
- package/lib/runtime/executor/llm-task-executor.js +41 -5
- package/lib/runtime/executor/node-prompt-builder.d.ts +4 -1
- package/lib/runtime/executor/node-prompt-builder.js +13 -2
- package/lib/runtime/models/failure.d.ts +1 -1
- package/lib/runtime/scheduler/scheduler.d.ts +5 -1
- package/lib/runtime/scheduler/scheduler.js +82 -14
- package/lib/runtime/verification/verification-compiler.js +7 -5
- package/lib/sdk/index.cjs +48 -44
- package/oxe/templates/PLAN.template.md +23 -9
- package/oxe/templates/SPEC.template.md +55 -22
- package/oxe/workflows/plan.md +18 -6
- package/oxe/workflows/spec.md +31 -9
- package/package.json +103 -100
- package/packages/runtime/package.json +14 -14
- package/packages/runtime/src/compiler/graph-compiler.ts +1 -1
- package/packages/runtime/src/evidence/evidence-store.ts +2 -2
- package/packages/runtime/src/executor/action-tool-map.ts +4 -0
- package/packages/runtime/src/executor/built-in-tools.ts +29 -0
- package/packages/runtime/src/executor/llm-task-executor.ts +46 -4
- package/packages/runtime/src/executor/node-prompt-builder.ts +18 -1
- package/packages/runtime/src/models/failure.ts +2 -0
- package/packages/runtime/src/scheduler/scheduler.ts +93 -15
- package/packages/runtime/src/verification/verification-compiler.ts +7 -5
- package/vscode-extension/package.json +184 -184
- package/vscode-extension/oxe-agents-0.9.1.vsix +0 -0
- package/vscode-extension/oxe-agents-0.9.2.vsix +0 -0
- package/vscode-extension/oxe-agents-1.0.0.vsix +0 -0
- package/vscode-extension/oxe-agents-1.4.0.vsix +0 -0
- package/vscode-extension/oxe-agents-1.5.0.vsix +0 -0
- package/vscode-extension/oxe-agents-1.5.1.vsix +0 -0
- package/vscode-extension/oxe-agents-1.6.0.vsix +0 -0
- package/vscode-extension/oxe-agents-1.7.0.vsix +0 -0
|
@@ -8,4 +8,6 @@ export type FailureClass =
|
|
|
8
8
|
| 'test' // verification / acceptance test failed
|
|
9
9
|
| 'timeout' // task or run exceeded time budget
|
|
10
10
|
| 'evidence_missing' // required evidence was not collected
|
|
11
|
+
| 'verify' // inline verification command failed after execution
|
|
12
|
+
| 'llm' // LLM exhausted turn budget without calling finish_task
|
|
11
13
|
| null; // success — no failure
|
|
@@ -24,12 +24,15 @@ import type { FailureClass } from '../models/failure';
|
|
|
24
24
|
import { listMemos } from '../decision/decision-memo';
|
|
25
25
|
import type { RollbackPlan } from '../decision/decision-memo';
|
|
26
26
|
import { runCapabilityAsync } from '../plugins/capability-adapter';
|
|
27
|
+
import { verifyRun } from '../verification/verification-compiler';
|
|
28
|
+
import type { AcceptanceCheckSuite } from '../verification/verification-compiler';
|
|
27
29
|
|
|
28
30
|
export interface TaskResult {
|
|
29
31
|
success: boolean;
|
|
30
32
|
failure_class: FailureClass;
|
|
31
33
|
evidence: string[];
|
|
32
34
|
output: string;
|
|
35
|
+
completed_by?: string;
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
export interface TaskExecutor {
|
|
@@ -37,7 +40,8 @@ export interface TaskExecutor {
|
|
|
37
40
|
node: GraphNode,
|
|
38
41
|
lease: WorkspaceLease,
|
|
39
42
|
runId: string,
|
|
40
|
-
attemptNumber: number
|
|
43
|
+
attemptNumber: number,
|
|
44
|
+
options?: { previousError?: string | null }
|
|
41
45
|
): Promise<TaskResult>;
|
|
42
46
|
}
|
|
43
47
|
|
|
@@ -477,6 +481,7 @@ export class Scheduler {
|
|
|
477
481
|
|
|
478
482
|
let lease: WorkspaceLease | null = null;
|
|
479
483
|
let lastResult: TaskResult | null = null;
|
|
484
|
+
let lastError: string | null = null;
|
|
480
485
|
const maxAttempts = node.policy.max_retries + 1;
|
|
481
486
|
const quotaBlocked = this.consumeQuotaForNode(ctx, node);
|
|
482
487
|
if (quotaBlocked) {
|
|
@@ -542,21 +547,33 @@ export class Scheduler {
|
|
|
542
547
|
payload: { workspace_id: lease.workspace_id, strategy: lease.strategy },
|
|
543
548
|
});
|
|
544
549
|
|
|
545
|
-
lastResult = await this.executeNode(node, lease, ctx, attempt, attemptId);
|
|
550
|
+
lastResult = await this.executeNode(node, lease, ctx, attempt, attemptId, { previousError: lastError });
|
|
546
551
|
|
|
547
552
|
if (lastResult.success) {
|
|
548
|
-
this.
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
553
|
+
const verifyResult = await this.verifyNode(node, lease, ctx, attemptId, attempt);
|
|
554
|
+
if (verifyResult && verifyResult.status === 'failed') {
|
|
555
|
+
lastResult = {
|
|
556
|
+
success: false,
|
|
557
|
+
failure_class: 'verify',
|
|
558
|
+
evidence: lastResult.evidence,
|
|
559
|
+
output: `Verification failed: ${(verifyResult.gaps || []).join('; ') || 'checks did not pass'}`,
|
|
560
|
+
};
|
|
561
|
+
} else {
|
|
562
|
+
this.emit(ctx, {
|
|
563
|
+
type: 'WorkItemCompleted',
|
|
564
|
+
work_item_id: nodeId,
|
|
565
|
+
attempt_id: attemptId,
|
|
566
|
+
payload: { attempt_number: attempt, evidence: lastResult.evidence },
|
|
567
|
+
});
|
|
568
|
+
status.set(nodeId, 'completed');
|
|
569
|
+
completed.push(nodeId);
|
|
570
|
+
this.recordProgress();
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
558
573
|
}
|
|
559
574
|
|
|
575
|
+
lastError = lastResult.output || (lastResult.failure_class ?? 'unknown error');
|
|
576
|
+
|
|
560
577
|
if (lastResult.failure_class === 'policy') break;
|
|
561
578
|
|
|
562
579
|
if (attempt < maxAttempts) {
|
|
@@ -592,6 +609,7 @@ export class Scheduler {
|
|
|
592
609
|
evidence: [],
|
|
593
610
|
output: `[error_boundary] ${message}`,
|
|
594
611
|
};
|
|
612
|
+
lastError = lastResult.output;
|
|
595
613
|
if (attempt < maxAttempts) {
|
|
596
614
|
const backoffMs = Math.min(1_000 * Math.pow(2, attempt - 1) + Math.random() * 500, 30_000);
|
|
597
615
|
await new Promise<void>(resolve => setTimeout(resolve, backoffMs));
|
|
@@ -660,12 +678,13 @@ export class Scheduler {
|
|
|
660
678
|
lease: WorkspaceLease,
|
|
661
679
|
ctx: SchedulerContext,
|
|
662
680
|
attempt: number,
|
|
663
|
-
attemptId: string
|
|
681
|
+
attemptId: string,
|
|
682
|
+
options: { previousError?: string | null } = {},
|
|
664
683
|
): Promise<TaskResult> {
|
|
665
684
|
const primaryAction = pickPrimaryAction(node, ctx.pluginRegistry);
|
|
666
685
|
const provider = primaryAction ? ctx.pluginRegistry?.toolProviderFor(primaryAction.type) : null;
|
|
667
686
|
if (!provider || !primaryAction) {
|
|
668
|
-
return ctx.executor.execute(node, lease, ctx.runId, attempt);
|
|
687
|
+
return ctx.executor.execute(node, lease, ctx.runId, attempt, options);
|
|
669
688
|
}
|
|
670
689
|
|
|
671
690
|
ctx.auditTrail?.record('plugin_invoked', ctx.policyActor ?? 'runtime', {
|
|
@@ -733,6 +752,62 @@ export class Scheduler {
|
|
|
733
752
|
};
|
|
734
753
|
}
|
|
735
754
|
|
|
755
|
+
private async verifyNode(
|
|
756
|
+
node: GraphNode,
|
|
757
|
+
lease: WorkspaceLease,
|
|
758
|
+
ctx: SchedulerContext,
|
|
759
|
+
attemptId: string,
|
|
760
|
+
attempt: number,
|
|
761
|
+
): Promise<{ status: string; gaps?: string[] } | null> {
|
|
762
|
+
if (!node.verify?.command) return null;
|
|
763
|
+
this.emit(ctx, {
|
|
764
|
+
type: 'VerificationStarted',
|
|
765
|
+
work_item_id: node.id,
|
|
766
|
+
payload: { command: node.verify.command, attempt_number: attempt },
|
|
767
|
+
});
|
|
768
|
+
const suite: AcceptanceCheckSuite = {
|
|
769
|
+
checks: [{
|
|
770
|
+
id: `inline-${node.id}`,
|
|
771
|
+
type: 'custom',
|
|
772
|
+
command: node.verify.command,
|
|
773
|
+
evidence_type_expected: 'stdout',
|
|
774
|
+
acceptance_ref: null,
|
|
775
|
+
description: `Verify ${node.id}`,
|
|
776
|
+
}],
|
|
777
|
+
compiled_at: new Date().toISOString(),
|
|
778
|
+
spec_hash: '',
|
|
779
|
+
plan_hash: '',
|
|
780
|
+
};
|
|
781
|
+
let result: { status: string; gaps?: string[] };
|
|
782
|
+
try {
|
|
783
|
+
result = await verifyRun({
|
|
784
|
+
suite,
|
|
785
|
+
cwd: lease.root_path,
|
|
786
|
+
timeoutMs: (ctx.options as Record<string, unknown>)?.verifyTimeoutMs as number ?? 60_000,
|
|
787
|
+
runId: ctx.runId,
|
|
788
|
+
workItemId: node.id,
|
|
789
|
+
attemptNumber: attempt,
|
|
790
|
+
projectRoot: ctx.projectRoot,
|
|
791
|
+
pluginRegistry: ctx.pluginRegistry,
|
|
792
|
+
});
|
|
793
|
+
} catch (err) {
|
|
794
|
+
this.emit(ctx, {
|
|
795
|
+
type: 'VerificationCompleted',
|
|
796
|
+
work_item_id: node.id,
|
|
797
|
+
attempt_id: attemptId,
|
|
798
|
+
payload: { status: 'error', error: String(err) },
|
|
799
|
+
});
|
|
800
|
+
return null;
|
|
801
|
+
}
|
|
802
|
+
this.emit(ctx, {
|
|
803
|
+
type: 'VerificationCompleted',
|
|
804
|
+
work_item_id: node.id,
|
|
805
|
+
attempt_id: attemptId,
|
|
806
|
+
payload: { status: result.status },
|
|
807
|
+
});
|
|
808
|
+
return result;
|
|
809
|
+
}
|
|
810
|
+
|
|
736
811
|
private evaluatePolicyForNode(node: GraphNode, ctx: SchedulerContext): PersistedPolicyDecision | null {
|
|
737
812
|
if (!ctx.policyEngine) return null;
|
|
738
813
|
const primaryAction = pickPrimaryAction(node, ctx.pluginRegistry);
|
|
@@ -767,7 +842,10 @@ export class Scheduler {
|
|
|
767
842
|
ctx: SchedulerContext,
|
|
768
843
|
decision: PersistedPolicyDecision | null
|
|
769
844
|
): Promise<string> {
|
|
770
|
-
if (!ctx.gateManager)
|
|
845
|
+
if (!ctx.gateManager) {
|
|
846
|
+
console.warn('[scheduler] ctx.gateManager not configured — gates will not be persisted');
|
|
847
|
+
return 'gate-missing-manager';
|
|
848
|
+
}
|
|
771
849
|
const scope = inferGateScope(node);
|
|
772
850
|
const primaryAction = pickPrimaryAction(node, ctx.pluginRegistry);
|
|
773
851
|
const gate = await ctx.gateManager.request(scope, {
|
|
@@ -188,16 +188,18 @@ export async function runCheck(
|
|
|
188
188
|
|
|
189
189
|
const start = Date.now();
|
|
190
190
|
try {
|
|
191
|
-
//
|
|
192
|
-
const
|
|
193
|
-
const
|
|
194
|
-
const
|
|
191
|
+
// Use shell so the full command string is interpreted (handles quotes, &&, node -e "...")
|
|
192
|
+
const isWin = process.platform === 'win32';
|
|
193
|
+
const shell = isWin ? 'cmd' : 'sh';
|
|
194
|
+
const shellArgs = isWin ? ['/c', check.command] : ['-c', check.command];
|
|
195
195
|
|
|
196
|
-
const result = spawnSync(
|
|
196
|
+
const result = spawnSync(shell, shellArgs, {
|
|
197
197
|
cwd,
|
|
198
198
|
encoding: 'utf8',
|
|
199
199
|
timeout: timeoutMs,
|
|
200
200
|
maxBuffer: 2 * 1024 * 1024,
|
|
201
|
+
// On Windows, prevent Node from re-quoting the args (preserves double-quotes inside node -e "...")
|
|
202
|
+
windowsVerbatimArguments: isWin,
|
|
201
203
|
});
|
|
202
204
|
|
|
203
205
|
const duration_ms = Date.now() - start;
|
|
@@ -1,185 +1,185 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "oxe-agents",
|
|
3
|
-
"displayName": "OXE Agents",
|
|
4
|
-
"description": "Agentes OXE para GitHub Copilot Chat — cada fase do ciclo como um @agente no VS Code",
|
|
5
|
-
"version": "1.
|
|
6
|
-
"publisher": "oxe-cc",
|
|
1
|
+
{
|
|
2
|
+
"name": "oxe-agents",
|
|
3
|
+
"displayName": "OXE Agents",
|
|
4
|
+
"description": "Agentes OXE para GitHub Copilot Chat — cada fase do ciclo como um @agente no VS Code",
|
|
5
|
+
"version": "1.8.3",
|
|
6
|
+
"publisher": "oxe-cc",
|
|
7
7
|
"license": "MIT",
|
|
8
|
-
"engines": {
|
|
9
|
-
"vscode": "^1.95.0"
|
|
10
|
-
},
|
|
11
|
-
"categories": [
|
|
12
|
-
"AI",
|
|
13
|
-
"Programming Languages",
|
|
14
|
-
"Other"
|
|
15
|
-
],
|
|
16
|
-
"keywords": [
|
|
17
|
-
"oxe",
|
|
18
|
-
"copilot",
|
|
19
|
-
"chat",
|
|
20
|
-
"agent",
|
|
21
|
-
"workflow",
|
|
22
|
-
"spec-driven"
|
|
23
|
-
],
|
|
24
|
-
"extensionDependencies": [
|
|
25
|
-
"GitHub.copilot-chat"
|
|
26
|
-
],
|
|
27
|
-
"activationEvents": [
|
|
28
|
-
"onStartupFinished"
|
|
29
|
-
],
|
|
30
|
-
"main": "./src/extension.js",
|
|
31
|
-
"contributes": {
|
|
32
|
-
"chatParticipants": [
|
|
33
|
-
{
|
|
34
|
-
"id": "oxe.router",
|
|
35
|
-
"name": "oxe",
|
|
36
|
-
"fullName": "OXE",
|
|
37
|
-
"description": "Router universal — lê STATE.md e sugere o próximo passo do ciclo OXE",
|
|
38
|
-
"isSticky": false,
|
|
39
|
-
"sampleRequest": "Qual é a situação atual do projeto e o próximo passo recomendado?"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"id": "oxe.ask",
|
|
43
|
-
"name": "oxe-ask",
|
|
44
|
-
"fullName": "OXE Ask",
|
|
45
|
-
"description": "Situational awareness — responde perguntas sobre o estado atual do projeto com evidência explícita",
|
|
46
|
-
"isSticky": false,
|
|
47
|
-
"sampleRequest": "Qual é a fase atual e o que foi implementado até agora?"
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
"id": "oxe.scan",
|
|
51
|
-
"name": "oxe-scan",
|
|
52
|
-
"fullName": "OXE Scan",
|
|
53
|
-
"description": "Mapeamento do codebase — reconstrói .oxe/codebase/ e contextualiza o projeto para um novo ciclo",
|
|
54
|
-
"isSticky": false,
|
|
55
|
-
"sampleRequest": "Mapeie o codebase e atualize o contexto do projeto."
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"id": "oxe.spec",
|
|
59
|
-
"name": "oxe-spec",
|
|
60
|
-
"fullName": "OXE Spec",
|
|
61
|
-
"description": "Especificação — gera SPEC.md com critérios de aceite verificáveis a partir de requisitos",
|
|
62
|
-
"isSticky": true,
|
|
63
|
-
"sampleRequest": "Preciso adicionar autenticação JWT ao sistema. Gere a especificação.",
|
|
64
|
-
"commands": [
|
|
65
|
-
{
|
|
66
|
-
"name": "discuss",
|
|
67
|
-
"description": "Abrir discussão estruturada antes de gerar a spec"
|
|
68
|
-
}
|
|
69
|
-
]
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
"id": "oxe.plan",
|
|
73
|
-
"name": "oxe-plan",
|
|
74
|
-
"fullName": "OXE Plan",
|
|
75
|
-
"description": "Planejamento — gera PLAN.md com ondas, tarefas, hipóteses críticas e confidence vector",
|
|
76
|
-
"isSticky": true,
|
|
77
|
-
"sampleRequest": "Gere o plano de implementação para o SPEC atual.",
|
|
78
|
-
"commands": [
|
|
79
|
-
{
|
|
80
|
-
"name": "replan",
|
|
81
|
-
"description": "Replanejar ciclo atual com motivo e lições aplicadas"
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
"name": "agents",
|
|
85
|
-
"description": "Gerar blueprint multi-agente para planos com múltiplos domínios"
|
|
86
|
-
}
|
|
87
|
-
]
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
"id": "oxe.quick",
|
|
91
|
-
"name": "oxe-quick",
|
|
92
|
-
"fullName": "OXE Quick",
|
|
93
|
-
"description": "Plano rápido — para tarefas S/M sem SPEC formal; objetivo → passos → verify",
|
|
94
|
-
"isSticky": true,
|
|
95
|
-
"sampleRequest": "Preciso renomear a função processPayment para handlePayment em todos os arquivos."
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
"id": "oxe.execute",
|
|
99
|
-
"name": "oxe-execute",
|
|
100
|
-
"fullName": "OXE Execute",
|
|
101
|
-
"description": "Execução — implementa a onda atual do PLAN validando hipóteses antes de mutar",
|
|
102
|
-
"isSticky": true,
|
|
103
|
-
"sampleRequest": "Execute a onda atual do plano.",
|
|
104
|
-
"commands": [
|
|
105
|
-
{
|
|
106
|
-
"name": "wave",
|
|
107
|
-
"description": "Executar uma onda específica (ex: /wave 2)"
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
"name": "task",
|
|
111
|
-
"description": "Executar uma tarefa específica (ex: /task T3)"
|
|
112
|
-
}
|
|
113
|
-
]
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
"id": "oxe.debug",
|
|
117
|
-
"name": "oxe-debug",
|
|
118
|
-
"fullName": "OXE Debug",
|
|
119
|
-
"description": "Debug — diagnóstico orientado a hipóteses durante execução travada ou falha inline",
|
|
120
|
-
"isSticky": false,
|
|
121
|
-
"sampleRequest": "A tarefa T3 está falhando com erro de timeout. Ajude a diagnosticar."
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
"id": "oxe.verify",
|
|
125
|
-
"name": "oxe-verify",
|
|
126
|
-
"fullName": "OXE Verify",
|
|
127
|
-
"description": "Verificação — valida critérios A* do SPEC contra evidências reais produzidas pelo executor",
|
|
128
|
-
"isSticky": true,
|
|
129
|
-
"sampleRequest": "Verifique se a implementação atende todos os critérios do SPEC.",
|
|
130
|
-
"commands": [
|
|
131
|
-
{
|
|
132
|
-
"name": "audit",
|
|
133
|
-
"description": "Auditoria adversarial: sem acesso ao PLAN, apenas SPEC + evidências"
|
|
134
|
-
}
|
|
135
|
-
]
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"id": "oxe.review",
|
|
139
|
-
"name": "oxe-review",
|
|
140
|
-
"fullName": "OXE Review",
|
|
141
|
-
"description": "Revisão de código — auditor adversarial de PR e mudanças, findings por severidade",
|
|
142
|
-
"isSticky": false,
|
|
143
|
-
"sampleRequest": "Revise as mudanças desta branch e liste os findings por severidade."
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
"id": "oxe.capabilities",
|
|
147
|
-
"name": "oxe-capabilities",
|
|
148
|
-
"fullName": "OXE Capabilities",
|
|
149
|
-
"description": "Capabilities — lista, instala, remove e atualiza capabilities nativas do projeto em .oxe/",
|
|
150
|
-
"isSticky": false,
|
|
151
|
-
"sampleRequest": "Liste as capabilities disponíveis neste projeto.",
|
|
152
|
-
"commands": [
|
|
153
|
-
{
|
|
154
|
-
"name": "list",
|
|
155
|
-
"description": "Listar capabilities instaladas"
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
"name": "install",
|
|
159
|
-
"description": "Instalar uma capability"
|
|
160
|
-
}
|
|
161
|
-
]
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
"id": "oxe.skill",
|
|
165
|
-
"name": "oxe-skill",
|
|
166
|
-
"fullName": "OXE Skill",
|
|
167
|
-
"description": "Skills — gerencia skills e habilidades registradas no framework OXE do projeto",
|
|
168
|
-
"isSticky": false,
|
|
169
|
-
"sampleRequest": "Quais skills estão disponíveis neste projeto OXE?"
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
"id": "oxe.dashboard",
|
|
173
|
-
"name": "oxe-dashboard",
|
|
174
|
-
"fullName": "OXE Dashboard",
|
|
175
|
-
"description": "Dashboard — exibe status operacional: runtime, ondas, checkpoints e saúde do ciclo",
|
|
176
|
-
"isSticky": false,
|
|
177
|
-
"sampleRequest": "Mostre o status do dashboard: fase, active run e próximo passo."
|
|
178
|
-
}
|
|
179
|
-
]
|
|
180
|
-
},
|
|
181
|
-
"repository": {
|
|
182
|
-
"type": "git",
|
|
183
|
-
"url": "https://github.com/oxe-cc/oxe-cc"
|
|
184
|
-
}
|
|
185
|
-
}
|
|
8
|
+
"engines": {
|
|
9
|
+
"vscode": "^1.95.0"
|
|
10
|
+
},
|
|
11
|
+
"categories": [
|
|
12
|
+
"AI",
|
|
13
|
+
"Programming Languages",
|
|
14
|
+
"Other"
|
|
15
|
+
],
|
|
16
|
+
"keywords": [
|
|
17
|
+
"oxe",
|
|
18
|
+
"copilot",
|
|
19
|
+
"chat",
|
|
20
|
+
"agent",
|
|
21
|
+
"workflow",
|
|
22
|
+
"spec-driven"
|
|
23
|
+
],
|
|
24
|
+
"extensionDependencies": [
|
|
25
|
+
"GitHub.copilot-chat"
|
|
26
|
+
],
|
|
27
|
+
"activationEvents": [
|
|
28
|
+
"onStartupFinished"
|
|
29
|
+
],
|
|
30
|
+
"main": "./src/extension.js",
|
|
31
|
+
"contributes": {
|
|
32
|
+
"chatParticipants": [
|
|
33
|
+
{
|
|
34
|
+
"id": "oxe.router",
|
|
35
|
+
"name": "oxe",
|
|
36
|
+
"fullName": "OXE",
|
|
37
|
+
"description": "Router universal — lê STATE.md e sugere o próximo passo do ciclo OXE",
|
|
38
|
+
"isSticky": false,
|
|
39
|
+
"sampleRequest": "Qual é a situação atual do projeto e o próximo passo recomendado?"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "oxe.ask",
|
|
43
|
+
"name": "oxe-ask",
|
|
44
|
+
"fullName": "OXE Ask",
|
|
45
|
+
"description": "Situational awareness — responde perguntas sobre o estado atual do projeto com evidência explícita",
|
|
46
|
+
"isSticky": false,
|
|
47
|
+
"sampleRequest": "Qual é a fase atual e o que foi implementado até agora?"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "oxe.scan",
|
|
51
|
+
"name": "oxe-scan",
|
|
52
|
+
"fullName": "OXE Scan",
|
|
53
|
+
"description": "Mapeamento do codebase — reconstrói .oxe/codebase/ e contextualiza o projeto para um novo ciclo",
|
|
54
|
+
"isSticky": false,
|
|
55
|
+
"sampleRequest": "Mapeie o codebase e atualize o contexto do projeto."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "oxe.spec",
|
|
59
|
+
"name": "oxe-spec",
|
|
60
|
+
"fullName": "OXE Spec",
|
|
61
|
+
"description": "Especificação — gera SPEC.md com critérios de aceite verificáveis a partir de requisitos",
|
|
62
|
+
"isSticky": true,
|
|
63
|
+
"sampleRequest": "Preciso adicionar autenticação JWT ao sistema. Gere a especificação.",
|
|
64
|
+
"commands": [
|
|
65
|
+
{
|
|
66
|
+
"name": "discuss",
|
|
67
|
+
"description": "Abrir discussão estruturada antes de gerar a spec"
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "oxe.plan",
|
|
73
|
+
"name": "oxe-plan",
|
|
74
|
+
"fullName": "OXE Plan",
|
|
75
|
+
"description": "Planejamento — gera PLAN.md com ondas, tarefas, hipóteses críticas e confidence vector",
|
|
76
|
+
"isSticky": true,
|
|
77
|
+
"sampleRequest": "Gere o plano de implementação para o SPEC atual.",
|
|
78
|
+
"commands": [
|
|
79
|
+
{
|
|
80
|
+
"name": "replan",
|
|
81
|
+
"description": "Replanejar ciclo atual com motivo e lições aplicadas"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "agents",
|
|
85
|
+
"description": "Gerar blueprint multi-agente para planos com múltiplos domínios"
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "oxe.quick",
|
|
91
|
+
"name": "oxe-quick",
|
|
92
|
+
"fullName": "OXE Quick",
|
|
93
|
+
"description": "Plano rápido — para tarefas S/M sem SPEC formal; objetivo → passos → verify",
|
|
94
|
+
"isSticky": true,
|
|
95
|
+
"sampleRequest": "Preciso renomear a função processPayment para handlePayment em todos os arquivos."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "oxe.execute",
|
|
99
|
+
"name": "oxe-execute",
|
|
100
|
+
"fullName": "OXE Execute",
|
|
101
|
+
"description": "Execução — implementa a onda atual do PLAN validando hipóteses antes de mutar",
|
|
102
|
+
"isSticky": true,
|
|
103
|
+
"sampleRequest": "Execute a onda atual do plano.",
|
|
104
|
+
"commands": [
|
|
105
|
+
{
|
|
106
|
+
"name": "wave",
|
|
107
|
+
"description": "Executar uma onda específica (ex: /wave 2)"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"name": "task",
|
|
111
|
+
"description": "Executar uma tarefa específica (ex: /task T3)"
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "oxe.debug",
|
|
117
|
+
"name": "oxe-debug",
|
|
118
|
+
"fullName": "OXE Debug",
|
|
119
|
+
"description": "Debug — diagnóstico orientado a hipóteses durante execução travada ou falha inline",
|
|
120
|
+
"isSticky": false,
|
|
121
|
+
"sampleRequest": "A tarefa T3 está falhando com erro de timeout. Ajude a diagnosticar."
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "oxe.verify",
|
|
125
|
+
"name": "oxe-verify",
|
|
126
|
+
"fullName": "OXE Verify",
|
|
127
|
+
"description": "Verificação — valida critérios A* do SPEC contra evidências reais produzidas pelo executor",
|
|
128
|
+
"isSticky": true,
|
|
129
|
+
"sampleRequest": "Verifique se a implementação atende todos os critérios do SPEC.",
|
|
130
|
+
"commands": [
|
|
131
|
+
{
|
|
132
|
+
"name": "audit",
|
|
133
|
+
"description": "Auditoria adversarial: sem acesso ao PLAN, apenas SPEC + evidências"
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"id": "oxe.review",
|
|
139
|
+
"name": "oxe-review",
|
|
140
|
+
"fullName": "OXE Review",
|
|
141
|
+
"description": "Revisão de código — auditor adversarial de PR e mudanças, findings por severidade",
|
|
142
|
+
"isSticky": false,
|
|
143
|
+
"sampleRequest": "Revise as mudanças desta branch e liste os findings por severidade."
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"id": "oxe.capabilities",
|
|
147
|
+
"name": "oxe-capabilities",
|
|
148
|
+
"fullName": "OXE Capabilities",
|
|
149
|
+
"description": "Capabilities — lista, instala, remove e atualiza capabilities nativas do projeto em .oxe/",
|
|
150
|
+
"isSticky": false,
|
|
151
|
+
"sampleRequest": "Liste as capabilities disponíveis neste projeto.",
|
|
152
|
+
"commands": [
|
|
153
|
+
{
|
|
154
|
+
"name": "list",
|
|
155
|
+
"description": "Listar capabilities instaladas"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"name": "install",
|
|
159
|
+
"description": "Instalar uma capability"
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": "oxe.skill",
|
|
165
|
+
"name": "oxe-skill",
|
|
166
|
+
"fullName": "OXE Skill",
|
|
167
|
+
"description": "Skills — gerencia skills e habilidades registradas no framework OXE do projeto",
|
|
168
|
+
"isSticky": false,
|
|
169
|
+
"sampleRequest": "Quais skills estão disponíveis neste projeto OXE?"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"id": "oxe.dashboard",
|
|
173
|
+
"name": "oxe-dashboard",
|
|
174
|
+
"fullName": "OXE Dashboard",
|
|
175
|
+
"description": "Dashboard — exibe status operacional: runtime, ondas, checkpoints e saúde do ciclo",
|
|
176
|
+
"isSticky": false,
|
|
177
|
+
"sampleRequest": "Mostre o status do dashboard: fase, active run e próximo passo."
|
|
178
|
+
}
|
|
179
|
+
]
|
|
180
|
+
},
|
|
181
|
+
"repository": {
|
|
182
|
+
"type": "git",
|
|
183
|
+
"url": "https://github.com/oxe-cc/oxe-cc"
|
|
184
|
+
}
|
|
185
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|