@polderlabs/bizar-omp 0.2.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 (202) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +45 -0
  3. package/agents/bizar-architect.md +10 -0
  4. package/agents/bizar-docs.md +10 -0
  5. package/agents/bizar-implementer.md +10 -0
  6. package/agents/bizar-planner.md +10 -0
  7. package/agents/bizar-researcher.md +10 -0
  8. package/agents/bizar-reviewer.md +10 -0
  9. package/agents/bizar-security-reviewer.md +10 -0
  10. package/agents/bizar-verifier.md +10 -0
  11. package/dist/cli/doctor.d.ts +36 -0
  12. package/dist/cli/doctor.d.ts.map +1 -0
  13. package/dist/cli/doctor.js +15 -0
  14. package/dist/cli/doctor.js.map +1 -0
  15. package/dist/cli/install.d.ts +126 -0
  16. package/dist/cli/install.d.ts.map +1 -0
  17. package/dist/cli/install.js +148 -0
  18. package/dist/cli/install.js.map +1 -0
  19. package/dist/cli/main.d.ts +3 -0
  20. package/dist/cli/main.d.ts.map +1 -0
  21. package/dist/cli/main.js +76 -0
  22. package/dist/cli/main.js.map +1 -0
  23. package/dist/cli/migrate.d.ts +19 -0
  24. package/dist/cli/migrate.d.ts.map +1 -0
  25. package/dist/cli/migrate.js +14 -0
  26. package/dist/cli/migrate.js.map +1 -0
  27. package/dist/cli/run.d.ts +3 -0
  28. package/dist/cli/run.d.ts.map +1 -0
  29. package/dist/cli/run.js +5 -0
  30. package/dist/cli/run.js.map +1 -0
  31. package/dist/core/errors.d.ts +21 -0
  32. package/dist/core/errors.d.ts.map +1 -0
  33. package/dist/core/errors.js +30 -0
  34. package/dist/core/errors.js.map +1 -0
  35. package/dist/core/evidence.d.ts +6 -0
  36. package/dist/core/evidence.d.ts.map +1 -0
  37. package/dist/core/evidence.js +31 -0
  38. package/dist/core/evidence.js.map +1 -0
  39. package/dist/core/policies.d.ts +10 -0
  40. package/dist/core/policies.d.ts.map +1 -0
  41. package/dist/core/policies.js +41 -0
  42. package/dist/core/policies.js.map +1 -0
  43. package/dist/core/recovery.d.ts +7 -0
  44. package/dist/core/recovery.d.ts.map +1 -0
  45. package/dist/core/recovery.js +56 -0
  46. package/dist/core/recovery.js.map +1 -0
  47. package/dist/core/transitions.d.ts +14 -0
  48. package/dist/core/transitions.d.ts.map +1 -0
  49. package/dist/core/transitions.js +59 -0
  50. package/dist/core/transitions.js.map +1 -0
  51. package/dist/core/types.d.ts +204 -0
  52. package/dist/core/types.d.ts.map +1 -0
  53. package/dist/core/types.js +2 -0
  54. package/dist/core/types.js.map +1 -0
  55. package/dist/extension.d.ts +43 -0
  56. package/dist/extension.d.ts.map +1 -0
  57. package/dist/extension.js +199 -0
  58. package/dist/extension.js.map +1 -0
  59. package/dist/index.d.ts +16 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +16 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/omp/autonomous-settings.d.ts +9 -0
  64. package/dist/omp/autonomous-settings.d.ts.map +1 -0
  65. package/dist/omp/autonomous-settings.js +47 -0
  66. package/dist/omp/autonomous-settings.js.map +1 -0
  67. package/dist/omp/compatibility.d.ts +22 -0
  68. package/dist/omp/compatibility.d.ts.map +1 -0
  69. package/dist/omp/compatibility.js +4 -0
  70. package/dist/omp/compatibility.js.map +1 -0
  71. package/dist/omp/completion.d.ts +8 -0
  72. package/dist/omp/completion.d.ts.map +1 -0
  73. package/dist/omp/completion.js +14 -0
  74. package/dist/omp/completion.js.map +1 -0
  75. package/dist/omp/config.d.ts +11 -0
  76. package/dist/omp/config.d.ts.map +1 -0
  77. package/dist/omp/config.js +13 -0
  78. package/dist/omp/config.js.map +1 -0
  79. package/dist/omp/context.d.ts +16 -0
  80. package/dist/omp/context.d.ts.map +1 -0
  81. package/dist/omp/context.js +3 -0
  82. package/dist/omp/context.js.map +1 -0
  83. package/dist/omp/dispatch-admission.d.ts +3 -0
  84. package/dist/omp/dispatch-admission.d.ts.map +1 -0
  85. package/dist/omp/dispatch-admission.js +12 -0
  86. package/dist/omp/dispatch-admission.js.map +1 -0
  87. package/dist/omp/integration-recovery.d.ts +11 -0
  88. package/dist/omp/integration-recovery.d.ts.map +1 -0
  89. package/dist/omp/integration-recovery.js +18 -0
  90. package/dist/omp/integration-recovery.js.map +1 -0
  91. package/dist/omp/isolation-policy.d.ts +15 -0
  92. package/dist/omp/isolation-policy.d.ts.map +1 -0
  93. package/dist/omp/isolation-policy.js +9 -0
  94. package/dist/omp/isolation-policy.js.map +1 -0
  95. package/dist/omp/lifecycle.d.ts +15 -0
  96. package/dist/omp/lifecycle.d.ts.map +1 -0
  97. package/dist/omp/lifecycle.js +14 -0
  98. package/dist/omp/lifecycle.js.map +1 -0
  99. package/dist/omp/memory.d.ts +17 -0
  100. package/dist/omp/memory.d.ts.map +1 -0
  101. package/dist/omp/memory.js +4 -0
  102. package/dist/omp/memory.js.map +1 -0
  103. package/dist/omp/model-roles.d.ts +10 -0
  104. package/dist/omp/model-roles.d.ts.map +1 -0
  105. package/dist/omp/model-roles.js +5 -0
  106. package/dist/omp/model-roles.js.map +1 -0
  107. package/dist/omp/result-reconciliation.d.ts +3 -0
  108. package/dist/omp/result-reconciliation.d.ts.map +1 -0
  109. package/dist/omp/result-reconciliation.js +9 -0
  110. package/dist/omp/result-reconciliation.js.map +1 -0
  111. package/dist/omp/rpc.d.ts +62 -0
  112. package/dist/omp/rpc.d.ts.map +1 -0
  113. package/dist/omp/rpc.js +4 -0
  114. package/dist/omp/rpc.js.map +1 -0
  115. package/dist/storage/journal.d.ts +13 -0
  116. package/dist/storage/journal.d.ts.map +1 -0
  117. package/dist/storage/journal.js +72 -0
  118. package/dist/storage/journal.js.map +1 -0
  119. package/dist/storage/migrations.d.ts +9 -0
  120. package/dist/storage/migrations.d.ts.map +1 -0
  121. package/dist/storage/migrations.js +38 -0
  122. package/dist/storage/migrations.js.map +1 -0
  123. package/dist/storage/repository-identity.d.ts +12 -0
  124. package/dist/storage/repository-identity.d.ts.map +1 -0
  125. package/dist/storage/repository-identity.js +67 -0
  126. package/dist/storage/repository-identity.js.map +1 -0
  127. package/dist/tools/evidence.d.ts +9 -0
  128. package/dist/tools/evidence.d.ts.map +1 -0
  129. package/dist/tools/evidence.js +9 -0
  130. package/dist/tools/evidence.js.map +1 -0
  131. package/dist/tools/integrate.d.ts +13 -0
  132. package/dist/tools/integrate.d.ts.map +1 -0
  133. package/dist/tools/integrate.js +106 -0
  134. package/dist/tools/integrate.js.map +1 -0
  135. package/dist/tools/result.d.ts +10 -0
  136. package/dist/tools/result.d.ts.map +1 -0
  137. package/dist/tools/result.js +2 -0
  138. package/dist/tools/result.js.map +1 -0
  139. package/dist/tools/verify.d.ts +14 -0
  140. package/dist/tools/verify.d.ts.map +1 -0
  141. package/dist/tools/verify.js +37 -0
  142. package/dist/tools/verify.js.map +1 -0
  143. package/dist/tools/workflow.d.ts +9 -0
  144. package/dist/tools/workflow.d.ts.map +1 -0
  145. package/dist/tools/workflow.js +65 -0
  146. package/dist/tools/workflow.js.map +1 -0
  147. package/dist/workflows/direct.d.ts +10 -0
  148. package/dist/workflows/direct.d.ts.map +1 -0
  149. package/dist/workflows/direct.js +2 -0
  150. package/dist/workflows/direct.js.map +1 -0
  151. package/dist/workflows/implement.d.ts +3 -0
  152. package/dist/workflows/implement.d.ts.map +1 -0
  153. package/dist/workflows/implement.js +4 -0
  154. package/dist/workflows/implement.js.map +1 -0
  155. package/dist/workflows/plan.d.ts +18 -0
  156. package/dist/workflows/plan.d.ts.map +1 -0
  157. package/dist/workflows/plan.js +6 -0
  158. package/dist/workflows/plan.js.map +1 -0
  159. package/dist/workflows/research.d.ts +16 -0
  160. package/dist/workflows/research.d.ts.map +1 -0
  161. package/dist/workflows/research.js +2 -0
  162. package/dist/workflows/research.js.map +1 -0
  163. package/dist/workflows/review.d.ts +16 -0
  164. package/dist/workflows/review.d.ts.map +1 -0
  165. package/dist/workflows/review.js +2 -0
  166. package/dist/workflows/review.js.map +1 -0
  167. package/dist/workflows/verify.d.ts +10 -0
  168. package/dist/workflows/verify.d.ts.map +1 -0
  169. package/dist/workflows/verify.js +2 -0
  170. package/dist/workflows/verify.js.map +1 -0
  171. package/docs/compatibility/baseline.json +8 -0
  172. package/docs/compatibility/lifecycle-observation.md +5 -0
  173. package/docs/compatibility/phase-0-report.md +5 -0
  174. package/docs/compatibility/recovery-report.md +3 -0
  175. package/docs/compatibility/supported-surfaces.json +7 -0
  176. package/docs/decisions/native-api-boundary.md +5 -0
  177. package/docs/evaluations/baseline.md +3 -0
  178. package/docs/migration/agent-disposition.json +6 -0
  179. package/docs/migration/final-disposition.json +9 -0
  180. package/docs/migration/legacy-inventory.json +16 -0
  181. package/docs/releases/0.2.0.md +9 -0
  182. package/docs/releases/beta-acceptance.md +3 -0
  183. package/docs/releases/native-stable.md +3 -0
  184. package/docs/releases/npm-publishing.md +22 -0
  185. package/docs/releases/rollback.md +3 -0
  186. package/docs/releases/support-matrix.md +11 -0
  187. package/docs/security/qualification.md +3 -0
  188. package/docs/security/threat-model.md +5 -0
  189. package/optional/openkan/index.ts +3 -0
  190. package/package.json +59 -0
  191. package/prompts/bizar-system.md +3 -0
  192. package/rules/bizar-core.md +7 -0
  193. package/rules/bizar-native-omp.md +6 -0
  194. package/schemas/evidence-record.schema.json +16 -0
  195. package/schemas/workflow-run.schema.json +16 -0
  196. package/skills/bizar-architecture/SKILL.md +6 -0
  197. package/skills/bizar-planning/SKILL.md +6 -0
  198. package/skills/bizar-research/SKILL.md +6 -0
  199. package/skills/bizar-review/SKILL.md +6 -0
  200. package/skills/bizar-security/SKILL.md +6 -0
  201. package/skills/bizar-testing/SKILL.md +6 -0
  202. package/skills/bizar-workflow/SKILL.md +6 -0
