oxe-cc 1.2.1 → 1.4.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.
Files changed (281) hide show
  1. package/.cursor/commands/oxe-ask.md +2 -2
  2. package/.cursor/commands/oxe-capabilities.md +2 -2
  3. package/.cursor/commands/oxe-checkpoint.md +2 -2
  4. package/.cursor/commands/oxe-compact.md +2 -2
  5. package/.cursor/commands/oxe-dashboard.md +2 -2
  6. package/.cursor/commands/oxe-debug.md +2 -2
  7. package/.cursor/commands/oxe-discuss.md +2 -2
  8. package/.cursor/commands/oxe-execute.md +5 -2
  9. package/.cursor/commands/oxe-forensics.md +2 -2
  10. package/.cursor/commands/oxe-help.md +2 -2
  11. package/.cursor/commands/oxe-loop.md +2 -2
  12. package/.cursor/commands/oxe-milestone.md +2 -2
  13. package/.cursor/commands/oxe-next.md +2 -2
  14. package/.cursor/commands/oxe-obs.md +2 -2
  15. package/.cursor/commands/oxe-plan-agent.md +2 -2
  16. package/.cursor/commands/oxe-plan.md +2 -2
  17. package/.cursor/commands/oxe-project.md +2 -2
  18. package/.cursor/commands/oxe-quick.md +2 -2
  19. package/.cursor/commands/oxe-research.md +2 -2
  20. package/.cursor/commands/oxe-retro.md +2 -2
  21. package/.cursor/commands/oxe-review-pr.md +2 -2
  22. package/.cursor/commands/oxe-route.md +2 -2
  23. package/.cursor/commands/oxe-scan.md +2 -2
  24. package/.cursor/commands/oxe-security.md +2 -2
  25. package/.cursor/commands/oxe-session.md +2 -2
  26. package/.cursor/commands/oxe-ship.md +2 -2
  27. package/.cursor/commands/oxe-skill.md +2 -2
  28. package/.cursor/commands/oxe-spec.md +2 -2
  29. package/.cursor/commands/oxe-ui-review.md +2 -2
  30. package/.cursor/commands/oxe-ui-spec.md +2 -2
  31. package/.cursor/commands/oxe-update.md +2 -2
  32. package/.cursor/commands/oxe-validate-gaps.md +2 -2
  33. package/.cursor/commands/oxe-verify.md +5 -2
  34. package/.cursor/commands/oxe-workstream.md +2 -2
  35. package/.cursor/commands/oxe.md +2 -2
  36. package/.github/copilot-instructions.md +13 -13
  37. package/.github/prompts/oxe-ask.prompt.md +2 -2
  38. package/.github/prompts/oxe-capabilities.prompt.md +2 -2
  39. package/.github/prompts/oxe-checkpoint.prompt.md +2 -2
  40. package/.github/prompts/oxe-compact.prompt.md +2 -2
  41. package/.github/prompts/oxe-dashboard.prompt.md +2 -2
  42. package/.github/prompts/oxe-debug.prompt.md +2 -2
  43. package/.github/prompts/oxe-discuss.prompt.md +2 -2
  44. package/.github/prompts/oxe-execute.prompt.md +5 -2
  45. package/.github/prompts/oxe-forensics.prompt.md +2 -2
  46. package/.github/prompts/oxe-help.prompt.md +2 -2
  47. package/.github/prompts/oxe-loop.prompt.md +2 -2
  48. package/.github/prompts/oxe-milestone.prompt.md +2 -2
  49. package/.github/prompts/oxe-next.prompt.md +2 -2
  50. package/.github/prompts/oxe-obs.prompt.md +2 -2
  51. package/.github/prompts/oxe-plan-agent.prompt.md +2 -2
  52. package/.github/prompts/oxe-plan.prompt.md +2 -2
  53. package/.github/prompts/oxe-project.prompt.md +2 -2
  54. package/.github/prompts/oxe-quick.prompt.md +2 -2
  55. package/.github/prompts/oxe-research.prompt.md +2 -2
  56. package/.github/prompts/oxe-retro.prompt.md +2 -2
  57. package/.github/prompts/oxe-review-pr.prompt.md +2 -2
  58. package/.github/prompts/oxe-route.prompt.md +2 -2
  59. package/.github/prompts/oxe-scan.prompt.md +2 -2
  60. package/.github/prompts/oxe-security.prompt.md +2 -2
  61. package/.github/prompts/oxe-session.prompt.md +2 -2
  62. package/.github/prompts/oxe-ship.prompt.md +2 -2
  63. package/.github/prompts/oxe-skill.prompt.md +2 -2
  64. package/.github/prompts/oxe-spec.prompt.md +2 -2
  65. package/.github/prompts/oxe-ui-review.prompt.md +2 -2
  66. package/.github/prompts/oxe-ui-spec.prompt.md +2 -2
  67. package/.github/prompts/oxe-update.prompt.md +2 -2
  68. package/.github/prompts/oxe-validate-gaps.prompt.md +2 -2
  69. package/.github/prompts/oxe-verify.prompt.md +5 -2
  70. package/.github/prompts/oxe-workstream.prompt.md +2 -2
  71. package/.github/prompts/oxe.prompt.md +2 -2
  72. package/AGENTS.md +5 -3
  73. package/CHANGELOG.md +72 -10
  74. package/LICENSE +21 -674
  75. package/README.md +631 -535
  76. package/bin/banner.txt +6 -6
  77. package/bin/lib/oxe-agent-install.cjs +69 -69
  78. package/bin/lib/oxe-azure.cjs +1445 -1445
  79. package/bin/lib/oxe-context-engine.cjs +867 -867
  80. package/bin/lib/oxe-dashboard.cjs +76 -28
  81. package/bin/lib/oxe-operational.cjs +2144 -1340
  82. package/bin/lib/oxe-project-health.cjs +483 -1
  83. package/bin/lib/oxe-runtime-semantics.cjs +12 -0
  84. package/bin/oxe-cc.js +554 -152
  85. package/commands/oxe/ask.md +2 -2
  86. package/commands/oxe/capabilities.md +2 -2
  87. package/commands/oxe/checkpoint.md +2 -2
  88. package/commands/oxe/compact.md +2 -2
  89. package/commands/oxe/dashboard.md +2 -2
  90. package/commands/oxe/debug.md +2 -2
  91. package/commands/oxe/discuss.md +2 -2
  92. package/commands/oxe/execute.md +5 -2
  93. package/commands/oxe/forensics.md +2 -2
  94. package/commands/oxe/help.md +2 -2
  95. package/commands/oxe/loop.md +2 -2
  96. package/commands/oxe/milestone.md +2 -2
  97. package/commands/oxe/next.md +2 -2
  98. package/commands/oxe/obs.md +2 -2
  99. package/commands/oxe/oxe.md +2 -2
  100. package/commands/oxe/plan-agent.md +2 -2
  101. package/commands/oxe/plan.md +2 -2
  102. package/commands/oxe/project.md +2 -2
  103. package/commands/oxe/quick.md +2 -2
  104. package/commands/oxe/research.md +2 -2
  105. package/commands/oxe/retro.md +2 -2
  106. package/commands/oxe/review-pr.md +2 -2
  107. package/commands/oxe/route.md +2 -2
  108. package/commands/oxe/scan.md +2 -2
  109. package/commands/oxe/security.md +2 -2
  110. package/commands/oxe/session.md +2 -2
  111. package/commands/oxe/ship.md +2 -2
  112. package/commands/oxe/skill.md +2 -2
  113. package/commands/oxe/spec.md +2 -2
  114. package/commands/oxe/ui-review.md +2 -2
  115. package/commands/oxe/ui-spec.md +2 -2
  116. package/commands/oxe/update.md +2 -2
  117. package/commands/oxe/validate-gaps.md +2 -2
  118. package/commands/oxe/verify.md +5 -2
  119. package/commands/oxe/workstream.md +2 -2
  120. package/lib/runtime/delivery/branch-manager.d.ts +1 -0
  121. package/lib/runtime/delivery/branch-manager.js +7 -0
  122. package/lib/runtime/delivery/ci-checks.js +34 -1
  123. package/lib/runtime/delivery/delivery-records.d.ts +34 -0
  124. package/lib/runtime/delivery/delivery-records.js +48 -0
  125. package/lib/runtime/delivery/index.d.ts +1 -0
  126. package/lib/runtime/delivery/index.js +1 -0
  127. package/lib/runtime/delivery/promotion-pipeline.d.ts +26 -2
  128. package/lib/runtime/delivery/promotion-pipeline.js +111 -14
  129. package/lib/runtime/gate/gate-manager.d.ts +41 -0
  130. package/lib/runtime/gate/gate-manager.js +108 -1
  131. package/lib/runtime/index.d.ts +2 -2
  132. package/lib/runtime/index.js +3 -1
  133. package/lib/runtime/models/gate-decision.d.ts +4 -1
  134. package/lib/runtime/models/workspace.d.ts +3 -0
  135. package/lib/runtime/plugins/capability-adapter.d.ts +12 -0
  136. package/lib/runtime/plugins/capability-adapter.js +204 -0
  137. package/lib/runtime/plugins/capability-matrix.d.ts +5 -0
  138. package/lib/runtime/plugins/capability-matrix.js +48 -17
  139. package/lib/runtime/plugins/index.d.ts +1 -0
  140. package/lib/runtime/plugins/index.js +1 -0
  141. package/lib/runtime/plugins/plugin-abi.d.ts +2 -0
  142. package/lib/runtime/plugins/plugin-manifest.d.ts +1 -1
  143. package/lib/runtime/plugins/plugin-manifest.js +6 -2
  144. package/lib/runtime/plugins/plugin-registry.d.ts +46 -0
  145. package/lib/runtime/plugins/plugin-registry.js +79 -2
  146. package/lib/runtime/policy/policy-engine.d.ts +19 -0
  147. package/lib/runtime/policy/policy-engine.js +76 -4
  148. package/lib/runtime/projection/projection-engine.d.ts +9 -1
  149. package/lib/runtime/projection/projection-engine.js +73 -3
  150. package/lib/runtime/scheduler/multi-agent-coordinator.d.ts +43 -1
  151. package/lib/runtime/scheduler/multi-agent-coordinator.js +151 -39
  152. package/lib/runtime/scheduler/run-journal.d.ts +1 -1
  153. package/lib/runtime/scheduler/scheduler.d.ts +19 -1
  154. package/lib/runtime/scheduler/scheduler.js +258 -13
  155. package/lib/runtime/verification/verification-compiler.d.ts +43 -0
  156. package/lib/runtime/verification/verification-compiler.js +137 -0
  157. package/lib/runtime/verification/verification-manifest.d.ts +9 -0
  158. package/lib/runtime/verification/verification-manifest.js +56 -6
  159. package/lib/runtime/workspace/strategies/ephemeral-container.d.ts +1 -0
  160. package/lib/runtime/workspace/strategies/ephemeral-container.js +4 -0
  161. package/lib/runtime/workspace/strategies/git-worktree.d.ts +1 -0
  162. package/lib/runtime/workspace/strategies/git-worktree.js +2 -0
  163. package/lib/runtime/workspace/strategies/inplace.d.ts +1 -0
  164. package/lib/runtime/workspace/strategies/inplace.js +2 -0
  165. package/lib/runtime/workspace/workspace-manager.d.ts +2 -1
  166. package/lib/sdk/README.md +20 -8
  167. package/lib/sdk/index.cjs +33 -24
  168. package/lib/sdk/index.d.ts +149 -14
  169. package/oxe/templates/ACTIVE-RUN.template.json +32 -32
  170. package/oxe/templates/CAPABILITIES.template.md +7 -7
  171. package/oxe/templates/CAPABILITY.template.md +45 -45
  172. package/oxe/templates/CHECKPOINTS.template.md +7 -7
  173. package/oxe/templates/EXECUTION-RUNTIME.template.md +68 -68
  174. package/oxe/templates/HYPOTHESES.template.md +33 -33
  175. package/oxe/templates/LESSONS-METRICS.template.json +13 -13
  176. package/oxe/templates/NOTES.template.md +16 -16
  177. package/oxe/templates/PLAN-REVIEW.template.md +31 -31
  178. package/oxe/templates/SESSION.template.md +34 -34
  179. package/oxe/templates/SKILL.template.md +26 -26
  180. package/oxe/templates/STATE.md +55 -55
  181. package/oxe/templates/WORKFLOW_AUTHORING.md +18 -18
  182. package/oxe/workflows/ask.md +96 -96
  183. package/oxe/workflows/capabilities.md +25 -25
  184. package/oxe/workflows/dashboard.md +33 -33
  185. package/oxe/workflows/discuss.md +12 -12
  186. package/oxe/workflows/execute.md +14 -0
  187. package/oxe/workflows/help.md +352 -352
  188. package/oxe/workflows/next.md +22 -22
  189. package/oxe/workflows/oxe.md +6 -6
  190. package/oxe/workflows/plan-agent.md +9 -9
  191. package/oxe/workflows/plan.md +51 -20
  192. package/oxe/workflows/quick.md +10 -10
  193. package/oxe/workflows/references/reasoning-discovery.md +28 -28
  194. package/oxe/workflows/references/reasoning-execution.md +29 -29
  195. package/oxe/workflows/references/reasoning-planning.md +32 -32
  196. package/oxe/workflows/references/reasoning-review.md +29 -29
  197. package/oxe/workflows/references/reasoning-status.md +24 -24
  198. package/oxe/workflows/references/robustness-elevation.md +295 -295
  199. package/oxe/workflows/references/workflow-runtime-contracts.json +952 -930
  200. package/oxe/workflows/route.md +16 -16
  201. package/oxe/workflows/session.md +213 -213
  202. package/oxe/workflows/ship.md +142 -142
  203. package/oxe/workflows/skill.md +44 -44
  204. package/oxe/workflows/ui-review.md +36 -36
  205. package/oxe/workflows/verify-audit.md +73 -73
  206. package/oxe/workflows/verify.md +10 -0
  207. package/package.json +92 -92
  208. package/packages/runtime/package.json +16 -15
  209. package/packages/runtime/src/audit/audit-trail.ts +243 -243
  210. package/packages/runtime/src/audit/index.ts +2 -2
  211. package/packages/runtime/src/audit/policy-pack.ts +62 -62
  212. package/packages/runtime/src/compiler/graph-compiler.ts +245 -245
  213. package/packages/runtime/src/compiler/index.ts +1 -1
  214. package/packages/runtime/src/context/context-pack-builder.ts +259 -259
  215. package/packages/runtime/src/context/context-pack-store.ts +197 -197
  216. package/packages/runtime/src/context/context-profiles.ts +60 -60
  217. package/packages/runtime/src/context/index.ts +3 -3
  218. package/packages/runtime/src/decision/decision-engine.ts +174 -174
  219. package/packages/runtime/src/decision/decision-memo.ts +211 -211
  220. package/packages/runtime/src/decision/index.ts +2 -2
  221. package/packages/runtime/src/delivery/branch-manager.ts +91 -84
  222. package/packages/runtime/src/delivery/ci-checks.ts +285 -252
  223. package/packages/runtime/src/delivery/delivery-records.ts +75 -0
  224. package/packages/runtime/src/delivery/index.ts +5 -4
  225. package/packages/runtime/src/delivery/pr-manager.ts +112 -112
  226. package/packages/runtime/src/delivery/promotion-pipeline.ts +334 -180
  227. package/packages/runtime/src/events/bus.ts +92 -92
  228. package/packages/runtime/src/events/catalog.ts +29 -29
  229. package/packages/runtime/src/events/envelope.ts +14 -14
  230. package/packages/runtime/src/events/index.ts +3 -3
  231. package/packages/runtime/src/evidence/evidence-store.ts +130 -130
  232. package/packages/runtime/src/evidence/index.ts +1 -1
  233. package/packages/runtime/src/gate/gate-manager.ts +289 -137
  234. package/packages/runtime/src/gate/index.ts +1 -1
  235. package/packages/runtime/src/index.ts +41 -37
  236. package/packages/runtime/src/models/attempt.ts +19 -19
  237. package/packages/runtime/src/models/evidence.ts +21 -21
  238. package/packages/runtime/src/models/gate-decision.ts +25 -21
  239. package/packages/runtime/src/models/index.ts +8 -8
  240. package/packages/runtime/src/models/run.ts +24 -24
  241. package/packages/runtime/src/models/session.ts +11 -11
  242. package/packages/runtime/src/models/verification-result.ts +10 -10
  243. package/packages/runtime/src/models/work-item.ts +25 -25
  244. package/packages/runtime/src/models/workspace.ts +31 -28
  245. package/packages/runtime/src/plugins/capability-adapter.ts +206 -0
  246. package/packages/runtime/src/plugins/capability-matrix.ts +126 -83
  247. package/packages/runtime/src/plugins/index.ts +5 -4
  248. package/packages/runtime/src/plugins/plugin-abi.ts +97 -95
  249. package/packages/runtime/src/plugins/plugin-manifest.ts +118 -113
  250. package/packages/runtime/src/plugins/plugin-registry.ts +232 -124
  251. package/packages/runtime/src/policy/index.ts +1 -1
  252. package/packages/runtime/src/policy/policy-engine.ts +330 -244
  253. package/packages/runtime/src/projection/index.ts +1 -1
  254. package/packages/runtime/src/projection/projection-engine.ts +328 -249
  255. package/packages/runtime/src/reducers/debug-reducer.ts +36 -36
  256. package/packages/runtime/src/reducers/index.ts +2 -2
  257. package/packages/runtime/src/reducers/run-state-reducer.ts +269 -269
  258. package/packages/runtime/src/scheduler/agent-registry.ts +132 -132
  259. package/packages/runtime/src/scheduler/agent-roles.ts +109 -109
  260. package/packages/runtime/src/scheduler/index.ts +4 -4
  261. package/packages/runtime/src/scheduler/multi-agent-coordinator.ts +521 -333
  262. package/packages/runtime/src/scheduler/run-journal.ts +62 -62
  263. package/packages/runtime/src/scheduler/scheduler.ts +722 -441
  264. package/packages/runtime/src/verification/index.ts +2 -2
  265. package/packages/runtime/src/verification/verification-compiler.ts +436 -225
  266. package/packages/runtime/src/verification/verification-manifest.ts +252 -192
  267. package/packages/runtime/src/workspace/index.ts +5 -5
  268. package/packages/runtime/src/workspace/strategies/ephemeral-container.ts +126 -121
  269. package/packages/runtime/src/workspace/strategies/git-worktree.ts +79 -77
  270. package/packages/runtime/src/workspace/strategies/inplace.ts +38 -35
  271. package/packages/runtime/src/workspace/workspace-manager.ts +16 -15
  272. package/packages/runtime/tsconfig.json +17 -17
  273. package/vscode-extension/.vscodeignore +7 -7
  274. package/vscode-extension/LICENSE +21 -0
  275. package/vscode-extension/oxe-agents-1.0.0.vsix +0 -0
  276. package/vscode-extension/oxe-agents-1.4.0.vsix +0 -0
  277. package/vscode-extension/package.json +184 -184
  278. package/vscode-extension/src/extension.js +310 -310
  279. package/vscode-extension/src/shared/contextLoader.js +137 -137
  280. package/vscode-extension/src/shared/contractBuilder.js +159 -159
  281. package/vscode-extension/src/shared/stateReader.js +101 -101
