oxe-cc 0.6.6 → 0.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/.cursor/commands/oxe-capabilities.md +11 -0
- package/.cursor/commands/oxe-dashboard.md +11 -0
- package/.github/prompts/oxe-capabilities.prompt.md +12 -0
- package/.github/prompts/oxe-dashboard.prompt.md +12 -0
- package/CHANGELOG.md +33 -0
- package/README.md +147 -11
- package/assets/oxe-framework-artifacts-paper.png +0 -0
- package/bin/banner.txt +1 -1
- package/bin/lib/oxe-azure.cjs +1445 -0
- package/bin/lib/oxe-dashboard.cjs +588 -0
- package/bin/lib/oxe-install-resolve.cjs +4 -1
- package/bin/lib/oxe-operational.cjs +670 -0
- package/bin/lib/oxe-project-health.cjs +372 -28
- package/bin/oxe-cc.js +1517 -312
- package/commands/oxe/capabilities.md +13 -0
- package/commands/oxe/dashboard.md +14 -0
- package/lib/sdk/README.md +9 -7
- package/lib/sdk/index.cjs +56 -0
- package/lib/sdk/index.d.ts +73 -0
- package/oxe/templates/ACTIVE-RUN.template.json +32 -0
- package/oxe/templates/CAPABILITIES.template.md +7 -0
- package/oxe/templates/CAPABILITY.template.md +45 -0
- package/oxe/templates/CHECKPOINTS.template.md +7 -0
- package/oxe/templates/EXECUTION-RUNTIME.template.md +68 -0
- package/oxe/templates/INVESTIGATION.template.md +38 -0
- package/oxe/templates/NOTES.template.md +16 -0
- package/oxe/templates/PLAN-REVIEW.template.md +31 -0
- package/oxe/templates/RESEARCH.template.md +11 -4
- package/oxe/templates/SPEC.template.md +6 -4
- package/oxe/templates/STATE.md +45 -7
- package/oxe/templates/config.template.json +11 -3
- package/oxe/workflows/ask.md +10 -1
- package/oxe/workflows/capabilities.md +23 -0
- package/oxe/workflows/dashboard.md +23 -0
- package/oxe/workflows/discuss.md +11 -9
- package/oxe/workflows/execute.md +57 -35
- package/oxe/workflows/help.md +256 -225
- package/oxe/workflows/obs.md +70 -20
- package/oxe/workflows/plan.md +83 -74
- package/oxe/workflows/quick.md +16 -11
- package/oxe/workflows/references/adaptive-discovery.md +27 -0
- package/oxe/workflows/research.md +12 -8
- package/oxe/workflows/retro.md +30 -5
- package/oxe/workflows/scan.md +1 -0
- package/oxe/workflows/spec.md +65 -48
- package/oxe/workflows/verify.md +52 -37
- package/package.json +2 -2
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: oxe:capabilities
|
|
3
|
+
description: "Gerir capabilities nativas do projeto OXE"
|
|
4
|
+
argument-hint: "[list|install <id>|remove <id>|update]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Bash
|
|
8
|
+
- Glob
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
**Workflow canónico:** `oxe/workflows/capabilities.md`
|
|
12
|
+
|
|
13
|
+
Execute integralmente esse ficheiro na raiz do repositório em que estás a trabalhar. Usa o texto em `$ARGUMENTS` como ação sobre capabilities.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: oxe:dashboard
|
|
3
|
+
description: "Visualizar o runtime operacional, ondas, checkpoints e sinais principais da trilha OXE"
|
|
4
|
+
argument-hint: "[foco opcional]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Bash
|
|
8
|
+
- Glob
|
|
9
|
+
- Grep
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
**Workflow canónico:** `oxe/workflows/dashboard.md`
|
|
13
|
+
|
|
14
|
+
Execute integralmente esse ficheiro na raiz do repositório em que estás a trabalhar. Usa o texto em `$ARGUMENTS` como foco opcional.
|
package/lib/sdk/README.md
CHANGED
|
@@ -47,19 +47,21 @@ const { options, warnings: w } = oxe.install.resolveOptionsFromConfig(dir, {
|
|
|
47
47
|
| **health** | `loadOxeConfigMerged`, `validateConfigShape`, `buildHealthReport`, `suggestNextStep`, `oxePaths`, constantes de config |
|
|
48
48
|
| **workflows** | `resolveWorkflowsDir`, `listWorkflowMdFiles`, `diffWorkflows`, `validateWorkflowShapes` (avisos `WORKFLOW_SHAPE`) |
|
|
49
49
|
| **install** | `resolveOptionsFromConfig` |
|
|
50
|
-
| **manifest** | `loadFileManifest`, `writeFileManifest`, `sha256File`, `collectFilesRecursive` |
|
|
51
|
-
| **agents** | `adjustWorkflowPathsForNestedLayout`, `parseCursorCommandFrontmatter` |
|
|
52
|
-
| **
|
|
50
|
+
| **manifest** | `loadFileManifest`, `writeFileManifest`, `sha256File`, `collectFilesRecursive` |
|
|
51
|
+
| **agents** | `adjustWorkflowPathsForNestedLayout`, `parseCursorCommandFrontmatter` |
|
|
52
|
+
| **azure** | `azurePaths`, `detectAzureCli`, `loadAzureProfile`, `syncAzureInventory`, `planAzureOperation`, `applyAzureOperation`, `azureDoctor` |
|
|
53
|
+
| **doctor** | `runDoctorChecks` — resultado estruturado (erros + avisos + diff de workflows + `workflowShape` com lint leve dos `.md`) |
|
|
53
54
|
|
|
54
55
|
TypeScript: ver `index.d.ts` junto deste ficheiro.
|
|
55
56
|
|
|
56
57
|
## `health.buildHealthReport` e `parseLastCompactDate`
|
|
57
58
|
|
|
58
59
|
- **`parseLastCompactDate(stateText)`** — lê a data em **`.oxe/STATE.md`** na secção **Último compact** (mesma convenção que **Último scan**). Devolve `Date | null` se a linha for placeholder ou ilegível.
|
|
59
|
-
- **`buildHealthReport(projectRoot)`** — agrega fase, datas, avisos de SPEC/PLAN/VERIFY e o próximo passo sugerido. Campos usados em CI e em `oxe-cc status --json`:
|
|
60
|
-
- **`scanDate`**, **`stale`** — último scan e idade face a `scan_max_age_days` (`stale: { stale, days }`).
|
|
61
|
-
- **`compactDate`**, **`staleCompact`** — último compact e idade face a `compact_max_age_days`.
|
|
62
|
-
- **`
|
|
60
|
+
- **`buildHealthReport(projectRoot)`** — agrega fase, datas, avisos de SPEC/PLAN/VERIFY e o próximo passo sugerido. Campos usados em CI e em `oxe-cc status --json`:
|
|
61
|
+
- **`scanDate`**, **`stale`** — último scan e idade face a `scan_max_age_days` (`stale: { stale, days }`).
|
|
62
|
+
- **`compactDate`**, **`staleCompact`** — último compact e idade face a `compact_max_age_days`.
|
|
63
|
+
- **`azureActive`**, **`azure`** — contexto Azure resolvido, inventário materializado, warnings e pendências do provider.
|
|
64
|
+
- **`next`** — `{ step, cursorCmd, reason, artifacts }` (espelha a lógica de `suggestNextStep`).
|
|
63
65
|
|
|
64
66
|
## `runDoctorChecks` e relatório de saúde
|
|
65
67
|
|
package/lib/sdk/index.cjs
CHANGED
|
@@ -14,6 +14,9 @@ const installResolve = require('../../bin/lib/oxe-install-resolve.cjs');
|
|
|
14
14
|
const agentInstall = require('../../bin/lib/oxe-agent-install.cjs');
|
|
15
15
|
const security = require('../../bin/lib/oxe-security.cjs');
|
|
16
16
|
const plugins = require('../../bin/lib/oxe-plugins.cjs');
|
|
17
|
+
const dashboard = require('../../bin/lib/oxe-dashboard.cjs');
|
|
18
|
+
const operational = require('../../bin/lib/oxe-operational.cjs');
|
|
19
|
+
const azure = require('../../bin/lib/oxe-azure.cjs');
|
|
17
20
|
|
|
18
21
|
const PACKAGE_ROOT = path.join(__dirname, '..', '..');
|
|
19
22
|
|
|
@@ -543,6 +546,59 @@ module.exports = {
|
|
|
543
546
|
initPluginsDir: plugins.initPluginsDir,
|
|
544
547
|
},
|
|
545
548
|
|
|
549
|
+
/** Dashboard local: contexto consolidado e persistência de revisão do plano. */
|
|
550
|
+
dashboard: {
|
|
551
|
+
loadDashboardContext: dashboard.loadDashboardContext,
|
|
552
|
+
savePlanReviewStatus: dashboard.savePlanReviewStatus,
|
|
553
|
+
addPlanReviewComment: dashboard.addPlanReviewComment,
|
|
554
|
+
updatePlanReviewCommentStatus: dashboard.updatePlanReviewCommentStatus,
|
|
555
|
+
},
|
|
556
|
+
|
|
557
|
+
/** Runtime operacional: tracing, active run, catálogo de capabilities e memória em camadas. */
|
|
558
|
+
operational: {
|
|
559
|
+
operationalPaths: operational.operationalPaths,
|
|
560
|
+
appendEvent: operational.appendEvent,
|
|
561
|
+
readEvents: operational.readEvents,
|
|
562
|
+
summarizeEvents: operational.summarizeEvents,
|
|
563
|
+
writeRunState: operational.writeRunState,
|
|
564
|
+
readRunState: operational.readRunState,
|
|
565
|
+
buildOperationalGraph: operational.buildOperationalGraph,
|
|
566
|
+
applyRuntimeAction: operational.applyRuntimeAction,
|
|
567
|
+
parseCapabilityManifest: operational.parseCapabilityManifest,
|
|
568
|
+
readCapabilityCatalog: operational.readCapabilityCatalog,
|
|
569
|
+
buildMemoryLayers: operational.buildMemoryLayers,
|
|
570
|
+
},
|
|
571
|
+
|
|
572
|
+
/** Provider Azure nativo via Azure CLI. */
|
|
573
|
+
azure: {
|
|
574
|
+
MIN_AZURE_CLI_MAJOR: azure.MIN_AZURE_CLI_MAJOR,
|
|
575
|
+
AZURE_CAPABILITY_IDS: azure.AZURE_CAPABILITY_IDS,
|
|
576
|
+
RESOURCE_GRAPH_QUERY: azure.RESOURCE_GRAPH_QUERY,
|
|
577
|
+
DEFAULT_AZURE_PROFILE: azure.DEFAULT_AZURE_PROFILE,
|
|
578
|
+
azurePaths: azure.azurePaths,
|
|
579
|
+
ensureAzureArtifacts: azure.ensureAzureArtifacts,
|
|
580
|
+
isAzureContextEnabled: azure.isAzureContextEnabled,
|
|
581
|
+
detectAzureCli: azure.detectAzureCli,
|
|
582
|
+
loadAzureProfile: azure.loadAzureProfile,
|
|
583
|
+
loadAzureAuthStatus: azure.loadAzureAuthStatus,
|
|
584
|
+
loadAzureInventory: azure.loadAzureInventory,
|
|
585
|
+
listAzureOperations: azure.listAzureOperations,
|
|
586
|
+
summarizeInventory: azure.summarizeInventory,
|
|
587
|
+
searchAzureInventory: azure.searchAzureInventory,
|
|
588
|
+
diffInventory: azure.diffInventory,
|
|
589
|
+
statusAzure: azure.statusAzure,
|
|
590
|
+
ensureAzureCapabilities: azure.ensureAzureCapabilities,
|
|
591
|
+
getAzureContext: azure.getAzureContext,
|
|
592
|
+
loginAzure: azure.loginAzure,
|
|
593
|
+
setAzureSubscription: azure.setAzureSubscription,
|
|
594
|
+
syncAzureInventory: azure.syncAzureInventory,
|
|
595
|
+
executeAzureRead: azure.executeAzureRead,
|
|
596
|
+
planAzureOperation: azure.planAzureOperation,
|
|
597
|
+
applyAzureOperation: azure.applyAzureOperation,
|
|
598
|
+
azureDoctor: azure.azureDoctor,
|
|
599
|
+
redactObject: azure.redactObject,
|
|
600
|
+
},
|
|
601
|
+
|
|
546
602
|
/** Um único objeto com verificações tipo `doctor` + relatório de saúde. */
|
|
547
603
|
runDoctorChecks,
|
|
548
604
|
};
|
package/lib/sdk/index.d.ts
CHANGED
|
@@ -45,6 +45,27 @@ export interface OxeNextSuggestion {
|
|
|
45
45
|
artifacts: string[];
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
export interface AzureInventorySummary {
|
|
49
|
+
total: number;
|
|
50
|
+
servicebus: number;
|
|
51
|
+
eventgrid: number;
|
|
52
|
+
sql: number;
|
|
53
|
+
other: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface AzureHealthContext {
|
|
57
|
+
profile: Record<string, unknown> | null;
|
|
58
|
+
authStatus: Record<string, unknown> | null;
|
|
59
|
+
inventorySummary: AzureInventorySummary | null;
|
|
60
|
+
inventoryPath: string;
|
|
61
|
+
operationsPath: string;
|
|
62
|
+
inventorySyncedAt: string | null;
|
|
63
|
+
inventoryStale: { stale: boolean; hours: number | null };
|
|
64
|
+
pendingOperations: number;
|
|
65
|
+
lastOperation: Record<string, unknown> | null;
|
|
66
|
+
warnings: string[];
|
|
67
|
+
}
|
|
68
|
+
|
|
48
69
|
/** Relatório retornado por `health.buildHealthReport` e incluído em `runDoctorChecks`.healthReport. */
|
|
49
70
|
export interface OxeHealthReport {
|
|
50
71
|
configPath: string | null;
|
|
@@ -63,6 +84,8 @@ export interface OxeHealthReport {
|
|
|
63
84
|
specWarn: string[];
|
|
64
85
|
planWarn: string[];
|
|
65
86
|
next: OxeNextSuggestion;
|
|
87
|
+
azureActive?: boolean;
|
|
88
|
+
azure?: AzureHealthContext | null;
|
|
66
89
|
scanFocusGlobs?: unknown;
|
|
67
90
|
scanIgnoreGlobs?: unknown;
|
|
68
91
|
}
|
|
@@ -281,6 +304,56 @@ export interface OxeSdk {
|
|
|
281
304
|
initPluginsDir: (projectRoot: string) => void;
|
|
282
305
|
};
|
|
283
306
|
|
|
307
|
+
dashboard: {
|
|
308
|
+
loadDashboardContext: (projectRoot: string, opts?: { activeSession?: string | null }) => Record<string, unknown>;
|
|
309
|
+
savePlanReviewStatus: (projectRoot: string, input?: Record<string, unknown>) => Record<string, unknown>;
|
|
310
|
+
addPlanReviewComment: (projectRoot: string, input?: Record<string, unknown>) => Record<string, unknown>;
|
|
311
|
+
updatePlanReviewCommentStatus: (projectRoot: string, input?: Record<string, unknown>) => Record<string, unknown> | null;
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
operational: {
|
|
315
|
+
operationalPaths: (projectRoot: string, activeSession: string | null) => Record<string, string | null>;
|
|
316
|
+
appendEvent: (projectRoot: string, activeSession: string | null, event?: Record<string, unknown>) => Record<string, unknown>;
|
|
317
|
+
readEvents: (projectRoot: string, activeSession: string | null) => Array<Record<string, unknown>>;
|
|
318
|
+
summarizeEvents: (events: Array<Record<string, unknown>>) => Record<string, unknown>;
|
|
319
|
+
writeRunState: (projectRoot: string, activeSession: string | null, runState?: Record<string, unknown>) => Record<string, unknown>;
|
|
320
|
+
readRunState: (projectRoot: string, activeSession: string | null) => Record<string, unknown> | null;
|
|
321
|
+
buildOperationalGraph: (runState?: Record<string, unknown>) => { nodes: Array<Record<string, unknown>>; edges: Array<Record<string, unknown>> };
|
|
322
|
+
applyRuntimeAction: (projectRoot: string, activeSession: string | null, input?: Record<string, unknown>) => Record<string, unknown>;
|
|
323
|
+
parseCapabilityManifest: (text: string) => Record<string, unknown>;
|
|
324
|
+
readCapabilityCatalog: (projectRoot: string) => Array<Record<string, unknown>>;
|
|
325
|
+
buildMemoryLayers: (projectRoot: string, activeSession: string | null) => Record<string, unknown>;
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
azure: {
|
|
329
|
+
MIN_AZURE_CLI_MAJOR: number;
|
|
330
|
+
AZURE_CAPABILITY_IDS: string[];
|
|
331
|
+
RESOURCE_GRAPH_QUERY: string;
|
|
332
|
+
DEFAULT_AZURE_PROFILE: Record<string, unknown>;
|
|
333
|
+
azurePaths: (projectRoot: string) => Record<string, string>;
|
|
334
|
+
ensureAzureArtifacts: (projectRoot: string) => Record<string, string>;
|
|
335
|
+
isAzureContextEnabled: (projectRoot: string, config?: Record<string, unknown>) => boolean;
|
|
336
|
+
detectAzureCli: (projectRoot: string, options?: Record<string, unknown>) => Record<string, unknown>;
|
|
337
|
+
loadAzureProfile: (projectRoot: string) => Record<string, unknown>;
|
|
338
|
+
loadAzureAuthStatus: (projectRoot: string) => Record<string, unknown> | null;
|
|
339
|
+
loadAzureInventory: (projectRoot: string) => Record<string, unknown> | null;
|
|
340
|
+
listAzureOperations: (projectRoot: string) => Array<Record<string, unknown>>;
|
|
341
|
+
summarizeInventory: (items: Array<Record<string, unknown>>) => AzureInventorySummary;
|
|
342
|
+
searchAzureInventory: (projectRoot: string, query: string, filters?: { type?: string; resourceGroup?: string }) => Array<Record<string, unknown>>;
|
|
343
|
+
diffInventory: (previousItems: Array<Record<string, unknown>>, currentItems: Array<Record<string, unknown>>) => { added: Array<Record<string, unknown>>; removed: Array<Record<string, unknown>>; unchanged: number };
|
|
344
|
+
statusAzure: (projectRoot: string, config?: Record<string, unknown>, options?: Record<string, unknown>) => Record<string, unknown>;
|
|
345
|
+
ensureAzureCapabilities: (projectRoot: string) => string[];
|
|
346
|
+
getAzureContext: (projectRoot: string, options?: Record<string, unknown>) => Record<string, unknown>;
|
|
347
|
+
loginAzure: (projectRoot: string, options?: Record<string, unknown>) => Record<string, unknown>;
|
|
348
|
+
setAzureSubscription: (projectRoot: string, subscription: string, options?: Record<string, unknown>) => Record<string, unknown>;
|
|
349
|
+
syncAzureInventory: (projectRoot: string, options?: Record<string, unknown>) => Record<string, unknown>;
|
|
350
|
+
executeAzureRead: (projectRoot: string, activeSession: string | null, domain: string, verb: string, input: Record<string, unknown>, options?: Record<string, unknown>) => unknown;
|
|
351
|
+
planAzureOperation: (projectRoot: string, activeSession: string | null, domain: string, input: Record<string, unknown>, options?: Record<string, unknown>) => Record<string, unknown>;
|
|
352
|
+
applyAzureOperation: (projectRoot: string, activeSession: string | null, domain: string, input: Record<string, unknown>, options?: Record<string, unknown>) => Record<string, unknown>;
|
|
353
|
+
azureDoctor: (projectRoot: string, config?: Record<string, unknown>, options?: Record<string, unknown>) => Record<string, unknown>;
|
|
354
|
+
redactObject: (value: unknown) => unknown;
|
|
355
|
+
};
|
|
356
|
+
|
|
284
357
|
runDoctorChecks: (args: {
|
|
285
358
|
projectRoot: string;
|
|
286
359
|
packageRoot?: string;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"run_id": "oxe-run-YYYYMMDD-001",
|
|
3
|
+
"status": "planned",
|
|
4
|
+
"created_at": "YYYY-MM-DDTHH:mm:ssZ",
|
|
5
|
+
"updated_at": "YYYY-MM-DDTHH:mm:ssZ",
|
|
6
|
+
"plan_ref": "PLAN.md",
|
|
7
|
+
"session_id": null,
|
|
8
|
+
"current_wave": null,
|
|
9
|
+
"cursor": {
|
|
10
|
+
"wave": null,
|
|
11
|
+
"task": null,
|
|
12
|
+
"mode": null
|
|
13
|
+
},
|
|
14
|
+
"active_tasks": [],
|
|
15
|
+
"pending_checkpoints": [],
|
|
16
|
+
"retries": [],
|
|
17
|
+
"failures": [],
|
|
18
|
+
"evidence": [],
|
|
19
|
+
"provider_context": {
|
|
20
|
+
"azure": null
|
|
21
|
+
},
|
|
22
|
+
"graph": {
|
|
23
|
+
"nodes": [],
|
|
24
|
+
"edges": []
|
|
25
|
+
},
|
|
26
|
+
"metrics": {
|
|
27
|
+
"predicted_confidence": null,
|
|
28
|
+
"coverage_ratio": null,
|
|
29
|
+
"retry_count": 0,
|
|
30
|
+
"checkpoint_count": 0
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# OXE — Capabilities Instaladas
|
|
2
|
+
|
|
3
|
+
> Catálogo local de capabilities do projeto. Cada capability vive em `.oxe/capabilities/<id>/`.
|
|
4
|
+
|
|
5
|
+
| ID | Tipo | Status | Escopo | Política | Side effects | Requer env | Evidência | Resumo |
|
|
6
|
+
|----|------|--------|--------|-----------|--------------|------------|-----------|--------|
|
|
7
|
+
| (vazio) | — | — | — | — | — | — | — | Nenhuma capability instalada |
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
oxe_capability: true
|
|
3
|
+
id: sample-capability
|
|
4
|
+
version: 1
|
|
5
|
+
type: script
|
|
6
|
+
status: active
|
|
7
|
+
scope: execute
|
|
8
|
+
requires_env: []
|
|
9
|
+
entrypoint: ""
|
|
10
|
+
approval_policy: require_approval_if_external_side_effect
|
|
11
|
+
side_effects: []
|
|
12
|
+
evidence_outputs: []
|
|
13
|
+
session_compatibility: [legacy, session]
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# OXE — Capability
|
|
17
|
+
|
|
18
|
+
## Objetivo
|
|
19
|
+
|
|
20
|
+
- O que esta capability faz.
|
|
21
|
+
|
|
22
|
+
## Escopo OXE
|
|
23
|
+
|
|
24
|
+
- `scan` | `ask` | `research` | `spec` | `plan` | `execute` | `verify`
|
|
25
|
+
|
|
26
|
+
## Operações
|
|
27
|
+
|
|
28
|
+
- Operação 1
|
|
29
|
+
|
|
30
|
+
## Entradas e saídas
|
|
31
|
+
|
|
32
|
+
- Entradas esperadas
|
|
33
|
+
- Saídas produzidas
|
|
34
|
+
|
|
35
|
+
## Requisitos
|
|
36
|
+
|
|
37
|
+
- Variáveis de ambiente
|
|
38
|
+
- Dependências externas
|
|
39
|
+
- Aprovação necessária ou bypass permitido
|
|
40
|
+
|
|
41
|
+
## Evidência e segurança
|
|
42
|
+
|
|
43
|
+
- Como a capability produz evidência útil.
|
|
44
|
+
- Limites e riscos.
|
|
45
|
+
- Side effects possíveis e como são governados.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# OXE — Checkpoints
|
|
2
|
+
|
|
3
|
+
> Índice de checkpoints formais do ciclo atual. Usado para aprovações humanas e gates sensíveis.
|
|
4
|
+
|
|
5
|
+
| ID | Tipo | Fase | Escopo | Estado | Política | Decisão | Override | Criado em | Resolvido em | Notas |
|
|
6
|
+
|----|------|------|--------|--------|----------|---------|----------|-----------|--------------|-------|
|
|
7
|
+
| CP-01 | approval | spec | definição de escopo | pending_approval | require_approval | — | — | YYYY-MM-DD | — | — |
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
oxe_doc: execution_runtime
|
|
3
|
+
status: active
|
|
4
|
+
updated: YYYY-MM-DD
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# OXE — Runtime Operacional
|
|
8
|
+
|
|
9
|
+
> Estado tático da execução. Este ficheiro complementa `PLAN.md` e `STATE.md`, mas não os substitui.
|
|
10
|
+
|
|
11
|
+
## Contexto
|
|
12
|
+
|
|
13
|
+
- **Sessão / escopo:** …
|
|
14
|
+
- **Plano vinculado:** `PLAN.md`
|
|
15
|
+
- **Run ID:** `oxe-run-YYYYMMDD-001`
|
|
16
|
+
- **Active run:** `.oxe/ACTIVE-RUN.json` ou artefato equivalente de sessão
|
|
17
|
+
- **Trace log:** `.oxe/OXE-EVENTS.ndjson` ou artefato equivalente de sessão
|
|
18
|
+
- **Autoavaliação do plano:** melhor=`sim|não` | confiança=`NN%`
|
|
19
|
+
- **Limiar de execução:** `70%`
|
|
20
|
+
|
|
21
|
+
## Onda atual
|
|
22
|
+
|
|
23
|
+
- **Onda:** —
|
|
24
|
+
- **Estado:** planned | running | paused | waiting_approval | failed | completed | replaying | aborted
|
|
25
|
+
- **Tarefas ativas:** —
|
|
26
|
+
- **Última atualização:** YYYY-MM-DD
|
|
27
|
+
|
|
28
|
+
## Agentes ativos
|
|
29
|
+
|
|
30
|
+
| ID | Papel | Tarefas | Estado | Último handoff |
|
|
31
|
+
|----|-------|---------|--------|----------------|
|
|
32
|
+
| … | … | T1, T2 | active | — |
|
|
33
|
+
|
|
34
|
+
## Checkpoints
|
|
35
|
+
|
|
36
|
+
| ID | Tipo | Escopo | Estado | Política | Decisão | Evidência |
|
|
37
|
+
|----|------|--------|--------|----------|---------|-----------|
|
|
38
|
+
| CP-01 | approval | Onda 1 | pending_approval | require_approval | — | — |
|
|
39
|
+
|
|
40
|
+
## Handoffs
|
|
41
|
+
|
|
42
|
+
- W1 · `agent-a -> agent-b`: …
|
|
43
|
+
|
|
44
|
+
## Grafo operacional
|
|
45
|
+
|
|
46
|
+
- **Nós:** agent-a, capability-x, checkpoint-CP-01
|
|
47
|
+
- **Arestas:** handoff, dependency, blocked_by
|
|
48
|
+
|
|
49
|
+
## Evidências produzidas
|
|
50
|
+
|
|
51
|
+
- `path/ou/artefato`: resumo curto
|
|
52
|
+
|
|
53
|
+
## Bloqueios
|
|
54
|
+
|
|
55
|
+
- (nenhum ou lista)
|
|
56
|
+
|
|
57
|
+
## Iterações / retries
|
|
58
|
+
|
|
59
|
+
- Tarefa/onda | Tentativa | Resultado | Nota
|
|
60
|
+
|
|
61
|
+
## Tracing operacional
|
|
62
|
+
|
|
63
|
+
- `run_started` → `phase_entered` → `handoff` → `checkpoint_opened` → `checkpoint_resolved` → `verification_completed`
|
|
64
|
+
|
|
65
|
+
## Próximo movimento operacional
|
|
66
|
+
|
|
67
|
+
- **Ação:** …
|
|
68
|
+
- **Motivo:** …
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
oxe_doc: investigation
|
|
3
|
+
status: draft
|
|
4
|
+
updated: YYYY-MM-DD
|
|
5
|
+
objective: ""
|
|
6
|
+
mode: surface
|
|
7
|
+
sources: []
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# OXE — Investigação Estruturada
|
|
11
|
+
|
|
12
|
+
## Objetivo
|
|
13
|
+
|
|
14
|
+
- Pergunta principal a responder.
|
|
15
|
+
|
|
16
|
+
## Fontes
|
|
17
|
+
|
|
18
|
+
- Fonte / path / sistema
|
|
19
|
+
|
|
20
|
+
## Método
|
|
21
|
+
|
|
22
|
+
- Como a investigação foi conduzida.
|
|
23
|
+
|
|
24
|
+
## Evidências
|
|
25
|
+
|
|
26
|
+
- Evidência 1
|
|
27
|
+
|
|
28
|
+
## Conclusões
|
|
29
|
+
|
|
30
|
+
- Conclusão 1
|
|
31
|
+
|
|
32
|
+
## Impacto em spec/plan
|
|
33
|
+
|
|
34
|
+
- Como isto altera a SPEC, o plano ou a confiança.
|
|
35
|
+
|
|
36
|
+
## Próximo passo
|
|
37
|
+
|
|
38
|
+
- O que ainda falta validar.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
oxe_doc: notes
|
|
3
|
+
updated: YYYY-MM-DD
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# OXE — Notes
|
|
7
|
+
|
|
8
|
+
Fila leve de anotações do projeto. Cada bullet é consumido em `/oxe-discuss` ou `/oxe-plan` e depois movido para **Notas incorporadas**.
|
|
9
|
+
|
|
10
|
+
## Notas em aberto
|
|
11
|
+
|
|
12
|
+
- YYYY-MM-DD — (nota aqui)
|
|
13
|
+
|
|
14
|
+
## Notas incorporadas
|
|
15
|
+
|
|
16
|
+
<!-- Notas movidas automaticamente após consumidas pelo discuss ou plan -->
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
oxe_doc: plan_review
|
|
3
|
+
status: draft
|
|
4
|
+
updated: YYYY-MM-DD
|
|
5
|
+
plan_ref: PLAN.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# OXE — Revisão do Plano
|
|
9
|
+
|
|
10
|
+
## Estado
|
|
11
|
+
|
|
12
|
+
- **Status:** draft
|
|
13
|
+
- **Atualizado em:** YYYY-MM-DDTHH:mm:ssZ
|
|
14
|
+
- **Origem:** dashboard local ou revisão textual
|
|
15
|
+
|
|
16
|
+
## Decisão
|
|
17
|
+
|
|
18
|
+
- **Resultado:** pendente
|
|
19
|
+
- **Justificativa:** —
|
|
20
|
+
|
|
21
|
+
## Comentários abertos
|
|
22
|
+
|
|
23
|
+
- Nenhum
|
|
24
|
+
|
|
25
|
+
## Comentários resolvidos
|
|
26
|
+
|
|
27
|
+
- Nenhum
|
|
28
|
+
|
|
29
|
+
## Próxima ação recomendada
|
|
30
|
+
|
|
31
|
+
- `/oxe-dashboard` para revisar visualmente, ou `/oxe-plan --replan` se houver ajustes estruturais.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# OXE — Nota de pesquisa
|
|
1
|
+
# OXE — Nota de pesquisa
|
|
2
2
|
|
|
3
3
|
> Um ficheiro por sessão: copie para `.oxe/research/YYYY-MM-DD-<slug-kebab>.md` (data ISO; slug curto e único).
|
|
4
4
|
|
|
@@ -7,9 +7,16 @@
|
|
|
7
7
|
- Ligação à SPEC: objetivo, IDs **A*** tocados (ou *N/A — SPEC ainda não existe* + recomendação de `oxe:spec`).
|
|
8
8
|
- Entrada do utilizador / âmbito (paths, módulos, perguntas).
|
|
9
9
|
|
|
10
|
-
## Perguntas em aberto
|
|
11
|
-
|
|
12
|
-
1. … (critério para considerar “fechado”)
|
|
10
|
+
## Perguntas em aberto
|
|
11
|
+
|
|
12
|
+
1. … (critério para considerar “fechado”)
|
|
13
|
+
|
|
14
|
+
## Investigação estruturada
|
|
15
|
+
|
|
16
|
+
- **Objetivo:** …
|
|
17
|
+
- **Modo:** `surface` | `standard` | `deep`
|
|
18
|
+
- **Fontes:** …
|
|
19
|
+
- **Profundidade:** …
|
|
13
20
|
|
|
14
21
|
## Evidência
|
|
15
22
|
|
|
@@ -19,10 +19,12 @@ inputs: []
|
|
|
19
19
|
|
|
20
20
|
(Uma frase: o que entregar.)
|
|
21
21
|
|
|
22
|
-
## Contexto
|
|
23
|
-
|
|
24
|
-
- Repositório / produto: …
|
|
25
|
-
- Links úteis: …
|
|
22
|
+
## Contexto
|
|
23
|
+
|
|
24
|
+
- Repositório / produto: …
|
|
25
|
+
- Links úteis: …
|
|
26
|
+
- Tipo de demanda: feature | bugfix | refactor | research | ops | mixed
|
|
27
|
+
- Incertezas estruturadas: …
|
|
26
28
|
|
|
27
29
|
## Escopo
|
|
28
30
|
|
package/oxe/templates/STATE.md
CHANGED
|
@@ -20,11 +20,32 @@
|
|
|
20
20
|
- **Notas:** (opcional; ex.: "só STRUCTURE e TESTING")
|
|
21
21
|
- **last_retro:** (YYYY-MM-DD — preenchido por **`/oxe-retro`** ao concluir retrospectiva; lido por `oxe-cc doctor` para rastrear ciclos sem lições)
|
|
22
22
|
|
|
23
|
-
## Contexto do plano / quick (opcional)
|
|
24
|
-
|
|
25
|
-
- **Spec / plano:** (revisão informal ou data de `.oxe/SPEC.md` / `.oxe/PLAN.md`)
|
|
26
|
-
- **Última onda executada:** (número ou —)
|
|
27
|
-
- **Tarefas concluídas:** (ex.: T1, T2 ou passos 1–3 do QUICK.md)
|
|
23
|
+
## Contexto do plano / quick (opcional)
|
|
24
|
+
|
|
25
|
+
- **Spec / plano:** (revisão informal ou data de `.oxe/SPEC.md` / `.oxe/PLAN.md`)
|
|
26
|
+
- **Última onda executada:** (número ou —)
|
|
27
|
+
- **Tarefas concluídas:** (ex.: T1, T2 ou passos 1–3 do QUICK.md)
|
|
28
|
+
|
|
29
|
+
## Checkpoints de aprovação (opcional)
|
|
30
|
+
|
|
31
|
+
- **checkpoint_status:** `pending_approval` | `approved` | `rejected` | `overridden` | —
|
|
32
|
+
- **checkpoint_ref:** `.oxe/CHECKPOINTS.md` ou artefato de sessão correspondente
|
|
33
|
+
- **Notas:** (ex.: aguardando aprovação para Onda 2)
|
|
34
|
+
|
|
35
|
+
## Runtime operacional (opcional)
|
|
36
|
+
|
|
37
|
+
- **runtime_status:** `planned` | `running` | `paused` | `waiting_approval` | `failed` | `completed` | `replaying` | `aborted` | —
|
|
38
|
+
- **runtime_ref:** `.oxe/EXECUTION-RUNTIME.md` ou artefato de sessão correspondente
|
|
39
|
+
- **active_run_ref:** `.oxe/ACTIVE-RUN.json` ou artefato de sessão correspondente
|
|
40
|
+
- **events_ref:** `.oxe/OXE-EVENTS.ndjson` ou artefato de sessão correspondente
|
|
41
|
+
- **Notas:** (agentes ativos, bloqueio principal, handoff pendente)
|
|
42
|
+
|
|
43
|
+
## Revisão do plano (opcional — dashboard / aprovação)
|
|
44
|
+
|
|
45
|
+
- **plan_review_status:** `draft` | `in_review` | `approved` | `rejected` | `needs_revision` | —
|
|
46
|
+
- **plan_review_updated:** (ISO legível — ex.: `2026-04-10T14:22:00-03:00`)
|
|
47
|
+
- **plan_review_ref:** `.oxe/PLAN-REVIEW.md` ou artefato de sessão correspondente
|
|
48
|
+
- **Notas:** (ex.: aprovado para execute; revisão pendente da onda 2)
|
|
28
49
|
|
|
29
50
|
## Blueprint de agentes (sessão) (opcional — `/oxe-plan-agent`)
|
|
30
51
|
|
|
@@ -81,11 +102,28 @@ _(O agente pode preencher após cada onda.)_
|
|
|
81
102
|
|
|
82
103
|
- (nome do workstream ativo — ou — para pipeline principal)
|
|
83
104
|
|
|
84
|
-
## Memory (sidecars de sessão) (opcional — `/oxe-memory`)
|
|
105
|
+
## Memory (sidecars de sessão) (opcional — `/oxe-memory`)
|
|
85
106
|
|
|
86
107
|
Sidecars de memória persistente por agente/sessão. Armazenados em `.oxe/memory/`.
|
|
87
108
|
|
|
88
|
-
- (nenhum ou lista: ex.: `architect-2025-01-15.md`, `researcher-auth-2025-01-14.md`)
|
|
109
|
+
- (nenhum ou lista: ex.: `architect-2025-01-15.md`, `researcher-auth-2025-01-14.md`)
|
|
110
|
+
|
|
111
|
+
## Camadas de memória (contrato)
|
|
112
|
+
|
|
113
|
+
- **memory_read_order:** `runtime_state -> session_memory -> project_memory -> evidence`
|
|
114
|
+
- **session_memory_ref:** `SESSION.md` ou —
|
|
115
|
+
- **project_memory_ref:** `.oxe/global/LESSONS.md`
|
|
116
|
+
- **evidence_ref:** `INVESTIGATIONS.md`, `VERIFY.md` e derivados
|
|
117
|
+
|
|
118
|
+
## Capabilities nativas (opcional)
|
|
119
|
+
|
|
120
|
+
- **capabilities_ref:** `.oxe/CAPABILITIES.md`
|
|
121
|
+
- **Capabilities ativas:** (IDs ou —)
|
|
122
|
+
|
|
123
|
+
## Investigações estruturadas (opcional)
|
|
124
|
+
|
|
125
|
+
- **investigations_ref:** `.oxe/INVESTIGATIONS.md` ou índice de sessão
|
|
126
|
+
- **Última investigação:** (path ou —)
|
|
89
127
|
|
|
90
128
|
## Decisões persistentes
|
|
91
129
|
|
|
@@ -16,9 +16,17 @@
|
|
|
16
16
|
"scan_focus_globs": [],
|
|
17
17
|
"scan_ignore_globs": [],
|
|
18
18
|
"spec_required_sections": [],
|
|
19
|
-
"plan_max_tasks_per_wave": 0,
|
|
20
|
-
"
|
|
21
|
-
"
|
|
19
|
+
"plan_max_tasks_per_wave": 0,
|
|
20
|
+
"azure": {
|
|
21
|
+
"enabled": false,
|
|
22
|
+
"default_resource_group": "",
|
|
23
|
+
"preferred_locations": [],
|
|
24
|
+
"inventory_max_age_hours": 24,
|
|
25
|
+
"resource_graph_auto_install": true,
|
|
26
|
+
"vpn_required": false
|
|
27
|
+
},
|
|
28
|
+
"install": {
|
|
29
|
+
"profile": "recommended",
|
|
22
30
|
"repo_layout": "nested",
|
|
23
31
|
"vscode": false,
|
|
24
32
|
"include_commands_dir": true,
|
package/oxe/workflows/ask.md
CHANGED
|
@@ -10,6 +10,7 @@ Responder perguntas sobre a situação atual do trabalho OXE com máxima robuste
|
|
|
10
10
|
- Com sessão ativa, priorizar artefatos em `.oxe/<active_session>/...` antes do modo legado.
|
|
11
11
|
- Usar `.oxe/codebase/` como mapa do repositório, não como substituto dos artefatos da trilha.
|
|
12
12
|
- Se a pergunta estiver ambígua, responder em modo “situação atual + próximos riscos + melhor próxima ação”.
|
|
13
|
+
- Aplicar discovery adaptativo leve: classificar se a pergunta é sobre estado atual, bloqueio, estratégia, execução, verificação, instalação ou investigação antes de decidir o conjunto de artefatos prioritários.
|
|
13
14
|
</context>
|
|
14
15
|
|
|
15
16
|
<process>
|
|
@@ -18,15 +19,20 @@ Responder perguntas sobre a situação atual do trabalho OXE com máxima robuste
|
|
|
18
19
|
- `SESSION.md`
|
|
19
20
|
- `spec/SPEC.md`, `spec/ROADMAP.md`, `spec/DISCUSS.md`, `spec/UI-SPEC.md` se existirem
|
|
20
21
|
- `plan/PLAN.md`, `plan/QUICK.md`, `plan/plan-agents.json`, `plan/quick-agents.json` se existirem
|
|
21
|
-
- `execution/STATE.md`, `execution/OBSERVATIONS.md`, `execution/DEBUG.md`, `execution/FORENSICS.md`, `execution/SUMMARY.md` se existirem
|
|
22
|
+
- `execution/STATE.md`, `execution/EXECUTION-RUNTIME.md`, `execution/CHECKPOINTS.md`, `execution/OBSERVATIONS.md`, `execution/DEBUG.md`, `execution/FORENSICS.md`, `execution/SUMMARY.md` se existirem
|
|
23
|
+
- `research/INVESTIGATIONS.md`, `research/RESEARCH.md`, `research/investigations/` se existirem
|
|
22
24
|
- `verification/VERIFY.md`, `verification/VALIDATION-GAPS.md`, `verification/SECURITY.md`, `verification/UI-REVIEW.md` se existirem
|
|
23
25
|
3. Sem sessão ativa, ler o equivalente legado na raiz `.oxe/`.
|
|
24
26
|
4. Em ambos os casos, ler também:
|
|
25
27
|
- `.oxe/codebase/OVERVIEW.md`
|
|
26
28
|
- `.oxe/codebase/STACK.md`
|
|
27
29
|
- `.oxe/codebase/CONCERNS.md`
|
|
30
|
+
- `.oxe/CAPABILITIES.md` e `.oxe/capabilities/` se a pergunta tocar execução, pesquisa, automação ou integrações
|
|
31
|
+
- `.oxe/INVESTIGATIONS.md` se a pergunta tocar incertezas, descoberta ou evidência
|
|
32
|
+
- `.oxe/memory/` se existir memória persistente relevante ao assunto
|
|
28
33
|
- `.oxe/global/LESSONS.md` se existir, com fallback para `.oxe/LESSONS.md`
|
|
29
34
|
- `.oxe/SESSIONS.md` se a pergunta mencionar sessões, histórico ou retomada
|
|
35
|
+
- `.oxe/cloud/azure/INVENTORY.md`, `SERVICEBUS.md`, `EVENTGRID.md`, `SQL.md` e `auth-status.json` se a pergunta tocar Azure, cloud, infraestrutura, mensageria, integração ou banco gerido
|
|
30
36
|
5. Responder à pergunta do utilizador com base em evidência explícita dos artefatos lidos.
|
|
31
37
|
6. Se faltar artefato crítico para responder com segurança, dizer exatamente o que falta e qual comando OXE fecha essa lacuna.
|
|
32
38
|
|
|
@@ -44,7 +50,10 @@ Se o utilizador só disser algo genérico como “o que está acontecendo?”,
|
|
|
44
50
|
|
|
45
51
|
- Não assumir que `doctor` ou `status` sejam session-aware; eles não substituem a leitura direta dos artefatos da sessão.
|
|
46
52
|
- Se houver conflito entre `.oxe/STATE.md` global e `execution/STATE.md` da sessão, explicitar o conflito.
|
|
53
|
+
- Se houver `CHECKPOINTS.md` com itens `pending_approval`, isso tem precedência operacional sobre o “próximo passo” implícito.
|
|
54
|
+
- Se `EXECUTION-RUNTIME.md` ou `INVESTIGATIONS.md` existirem, tratá-los como evidência tática complementar para explicar bloqueios, handoffs, riscos e lacunas.
|
|
47
55
|
- Se `VERIFY.md` existir e contradizer o estado declarado, priorizar a evidência do `VERIFY.md` e mencionar a incoerência.
|
|
56
|
+
- Se existir inventário Azure materializado, priorizar esse inventário sobre suposições sobre recursos cloud.
|
|
48
57
|
- Se o mapa `.oxe/codebase/` estiver ausente ou incompleto, dizer isso explicitamente antes de extrapolar sobre o repositório.
|
|
49
58
|
</process>
|
|
50
59
|
|