oxe-cc 1.2.1 → 1.3.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 (276) 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/CHANGELOG.md +52 -17
  73. package/README.md +610 -551
  74. package/bin/banner.txt +1 -1
  75. package/bin/lib/oxe-agent-install.cjs +69 -69
  76. package/bin/lib/oxe-azure.cjs +1445 -1445
  77. package/bin/lib/oxe-context-engine.cjs +867 -867
  78. package/bin/lib/oxe-dashboard.cjs +76 -28
  79. package/bin/lib/oxe-operational.cjs +2144 -1340
  80. package/bin/lib/oxe-project-health.cjs +483 -1
  81. package/bin/lib/oxe-runtime-semantics.cjs +12 -0
  82. package/bin/oxe-cc.js +554 -152
  83. package/commands/oxe/ask.md +2 -2
  84. package/commands/oxe/capabilities.md +2 -2
  85. package/commands/oxe/checkpoint.md +2 -2
  86. package/commands/oxe/compact.md +2 -2
  87. package/commands/oxe/dashboard.md +2 -2
  88. package/commands/oxe/debug.md +2 -2
  89. package/commands/oxe/discuss.md +2 -2
  90. package/commands/oxe/execute.md +5 -2
  91. package/commands/oxe/forensics.md +2 -2
  92. package/commands/oxe/help.md +2 -2
  93. package/commands/oxe/loop.md +2 -2
  94. package/commands/oxe/milestone.md +2 -2
  95. package/commands/oxe/next.md +2 -2
  96. package/commands/oxe/obs.md +2 -2
  97. package/commands/oxe/oxe.md +2 -2
  98. package/commands/oxe/plan-agent.md +2 -2
  99. package/commands/oxe/plan.md +2 -2
  100. package/commands/oxe/project.md +2 -2
  101. package/commands/oxe/quick.md +2 -2
  102. package/commands/oxe/research.md +2 -2
  103. package/commands/oxe/retro.md +2 -2
  104. package/commands/oxe/review-pr.md +2 -2
  105. package/commands/oxe/route.md +2 -2
  106. package/commands/oxe/scan.md +2 -2
  107. package/commands/oxe/security.md +2 -2
  108. package/commands/oxe/session.md +2 -2
  109. package/commands/oxe/ship.md +2 -2
  110. package/commands/oxe/skill.md +2 -2
  111. package/commands/oxe/spec.md +2 -2
  112. package/commands/oxe/ui-review.md +2 -2
  113. package/commands/oxe/ui-spec.md +2 -2
  114. package/commands/oxe/update.md +2 -2
  115. package/commands/oxe/validate-gaps.md +2 -2
  116. package/commands/oxe/verify.md +5 -2
  117. package/commands/oxe/workstream.md +2 -2
  118. package/lib/runtime/delivery/branch-manager.d.ts +1 -0
  119. package/lib/runtime/delivery/branch-manager.js +7 -0
  120. package/lib/runtime/delivery/ci-checks.js +34 -1
  121. package/lib/runtime/delivery/delivery-records.d.ts +34 -0
  122. package/lib/runtime/delivery/delivery-records.js +48 -0
  123. package/lib/runtime/delivery/index.d.ts +1 -0
  124. package/lib/runtime/delivery/index.js +1 -0
  125. package/lib/runtime/delivery/promotion-pipeline.d.ts +26 -2
  126. package/lib/runtime/delivery/promotion-pipeline.js +111 -14
  127. package/lib/runtime/gate/gate-manager.d.ts +41 -0
  128. package/lib/runtime/gate/gate-manager.js +108 -1
  129. package/lib/runtime/index.d.ts +2 -2
  130. package/lib/runtime/index.js +3 -1
  131. package/lib/runtime/models/gate-decision.d.ts +4 -1
  132. package/lib/runtime/models/workspace.d.ts +3 -0
  133. package/lib/runtime/plugins/capability-adapter.d.ts +12 -0
  134. package/lib/runtime/plugins/capability-adapter.js +204 -0
  135. package/lib/runtime/plugins/capability-matrix.d.ts +5 -0
  136. package/lib/runtime/plugins/capability-matrix.js +48 -17
  137. package/lib/runtime/plugins/index.d.ts +1 -0
  138. package/lib/runtime/plugins/index.js +1 -0
  139. package/lib/runtime/plugins/plugin-abi.d.ts +2 -0
  140. package/lib/runtime/plugins/plugin-manifest.d.ts +1 -1
  141. package/lib/runtime/plugins/plugin-manifest.js +6 -2
  142. package/lib/runtime/plugins/plugin-registry.d.ts +46 -0
  143. package/lib/runtime/plugins/plugin-registry.js +79 -2
  144. package/lib/runtime/policy/policy-engine.d.ts +19 -0
  145. package/lib/runtime/policy/policy-engine.js +76 -4
  146. package/lib/runtime/projection/projection-engine.d.ts +9 -1
  147. package/lib/runtime/projection/projection-engine.js +73 -3
  148. package/lib/runtime/scheduler/multi-agent-coordinator.d.ts +43 -1
  149. package/lib/runtime/scheduler/multi-agent-coordinator.js +151 -39
  150. package/lib/runtime/scheduler/run-journal.d.ts +1 -1
  151. package/lib/runtime/scheduler/scheduler.d.ts +19 -1
  152. package/lib/runtime/scheduler/scheduler.js +258 -13
  153. package/lib/runtime/verification/verification-compiler.d.ts +43 -0
  154. package/lib/runtime/verification/verification-compiler.js +137 -0
  155. package/lib/runtime/verification/verification-manifest.d.ts +9 -0
  156. package/lib/runtime/verification/verification-manifest.js +56 -6
  157. package/lib/runtime/workspace/strategies/ephemeral-container.d.ts +1 -0
  158. package/lib/runtime/workspace/strategies/ephemeral-container.js +4 -0
  159. package/lib/runtime/workspace/strategies/git-worktree.d.ts +1 -0
  160. package/lib/runtime/workspace/strategies/git-worktree.js +2 -0
  161. package/lib/runtime/workspace/strategies/inplace.d.ts +1 -0
  162. package/lib/runtime/workspace/strategies/inplace.js +2 -0
  163. package/lib/runtime/workspace/workspace-manager.d.ts +2 -1
  164. package/lib/sdk/README.md +9 -9
  165. package/lib/sdk/index.cjs +33 -24
  166. package/lib/sdk/index.d.ts +149 -14
  167. package/oxe/templates/ACTIVE-RUN.template.json +32 -32
  168. package/oxe/templates/CAPABILITIES.template.md +7 -7
  169. package/oxe/templates/CAPABILITY.template.md +45 -45
  170. package/oxe/templates/CHECKPOINTS.template.md +7 -7
  171. package/oxe/templates/EXECUTION-RUNTIME.template.md +68 -68
  172. package/oxe/templates/HYPOTHESES.template.md +33 -33
  173. package/oxe/templates/LESSONS-METRICS.template.json +13 -13
  174. package/oxe/templates/NOTES.template.md +16 -16
  175. package/oxe/templates/PLAN-REVIEW.template.md +31 -31
  176. package/oxe/templates/SESSION.template.md +34 -34
  177. package/oxe/templates/SKILL.template.md +26 -26
  178. package/oxe/templates/STATE.md +55 -55
  179. package/oxe/templates/WORKFLOW_AUTHORING.md +18 -18
  180. package/oxe/workflows/ask.md +96 -96
  181. package/oxe/workflows/capabilities.md +25 -25
  182. package/oxe/workflows/dashboard.md +33 -33
  183. package/oxe/workflows/discuss.md +12 -12
  184. package/oxe/workflows/execute.md +14 -0
  185. package/oxe/workflows/help.md +352 -352
  186. package/oxe/workflows/next.md +22 -22
  187. package/oxe/workflows/oxe.md +6 -6
  188. package/oxe/workflows/plan-agent.md +9 -9
  189. package/oxe/workflows/quick.md +10 -10
  190. package/oxe/workflows/references/reasoning-discovery.md +28 -28
  191. package/oxe/workflows/references/reasoning-execution.md +29 -29
  192. package/oxe/workflows/references/reasoning-planning.md +32 -32
  193. package/oxe/workflows/references/reasoning-review.md +29 -29
  194. package/oxe/workflows/references/reasoning-status.md +24 -24
  195. package/oxe/workflows/references/robustness-elevation.md +295 -295
  196. package/oxe/workflows/references/workflow-runtime-contracts.json +952 -930
  197. package/oxe/workflows/route.md +16 -16
  198. package/oxe/workflows/session.md +213 -213
  199. package/oxe/workflows/ship.md +142 -142
  200. package/oxe/workflows/skill.md +44 -44
  201. package/oxe/workflows/ui-review.md +36 -36
  202. package/oxe/workflows/verify-audit.md +73 -73
  203. package/oxe/workflows/verify.md +10 -0
  204. package/package.json +92 -92
  205. package/packages/runtime/package.json +17 -17
  206. package/packages/runtime/src/audit/audit-trail.ts +243 -243
  207. package/packages/runtime/src/audit/index.ts +2 -2
  208. package/packages/runtime/src/audit/policy-pack.ts +62 -62
  209. package/packages/runtime/src/compiler/graph-compiler.ts +245 -245
  210. package/packages/runtime/src/compiler/index.ts +1 -1
  211. package/packages/runtime/src/context/context-pack-builder.ts +259 -259
  212. package/packages/runtime/src/context/context-pack-store.ts +197 -197
  213. package/packages/runtime/src/context/context-profiles.ts +60 -60
  214. package/packages/runtime/src/context/index.ts +3 -3
  215. package/packages/runtime/src/decision/decision-engine.ts +174 -174
  216. package/packages/runtime/src/decision/decision-memo.ts +211 -211
  217. package/packages/runtime/src/decision/index.ts +2 -2
  218. package/packages/runtime/src/delivery/branch-manager.ts +91 -84
  219. package/packages/runtime/src/delivery/ci-checks.ts +285 -252
  220. package/packages/runtime/src/delivery/delivery-records.ts +75 -0
  221. package/packages/runtime/src/delivery/index.ts +5 -4
  222. package/packages/runtime/src/delivery/pr-manager.ts +112 -112
  223. package/packages/runtime/src/delivery/promotion-pipeline.ts +334 -180
  224. package/packages/runtime/src/events/bus.ts +92 -92
  225. package/packages/runtime/src/events/catalog.ts +29 -29
  226. package/packages/runtime/src/events/envelope.ts +14 -14
  227. package/packages/runtime/src/events/index.ts +3 -3
  228. package/packages/runtime/src/evidence/evidence-store.ts +130 -130
  229. package/packages/runtime/src/evidence/index.ts +1 -1
  230. package/packages/runtime/src/gate/gate-manager.ts +289 -137
  231. package/packages/runtime/src/gate/index.ts +1 -1
  232. package/packages/runtime/src/index.ts +41 -37
  233. package/packages/runtime/src/models/attempt.ts +19 -19
  234. package/packages/runtime/src/models/evidence.ts +21 -21
  235. package/packages/runtime/src/models/gate-decision.ts +25 -21
  236. package/packages/runtime/src/models/index.ts +8 -8
  237. package/packages/runtime/src/models/run.ts +24 -24
  238. package/packages/runtime/src/models/session.ts +11 -11
  239. package/packages/runtime/src/models/verification-result.ts +10 -10
  240. package/packages/runtime/src/models/work-item.ts +25 -25
  241. package/packages/runtime/src/models/workspace.ts +31 -28
  242. package/packages/runtime/src/plugins/capability-adapter.ts +206 -0
  243. package/packages/runtime/src/plugins/capability-matrix.ts +126 -83
  244. package/packages/runtime/src/plugins/index.ts +5 -4
  245. package/packages/runtime/src/plugins/plugin-abi.ts +97 -95
  246. package/packages/runtime/src/plugins/plugin-manifest.ts +118 -113
  247. package/packages/runtime/src/plugins/plugin-registry.ts +232 -124
  248. package/packages/runtime/src/policy/index.ts +1 -1
  249. package/packages/runtime/src/policy/policy-engine.ts +330 -244
  250. package/packages/runtime/src/projection/index.ts +1 -1
  251. package/packages/runtime/src/projection/projection-engine.ts +328 -249
  252. package/packages/runtime/src/reducers/debug-reducer.ts +36 -36
  253. package/packages/runtime/src/reducers/index.ts +2 -2
  254. package/packages/runtime/src/reducers/run-state-reducer.ts +269 -269
  255. package/packages/runtime/src/scheduler/agent-registry.ts +132 -132
  256. package/packages/runtime/src/scheduler/agent-roles.ts +109 -109
  257. package/packages/runtime/src/scheduler/index.ts +4 -4
  258. package/packages/runtime/src/scheduler/multi-agent-coordinator.ts +521 -333
  259. package/packages/runtime/src/scheduler/run-journal.ts +62 -62
  260. package/packages/runtime/src/scheduler/scheduler.ts +722 -441
  261. package/packages/runtime/src/verification/index.ts +2 -2
  262. package/packages/runtime/src/verification/verification-compiler.ts +436 -225
  263. package/packages/runtime/src/verification/verification-manifest.ts +252 -192
  264. package/packages/runtime/src/workspace/index.ts +5 -5
  265. package/packages/runtime/src/workspace/strategies/ephemeral-container.ts +126 -121
  266. package/packages/runtime/src/workspace/strategies/git-worktree.ts +79 -77
  267. package/packages/runtime/src/workspace/strategies/inplace.ts +38 -35
  268. package/packages/runtime/src/workspace/workspace-manager.ts +16 -15
  269. package/packages/runtime/tsconfig.json +17 -17
  270. package/vscode-extension/.vscodeignore +7 -7
  271. package/vscode-extension/oxe-agents-1.0.0.vsix +0 -0
  272. package/vscode-extension/package.json +185 -185
  273. package/vscode-extension/src/extension.js +310 -310
  274. package/vscode-extension/src/shared/contextLoader.js +137 -137
  275. package/vscode-extension/src/shared/contractBuilder.js +159 -159
  276. 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
+ }