@groundnuty/macf-core 0.2.35 → 0.2.36
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/registry/index.d.ts +2 -2
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/local-client.d.ts.map +1 -1
- package/dist/registry/local-client.js +26 -1
- package/dist/registry/local-client.js.map +1 -1
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +59 -14
- package/dist/registry/registry.js.map +1 -1
- package/dist/registry/types.d.ts +38 -0
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry/types.js +15 -0
- package/dist/registry/types.js.map +1 -1
- package/package.json +1 -1
package/dist/registry/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { AgentInfoSchema, RegistryConfigSchema, OrgRegistryConfigSchema, ProfileRegistryConfigSchema, RepoRegistryConfigSchema, LocalRegistryConfigSchema } from './types.js';
|
|
2
|
-
export type { AgentInfo, Registry, RegistryConfig, GitHubVariablesClient } from './types.js';
|
|
1
|
+
export { AgentInfoSchema, agentInfoEquals, RegistryConfigSchema, OrgRegistryConfigSchema, ProfileRegistryConfigSchema, RepoRegistryConfigSchema, LocalRegistryConfigSchema } from './types.js';
|
|
2
|
+
export type { AgentInfo, Registry, RegisterResult, RegistryConfig, GitHubVariablesClient } from './types.js';
|
|
3
3
|
export { createGitHubClient, GitHubApiError } from './github-client.js';
|
|
4
4
|
export { createRegistry } from './registry.js';
|
|
5
5
|
export { createRegistryFromConfig } from './factory.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAC/L,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC7G,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACzH,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/registry/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { AgentInfoSchema, RegistryConfigSchema, OrgRegistryConfigSchema, ProfileRegistryConfigSchema, RepoRegistryConfigSchema, LocalRegistryConfigSchema } from './types.js';
|
|
1
|
+
export { AgentInfoSchema, agentInfoEquals, RegistryConfigSchema, OrgRegistryConfigSchema, ProfileRegistryConfigSchema, RepoRegistryConfigSchema, LocalRegistryConfigSchema } from './types.js';
|
|
2
2
|
export { createGitHubClient, GitHubApiError } from './github-client.js';
|
|
3
3
|
export { createRegistry } from './registry.js';
|
|
4
4
|
export { createRegistryFromConfig } from './factory.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE/L,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEzH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../../src/registry/local-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAa,QAAQ,
|
|
1
|
+
{"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../../src/registry/local-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAa,QAAQ,EAAkB,MAAM,YAAY,CAAC;AAEtE;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;iBAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,qBAAa,kBAAmB,SAAQ,SAAS;gBACnC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI1C;AAuLD,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AA6CD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,GAC5B,QAAQ,CA2GV"}
|
|
@@ -4,7 +4,7 @@ import { randomBytes } from 'node:crypto';
|
|
|
4
4
|
import lockfile from 'proper-lockfile';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { MacfError } from '../errors.js';
|
|
7
|
-
import { AgentInfoSchema } from './types.js';
|
|
7
|
+
import { AgentInfoSchema, agentInfoEquals } from './types.js';
|
|
8
8
|
/**
|
|
9
9
|
* Local registry implementation per DR-024.
|
|
10
10
|
*
|
|
@@ -251,6 +251,31 @@ export function createLocalRegistry(options) {
|
|
|
251
251
|
await writeRegistryFileAtomic(options.path, next);
|
|
252
252
|
});
|
|
253
253
|
},
|
|
254
|
+
// CAS register (groundnuty/macf#439). Fully atomic for the local backend:
|
|
255
|
+
// the read (current slot), the compare against `expected`, and the write
|
|
256
|
+
// all happen inside the same `withLock` critical section, so a racing
|
|
257
|
+
// second writer is serialized behind the lock and observes the first
|
|
258
|
+
// writer's value — failing the compare and backing off (ok:false). No
|
|
259
|
+
// read-back verify is needed (unlike the GitHub backend), because the lock
|
|
260
|
+
// makes the compare-then-write indivisible.
|
|
261
|
+
async registerConditional(name, info, expected) {
|
|
262
|
+
const validated = AgentInfoSchema.parse(info);
|
|
263
|
+
return withLock(options.path, async () => {
|
|
264
|
+
const existing = await readRegistryFile(options.path);
|
|
265
|
+
const current = existing?.agents[name] ?? null;
|
|
266
|
+
if (!agentInfoEquals(current, expected)) {
|
|
267
|
+
return { ok: false, current };
|
|
268
|
+
}
|
|
269
|
+
const file = existing ?? emptyRegistry(options.project);
|
|
270
|
+
const next = {
|
|
271
|
+
schema_version: REGISTRY_SCHEMA_VERSION,
|
|
272
|
+
project: options.project,
|
|
273
|
+
agents: { ...file.agents, [name]: validated },
|
|
274
|
+
};
|
|
275
|
+
await writeRegistryFileAtomic(options.path, next);
|
|
276
|
+
return { ok: true, current: validated };
|
|
277
|
+
});
|
|
278
|
+
},
|
|
254
279
|
async get(name) {
|
|
255
280
|
const file = await readRegistryFile(options.path);
|
|
256
281
|
if (file === null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-client.js","sourceRoot":"","sources":["../../src/registry/local-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"local-client.js","sourceRoot":"","sources":["../../src/registry/local-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,QAAQ,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,QAAQ,EAAkB,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE7F;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,GACd,QAAQ,CAqHV"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AgentInfoSchema } from './types.js';
|
|
1
|
+
import { AgentInfoSchema, agentInfoEquals } from './types.js';
|
|
2
2
|
import { toVariableSegment } from './variable-name.js';
|
|
3
3
|
/**
|
|
4
4
|
* Creates a Registry backed by a GitHubVariablesClient.
|
|
@@ -12,26 +12,71 @@ export function createRegistry(client, project) {
|
|
|
12
12
|
function variableName(agentName) {
|
|
13
13
|
return `${prefix}${toVariableSegment(agentName)}`;
|
|
14
14
|
}
|
|
15
|
+
// Shared read+parse used by both `get` and the conditional register's
|
|
16
|
+
// compare/read-back. Returns null for absent, malformed, or
|
|
17
|
+
// schema-invalid values (same lenient contract `get` has always had).
|
|
18
|
+
async function readAgent(name) {
|
|
19
|
+
const value = await client.readVariable(variableName(name));
|
|
20
|
+
if (value === null)
|
|
21
|
+
return null;
|
|
22
|
+
let parsed;
|
|
23
|
+
try {
|
|
24
|
+
parsed = JSON.parse(value);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const result = AgentInfoSchema.safeParse(parsed);
|
|
30
|
+
if (!result.success)
|
|
31
|
+
return null;
|
|
32
|
+
return result.data;
|
|
33
|
+
}
|
|
15
34
|
return {
|
|
16
35
|
async register(name, info) {
|
|
17
36
|
const value = JSON.stringify(info);
|
|
18
37
|
await client.writeVariable(variableName(name), value);
|
|
19
38
|
},
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
39
|
+
// CAS register (groundnuty/macf#439). The GitHub Actions Variables API has
|
|
40
|
+
// no native conditional write (no If-Match / ETag on PATCH/POST), so this
|
|
41
|
+
// is a best-effort narrowing, NOT a hard CAS:
|
|
42
|
+
// 1. pre-write compare — re-read the slot; if it no longer matches
|
|
43
|
+
// `expected`, a concurrent writer already changed it → abort the
|
|
44
|
+
// write (ok:false). This collapses the wide TOCTOU window (which
|
|
45
|
+
// spans the ~5s collision health-ping) down to the read→write gap.
|
|
46
|
+
// 2. post-write read-back verify — after writing, re-read; if the slot
|
|
47
|
+
// isn't ours, a racer wrote BEFORE our read-back → ok:false.
|
|
48
|
+
//
|
|
49
|
+
// What (2) does and does NOT cover (#447 review, science-agent): it catches
|
|
50
|
+
// only the interleaving where the racer's write lands before our read-back.
|
|
51
|
+
// The symmetric order — A-write → A-readback(ok) → B-write → B-readback(ok)
|
|
52
|
+
// — leaves BOTH returning ok:true (the slot ends up holding B; A's ok:true
|
|
53
|
+
// is stale). So on THIS backend `ok:true` means "we own the slot for now,"
|
|
54
|
+
// not "exclusively, at return" — eventually-reconciled, not a hard CAS.
|
|
55
|
+
// (The local backend IS exclusive-at-return: lock-atomic, no read-back
|
|
56
|
+
// needed.) The residual is bounded in practice by the ~5s health-ping
|
|
57
|
+
// window + the #424 version-takeover predicate (an equal/older racer aborts
|
|
58
|
+
// at the collision check, before reaching here); closing it hard needs a
|
|
59
|
+
// real CAS primitive the API doesn't offer.
|
|
60
|
+
//
|
|
61
|
+
// Corrupt-slot caveat: `readAgent` returns null for a malformed / schema-
|
|
62
|
+
// invalid value. On the read-back that's fail-safe (→ harmless ok:false).
|
|
63
|
+
// On the pre-write compare with `expected===null`, a corrupt-but-present
|
|
64
|
+
// slot also reads null → compare passes → we overwrite it — acceptable (a
|
|
65
|
+
// corrupt slot is already unusable) and bounded by schema-validity.
|
|
66
|
+
async registerConditional(name, info, expected) {
|
|
67
|
+
const current = await readAgent(name);
|
|
68
|
+
if (!agentInfoEquals(current, expected)) {
|
|
69
|
+
return { ok: false, current };
|
|
27
70
|
}
|
|
28
|
-
|
|
29
|
-
|
|
71
|
+
await client.writeVariable(variableName(name), JSON.stringify(info));
|
|
72
|
+
const readback = await readAgent(name);
|
|
73
|
+
if (readback === null || readback.instance_id !== info.instance_id) {
|
|
74
|
+
return { ok: false, current: readback };
|
|
30
75
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return
|
|
76
|
+
return { ok: true, current: info };
|
|
77
|
+
},
|
|
78
|
+
async get(name) {
|
|
79
|
+
return readAgent(name);
|
|
35
80
|
},
|
|
36
81
|
async list(filterPrefix) {
|
|
37
82
|
const allVars = await client.listVariables();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/registry/types.d.ts
CHANGED
|
@@ -10,8 +10,46 @@ export declare const AgentInfoSchema: z.ZodObject<{
|
|
|
10
10
|
started: z.ZodString;
|
|
11
11
|
}, z.core.$strip>;
|
|
12
12
|
export type AgentInfo = z.infer<typeof AgentInfoSchema>;
|
|
13
|
+
/**
|
|
14
|
+
* Value equality for two `AgentInfo`s (or absence). `null` represents an
|
|
15
|
+
* empty registry slot; two nulls are equal, a null and a value are not.
|
|
16
|
+
* Used by the conditional-register CAS to compare the slot's observed
|
|
17
|
+
* state against its current state.
|
|
18
|
+
*/
|
|
19
|
+
export declare function agentInfoEquals(a: AgentInfo | null, b: AgentInfo | null): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Outcome of a conditional (compare-and-set) register (groundnuty/macf#439).
|
|
22
|
+
*
|
|
23
|
+
* `ok: true` — this instance now owns the slot; `current` is the value just
|
|
24
|
+
* written (=== the `info` passed in). Ownership strength is
|
|
25
|
+
* backend-dependent: the local backend is **exclusive-at-return**
|
|
26
|
+
* (the compare+write is lock-atomic), whereas the GitHub-Variables
|
|
27
|
+
* backend is **best-effort / eventually-reconciled** — a racer
|
|
28
|
+
* writing in the same instant can still win (no native CAS on that
|
|
29
|
+
* API; see registry.ts `registerConditional`).
|
|
30
|
+
* `ok: false` — a concurrent writer changed the slot between the collision
|
|
31
|
+
* check and this write; `current` is the conflicting value
|
|
32
|
+
* observed (null if the slot was emptied). The caller must NOT
|
|
33
|
+
* treat itself as the registered owner — abort or re-check.
|
|
34
|
+
*/
|
|
35
|
+
export interface RegisterResult {
|
|
36
|
+
readonly ok: boolean;
|
|
37
|
+
readonly current: AgentInfo | null;
|
|
38
|
+
}
|
|
13
39
|
export interface Registry {
|
|
14
40
|
readonly register: (name: string, info: AgentInfo) => Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Compare-and-set register (groundnuty/macf#439): write `info` only if the
|
|
43
|
+
* slot still matches `expected` (the value observed during the collision
|
|
44
|
+
* check; `null` = expected-absent). Closes the TOCTOU window between the
|
|
45
|
+
* collision check's read and the registration write — a racing second
|
|
46
|
+
* writer can't silently clobber the first. Returns whether this instance
|
|
47
|
+
* won the slot. Backends differ in atomicity: the local registry is fully
|
|
48
|
+
* atomic under its file lock; the GitHub-Variables backend narrows the
|
|
49
|
+
* window with a pre-write compare + post-write read-back verify (no native
|
|
50
|
+
* CAS primitive exists on that API — see registry.ts).
|
|
51
|
+
*/
|
|
52
|
+
readonly registerConditional: (name: string, info: AgentInfo, expected: AgentInfo | null) => Promise<RegisterResult>;
|
|
15
53
|
readonly get: (name: string) => Promise<AgentInfo | null>;
|
|
16
54
|
readonly list: (prefix: string) => Promise<ReadonlyArray<{
|
|
17
55
|
readonly name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe;;;;;;;;;iBAM1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe;;;;;;;;;iBAM1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CASjF;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;CACpC;AAID,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,mBAAmB,EAAE,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,SAAS,GAAG,IAAI,KACvB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC,CAAC;IAC/G,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAID,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;iBAGtC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;iBAInC,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB;;;iBAGpC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;mBAK/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChE,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACxG,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D"}
|
package/dist/registry/types.js
CHANGED
|
@@ -7,6 +7,21 @@ export const AgentInfoSchema = z.object({
|
|
|
7
7
|
instance_id: z.string(),
|
|
8
8
|
started: z.string(),
|
|
9
9
|
});
|
|
10
|
+
/**
|
|
11
|
+
* Value equality for two `AgentInfo`s (or absence). `null` represents an
|
|
12
|
+
* empty registry slot; two nulls are equal, a null and a value are not.
|
|
13
|
+
* Used by the conditional-register CAS to compare the slot's observed
|
|
14
|
+
* state against its current state.
|
|
15
|
+
*/
|
|
16
|
+
export function agentInfoEquals(a, b) {
|
|
17
|
+
if (a === null || b === null)
|
|
18
|
+
return a === b;
|
|
19
|
+
return (a.host === b.host &&
|
|
20
|
+
a.port === b.port &&
|
|
21
|
+
a.type === b.type &&
|
|
22
|
+
a.instance_id === b.instance_id &&
|
|
23
|
+
a.started === b.started);
|
|
24
|
+
}
|
|
10
25
|
// --- Registry configuration ---
|
|
11
26
|
export const OrgRegistryConfigSchema = z.object({
|
|
12
27
|
type: z.literal('org'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,4DAA4D;AAE5D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,4DAA4D;AAE5D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAIH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,CAAmB,EAAE,CAAmB;IACtE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,CACL,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;QACjB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;QACjB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;QACjB,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW;QAC/B,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CACxB,CAAC;AACJ,CAAC;AA+CD,iCAAiC;AAEjC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACtB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACxB,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC;IAC1C,uBAAuB;IACvB,2BAA2B;IAC3B,wBAAwB;IACxB,yBAAyB;CAC1B,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@groundnuty/macf-core",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.36",
|
|
4
4
|
"description": "Shared internals consumed by the MACF CLI and channel-server packages. Not intended for direct external use — will be marked deprecated-internal on first npm publish per DR-022 Amendment A.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|