@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.
- package/LICENSE +21 -0
- package/README.md +45 -0
- package/agents/bizar-architect.md +10 -0
- package/agents/bizar-docs.md +10 -0
- package/agents/bizar-implementer.md +10 -0
- package/agents/bizar-planner.md +10 -0
- package/agents/bizar-researcher.md +10 -0
- package/agents/bizar-reviewer.md +10 -0
- package/agents/bizar-security-reviewer.md +10 -0
- package/agents/bizar-verifier.md +10 -0
- package/dist/cli/doctor.d.ts +36 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +15 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/install.d.ts +126 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +148 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +76 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/migrate.d.ts +19 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +14 -0
- package/dist/cli/migrate.js.map +1 -0
- package/dist/cli/run.d.ts +3 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +5 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/core/errors.d.ts +21 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +30 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/evidence.d.ts +6 -0
- package/dist/core/evidence.d.ts.map +1 -0
- package/dist/core/evidence.js +31 -0
- package/dist/core/evidence.js.map +1 -0
- package/dist/core/policies.d.ts +10 -0
- package/dist/core/policies.d.ts.map +1 -0
- package/dist/core/policies.js +41 -0
- package/dist/core/policies.js.map +1 -0
- package/dist/core/recovery.d.ts +7 -0
- package/dist/core/recovery.d.ts.map +1 -0
- package/dist/core/recovery.js +56 -0
- package/dist/core/recovery.js.map +1 -0
- package/dist/core/transitions.d.ts +14 -0
- package/dist/core/transitions.d.ts.map +1 -0
- package/dist/core/transitions.js +59 -0
- package/dist/core/transitions.js.map +1 -0
- package/dist/core/types.d.ts +204 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/extension.d.ts +43 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +199 -0
- package/dist/extension.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/omp/autonomous-settings.d.ts +9 -0
- package/dist/omp/autonomous-settings.d.ts.map +1 -0
- package/dist/omp/autonomous-settings.js +47 -0
- package/dist/omp/autonomous-settings.js.map +1 -0
- package/dist/omp/compatibility.d.ts +22 -0
- package/dist/omp/compatibility.d.ts.map +1 -0
- package/dist/omp/compatibility.js +4 -0
- package/dist/omp/compatibility.js.map +1 -0
- package/dist/omp/completion.d.ts +8 -0
- package/dist/omp/completion.d.ts.map +1 -0
- package/dist/omp/completion.js +14 -0
- package/dist/omp/completion.js.map +1 -0
- package/dist/omp/config.d.ts +11 -0
- package/dist/omp/config.d.ts.map +1 -0
- package/dist/omp/config.js +13 -0
- package/dist/omp/config.js.map +1 -0
- package/dist/omp/context.d.ts +16 -0
- package/dist/omp/context.d.ts.map +1 -0
- package/dist/omp/context.js +3 -0
- package/dist/omp/context.js.map +1 -0
- package/dist/omp/dispatch-admission.d.ts +3 -0
- package/dist/omp/dispatch-admission.d.ts.map +1 -0
- package/dist/omp/dispatch-admission.js +12 -0
- package/dist/omp/dispatch-admission.js.map +1 -0
- package/dist/omp/integration-recovery.d.ts +11 -0
- package/dist/omp/integration-recovery.d.ts.map +1 -0
- package/dist/omp/integration-recovery.js +18 -0
- package/dist/omp/integration-recovery.js.map +1 -0
- package/dist/omp/isolation-policy.d.ts +15 -0
- package/dist/omp/isolation-policy.d.ts.map +1 -0
- package/dist/omp/isolation-policy.js +9 -0
- package/dist/omp/isolation-policy.js.map +1 -0
- package/dist/omp/lifecycle.d.ts +15 -0
- package/dist/omp/lifecycle.d.ts.map +1 -0
- package/dist/omp/lifecycle.js +14 -0
- package/dist/omp/lifecycle.js.map +1 -0
- package/dist/omp/memory.d.ts +17 -0
- package/dist/omp/memory.d.ts.map +1 -0
- package/dist/omp/memory.js +4 -0
- package/dist/omp/memory.js.map +1 -0
- package/dist/omp/model-roles.d.ts +10 -0
- package/dist/omp/model-roles.d.ts.map +1 -0
- package/dist/omp/model-roles.js +5 -0
- package/dist/omp/model-roles.js.map +1 -0
- package/dist/omp/result-reconciliation.d.ts +3 -0
- package/dist/omp/result-reconciliation.d.ts.map +1 -0
- package/dist/omp/result-reconciliation.js +9 -0
- package/dist/omp/result-reconciliation.js.map +1 -0
- package/dist/omp/rpc.d.ts +62 -0
- package/dist/omp/rpc.d.ts.map +1 -0
- package/dist/omp/rpc.js +4 -0
- package/dist/omp/rpc.js.map +1 -0
- package/dist/storage/journal.d.ts +13 -0
- package/dist/storage/journal.d.ts.map +1 -0
- package/dist/storage/journal.js +72 -0
- package/dist/storage/journal.js.map +1 -0
- package/dist/storage/migrations.d.ts +9 -0
- package/dist/storage/migrations.d.ts.map +1 -0
- package/dist/storage/migrations.js +38 -0
- package/dist/storage/migrations.js.map +1 -0
- package/dist/storage/repository-identity.d.ts +12 -0
- package/dist/storage/repository-identity.d.ts.map +1 -0
- package/dist/storage/repository-identity.js +67 -0
- package/dist/storage/repository-identity.js.map +1 -0
- package/dist/tools/evidence.d.ts +9 -0
- package/dist/tools/evidence.d.ts.map +1 -0
- package/dist/tools/evidence.js +9 -0
- package/dist/tools/evidence.js.map +1 -0
- package/dist/tools/integrate.d.ts +13 -0
- package/dist/tools/integrate.d.ts.map +1 -0
- package/dist/tools/integrate.js +106 -0
- package/dist/tools/integrate.js.map +1 -0
- package/dist/tools/result.d.ts +10 -0
- package/dist/tools/result.d.ts.map +1 -0
- package/dist/tools/result.js +2 -0
- package/dist/tools/result.js.map +1 -0
- package/dist/tools/verify.d.ts +14 -0
- package/dist/tools/verify.d.ts.map +1 -0
- package/dist/tools/verify.js +37 -0
- package/dist/tools/verify.js.map +1 -0
- package/dist/tools/workflow.d.ts +9 -0
- package/dist/tools/workflow.d.ts.map +1 -0
- package/dist/tools/workflow.js +65 -0
- package/dist/tools/workflow.js.map +1 -0
- package/dist/workflows/direct.d.ts +10 -0
- package/dist/workflows/direct.d.ts.map +1 -0
- package/dist/workflows/direct.js +2 -0
- package/dist/workflows/direct.js.map +1 -0
- package/dist/workflows/implement.d.ts +3 -0
- package/dist/workflows/implement.d.ts.map +1 -0
- package/dist/workflows/implement.js +4 -0
- package/dist/workflows/implement.js.map +1 -0
- package/dist/workflows/plan.d.ts +18 -0
- package/dist/workflows/plan.d.ts.map +1 -0
- package/dist/workflows/plan.js +6 -0
- package/dist/workflows/plan.js.map +1 -0
- package/dist/workflows/research.d.ts +16 -0
- package/dist/workflows/research.d.ts.map +1 -0
- package/dist/workflows/research.js +2 -0
- package/dist/workflows/research.js.map +1 -0
- package/dist/workflows/review.d.ts +16 -0
- package/dist/workflows/review.d.ts.map +1 -0
- package/dist/workflows/review.js +2 -0
- package/dist/workflows/review.js.map +1 -0
- package/dist/workflows/verify.d.ts +10 -0
- package/dist/workflows/verify.d.ts.map +1 -0
- package/dist/workflows/verify.js +2 -0
- package/dist/workflows/verify.js.map +1 -0
- package/docs/compatibility/baseline.json +8 -0
- package/docs/compatibility/lifecycle-observation.md +5 -0
- package/docs/compatibility/phase-0-report.md +5 -0
- package/docs/compatibility/recovery-report.md +3 -0
- package/docs/compatibility/supported-surfaces.json +7 -0
- package/docs/decisions/native-api-boundary.md +5 -0
- package/docs/evaluations/baseline.md +3 -0
- package/docs/migration/agent-disposition.json +6 -0
- package/docs/migration/final-disposition.json +9 -0
- package/docs/migration/legacy-inventory.json +16 -0
- package/docs/releases/0.2.0.md +9 -0
- package/docs/releases/beta-acceptance.md +3 -0
- package/docs/releases/native-stable.md +3 -0
- package/docs/releases/npm-publishing.md +22 -0
- package/docs/releases/rollback.md +3 -0
- package/docs/releases/support-matrix.md +11 -0
- package/docs/security/qualification.md +3 -0
- package/docs/security/threat-model.md +5 -0
- package/optional/openkan/index.ts +3 -0
- package/package.json +59 -0
- package/prompts/bizar-system.md +3 -0
- package/rules/bizar-core.md +7 -0
- package/rules/bizar-native-omp.md +6 -0
- package/schemas/evidence-record.schema.json +16 -0
- package/schemas/workflow-run.schema.json +16 -0
- package/skills/bizar-architecture/SKILL.md +6 -0
- package/skills/bizar-planning/SKILL.md +6 -0
- package/skills/bizar-research/SKILL.md +6 -0
- package/skills/bizar-review/SKILL.md +6 -0
- package/skills/bizar-security/SKILL.md +6 -0
- package/skills/bizar-testing/SKILL.md +6 -0
- 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 @@
|
|
|
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"}
|
package/dist/omp/rpc.js
ADDED
|
@@ -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":"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"}
|
|
@@ -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"}
|