@@ -1,95 +1,97 @@
1
- import type { WorkspaceRequest, WorkspaceManager } from '../workspace/workspace-manager';
2
- import type { WorkspaceLease, SnapshotRef } from '../models/workspace';
3
- import type { VerificationResult } from '../models/verification-result';
4
-
5
- // ─── ToolProvider ────────────────────────────────────────────────────────────
6
-
7
- export interface ToolInvocationInput {
8
- action_type: string;
9
- work_item_id: string;
10
- run_id: string;
11
- attempt_id: string;
12
- params: Record<string, unknown>;
13
- workspace_root: string;
14
- }
15
-
16
- export interface ToolInvocationResult {
17
- success: boolean;
18
- output: string;
19
- evidence_paths: string[];
20
- side_effects_applied: string[];
21
- error?: string;
22
- }
23
-
24
- export interface ToolProvider {
25
- readonly name: string;
26
- readonly kind: 'read' | 'mutation' | 'verification' | 'analysis' | 'external_operation';
27
- readonly idempotent: boolean;
28
- supports(actionType: string): boolean;
29
- invoke(input: ToolInvocationInput): Promise<ToolInvocationResult>;
30
- }
31
-
32
- // ─── WorkspaceProvider ───────────────────────────────────────────────────────
33
-
34
- export interface WorkspaceProvider extends WorkspaceManager {
35
- readonly name: string;
36
- supportsStrategy(strategy: string): boolean;
37
- }
38
-
39
- // ─── VerifierProvider ────────────────────────────────────────────────────────
40
-
41
- export interface VerificationInput {
42
- check_id: string;
43
- check_type: string;
44
- command: string | null;
45
- work_item_id: string;
46
- workspace_root: string;
47
- evidence_dir: string;
48
- }
49
-
50
- export interface VerifierProvider {
51
- readonly name: string;
52
- supports(checkType: string): boolean;
53
- execute(input: VerificationInput): Promise<VerificationResult>;
54
- }
55
-
56
- // ─── ContextProvider ─────────────────────────────────────────────────────────
57
-
58
- export interface ContextRequest {
59
- work_item_id: string;
60
- run_id: string;
61
- decision_type: 'execute' | 'verify' | 'plan' | 'review';
62
- artifact_paths: string[];
63
- project_root: string;
64
- }
65
-
66
- export interface PluginContextArtifact {
67
- source: string;
68
- weight: number;
69
- reason: string;
70
- content?: string;
71
- }
72
-
73
- export interface PluginContextArtifacts {
74
- included: PluginContextArtifact[];
75
- excluded: Array<{ source: string; reason: string }>;
76
- total_weight: number;
77
- }
78
-
79
- export interface ContextProvider {
80
- readonly name: string;
81
- collect(input: ContextRequest): Promise<PluginContextArtifacts>;
82
- }
83
-
84
- // ─── OxePlugin (unified) ─────────────────────────────────────────────────────
85
-
86
- export interface OxePlugin {
87
- readonly name: string;
88
- readonly version?: string;
89
- toolProviders?: ToolProvider[];
90
- workspaceProviders?: WorkspaceProvider[];
91
- verifierProviders?: VerifierProvider[];
92
- contextProviders?: ContextProvider[];
93
- /** Legacy lifecycle hooks (compatible with oxe-plugins.cjs) */
94
- hooks?: Record<string, (ctx: Record<string, unknown>) => Promise<void> | void>;
95
- }
1
+ import type { WorkspaceRequest, WorkspaceManager } from '../workspace/workspace-manager';
2
+ import type { WorkspaceLease, SnapshotRef } from '../models/workspace';
3
+ import type { VerificationResult } from '../models/verification-result';
4
+
5
+ // ─── ToolProvider ────────────────────────────────────────────────────────────
6
+
7
+ export interface ToolInvocationInput {
8
+ action_type: string;
9
+ work_item_id: string;
10
+ run_id: string;
11
+ attempt_id: string;
12
+ params: Record<string, unknown>;
13
+ workspace_root: string;
14
+ }
15
+
16
+ export interface ToolInvocationResult {
17
+ success: boolean;
18
+ output: string;
19
+ evidence_paths: string[];
20
+ side_effects_applied: string[];
21
+ error?: string;
22
+ }
23
+
24
+ export interface ToolProvider {
25
+ readonly name: string;
26
+ readonly kind: 'read' | 'mutation' | 'verification' | 'analysis' | 'external_operation';
27
+ readonly idempotent: boolean;
28
+ supports(actionType: string): boolean;
29
+ invoke(input: ToolInvocationInput): Promise<ToolInvocationResult>;
30
+ }
31
+
32
+ // ─── WorkspaceProvider ───────────────────────────────────────────────────────
33
+
34
+ export interface WorkspaceProvider extends WorkspaceManager {
35
+ readonly name: string;
36
+ readonly isolation_level: 'shared' | 'isolated';
37
+ supportsStrategy(strategy: string): boolean;
38
+ }
39
+
40
+ // ─── VerifierProvider ────────────────────────────────────────────────────────
41
+
42
+ export interface VerificationInput {
43
+ check_id: string;
44
+ check_type: string;
45
+ command: string | null;
46
+ work_item_id: string;
47
+ workspace_root: string;
48
+ evidence_dir: string;
49
+ }
50
+
51
+ export interface VerifierProvider {
52
+ readonly name: string;
53
+ supports(checkType: string): boolean;
54
+ execute(input: VerificationInput): Promise<VerificationResult>;
55
+ }
56
+
57
+ // ─── ContextProvider ─────────────────────────────────────────────────────────
58
+
59
+ export interface ContextRequest {
60
+ work_item_id: string;
61
+ run_id: string;
62
+ decision_type: 'execute' | 'verify' | 'plan' | 'review';
63
+ artifact_paths: string[];
64
+ project_root: string;
65
+ }
66
+
67
+ export interface PluginContextArtifact {
68
+ source: string;
69
+ weight: number;
70
+ reason: string;
71
+ content?: string;
72
+ }
73
+
74
+ export interface PluginContextArtifacts {
75
+ included: PluginContextArtifact[];
76
+ excluded: Array<{ source: string; reason: string }>;
77
+ total_weight: number;
78
+ }
79
+
80
+ export interface ContextProvider {
81
+ readonly name: string;
82
+ collect(input: ContextRequest): Promise<PluginContextArtifacts>;
83
+ }
84
+
85
+ // ─── OxePlugin (unified) ─────────────────────────────────────────────────────
86
+
87
+ export interface OxePlugin {
88
+ readonly name: string;
89
+ readonly version?: string;
90
+ readonly abi_version?: string;
91
+ toolProviders?: ToolProvider[];
92
+ workspaceProviders?: WorkspaceProvider[];
93
+ verifierProviders?: VerifierProvider[];
94
+ contextProviders?: ContextProvider[];
95
+ /** Legacy lifecycle hooks (compatible with oxe-plugins.cjs) */
96
+ hooks?: Record<string, (ctx: Record<string, unknown>) => Promise<void> | void>;
97
+ }
@@ -1,113 +1,118 @@
1
- import type { OxePlugin } from './plugin-abi';
2
-
3
- export const CURRENT_ABI_VERSION = '1.0.0';
4
-
5
- export interface PluginManifest {
6
- name: string;
7
- version: string;
8
- abi_version: string;
9
- capabilities: Array<'tool' | 'workspace' | 'verifier' | 'context' | 'hooks'>;
10
- tool_action_types?: string[];
11
- workspace_strategies?: string[];
12
- verifier_check_types?: string[];
13
- context_provider_names?: string[];
14
- hook_names?: string[];
15
- }
16
-
17
- export interface PluginValidationResult {
18
- valid: boolean;
19
- errors: string[];
20
- warnings: string[];
21
- }
22
-
23
- export function extractManifest(plugin: OxePlugin): PluginManifest {
24
- const capabilities: PluginManifest['capabilities'] = [];
25
- if (plugin.toolProviders?.length) capabilities.push('tool');
26
- if (plugin.workspaceProviders?.length) capabilities.push('workspace');
27
- if (plugin.verifierProviders?.length) capabilities.push('verifier');
28
- if (plugin.contextProviders?.length) capabilities.push('context');
29
- if (plugin.hooks && Object.keys(plugin.hooks).length > 0) capabilities.push('hooks');
30
-
31
- return {
32
- name: plugin.name,
33
- version: plugin.version ?? '0.0.0',
34
- abi_version: CURRENT_ABI_VERSION,
35
- capabilities,
36
- tool_action_types: plugin.toolProviders?.flatMap((p) =>
37
- ['read_code', 'generate_patch', 'run_tests', 'collect_evidence', 'custom'].filter((t) => p.supports(t))
38
- ) ?? [],
39
- workspace_strategies: plugin.workspaceProviders?.map((p) => p.name) ?? [],
40
- verifier_check_types: plugin.verifierProviders?.flatMap((p) =>
41
- ['unit', 'integration', 'smoke', 'policy', 'security', 'custom'].filter((t) => p.supports(t))
42
- ) ?? [],
43
- context_provider_names: plugin.contextProviders?.map((p) => p.name) ?? [],
44
- hook_names: plugin.hooks ? Object.keys(plugin.hooks) : [],
45
- };
46
- }
47
-
48
- export function validatePlugin(plugin: OxePlugin): PluginValidationResult {
49
- const errors: string[] = [];
50
- const warnings: string[] = [];
51
-
52
- if (!plugin.name || typeof plugin.name !== 'string') {
53
- errors.push('Plugin must have a non-empty string name');
54
- }
55
-
56
- if (plugin.version && !/^\d+\.\d+\.\d+/.test(plugin.version)) {
57
- warnings.push(`Plugin version "${plugin.version}" does not follow semver`);
58
- }
59
-
60
- if (!plugin.toolProviders?.length &&
61
- !plugin.workspaceProviders?.length &&
62
- !plugin.verifierProviders?.length &&
63
- !plugin.contextProviders?.length &&
64
- !plugin.hooks) {
65
- warnings.push('Plugin declares no providers or hooks — it has no effect');
66
- }
67
-
68
- // Validate each tool provider
69
- for (const tp of plugin.toolProviders ?? []) {
70
- if (!tp.name) errors.push('ToolProvider missing name');
71
- if (typeof tp.supports !== 'function') errors.push(`ToolProvider "${tp.name}" missing supports() method`);
72
- if (typeof tp.invoke !== 'function') errors.push(`ToolProvider "${tp.name}" missing invoke() method`);
73
- }
74
-
75
- // Validate each workspace provider
76
- for (const wp of plugin.workspaceProviders ?? []) {
77
- if (!wp.name) errors.push('WorkspaceProvider missing name');
78
- if (typeof wp.supportsStrategy !== 'function') errors.push(`WorkspaceProvider "${wp.name}" missing supportsStrategy()`);
79
- if (typeof wp.allocate !== 'function') errors.push(`WorkspaceProvider "${wp.name}" missing allocate()`);
80
- }
81
-
82
- // Validate each verifier provider
83
- for (const vp of plugin.verifierProviders ?? []) {
84
- if (!vp.name) errors.push('VerifierProvider missing name');
85
- if (typeof vp.supports !== 'function') errors.push(`VerifierProvider "${vp.name}" missing supports()`);
86
- if (typeof vp.execute !== 'function') errors.push(`VerifierProvider "${vp.name}" missing execute()`);
87
- }
88
-
89
- return { valid: errors.length === 0, errors, warnings };
90
- }
91
-
92
- export function isAbiCompatible(pluginAbiVersion: string): boolean {
93
- // Major version must match; minor/patch are backwards-compatible
94
- const [currMajor] = CURRENT_ABI_VERSION.split('.').map(Number);
95
- const [plugMajor] = pluginAbiVersion.split('.').map(Number);
96
- return currMajor === plugMajor;
97
- }
98
-
99
- export function sandboxInvoke<T>(
100
- fn: () => Promise<T>,
101
- timeoutMs = 10_000
102
- ): Promise<T> {
103
- return new Promise<T>((resolve, reject) => {
104
- const timer = setTimeout(() => {
105
- reject(new Error(`Plugin invocation timed out after ${timeoutMs}ms`));
106
- }, timeoutMs);
107
-
108
- fn().then(
109
- (result) => { clearTimeout(timer); resolve(result); },
110
- (err) => { clearTimeout(timer); reject(err instanceof Error ? err : new Error(String(err))); }
111
- );
112
- });
113
- }
1
+ import type { OxePlugin } from './plugin-abi';
2
+
3
+ export const CURRENT_ABI_VERSION = '1';
4
+
5
+ export interface PluginManifest {
6
+ name: string;
7
+ version: string;
8
+ abi_version: string;
9
+ capabilities: Array<'tool' | 'workspace' | 'verifier' | 'context' | 'hooks'>;
10
+ tool_action_types?: string[];
11
+ workspace_strategies?: string[];
12
+ verifier_check_types?: string[];
13
+ context_provider_names?: string[];
14
+ hook_names?: string[];
15
+ }
16
+
17
+ export interface PluginValidationResult {
18
+ valid: boolean;
19
+ errors: string[];
20
+ warnings: string[];
21
+ }
22
+
23
+ export function extractManifest(plugin: OxePlugin): PluginManifest {
24
+ const capabilities: PluginManifest['capabilities'] = [];
25
+ if (plugin.toolProviders?.length) capabilities.push('tool');
26
+ if (plugin.workspaceProviders?.length) capabilities.push('workspace');
27
+ if (plugin.verifierProviders?.length) capabilities.push('verifier');
28
+ if (plugin.contextProviders?.length) capabilities.push('context');
29
+ if (plugin.hooks && Object.keys(plugin.hooks).length > 0) capabilities.push('hooks');
30
+
31
+ return {
32
+ name: plugin.name,
33
+ version: plugin.version ?? '0.0.0',
34
+ abi_version: plugin.abi_version ?? CURRENT_ABI_VERSION,
35
+ capabilities,
36
+ tool_action_types: plugin.toolProviders?.flatMap((p) =>
37
+ ['read_code', 'generate_patch', 'run_tests', 'collect_evidence', 'custom'].filter((t) => p.supports(t))
38
+ ) ?? [],
39
+ workspace_strategies: plugin.workspaceProviders?.map((p) => p.name) ?? [],
40
+ verifier_check_types: plugin.verifierProviders?.flatMap((p) =>
41
+ ['unit', 'integration', 'smoke', 'policy', 'security', 'custom'].filter((t) => p.supports(t))
42
+ ) ?? [],
43
+ context_provider_names: plugin.contextProviders?.map((p) => p.name) ?? [],
44
+ hook_names: plugin.hooks ? Object.keys(plugin.hooks) : [],
45
+ };
46
+ }
47
+
48
+ export function validatePlugin(plugin: OxePlugin): PluginValidationResult {
49
+ const errors: string[] = [];
50
+ const warnings: string[] = [];
51
+
52
+ if (!plugin.name || typeof plugin.name !== 'string') {
53
+ errors.push('Plugin must have a non-empty string name');
54
+ }
55
+
56
+ if (plugin.version && !/^\d+\.\d+\.\d+/.test(plugin.version)) {
57
+ warnings.push(`Plugin version "${plugin.version}" does not follow semver`);
58
+ }
59
+
60
+ const abiVersion = plugin.abi_version ?? CURRENT_ABI_VERSION;
61
+ if (!isAbiCompatible(abiVersion)) {
62
+ errors.push(`Plugin ABI "${abiVersion}" is incompatible with runtime ABI "${CURRENT_ABI_VERSION}"`);
63
+ }
64
+
65
+ if (!plugin.toolProviders?.length &&
66
+ !plugin.workspaceProviders?.length &&
67
+ !plugin.verifierProviders?.length &&
68
+ !plugin.contextProviders?.length &&
69
+ !plugin.hooks) {
70
+ warnings.push('Plugin declares no providers or hooks — it has no effect');
71
+ }
72
+
73
+ // Validate each tool provider
74
+ for (const tp of plugin.toolProviders ?? []) {
75
+ if (!tp.name) errors.push('ToolProvider missing name');
76
+ if (typeof tp.supports !== 'function') errors.push(`ToolProvider "${tp.name}" missing supports() method`);
77
+ if (typeof tp.invoke !== 'function') errors.push(`ToolProvider "${tp.name}" missing invoke() method`);
78
+ }
79
+
80
+ // Validate each workspace provider
81
+ for (const wp of plugin.workspaceProviders ?? []) {
82
+ if (!wp.name) errors.push('WorkspaceProvider missing name');
83
+ if (typeof wp.supportsStrategy !== 'function') errors.push(`WorkspaceProvider "${wp.name}" missing supportsStrategy()`);
84
+ if (typeof wp.allocate !== 'function') errors.push(`WorkspaceProvider "${wp.name}" missing allocate()`);
85
+ }
86
+
87
+ // Validate each verifier provider
88
+ for (const vp of plugin.verifierProviders ?? []) {
89
+ if (!vp.name) errors.push('VerifierProvider missing name');
90
+ if (typeof vp.supports !== 'function') errors.push(`VerifierProvider "${vp.name}" missing supports()`);
91
+ if (typeof vp.execute !== 'function') errors.push(`VerifierProvider "${vp.name}" missing execute()`);
92
+ }
93
+
94
+ return { valid: errors.length === 0, errors, warnings };
95
+ }
96
+
97
+ export function isAbiCompatible(pluginAbiVersion: string): boolean {
98
+ // Major version must match; minor/patch are backwards-compatible
99
+ const [currMajor] = CURRENT_ABI_VERSION.split('.').map(Number);
100
+ const [plugMajor] = pluginAbiVersion.split('.').map(Number);
101
+ return currMajor === plugMajor;
102
+ }
103
+
104
+ export function sandboxInvoke<T>(
105
+ fn: () => Promise<T>,
106
+ timeoutMs = 10_000
107
+ ): Promise<T> {
108
+ return new Promise<T>((resolve, reject) => {
109
+ const timer = setTimeout(() => {
110
+ reject(new Error(`Plugin invocation timed out after ${timeoutMs}ms`));
111
+ }, timeoutMs);
112
+
113
+ fn().then(
114
+ (result) => { clearTimeout(timer); resolve(result); },
115
+ (err) => { clearTimeout(timer); reject(err instanceof Error ? err : new Error(String(err))); }
116
+ );
117
+ });
118
+ }