@izagood/avcs 0.1.1 → 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/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/reducer/policy.d.ts +1 -1
- package/dist/reducer/policy.d.ts.map +1 -1
- package/dist/reducer/policy.js +11 -1
- package/dist/reducer/policy.js.map +1 -1
- package/dist/store/lock.d.ts.map +1 -1
- package/dist/store/lock.js +14 -4
- package/dist/store/lock.js.map +1 -1
- package/package.json +13 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
export { Repo } from "./api/repo.ts";
|
|
2
|
+
export { canonicalize, computeOid, sha256hex } from "./core/canonical.ts";
|
|
3
|
+
export { reduce, snapshotReduce, reduceIncremental, keysOf, conflictIdFor, detectFileConflicts } from "./reducer/reducer.ts";
|
|
4
|
+
export type { ReduceInput, ReductionResult, ReduceSnapshot, Conflict, AutoDecision } from "./reducer/reducer.ts";
|
|
5
|
+
export { defaultPolicy, evaluateOp, MATERIALIZER_VERSION } from "./reducer/policy.ts";
|
|
2
6
|
export { ObjectStore, CorruptObjectError } from "./store/objectStore.ts";
|
|
3
7
|
export type { FsckReport } from "./store/objectStore.ts";
|
|
4
8
|
export { startHub, HUB_PROTOCOL_VERSION } from "./hub/hubServer.ts";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAOrC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC7H,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKjH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGtF,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACzE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACpE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG3E,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1F,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGxE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,18 @@
|
|
|
6
6
|
// the published build (tsconfig.build.json → dist/) compiles this to JS + .d.ts.
|
|
7
7
|
// Repository / materialization
|
|
8
8
|
export { Repo } from "./api/repo.js";
|
|
9
|
+
// Content-addressing — the sacrosanct interop invariant. A consumer (e.g. avcshub)
|
|
10
|
+
// that stores objects MUST address them with THESE functions, not a re-implementation:
|
|
11
|
+
// any byte-level divergence in canonicalize/computeOid splits oids and treeHashes and
|
|
12
|
+
// silently breaks interop with avcs clients. Exposed so the canonical implementation is
|
|
13
|
+
// importable instead of copied. Also available as `@izagood/avcs/canonical`.
|
|
14
|
+
export { canonicalize, computeOid, sha256hex } from "./core/canonical.js";
|
|
15
|
+
// Deterministic reduce/materialize core (also `@izagood/avcs/reducer`)
|
|
16
|
+
export { reduce, snapshotReduce, reduceIncremental, keysOf, conflictIdFor, detectFileConflicts } from "./reducer/reducer.js";
|
|
17
|
+
// Policy engine + materializer algorithm identity (also `@izagood/avcs/policy`).
|
|
18
|
+
// MATERIALIZER_VERSION changes iff the merge algorithm changes — consumers can pin /
|
|
19
|
+
// detect determinism boundaries off it. See RELEASES.md.
|
|
20
|
+
export { defaultPolicy, evaluateOp, MATERIALIZER_VERSION } from "./reducer/policy.js";
|
|
9
21
|
// Object storage + integrity
|
|
10
22
|
export { ObjectStore, CorruptObjectError } from "./store/objectStore.js";
|
|
11
23
|
// Hub (server + client) — the replication / trust boundary avcshub productionizes
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,EAAE;AACF,mFAAmF;AACnF,yFAAyF;AACzF,wFAAwF;AACxF,iFAAiF;AAEjF,+BAA+B;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGzE,kFAAkF;AAClF,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE3E,8DAA8D;AAC9D,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1F,uEAAuE;AACvE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE1E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,EAAE;AACF,mFAAmF;AACnF,yFAAyF;AACzF,wFAAwF;AACxF,iFAAiF;AAEjF,+BAA+B;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,mFAAmF;AACnF,uFAAuF;AACvF,sFAAsF;AACtF,wFAAwF;AACxF,6EAA6E;AAC7E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE1E,uEAAuE;AACvE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG7H,iFAAiF;AACjF,qFAAqF;AACrF,yDAAyD;AACzD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEtF,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGzE,kFAAkF;AAClF,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE3E,8DAA8D;AAC9D,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1F,uEAAuE;AACvE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE1E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/reducer/policy.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Evidence, Operation, Policy } from "../objects/types.ts";
|
|
2
|
-
export declare const MATERIALIZER_VERSION = "avcs-
|
|
2
|
+
export declare const MATERIALIZER_VERSION = "avcs-text3/0.1.0";
|
|
3
3
|
/** A sane built-in policy used when a repo has not authored its own. */
|
|
4
4
|
export declare function defaultPolicy(): Policy;
|
|
5
5
|
export interface OpEvaluation {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/reducer/policy.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAEV,QAAQ,EACR,SAAS,EACT,MAAM,EAEP,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/reducer/policy.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAEV,QAAQ,EACR,SAAS,EACT,MAAM,EAEP,MAAM,qBAAqB,CAAC;AAY7B,eAAO,MAAM,oBAAoB,qBAA2B,CAAC;AAE7D,wEAAwE;AACxE,wBAAgB,aAAa,IAAI,MAAM,CAiCtC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAkBD;;;GAGG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,SAAS,EACb,aAAa,EAAE,QAAQ,EAAE,EACzB,UAAU,EAAE,OAAO,EACnB,0BAA0B,EAAE,OAAO,EACnC,gBAAgB,SAAI,GACnB,YAAY,CAqEd"}
|
package/dist/reducer/policy.js
CHANGED
|
@@ -19,7 +19,17 @@
|
|
|
19
19
|
// gates and the passing-test bonus only count evidence produced by a non-authoring
|
|
20
20
|
// trusted actor (ci_bot / human). Self-reported ai_agent evidence is ignored until
|
|
21
21
|
// signing lands (Phase 3). See docs/04-policy.md.
|
|
22
|
-
|
|
22
|
+
import { MERGE3_VERSION } from "../merge/merge3.js";
|
|
23
|
+
// The materialize result is content-addressed: same ops ⇒ same treeHash, but only if
|
|
24
|
+
// every replica runs the same merge algorithm. This version string is the algorithm's
|
|
25
|
+
// identity, stamped into every materialize result (`materializerVersion`) and surfaced
|
|
26
|
+
// by the hub. It is COMPOSED from MERGE3_VERSION so that any change to the merge
|
|
27
|
+
// substrate flows through automatically — the symbol-aware → text-3way rewrite (0.1.1)
|
|
28
|
+
// failed to bump it, so symbol-era and text-era results shared one string and a
|
|
29
|
+
// consumer could not tell they were produced by incompatible algorithms. Composing it
|
|
30
|
+
// makes the merge3.ts promise ("the algorithm version is pinned into MATERIALIZER_VERSION")
|
|
31
|
+
// self-maintaining. Bumped to a distinct value for the 0.2.0 text-merge core.
|
|
32
|
+
export const MATERIALIZER_VERSION = `avcs-${MERGE3_VERSION}`;
|
|
23
33
|
/** A sane built-in policy used when a repo has not authored its own. */
|
|
24
34
|
export function defaultPolicy() {
|
|
25
35
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/reducer/policy.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,0DAA0D;AAC1D,EAAE;AACF,kDAAkD;AAClD,gFAAgF;AAChF,iEAAiE;AACjE,8EAA8E;AAC9E,uEAAuE;AACvE,yDAAyD;AACzD,gDAAgD;AAChD,iFAAiF;AACjF,kFAAkF;AAClF,gFAAgF;AAChF,EAAE;AACF,kFAAkF;AAClF,mFAAmF;AACnF,mFAAmF;AACnF,kDAAkD;
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/reducer/policy.ts"],"names":[],"mappings":"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"}
|
package/dist/store/lock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/store/lock.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/store/lock.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,CAAC,CAAC,CAmDZ"}
|
package/dist/store/lock.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// Implemented with mkdir, which is atomic create-if-not-exists on POSIX and Windows:
|
|
6
6
|
// exactly one caller wins the directory creation. A stale lock (holder crashed) is
|
|
7
7
|
// reclaimed after `staleMs`. Always released in a finally.
|
|
8
|
-
import { mkdir, writeFile, readFile, rm } from "node:fs/promises";
|
|
8
|
+
import { mkdir, writeFile, readFile, rm, rename } from "node:fs/promises";
|
|
9
9
|
import { join } from "node:path";
|
|
10
10
|
function sleep(ms) {
|
|
11
11
|
return new Promise((r) => setTimeout(r, ms));
|
|
@@ -23,7 +23,14 @@ export async function withLock(locksDir, name, fn, opts = {}) {
|
|
|
23
23
|
for (;;) {
|
|
24
24
|
try {
|
|
25
25
|
await mkdir(lockPath); // atomic; EEXIST if already held
|
|
26
|
-
|
|
26
|
+
// Publish the owner stamp atomically: a waiter must never read a half-written
|
|
27
|
+
// owner file. A torn read (e.g. "pid:" with the timestamp truncated) parses to
|
|
28
|
+
// a tiny number that looks ancient, which would wrongly reclaim a *live* lock
|
|
29
|
+
// and double-grant. writeFile is not atomic, so write-then-rename instead:
|
|
30
|
+
// a reader sees either no owner file (ENOENT → fresh) or the full stamp.
|
|
31
|
+
const tmpOwner = join(lockPath, `owner.${process.pid}.tmp`);
|
|
32
|
+
await writeFile(tmpOwner, `${process.pid}:${Date.now()}`, "utf8");
|
|
33
|
+
await rename(tmpOwner, ownerFile);
|
|
27
34
|
break;
|
|
28
35
|
}
|
|
29
36
|
catch (e) {
|
|
@@ -37,8 +44,11 @@ export async function withLock(locksDir, name, fn, opts = {}) {
|
|
|
37
44
|
// Held by someone — reclaim if stale, else back off.
|
|
38
45
|
let stale = false;
|
|
39
46
|
try {
|
|
40
|
-
const ts = Number((await readFile(ownerFile, "utf8")).split(":")[1]
|
|
41
|
-
|
|
47
|
+
const ts = Number((await readFile(ownerFile, "utf8")).split(":")[1]);
|
|
48
|
+
// Only a valid, genuinely-old stamp counts as stale. A missing/garbled stamp
|
|
49
|
+
// (NaN, ≤0, or a future time from a skewed clock) means acquire-in-progress
|
|
50
|
+
// or just-written → treat as fresh, never reclaim.
|
|
51
|
+
if (Number.isFinite(ts) && ts > 0 && Date.now() - ts > staleMs)
|
|
42
52
|
stale = true;
|
|
43
53
|
}
|
|
44
54
|
catch {
|
package/dist/store/lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/store/lock.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,iFAAiF;AACjF,kFAAkF;AAClF,EAAE;AACF,qFAAqF;AACrF,mFAAmF;AACnF,2DAA2D;AAE3D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/store/lock.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@izagood/avcs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Agentic Version Control System — an AI-native VCS where intent, session, operation, evidence and decision are first-class objects and code is a materialized projection of an operation graph.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -46,6 +46,18 @@
|
|
|
46
46
|
"types": "./dist/core/identity.d.ts",
|
|
47
47
|
"default": "./dist/core/identity.js"
|
|
48
48
|
},
|
|
49
|
+
"./canonical": {
|
|
50
|
+
"types": "./dist/core/canonical.d.ts",
|
|
51
|
+
"default": "./dist/core/canonical.js"
|
|
52
|
+
},
|
|
53
|
+
"./reducer": {
|
|
54
|
+
"types": "./dist/reducer/reducer.d.ts",
|
|
55
|
+
"default": "./dist/reducer/reducer.js"
|
|
56
|
+
},
|
|
57
|
+
"./policy": {
|
|
58
|
+
"types": "./dist/reducer/policy.d.ts",
|
|
59
|
+
"default": "./dist/reducer/policy.js"
|
|
60
|
+
},
|
|
49
61
|
"./types": {
|
|
50
62
|
"types": "./dist/objects/types.d.ts",
|
|
51
63
|
"default": "./dist/objects/types.js"
|