@@ -0,0 +1,9 @@
1
+ import { ContractError } from "../core/errors.js";
2
+ export function admitIsolation(request) {
3
+ if (request.editing && request.preset !== "trusted-development" && !request.isolated)
4
+ throw new ContractError("Managed editing requires native OMP isolation");
5
+ if (request.apply || request.merge)
6
+ throw new ContractError("Managed dispatch must capture results without auto-application");
7
+ return { isolated: request.editing ? request.isolated : false, apply: false, merge: false, guarantee: request.isolated ? "native-workspace-isolation" : "workflow-scope-only" };
8
+ }
9
+ //# sourceMappingURL=isolation-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolation-policy.js","sourceRoot":"","sources":["../../src/omp/isolation-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIlD,MAAM,UAAU,cAAc,CAAC,OAAyB;IACtD,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,qBAAqB,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,MAAM,IAAI,aAAa,CAAC,+CAA+C,CAAC,CAAC;IAC/J,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,IAAI,aAAa,CAAC,gEAAgE,CAAC,CAAC;IAC9H,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,KAAK,EAAE,KAAc,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;AACpM,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Journal } from "../storage/journal.js";
2
+ import type { ObjectiveContract } from "../core/types.js";
3
+ export interface SessionBinding {
4
+ journal: Journal;
5
+ owner: string;
6
+ cwd: string;
7
+ }
8
+ export declare function bindSession(journal: Journal, ctx: {
9
+ cwd?: string;
10
+ sessionManager?: {
11
+ getSessionFile?: () => string | undefined;
12
+ };
13
+ }): SessionBinding;
14
+ export declare function startObjective(binding: SessionBinding, objective: ObjectiveContract): import("../core/types.js").WorkflowRun;
15
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/omp/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,WAAW,cAAc;IAAG,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;CAAE;AAEjF,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,GAAG,cAAc,CAEnJ;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,0CAMnF"}
@@ -0,0 +1,14 @@
1
+ import { createRun } from "../core/transitions.js";
2
+ import { nativeSessionReference } from "./context.js";
3
+ export function bindSession(journal, ctx) {
4
+ return { journal, owner: nativeSessionReference(ctx) ?? `session:${ctx.cwd ?? process.cwd()}`, cwd: ctx.cwd ?? process.cwd() };
5
+ }
6
+ export function startObjective(binding, objective) {
7
+ const existing = binding.journal.snapshot().run;
8
+ if (existing && !["complete", "failed", "cancelled"].includes(existing.phase))
9
+ throw new Error("A non-terminal workflow run already exists");
10
+ const run = createRun(binding.cwd, objective, undefined, binding.owner);
11
+ binding.journal.create(run);
12
+ return run;
13
+ }
14
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/omp/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAKtD,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,GAAqF;IACjI,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,CAAC,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AACjI,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAuB,EAAE,SAA4B;IAClF,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC;IAChD,IAAI,QAAQ,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC7I,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACxE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface NativeMemory {
2
+ retain?(entry: {
3
+ key: string;
4
+ content: string;
5
+ provenance: string;
6
+ }): Promise<void>;
7
+ recall?(query: string): Promise<Array<{
8
+ content: string;
9
+ provenance?: string;
10
+ }>>;
11
+ }
12
+ export declare function retainDecision(memory: NativeMemory | undefined, key: string, content: string): Promise<void>;
13
+ export declare function recallProject(memory: NativeMemory | undefined, query: string): Promise<never[] | {
14
+ content: string;
15
+ provenance?: string;
16
+ }[]>;
17
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/omp/memory.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAAG,MAAM,CAAC,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAAE;AACxM,wBAAsB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAAkG;AACrM,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM;aAFmF,MAAM;iBAAe,MAAM;KAEtD"}
@@ -0,0 +1,4 @@
1
+ export async function retainDecision(memory, key, content) { if (memory?.retain)
2
+ await memory.retain({ key, content, provenance: "bizar-omp-workflow" }); }
3
+ export async function recallProject(memory, query) { return memory?.recall ? memory.recall(query) : []; }
4
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/omp/memory.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAgC,EAAE,GAAW,EAAE,OAAe,IAAI,IAAI,MAAM,EAAE,MAAM;IAAE,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC;AACrM,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAgC,EAAE,KAAa,IAAI,OAAO,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { RouteClass, RouteDecision } from "../core/types.js";
2
+ export declare const MODEL_ROLES: {
3
+ readonly bizar_default: "default";
4
+ readonly bizar_common: "smol";
5
+ readonly bizar_hard: "slow";
6
+ };
7
+ export declare const AGENT_ROLES: readonly ["bizar-researcher", "bizar-planner", "bizar-architect", "bizar-implementer", "bizar-reviewer", "bizar-security-reviewer", "bizar-verifier", "bizar-docs"];
8
+ export declare function modelRoleFor(routeClass: RouteClass): keyof typeof MODEL_ROLES;
9
+ export declare function explainRole(decision: RouteDecision): string;
10
+ //# sourceMappingURL=model-roles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-roles.d.ts","sourceRoot":"","sources":["../../src/omp/model-roles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,eAAO,MAAM,WAAW;;;;CAAkF,CAAC;AAC3G,eAAO,MAAM,WAAW,qKAAsK,CAAC;AAE/L,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,OAAO,WAAW,CAA8G;AAC5L,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAAkI"}
@@ -0,0 +1,5 @@
1
+ export const MODEL_ROLES = { bizar_default: "default", bizar_common: "smol", bizar_hard: "slow" };
2
+ export const AGENT_ROLES = ["bizar-researcher", "bizar-planner", "bizar-architect", "bizar-implementer", "bizar-reviewer", "bizar-security-reviewer", "bizar-verifier", "bizar-docs"];
3
+ export function modelRoleFor(routeClass) { return routeClass === "hard" ? "bizar_hard" : routeClass === "common" ? "bizar_common" : "bizar_default"; }
4
+ export function explainRole(decision) { return `${decision.modelRole} (${MODEL_ROLES[decision.modelRole]}) via ${decision.reason}; fallback is explicit and bounded`; }
5
+ //# sourceMappingURL=model-roles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-roles.js","sourceRoot":"","sources":["../../src/omp/model-roles.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAW,CAAC;AAC3G,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,YAAY,CAAU,CAAC;AAE/L,MAAM,UAAU,YAAY,CAAC,UAAsB,IAA8B,OAAO,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AAC5L,MAAM,UAAU,WAAW,CAAC,QAAuB,IAAY,OAAO,GAAG,QAAQ,CAAC,SAAS,KAAK,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,QAAQ,CAAC,MAAM,oCAAoC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DispatchIntent, WorkerObservation } from "../core/types.js";
2
+ export declare function reconcileResult(intent: DispatchIntent, observation: WorkerObservation): DispatchIntent;
3
+ //# sourceMappingURL=result-reconciliation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-reconciliation.d.ts","sourceRoot":"","sources":["../../src/omp/result-reconciliation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1E,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,GAAG,cAAc,CAItG"}
@@ -0,0 +1,9 @@
1
+ import { ContractError } from "../core/errors.js";
2
+ export function reconcileResult(intent, observation) {
3
+ if (observation.dispatchId !== intent.id)
4
+ throw new ContractError("Worker result is bound to a different dispatch", { expected: intent.id, actual: observation.dispatchId });
5
+ if (!["settled", "failed", "cancelled", "unknown-outcome"].includes(observation.status))
6
+ return { ...intent, status: "acknowledged", nativeCallId: observation.nativeCallId, nativeChildId: observation.nativeChildId };
7
+ return { ...intent, status: observation.status === "settled" ? "settled" : observation.status === "unknown-outcome" ? "unknown-outcome" : "settled", nativeCallId: observation.nativeCallId, nativeChildId: observation.nativeChildId };
8
+ }
9
+ //# sourceMappingURL=result-reconciliation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-reconciliation.js","sourceRoot":"","sources":["../../src/omp/result-reconciliation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,UAAU,eAAe,CAAC,MAAsB,EAAE,WAA8B;IACpF,IAAI,WAAW,CAAC,UAAU,KAAK,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,aAAa,CAAC,gDAAgD,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7K,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC;IACxN,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC;AAC1O,CAAC"}
@@ -0,0 +1,62 @@
1
+ import type { StateSnapshot } from "../core/types.js";
2
+ export interface RpcRequest {
3
+ id: string;
4
+ method: "status" | "plan" | "doctor" | "evidence";
5
+ params?: Record<string, unknown>;
6
+ }
7
+ export interface RpcResponse {
8
+ id: string;
9
+ ok: boolean;
10
+ result?: unknown;
11
+ error?: {
12
+ code: string;
13
+ message: string;
14
+ };
15
+ }
16
+ export declare function rpcResponse(request: RpcRequest, value: unknown): RpcResponse;
17
+ export declare function rpcError(request: RpcRequest, error: unknown): RpcResponse;
18
+ export declare function snapshotForRpc(snapshot: StateSnapshot): {
19
+ revision: number;
20
+ run: import("../core/types.js").WorkflowRun | undefined;
21
+ evidence: {
22
+ id: string;
23
+ runId: string;
24
+ type: "test" | "lint" | "typecheck" | "review" | "research" | "worker" | "git" | "manual";
25
+ checkId: string;
26
+ command?: string[];
27
+ cwd?: string;
28
+ result: "passed" | "failed" | "blocked" | "cancelled" | "unknown";
29
+ exitCode?: number;
30
+ targetDigest: string;
31
+ inputDigests: Record<string, string>;
32
+ artifactHashes: string[];
33
+ provenance: {
34
+ producer: string;
35
+ source?: string;
36
+ observedAt: string;
37
+ };
38
+ recordedAt: string;
39
+ stale: boolean;
40
+ staleReason?: string;
41
+ }[];
42
+ dispatches: {
43
+ id: string;
44
+ runId: string;
45
+ runRevision: number;
46
+ workItemId: string;
47
+ idempotencyKey: string;
48
+ expectedParentSession?: string;
49
+ requestedAgent: string;
50
+ scope: string[];
51
+ isolation: "required" | "none";
52
+ apply: false;
53
+ merge: false;
54
+ routeClass: import("../core/types.js").RouteClass;
55
+ routeIntent: import("../core/types.js").RouteIntent;
56
+ modelRole: string;
57
+ status: "admitted" | "acknowledged" | "settled" | "unknown-outcome" | "rejected";
58
+ nativeCallId?: string;
59
+ nativeChildId?: string;
60
+ }[];
61
+ };
62
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/omp/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,MAAM,WAAW,UAAU;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAAE;AAChI,MAAM,WAAW,WAAW;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAAE;AACtH,wBAAgB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAAwD;AACrI,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAAqO;AAC/S,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa;;;;;;;;;;;;;;;;;kBACwzD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;EADljD"}
@@ -0,0 +1,4 @@
1
+ export function rpcResponse(request, value) { return { id: request.id, ok: true, result: value }; }
2
+ export function rpcError(request, error) { return { id: request.id, ok: false, error: { code: error instanceof Error && "code" in error ? String(error.code) : "ERROR", message: error instanceof Error ? error.message : String(error) } }; }
3
+ export function snapshotForRpc(snapshot) { return { revision: snapshot.revision, run: snapshot.run, evidence: snapshot.evidence.map(({ stdout: _stdout, stderr: _stderr, ...record }) => record), dispatches: snapshot.dispatches.map(({ acceptanceCriteria: _acceptanceCriteria, ...intent }) => intent) }; }
4
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/omp/rpc.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,WAAW,CAAC,OAAmB,EAAE,KAAc,IAAiB,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACrI,MAAM,UAAU,QAAQ,CAAC,OAAmB,EAAE,KAAc,IAAiB,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAE,KAAmC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/S,MAAM,UAAU,cAAc,CAAC,QAAuB,IAAI,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { JournalEntry, JournalEvent, StateSnapshot } from "../core/types.js";
2
+ export declare class Journal {
3
+ readonly path: string;
4
+ private readonly lockPath;
5
+ constructor(path: string);
6
+ entries(): JournalEntry[];
7
+ snapshot(): StateSnapshot;
8
+ append(event: JournalEvent, idempotencyKey: string, expectedRevision?: number): JournalEntry;
9
+ create(run: import("../core/types.js").WorkflowRun): JournalEntry;
10
+ clear(): void;
11
+ }
12
+ export declare function memoryJournal(): Journal;
13
+ //# sourceMappingURL=journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/storage/journal.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElF,qBAAa,OAAO;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBACtB,IAAI,EAAE,MAAM;IAExB,OAAO,IAAI,YAAY,EAAE;IAIzB,QAAQ,IAAI,aAAa;IAEzB,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,YAAY;IAmC5F,MAAM,CAAC,GAAG,EAAE,OAAO,kBAAkB,EAAE,WAAW,GAAG,YAAY;IACjE,KAAK,IAAI,IAAI;CACd;AAED,wBAAgB,aAAa,IAAI,OAAO,CAAiF"}
@@ -0,0 +1,72 @@
1
+ import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, unlinkSync, writeSync } from "node:fs";
2
+ import { randomUUID } from "node:crypto";
3
+ import { dirname, join } from "node:path";
4
+ import { ContractError, OwnershipError } from "../core/errors.js";
5
+ import { replay } from "../core/recovery.js";
6
+ import { ensureStateFile, STATE_SCHEMA } from "./migrations.js";
7
+ export class Journal {
8
+ path;
9
+ lockPath;
10
+ constructor(path) { this.path = path; this.lockPath = join(dirname(path), ".state.lock"); ensureStateFile(path); }
11
+ entries() {
12
+ if (!existsSync(this.path))
13
+ return [];
14
+ return readFileSync(this.path, "utf8").split("\n").filter(Boolean).map(line => JSON.parse(line));
15
+ }
16
+ snapshot() { return replay(this.entries()); }
17
+ append(event, idempotencyKey, expectedRevision) {
18
+ if (!idempotencyKey.trim())
19
+ throw new ContractError("Idempotency key is required");
20
+ mkdirSync(dirname(this.path), { recursive: true, mode: 0o700 });
21
+ let fd;
22
+ const lockOwner = randomUUID();
23
+ try {
24
+ try {
25
+ fd = openSync(this.lockPath, "wx", 0o600);
26
+ }
27
+ catch {
28
+ throw new OwnershipError("Journal is already being advanced by another owner");
29
+ }
30
+ writeSync(fd, lockOwner, undefined, "utf8");
31
+ fsyncSync(fd);
32
+ ensureStateFile(this.path);
33
+ const existingEntries = this.entries();
34
+ const existing = existingEntries.find(entry => entry.idempotencyKey === idempotencyKey);
35
+ if (existing) {
36
+ if (JSON.stringify(existing.event) !== JSON.stringify(event))
37
+ throw new ContractError("Idempotency key conflicts with an existing event", { idempotencyKey });
38
+ return existing;
39
+ }
40
+ const current = replay(existingEntries);
41
+ if (event.type === "run.created" && current.run && !["complete", "failed", "cancelled"].includes(current.run.phase))
42
+ throw new ContractError("A non-terminal workflow run already exists");
43
+ if (expectedRevision !== undefined && current.revision !== expectedRevision)
44
+ throw new ContractError("Revision conflict", { expectedRevision, actualRevision: current.revision });
45
+ const entry = { sequence: current.lastSequence + 1, at: new Date().toISOString(), idempotencyKey, event };
46
+ let stateFd;
47
+ try {
48
+ stateFd = openSync(this.path, "a", 0o600);
49
+ writeSync(stateFd, `${JSON.stringify({ schema: STATE_SCHEMA, ...entry })}\n`, undefined, "utf8");
50
+ fsyncSync(stateFd);
51
+ }
52
+ finally {
53
+ if (stateFd !== undefined)
54
+ closeSync(stateFd);
55
+ }
56
+ return entry;
57
+ }
58
+ finally {
59
+ if (fd !== undefined)
60
+ closeSync(fd);
61
+ try {
62
+ if (existsSync(this.lockPath) && readFileSync(this.lockPath, "utf8") === lockOwner)
63
+ unlinkSync(this.lockPath);
64
+ }
65
+ catch { /* A replacement lock belongs to another owner. */ }
66
+ }
67
+ }
68
+ create(run) { return this.append({ type: "run.created", run }, `run-created:${run.runId}`); }
69
+ clear() { throw new ContractError("Journal deletion is not a supported recovery operation"); }
70
+ }
71
+ export function memoryJournal() { return new Journal(join(process.cwd(), ".bizar-omp", "memory-state.jsonl")); }
72
+ //# sourceMappingURL=journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/storage/journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACrH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAiB,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGhE,MAAM,OAAO,OAAO;IACT,IAAI,CAAS;IACL,QAAQ,CAAS;IAClC,YAAY,IAAY,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1H,OAAO;QACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC,CAAC;IACnH,CAAC;IACD,QAAQ,KAAoB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5D,MAAM,CAAC,KAAmB,EAAE,cAAsB,EAAE,gBAAyB;QAC3E,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,aAAa,CAAC,6BAA6B,CAAC,CAAC;QACnF,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,IAAI,EAAsB,CAAC;QAC3B,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC;gBAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,MAAM,IAAI,cAAc,CAAC,oDAAoD,CAAC,CAAC;YAAC,CAAC;YAC5I,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAC5C,SAAS,CAAC,EAAE,CAAC,CAAC;YACd,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,KAAK,cAAc,CAAC,CAAC;YACxF,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;oBAAE,MAAM,IAAI,aAAa,CAAC,kDAAkD,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;gBAC9J,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,aAAa,CAAC,4CAA4C,CAAC,CAAC;YAC3L,IAAI,gBAAgB,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB;gBAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClL,MAAM,KAAK,GAAiB,EAAE,QAAQ,EAAE,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;YACxH,IAAI,OAA2B,CAAC;YAChC,IAAI,CAAC;gBACH,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC1C,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACjG,SAAS,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;oBAAS,CAAC;gBAAC,IAAI,OAAO,KAAK,SAAS;oBAAE,SAAS,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,IAAI,EAAE,KAAK,SAAS;gBAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC;gBACH,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,SAAS;oBAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChH,CAAC;YAAC,MAAM,CAAC,CAAC,kDAAkD,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAA2C,IAAkB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,eAAe,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACnJ,KAAK,KAAW,MAAM,IAAI,aAAa,CAAC,wDAAwD,CAAC,CAAC,CAAC,CAAC;CACrG;AAED,MAAM,UAAU,aAAa,KAAc,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const STATE_SCHEMA = "bizar.omp.state.v1";
2
+ export declare function ensureStateFile(path: string): void;
3
+ export declare function validateJournalLine(line: string): boolean;
4
+ export declare function inspectState(path: string): {
5
+ valid: boolean;
6
+ lines: number;
7
+ invalidLines: number;
8
+ };
9
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/storage/migrations.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,uBAAuB,CAAC;AAEjD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAYlD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKzD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAKlG"}
@@ -0,0 +1,38 @@
1
+ import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ export const STATE_SCHEMA = "bizar.omp.state.v1";
4
+ export function ensureStateFile(path) {
5
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
6
+ if (existsSync(path))
7
+ return;
8
+ let fd;
9
+ try {
10
+ fd = openSync(path, "wx", 0o600);
11
+ fsyncSync(fd);
12
+ }
13
+ catch (error) {
14
+ if (!existsSync(path))
15
+ throw error;
16
+ }
17
+ finally {
18
+ if (fd !== undefined)
19
+ closeSync(fd);
20
+ }
21
+ }
22
+ export function validateJournalLine(line) {
23
+ try {
24
+ const entry = JSON.parse(line);
25
+ return entry.schema === STATE_SCHEMA && Number.isInteger(entry.sequence) && entry.sequence > 0 && typeof entry.idempotencyKey === "string" && entry.idempotencyKey.trim().length > 0 && entry.event !== undefined;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ export function inspectState(path) {
32
+ if (!existsSync(path))
33
+ return { valid: true, lines: 0, invalidLines: 0 };
34
+ const lines = readFileSync(path, "utf8").split("\n").filter(Boolean);
35
+ const invalidLines = lines.filter(line => !validateJournalLine(line)).length;
36
+ return { valid: invalidLines === 0, lines: lines.length, invalidLines };
37
+ }
38
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/storage/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAEjD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC7B,IAAI,EAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,KAAK,CAAC;IACrC,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,KAAK,SAAS;YAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAqF,CAAC;QACnH,OAAO,KAAK,CAAC,MAAM,KAAK,YAAY,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAS,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC;IACrN,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IACzE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7E,OAAO,EAAE,KAAK,EAAE,YAAY,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface RepositoryIdentity {
2
+ root: string;
3
+ commonDir: string;
4
+ gitDir: string;
5
+ head: string;
6
+ id: string;
7
+ }
8
+ export declare function repositoryIdentity(cwd?: string): RepositoryIdentity;
9
+ export declare function statePath(identity: RepositoryIdentity): string;
10
+ export declare function workingTreeDigest(cwd?: string): string;
11
+ export declare function isDirty(cwd?: string): boolean;
12
+ //# sourceMappingURL=repository-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-identity.d.ts","sourceRoot":"","sources":["../../src/storage/repository-identity.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;CAAE;AAElH,wBAAgB,kBAAkB,CAAC,GAAG,SAAgB,GAAG,kBAAkB,CAQ1E;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAAoE;AAsBnI,wBAAgB,iBAAiB,CAAC,GAAG,SAAgB,GAAG,MAAM,CAqB7D;AAED,wBAAgB,OAAO,CAAC,GAAG,SAAgB,GAAG,OAAO,CAEpD"}
@@ -0,0 +1,67 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { lstatSync, readFileSync, readlinkSync, realpathSync } from "node:fs";
4
+ import { join, resolve } from "node:path";
5
+ const gitText = (cwd, args) => execFileSync("git", args, { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
6
+ const gitBytes = (cwd, args) => execFileSync("git", args, { cwd, stdio: ["ignore", "pipe", "ignore"] });
7
+ export function repositoryIdentity(cwd = process.cwd()) {
8
+ const root = realpathSync(gitText(cwd, ["rev-parse", "--show-toplevel"]));
9
+ const commonDir = resolve(root, gitText(root, ["rev-parse", "--git-common-dir"]));
10
+ const gitDir = resolve(root, gitText(root, ["rev-parse", "--git-dir"]));
11
+ let head = "unborn";
12
+ try {
13
+ head = gitText(root, ["rev-parse", "--verify", "HEAD"]);
14
+ }
15
+ catch { /* An unborn repository has no commit yet. */ }
16
+ const id = createHash("sha256").update(`${gitDir}\0${root}`).digest("hex").slice(0, 24);
17
+ return { root, commonDir, gitDir, head, id };
18
+ }
19
+ export function statePath(identity) { return join(identity.gitDir, "bizar", "omp-v1", "state.jsonl"); }
20
+ function updateFramed(hash, value) {
21
+ const bytes = typeof value === "string" ? Buffer.from(value) : value;
22
+ const length = Buffer.allocUnsafe(8);
23
+ length.writeBigUInt64BE(BigInt(bytes.length));
24
+ hash.update(length).update(bytes);
25
+ }
26
+ function untrackedPaths(root) {
27
+ const output = gitBytes(root, ["ls-files", "--others", "--exclude-standard", "-z"]);
28
+ const paths = [];
29
+ let start = 0;
30
+ for (let index = 0; index < output.length; index += 1) {
31
+ if (output[index] !== 0)
32
+ continue;
33
+ paths.push(output.subarray(start, index));
34
+ start = index + 1;
35
+ }
36
+ if (start !== output.length)
37
+ throw new Error("Git returned an unterminated untracked path");
38
+ return paths;
39
+ }
40
+ export function workingTreeDigest(cwd = process.cwd()) {
41
+ const identity = repositoryIdentity(cwd);
42
+ const hash = createHash("sha256");
43
+ updateFramed(hash, identity.head);
44
+ updateFramed(hash, gitBytes(identity.root, ["diff", "--binary", "--no-ext-diff"]));
45
+ updateFramed(hash, gitBytes(identity.root, ["diff", "--cached", "--binary", "--no-ext-diff"]));
46
+ for (const relativePath of untrackedPaths(identity.root)) {
47
+ const path = Buffer.concat([Buffer.from(`${identity.root}/`), relativePath]);
48
+ const stat = lstatSync(path);
49
+ updateFramed(hash, relativePath);
50
+ if (stat.isSymbolicLink()) {
51
+ updateFramed(hash, "symlink");
52
+ updateFramed(hash, readlinkSync(path, "buffer"));
53
+ }
54
+ else if (stat.isFile()) {
55
+ updateFramed(hash, "file");
56
+ updateFramed(hash, readFileSync(path));
57
+ }
58
+ else {
59
+ updateFramed(hash, `unsupported:${stat.mode}`);
60
+ }
61
+ }
62
+ return hash.digest("hex");
63
+ }
64
+ export function isDirty(cwd = process.cwd()) {
65
+ return gitBytes(repositoryIdentity(cwd).root, ["status", "--porcelain=v1", "--untracked-files=all", "-z"]).length > 0;
66
+ }
67
+ //# sourceMappingURL=repository-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-identity.js","sourceRoot":"","sources":["../../src/storage/repository-identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { SessionBinding } from "../omp/lifecycle.js";
2
+ import type { EvidenceRecord } from "../core/types.js";
3
+ export declare function listEvidence(binding: SessionBinding, query?: {
4
+ id?: string;
5
+ type?: string;
6
+ freshFor?: string;
7
+ required?: string[];
8
+ }): EvidenceRecord[];
9
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/tools/evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,cAAc,EAAE,CAItJ"}
@@ -0,0 +1,9 @@
1
+ import { invalidateEvidence, requireFreshEvidence } from "../core/evidence.js";
2
+ import { workingTreeDigest } from "../storage/repository-identity.js";
3
+ export function listEvidence(binding, query) {
4
+ const records = invalidateEvidence(binding.journal.snapshot().evidence, workingTreeDigest(binding.cwd)).filter(record => (!query?.id || record.id === query.id) && (!query?.type || record.type === query.type));
5
+ if (query?.freshFor && query.required)
6
+ return requireFreshEvidence(records, query.required, query.freshFor);
7
+ return records;
8
+ }
9
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/tools/evidence.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,UAAU,YAAY,CAAC,OAAuB,EAAE,KAA8E;IAClI,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACjN,IAAI,KAAK,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5G,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { IntegrationAttempt } from "../core/types.js";
2
+ import type { SessionBinding } from "../omp/lifecycle.js";
3
+ export interface IntegrationRequest {
4
+ workItemId: string;
5
+ patch: string;
6
+ changedPaths?: string[];
7
+ evidenceIds: string[];
8
+ apply?: (patch: string) => Promise<{
9
+ resultingDigest: string;
10
+ }>;
11
+ }
12
+ export declare function integrate(binding: SessionBinding, request: IntegrationRequest): Promise<IntegrationAttempt>;
13
+ //# sourceMappingURL=integrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrate.d.ts","sourceRoot":"","sources":["../../src/tools/integrate.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAAE;AA2B3L,wBAAsB,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyCjH"}