@groundnuty/macf-core 0.2.37 → 0.2.39
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/config.d.ts.map +1 -1
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/registry/heartbeat.d.ts +49 -0
- package/dist/registry/heartbeat.d.ts.map +1 -0
- package/dist/registry/heartbeat.js +56 -0
- package/dist/registry/heartbeat.js.map +1 -0
- package/dist/registry/index.d.ts +3 -2
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +2 -1
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/local-client.d.ts +1 -0
- package/dist/registry/local-client.d.ts.map +1 -1
- package/dist/registry/local-client.js +78 -0
- package/dist/registry/local-client.js.map +1 -1
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +83 -0
- package/dist/registry/registry.js.map +1 -1
- package/dist/registry/types.d.ts +99 -0
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry/types.js +17 -0
- package/dist/registry/types.js.map +1 -1
- package/dist/registry/variable-name.d.ts +22 -0
- package/dist/registry/variable-name.d.ts.map +1 -1
- package/dist/registry/variable-name.js +24 -0
- package/dist/registry/variable-name.js.map +1 -1
- package/dist/types.d.ts +48 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +75 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAmB9C,wBAAgB,UAAU,IAAI,WAAW,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAmB9C,wBAAgB,UAAU,IAAI,WAAW,CAuExC"}
|
package/dist/config.js
CHANGED
|
@@ -17,6 +17,13 @@ function requireFilePath(name) {
|
|
|
17
17
|
}
|
|
18
18
|
export function loadConfig() {
|
|
19
19
|
const agentName = requireEnv('MACF_AGENT_NAME');
|
|
20
|
+
// macf#538: the routing IDENTITY (registry key + cert CN) is distinct from the
|
|
21
|
+
// OTEL bot-name. `MACF_AGENT_NAME` is the bot-name (e.g. `macf-devops-agent`,
|
|
22
|
+
// used for OTEL `gen_ai.agent.name`); `MACF_ROUTING_LABEL` is the registry-key
|
|
23
|
+
// / CN (e.g. `devops-agent`). They differ on the substrate; they coincide on
|
|
24
|
+
// greenfield agents (auditor) where name == label. Defaults to agentName so
|
|
25
|
+
// every existing agent is unchanged (back-compat: inert until set).
|
|
26
|
+
const routingLabel = process.env['MACF_ROUTING_LABEL'] || agentName;
|
|
20
27
|
const caCertPath = requireFilePath('MACF_CA_CERT');
|
|
21
28
|
const caKeyPath = resolveCaKeyPath(caCertPath);
|
|
22
29
|
const agentCertPath = requireFilePath('MACF_AGENT_CERT');
|
|
@@ -51,6 +58,7 @@ export function loadConfig() {
|
|
|
51
58
|
const tmuxWindow = process.env['MACF_TMUX_WINDOW'] || undefined;
|
|
52
59
|
return {
|
|
53
60
|
agentName,
|
|
61
|
+
routingLabel,
|
|
54
62
|
agentType,
|
|
55
63
|
agentRole,
|
|
56
64
|
host,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { AgentInfo } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry heartbeat + TTL staleness (DR-031, groundnuty/macf#568).
|
|
4
|
+
*
|
|
5
|
+
* The live instance periodically re-stamps `last_heartbeat` on its registry slot
|
|
6
|
+
* (`Registry.heartbeatConditional`); a reader uses `isStaleEntry` to treat an
|
|
7
|
+
* entry whose heartbeat aged past a TTL as dead. This PAIRS with the graceful-
|
|
8
|
+
* deregister (#586): graceful-deregister covers the CLEAN-exit stale-entry case
|
|
9
|
+
* (the shutdown handler deletes the slot); the TTL backstops the UNGRACEFUL death
|
|
10
|
+
* (kill -9 / OOM / power loss) that never runs the shutdown handler. Together they
|
|
11
|
+
* close the stale-registration class.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Default registry-heartbeat re-stamp cadence: 5 minutes.
|
|
15
|
+
*
|
|
16
|
+
* COARSE BY DESIGN. Each beat is a WRITE to GitHub Actions Variables per agent →
|
|
17
|
+
* it consumes the App-token write budget AND interacts with the #439 If-Match
|
|
18
|
+
* TOCTOU surface. Do NOT make it frequent. Operators can override (or disable
|
|
19
|
+
* with `0`) via `MACF_REGISTRY_HEARTBEAT_INTERVAL_MS`.
|
|
20
|
+
*/
|
|
21
|
+
export declare const DEFAULT_REGISTRY_HEARTBEAT_INTERVAL_MS: number;
|
|
22
|
+
/**
|
|
23
|
+
* Default staleness TTL: 3× the heartbeat interval (15 minutes).
|
|
24
|
+
*
|
|
25
|
+
* The 3× multiple gives one missed beat (e.g. a transient registry-write failure
|
|
26
|
+
* that the next interval recovers from) slack so a healthy-but-briefly-unlucky
|
|
27
|
+
* instance isn't flapped to "stale". An entry is only judged stale once it has
|
|
28
|
+
* gone substantially past the cadence without a successful re-stamp.
|
|
29
|
+
*/
|
|
30
|
+
export declare const DEFAULT_REGISTRY_TTL_MS: number;
|
|
31
|
+
/**
|
|
32
|
+
* Decide whether a registry entry is STALE — i.e. its live instance very likely
|
|
33
|
+
* died ungracefully without clearing the slot (DR-031, groundnuty/macf#568).
|
|
34
|
+
*
|
|
35
|
+
* Returns `true` ONLY when `entry.last_heartbeat` is PRESENT and has aged past
|
|
36
|
+
* `ttlMs` (`now - parse(last_heartbeat) > ttlMs`). Critically BACK-COMPAT:
|
|
37
|
+
*
|
|
38
|
+
* - ABSENT `last_heartbeat` → `false` (UNKNOWN, never dead). Older entries and
|
|
39
|
+
* pre-DR-031 channel-server versions that never heartbeat must NOT be falsely
|
|
40
|
+
* reclaimed. (The next launch's #424 collision check — a live `/health` probe —
|
|
41
|
+
* reclaims a genuinely-dead no-heartbeat slot regardless; the TTL is a reader-
|
|
42
|
+
* side backstop, not the only mechanism.)
|
|
43
|
+
* - UNPARSEABLE `last_heartbeat` → `false`. If we can't compute an age we don't
|
|
44
|
+
* assert staleness (fail toward "alive", never a false "dead").
|
|
45
|
+
*
|
|
46
|
+
* Pure + injectable `now` (epoch ms) for deterministic testing.
|
|
47
|
+
*/
|
|
48
|
+
export declare function isStaleEntry(entry: AgentInfo, ttlMs: number, now: number): boolean;
|
|
49
|
+
//# sourceMappingURL=heartbeat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/registry/heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;GAUG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,sCAAsC,QAAgB,CAAC;AAEpE;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,QAA6C,CAAC;AAElF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAMlF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry heartbeat + TTL staleness (DR-031, groundnuty/macf#568).
|
|
3
|
+
*
|
|
4
|
+
* The live instance periodically re-stamps `last_heartbeat` on its registry slot
|
|
5
|
+
* (`Registry.heartbeatConditional`); a reader uses `isStaleEntry` to treat an
|
|
6
|
+
* entry whose heartbeat aged past a TTL as dead. This PAIRS with the graceful-
|
|
7
|
+
* deregister (#586): graceful-deregister covers the CLEAN-exit stale-entry case
|
|
8
|
+
* (the shutdown handler deletes the slot); the TTL backstops the UNGRACEFUL death
|
|
9
|
+
* (kill -9 / OOM / power loss) that never runs the shutdown handler. Together they
|
|
10
|
+
* close the stale-registration class.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Default registry-heartbeat re-stamp cadence: 5 minutes.
|
|
14
|
+
*
|
|
15
|
+
* COARSE BY DESIGN. Each beat is a WRITE to GitHub Actions Variables per agent →
|
|
16
|
+
* it consumes the App-token write budget AND interacts with the #439 If-Match
|
|
17
|
+
* TOCTOU surface. Do NOT make it frequent. Operators can override (or disable
|
|
18
|
+
* with `0`) via `MACF_REGISTRY_HEARTBEAT_INTERVAL_MS`.
|
|
19
|
+
*/
|
|
20
|
+
export const DEFAULT_REGISTRY_HEARTBEAT_INTERVAL_MS = 5 * 60 * 1000; // 300_000
|
|
21
|
+
/**
|
|
22
|
+
* Default staleness TTL: 3× the heartbeat interval (15 minutes).
|
|
23
|
+
*
|
|
24
|
+
* The 3× multiple gives one missed beat (e.g. a transient registry-write failure
|
|
25
|
+
* that the next interval recovers from) slack so a healthy-but-briefly-unlucky
|
|
26
|
+
* instance isn't flapped to "stale". An entry is only judged stale once it has
|
|
27
|
+
* gone substantially past the cadence without a successful re-stamp.
|
|
28
|
+
*/
|
|
29
|
+
export const DEFAULT_REGISTRY_TTL_MS = 3 * DEFAULT_REGISTRY_HEARTBEAT_INTERVAL_MS; // 900_000
|
|
30
|
+
/**
|
|
31
|
+
* Decide whether a registry entry is STALE — i.e. its live instance very likely
|
|
32
|
+
* died ungracefully without clearing the slot (DR-031, groundnuty/macf#568).
|
|
33
|
+
*
|
|
34
|
+
* Returns `true` ONLY when `entry.last_heartbeat` is PRESENT and has aged past
|
|
35
|
+
* `ttlMs` (`now - parse(last_heartbeat) > ttlMs`). Critically BACK-COMPAT:
|
|
36
|
+
*
|
|
37
|
+
* - ABSENT `last_heartbeat` → `false` (UNKNOWN, never dead). Older entries and
|
|
38
|
+
* pre-DR-031 channel-server versions that never heartbeat must NOT be falsely
|
|
39
|
+
* reclaimed. (The next launch's #424 collision check — a live `/health` probe —
|
|
40
|
+
* reclaims a genuinely-dead no-heartbeat slot regardless; the TTL is a reader-
|
|
41
|
+
* side backstop, not the only mechanism.)
|
|
42
|
+
* - UNPARSEABLE `last_heartbeat` → `false`. If we can't compute an age we don't
|
|
43
|
+
* assert staleness (fail toward "alive", never a false "dead").
|
|
44
|
+
*
|
|
45
|
+
* Pure + injectable `now` (epoch ms) for deterministic testing.
|
|
46
|
+
*/
|
|
47
|
+
export function isStaleEntry(entry, ttlMs, now) {
|
|
48
|
+
const hb = entry.last_heartbeat;
|
|
49
|
+
if (hb === undefined)
|
|
50
|
+
return false; // absent → unknown, NEVER dead (back-compat)
|
|
51
|
+
const beatMs = Date.parse(hb);
|
|
52
|
+
if (Number.isNaN(beatMs))
|
|
53
|
+
return false; // unparseable → can't assert staleness
|
|
54
|
+
return now - beatMs > ttlMs;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=heartbeat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/registry/heartbeat.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,UAAU;AAE/E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,sCAAsC,CAAC,CAAC,UAAU;AAE7F;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAAC,KAAgB,EAAE,KAAa,EAAE,GAAW;IACvE,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC;IAChC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,6CAA6C;IACjF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,uCAAuC;IAC/E,OAAO,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC;AAC9B,CAAC"}
|
package/dist/registry/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export { AgentInfoSchema, agentInfoEquals, RegistryConfigSchema, OrgRegistryConfigSchema, ProfileRegistryConfigSchema, RepoRegistryConfigSchema, LocalRegistryConfigSchema } from './types.js';
|
|
2
|
-
export type { AgentInfo, Registry, RegisterResult, RegistryConfig, GitHubVariablesClient } from './types.js';
|
|
2
|
+
export type { AgentInfo, Registry, RegisterResult, DeregisterResult, HeartbeatResult, RegistryConfig, GitHubVariablesClient } from './types.js';
|
|
3
|
+
export { isStaleEntry, DEFAULT_REGISTRY_HEARTBEAT_INTERVAL_MS, DEFAULT_REGISTRY_TTL_MS } from './heartbeat.js';
|
|
3
4
|
export { createGitHubClient, GitHubApiError } from './github-client.js';
|
|
4
5
|
export { createRegistry } from './registry.js';
|
|
5
6
|
export { createRegistryFromConfig } from './factory.js';
|
|
6
7
|
export { createLocalRegistry, LocalRegistryError, RegistryFileSchema, REGISTRY_SCHEMA_VERSION } from './local-client.js';
|
|
7
8
|
export type { LocalRegistryOptions, RegistryFile } from './local-client.js';
|
|
8
|
-
export { toVariableSegment } from './variable-name.js';
|
|
9
|
+
export { toVariableSegment, fromVariableSegment } from './variable-name.js';
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAChJ,OAAO,EAAE,YAAY,EAAE,sCAAsC,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC/G,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,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/registry/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { AgentInfoSchema, agentInfoEquals, RegistryConfigSchema, OrgRegistryConfigSchema, ProfileRegistryConfigSchema, RepoRegistryConfigSchema, LocalRegistryConfigSchema } from './types.js';
|
|
2
|
+
export { isStaleEntry, DEFAULT_REGISTRY_HEARTBEAT_INTERVAL_MS, DEFAULT_REGISTRY_TTL_MS } from './heartbeat.js';
|
|
2
3
|
export { createGitHubClient, GitHubApiError } from './github-client.js';
|
|
3
4
|
export { createRegistry } from './registry.js';
|
|
4
5
|
export { createRegistryFromConfig } from './factory.js';
|
|
5
6
|
export { createLocalRegistry, LocalRegistryError, RegistryFileSchema, REGISTRY_SCHEMA_VERSION } from './local-client.js';
|
|
6
|
-
export { toVariableSegment } from './variable-name.js';
|
|
7
|
+
export { toVariableSegment, fromVariableSegment } from './variable-name.js';
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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,YAAY,EAAE,sCAAsC,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC/G,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,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -35,6 +35,7 @@ export declare const RegistryFileSchema: z.ZodObject<{
|
|
|
35
35
|
}>;
|
|
36
36
|
instance_id: z.ZodString;
|
|
37
37
|
started: z.ZodString;
|
|
38
|
+
last_heartbeat: z.ZodOptional<z.ZodString>;
|
|
38
39
|
}, z.core.$strip>>;
|
|
39
40
|
}, z.core.$strip>;
|
|
40
41
|
export type RegistryFile = z.infer<typeof RegistryFileSchema>;
|
|
@@ -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,EAAqD,MAAM,YAAY,CAAC;AAEzG;;;;;;;;;;;;;;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,CA+LV"}
|
|
@@ -276,6 +276,84 @@ export function createLocalRegistry(options) {
|
|
|
276
276
|
return { ok: true, current: validated };
|
|
277
277
|
});
|
|
278
278
|
},
|
|
279
|
+
// Instance-id-guarded deregister (DR-031, groundnuty/macf#553 root-cause).
|
|
280
|
+
// Fully atomic on this backend: the read (current slot), the instance_id
|
|
281
|
+
// compare, and the delete all happen inside ONE `withLock` critical section,
|
|
282
|
+
// so a concurrent takeover (groundnuty/macf#424) is serialized behind the
|
|
283
|
+
// lock and observed by our read → we return 'not-ours' and never clobber the
|
|
284
|
+
// live newer instance's registration. NEVER throws — any error (incl. a
|
|
285
|
+
// malformed registry file surfaced by `readRegistryFile`) is caught and
|
|
286
|
+
// returned as reason:'error' so a graceful shutdown logs + proceeds.
|
|
287
|
+
async deregisterConditional(name, expectedInstanceId) {
|
|
288
|
+
try {
|
|
289
|
+
return await withLock(options.path, async () => {
|
|
290
|
+
const existing = await readRegistryFile(options.path);
|
|
291
|
+
const current = existing?.agents[name] ?? null;
|
|
292
|
+
// `existing === null` is folded into the absent branch so TS narrows
|
|
293
|
+
// `existing` to non-null for the delete path below (a non-null
|
|
294
|
+
// `current` implies a non-null `existing`, but the `?? null` erases
|
|
295
|
+
// that link for the type checker).
|
|
296
|
+
if (existing === null || current === null) {
|
|
297
|
+
return { deregistered: false, reason: 'absent' };
|
|
298
|
+
}
|
|
299
|
+
if (current.instance_id !== expectedInstanceId) {
|
|
300
|
+
// A newer instance (groundnuty/macf#424) holds the slot — not ours.
|
|
301
|
+
return { deregistered: false, reason: 'not-ours' };
|
|
302
|
+
}
|
|
303
|
+
const nextAgents = {};
|
|
304
|
+
for (const [k, v] of Object.entries(existing.agents)) {
|
|
305
|
+
if (k !== name)
|
|
306
|
+
nextAgents[k] = v;
|
|
307
|
+
}
|
|
308
|
+
const next = {
|
|
309
|
+
schema_version: REGISTRY_SCHEMA_VERSION,
|
|
310
|
+
project: options.project,
|
|
311
|
+
agents: nextAgents,
|
|
312
|
+
};
|
|
313
|
+
await writeRegistryFileAtomic(options.path, next);
|
|
314
|
+
return { deregistered: true, reason: 'deleted' };
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
return { deregistered: false, reason: 'error' };
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
// Instance-id-guarded heartbeat (DR-031, groundnuty/macf#568). Fully atomic on
|
|
322
|
+
// this backend: the read (current slot), the instance_id compare, and the
|
|
323
|
+
// re-stamp write all happen inside ONE `withLock` critical section, so a
|
|
324
|
+
// concurrent takeover (groundnuty/macf#424) is serialized behind the lock and
|
|
325
|
+
// observed by our read → 'not-ours', never clobbering the live newer instance.
|
|
326
|
+
// NEVER throws — any error (incl. a malformed registry file surfaced by
|
|
327
|
+
// `readRegistryFile`) is caught and returned as reason:'error' so a heartbeat
|
|
328
|
+
// hiccup never crashes the server; the next interval retries.
|
|
329
|
+
async heartbeatConditional(name, expectedInstanceId, now) {
|
|
330
|
+
try {
|
|
331
|
+
return await withLock(options.path, async () => {
|
|
332
|
+
const existing = await readRegistryFile(options.path);
|
|
333
|
+
const current = existing?.agents[name] ?? null;
|
|
334
|
+
// `existing === null` is folded into the absent branch so TS narrows
|
|
335
|
+
// `existing` to non-null for the write path below.
|
|
336
|
+
if (existing === null || current === null) {
|
|
337
|
+
return { beat: false, reason: 'absent' };
|
|
338
|
+
}
|
|
339
|
+
if (current.instance_id !== expectedInstanceId) {
|
|
340
|
+
// A newer instance (groundnuty/macf#424) holds the slot — not ours.
|
|
341
|
+
return { beat: false, reason: 'not-ours' };
|
|
342
|
+
}
|
|
343
|
+
// Preserve every other field; only `last_heartbeat` advances.
|
|
344
|
+
const next = {
|
|
345
|
+
schema_version: REGISTRY_SCHEMA_VERSION,
|
|
346
|
+
project: options.project,
|
|
347
|
+
agents: { ...existing.agents, [name]: { ...current, last_heartbeat: now } },
|
|
348
|
+
};
|
|
349
|
+
await writeRegistryFileAtomic(options.path, next);
|
|
350
|
+
return { beat: true, reason: 'beat' };
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
return { beat: false, reason: 'error' };
|
|
355
|
+
}
|
|
356
|
+
},
|
|
279
357
|
async get(name) {
|
|
280
358
|
const file = await readRegistryFile(options.path);
|
|
281
359
|
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,eAAe,EAAE,MAAM,YAAY,CAAC;AAG9D;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC;CACrD,CAAC,CAAC;AAIH,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAC/C,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAI,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAC5D,CAAC,CAAC,6BAA6B,GAAG,2CAA2C;YAC7E,CAAC,CAAC,4BAA4B,GAAG,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC;QACjE,MAAM,IAAI,kBAAkB,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,kBAAkB,CAC1B,kCAAkC,EAClC,4CAA4C,GAAG,EAAE,CAClD,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;QACrC,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,kBAAkB,CAC1B,0BAA0B,EAC1B,sBAAsB,GAAG,aAAa,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI;gBAC5E,gDAAgD,GAAG,EAAE,CACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC7D,MAAM,IAAI,kBAAkB,CAC1B,iCAAiC,EACjC,gCAAgC,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE,CACtE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,kBAAkB,CAC1B,iCAAiC,EACjC,wCAAwC,QAAQ,EAAE,CACnD,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC;QACvC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,MAAM,IAAI,kBAAkB,CAC1B,2BAA2B,EAC3B,iBAAiB,QAAQ,aAAa,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI;gBAC7E,gDAAgD,QAAQ,EAAE,CAC7D,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAC9C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClE,MAAM,IAAI,kBAAkB,CAC1B,4BAA4B,EAC5B,gCAAgC,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE,CACtE,CAAC;IACJ,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAC1B,+BAA+B,EAC/B,iBAAiB,QAAQ,uBAAwB,GAAa,CAAC,OAAO,IAAI;YACxE,kEAAkE,CACrE,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,oEAAoE;IACpE,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,gBAAgB,IAAI,MAAM;QAC1B,OAAQ,MAAsC,CAAC,cAAc,KAAK,QAAQ;QACzE,MAAqC,CAAC,cAAc,KAAK,uBAAuB,EACjF,CAAC;QACD,MAAM,GAAG,GAAI,MAAqC,CAAC,cAAc,CAAC;QAClE,MAAM,IAAI,kBAAkB,CAC1B,gCAAgC,EAChC,iBAAiB,QAAQ,uBAAuB,GAAG,IAAI;YACrD,sBAAsB,uBAAuB,0CAA0C,CAC1F,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,kBAAkB,CAC1B,8BAA8B,EAC9B,iBAAiB,QAAQ,mCAAmC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CACnF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,uBAAuB,CACpC,QAAgB,EAChB,IAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,oEAAoE;IACpE,8DAA8D;IAC9D,kBAAkB;IAClB,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;IAE5E,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAElD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gEAAgE;QAChE,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,IAAI,kBAAkB,CAC1B,6BAA6B,EAC7B,oBAAoB,QAAQ,MAAM,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE,CACxE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO;QACL,cAAc,EAAE,uBAAuB;QACvC,OAAO;QACP,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AASD;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,QAAQ,CAAI,QAAgB,EAAE,EAAoB;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE1C,IAAI,OAA0C,CAAC;IAC/C,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE;YACxC,8DAA8D;YAC9D,iEAAiE;YACjE,iEAAiE;YACjE,uDAAuD;YACvD,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YACtE,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAC1B,4BAA4B,EAC5B,sCAAsC,UAAU,KAAM,GAAa,CAAC,OAAO,IAAI;YAC7E,uFAAuF,CAC1F,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAA6B;IAE7B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,kBAAkB,CAC1B,kCAAkC,EAClC,yCAAyC,OAAO,CAAC,IAAI,EAAE,CACxD,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,uEAAuE;IACvE,0DAA0D;IAC1D,6DAA6D;IAC7D,iBAAiB;IACjB,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAAe;YAC1C,iEAAiE;YACjE,gEAAgE;YAChE,uDAAuD;YACvD,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE9C,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACtC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,IAAI,GAAiB,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACtE,MAAM,IAAI,GAAiB;oBACzB,cAAc,EAAE,uBAAuB;oBACvC,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE;iBAC9C,CAAC;gBACF,MAAM,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;QACL,CAAC;QAED,0EAA0E;QAC1E,yEAAyE;QACzE,sEAAsE;QACtE,qEAAqE;QACrE,sEAAsE;QACtE,2EAA2E;QAC3E,4CAA4C;QAC5C,KAAK,CAAC,mBAAmB,CACvB,IAAY,EACZ,IAAe,EACf,QAA0B;YAE1B,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE9C,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,IAA6B,EAAE;gBAChE,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;gBAC/C,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;oBACxC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;gBAChC,CAAC;gBAED,MAAM,IAAI,GAAiB,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACtE,MAAM,IAAI,GAAiB;oBACzB,cAAc,EAAE,uBAAuB;oBACvC,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE;iBAC9C,CAAC;gBACF,MAAM,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAClD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,IAAY;YACpB,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QACnC,CAAC;QAED,KAAK,CAAC,IAAI,CACR,YAAoB;YAEpB,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,EAAE,CAAC;YAE7B,MAAM,OAAO,GAA6C,EAAE,CAAC;YAC7D,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,IAAI,YAAY,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC;oBAAE,SAAS;gBACzE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAY;YACvB,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACtC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtD,+DAA+D;gBAC/D,+DAA+D;gBAC/D,IAAI,QAAQ,KAAK,IAAI;oBAAE,OAAO;gBAC9B,IAAI,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC;oBAAE,OAAO;gBAEvC,MAAM,UAAU,GAA8B,EAAE,CAAC;gBACjD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACrD,IAAI,CAAC,KAAK,IAAI;wBAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpC,CAAC;gBACD,MAAM,IAAI,GAAiB;oBACzB,cAAc,EAAE,uBAAuB;oBACvC,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,UAAU;iBACnB,CAAC;gBACF,MAAM,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,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,EAAqD,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEhI;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,GACd,QAAQ,CAkNV"}
|
|
@@ -75,6 +75,89 @@ export function createRegistry(client, project) {
|
|
|
75
75
|
}
|
|
76
76
|
return { ok: true, current: info };
|
|
77
77
|
},
|
|
78
|
+
// Instance-id-guarded deregister (DR-031, groundnuty/macf#553 root-cause).
|
|
79
|
+
// The graceful-shutdown handler calls this so the registry stays accurate-
|
|
80
|
+
// by-construction: the slot is deleted ONLY when it is still ours.
|
|
81
|
+
//
|
|
82
|
+
// The load-bearing guard (inverse-of-#553): read the slot's current
|
|
83
|
+
// instance_id and delete ONLY IF it equals `expectedInstanceId`. If a newer
|
|
84
|
+
// instance took over the slot (groundnuty/macf#424) while we ran, the slot
|
|
85
|
+
// now carries the newer instance_id → we return 'not-ours' and DO NOT delete
|
|
86
|
+
// — deleting would strand a live newer peer (the inverse of the #553 stale-
|
|
87
|
+
// entry bug). A corrupt/unparseable slot reads as null via `readAgent` →
|
|
88
|
+
// 'absent' → also left intact (we can't prove it's ours, so we don't delete).
|
|
89
|
+
//
|
|
90
|
+
// Atomicity (best-effort, same posture as registerConditional): the GitHub
|
|
91
|
+
// Actions Variables API has NO native If-Match / conditional-delete, so the
|
|
92
|
+
// read→delete pair is not a hard CAS. We narrow the window to a single API
|
|
93
|
+
// round-trip by reading immediately before the delete. The dominant
|
|
94
|
+
// #424-takeover case is fully covered regardless of the window, because the
|
|
95
|
+
// newer instance writes its instance_id at ITS startup — well before our
|
|
96
|
+
// SIGTERM — so our read already observes the changed instance_id and skips.
|
|
97
|
+
// The only residual is a truly-concurrent takeover landing inside that one
|
|
98
|
+
// round-trip; that is the identical best-effort residual #439 documents for
|
|
99
|
+
// the conditional write, and closing it hard needs a CAS primitive the API
|
|
100
|
+
// doesn't offer. (The local backend IS exclusive — see local-client.ts.)
|
|
101
|
+
//
|
|
102
|
+
// NEVER throws: any read/delete failure returns reason:'error' so a graceful
|
|
103
|
+
// shutdown can log + proceed rather than crash on a registry hiccup.
|
|
104
|
+
async deregisterConditional(name, expectedInstanceId) {
|
|
105
|
+
try {
|
|
106
|
+
const current = await readAgent(name);
|
|
107
|
+
if (current === null) {
|
|
108
|
+
return { deregistered: false, reason: 'absent' };
|
|
109
|
+
}
|
|
110
|
+
if (current.instance_id !== expectedInstanceId) {
|
|
111
|
+
return { deregistered: false, reason: 'not-ours' };
|
|
112
|
+
}
|
|
113
|
+
await client.deleteVariable(variableName(name));
|
|
114
|
+
return { deregistered: true, reason: 'deleted' };
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return { deregistered: false, reason: 'error' };
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
// Instance-id-guarded heartbeat (DR-031, groundnuty/macf#568). The live
|
|
121
|
+
// instance periodically re-stamps `last_heartbeat` on its OWN slot so a
|
|
122
|
+
// reader can TTL-judge an aged-out entry dead — the backstop for the
|
|
123
|
+
// UNGRACEFUL death (kill -9 / OOM / power loss) the graceful-deregister (#586)
|
|
124
|
+
// shutdown handler never runs for.
|
|
125
|
+
//
|
|
126
|
+
// Guard (identical shape to deregisterConditional): read the slot's current
|
|
127
|
+
// instance_id and re-stamp ONLY IF it equals `expectedInstanceId`. If a newer
|
|
128
|
+
// instance took over (groundnuty/macf#424) the slot carries a different
|
|
129
|
+
// instance_id → 'not-ours', left untouched (re-stamping would clobber the live
|
|
130
|
+
// newer peer's registration / mask its own heartbeat). A corrupt/unparseable
|
|
131
|
+
// slot reads as null via `readAgent` → 'absent' → also left intact.
|
|
132
|
+
//
|
|
133
|
+
// Atomicity (best-effort, same posture as registerConditional/#439): the
|
|
134
|
+
// GitHub Actions Variables API has NO native If-Match / conditional-write, so
|
|
135
|
+
// the read→write pair is not a hard CAS — narrowed to one round-trip by
|
|
136
|
+
// reading immediately before the write. The dominant #424-takeover case is
|
|
137
|
+
// fully covered (the newer instance wrote its instance_id at ITS startup, well
|
|
138
|
+
// before any of our heartbeat ticks). The only residual is a truly-concurrent
|
|
139
|
+
// takeover landing inside that one round-trip — the identical residual #439
|
|
140
|
+
// documents for the conditional write. (The local backend IS exclusive.)
|
|
141
|
+
//
|
|
142
|
+
// NEVER throws: any read/write failure returns reason:'error' so the periodic
|
|
143
|
+
// caller logs + the next interval retries rather than the server crashing.
|
|
144
|
+
async heartbeatConditional(name, expectedInstanceId, now) {
|
|
145
|
+
try {
|
|
146
|
+
const current = await readAgent(name);
|
|
147
|
+
if (current === null) {
|
|
148
|
+
return { beat: false, reason: 'absent' };
|
|
149
|
+
}
|
|
150
|
+
if (current.instance_id !== expectedInstanceId) {
|
|
151
|
+
return { beat: false, reason: 'not-ours' };
|
|
152
|
+
}
|
|
153
|
+
// Preserve every other field; only `last_heartbeat` advances.
|
|
154
|
+
await client.writeVariable(variableName(name), JSON.stringify({ ...current, last_heartbeat: now }));
|
|
155
|
+
return { beat: true, reason: 'beat' };
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return { beat: false, reason: 'error' };
|
|
159
|
+
}
|
|
160
|
+
},
|
|
78
161
|
async get(name) {
|
|
79
162
|
return readAgent(name);
|
|
80
163
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}
|
|
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
|
@@ -8,6 +8,7 @@ export declare const AgentInfoSchema: z.ZodObject<{
|
|
|
8
8
|
}>;
|
|
9
9
|
instance_id: z.ZodString;
|
|
10
10
|
started: z.ZodString;
|
|
11
|
+
last_heartbeat: z.ZodOptional<z.ZodString>;
|
|
11
12
|
}, z.core.$strip>;
|
|
12
13
|
export type AgentInfo = z.infer<typeof AgentInfoSchema>;
|
|
13
14
|
/**
|
|
@@ -15,6 +16,12 @@ export type AgentInfo = z.infer<typeof AgentInfoSchema>;
|
|
|
15
16
|
* empty registry slot; two nulls are equal, a null and a value are not.
|
|
16
17
|
* Used by the conditional-register CAS to compare the slot's observed
|
|
17
18
|
* state against its current state.
|
|
19
|
+
*
|
|
20
|
+
* `last_heartbeat` is INTENTIONALLY EXCLUDED from the comparison (DR-031): it is
|
|
21
|
+
* liveness-churn, not identity. Including it would spuriously fail the startup
|
|
22
|
+
* CAS if a heartbeat from the prior instance landed in the collision-check →
|
|
23
|
+
* register-write window (a re-stamp must not block a legitimate #424 version-
|
|
24
|
+
* takeover). The five identity fields below fully determine slot ownership.
|
|
18
25
|
*/
|
|
19
26
|
export declare function agentInfoEquals(a: AgentInfo | null, b: AgentInfo | null): boolean;
|
|
20
27
|
/**
|
|
@@ -36,6 +43,58 @@ export interface RegisterResult {
|
|
|
36
43
|
readonly ok: boolean;
|
|
37
44
|
readonly current: AgentInfo | null;
|
|
38
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Outcome of a conditional (instance-id-guarded) deregister — the graceful-
|
|
48
|
+
* shutdown root-cause fix for the stale-registry-entry class (DR-031,
|
|
49
|
+
* groundnuty/macf#553; #557 fixed only the takeover *symptom*).
|
|
50
|
+
*
|
|
51
|
+
* The slot is deleted ONLY when it is still ours — its `instance_id` matches
|
|
52
|
+
* the `expectedInstanceId` we registered. This is the load-bearing inverse-of-
|
|
53
|
+
* #553 guard: if a newer instance took over our slot (groundnuty/macf#424) while
|
|
54
|
+
* we were running, the slot now carries the newer instance's `instance_id`, so
|
|
55
|
+
* we must NOT delete it on our exit (that would re-introduce a missing/stale
|
|
56
|
+
* entry for a live peer).
|
|
57
|
+
*
|
|
58
|
+
* `reason` distinguishes the four terminal states so the caller can log a
|
|
59
|
+
* precise diagnostic:
|
|
60
|
+
* - `'deleted'` — slot was ours; deleted.
|
|
61
|
+
* - `'not-ours'` — slot is present but held by a different instance_id (a
|
|
62
|
+
* newer instance took over); left intact (NOT a failure).
|
|
63
|
+
* - `'absent'` — slot already gone (or unreadable/corrupt → treated as
|
|
64
|
+
* not-ours-to-delete); nothing to do.
|
|
65
|
+
* - `'error'` — a registry read/delete failed. `deregisterConditional`
|
|
66
|
+
* NEVER throws — a deregister failure must not crash
|
|
67
|
+
* shutdown; the caller logs + proceeds.
|
|
68
|
+
*/
|
|
69
|
+
export interface DeregisterResult {
|
|
70
|
+
readonly deregistered: boolean;
|
|
71
|
+
readonly reason: 'deleted' | 'not-ours' | 'absent' | 'error';
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Outcome of an instance-id-guarded registry heartbeat (DR-031,
|
|
75
|
+
* groundnuty/macf#568). The live instance periodically re-stamps `last_heartbeat`
|
|
76
|
+
* on its OWN slot so a reader can TTL-judge an entry whose heartbeat aged out as
|
|
77
|
+
* dead — the backstop for the UNGRACEFUL death (kill -9 / OOM / power loss) that
|
|
78
|
+
* never runs the graceful-deregister (#586) shutdown handler.
|
|
79
|
+
*
|
|
80
|
+
* The write is guarded EXACTLY like `deregisterConditional`: re-stamp ONLY if the
|
|
81
|
+
* slot still carries OUR `instance_id`. If a newer instance took over the slot
|
|
82
|
+
* (groundnuty/macf#424) we must NOT re-stamp it (that would clobber the live
|
|
83
|
+
* newer peer's registration / mask its own heartbeat) — we report `not-ours` and
|
|
84
|
+
* let it heartbeat its own entry.
|
|
85
|
+
*
|
|
86
|
+
* - `'beat'` — slot was ours; `last_heartbeat` re-stamped.
|
|
87
|
+
* - `'not-ours'` — slot held by a different instance_id (a newer instance took
|
|
88
|
+
* over); left untouched (NOT a failure).
|
|
89
|
+
* - `'absent'` — slot already gone (or unreadable/corrupt); nothing to stamp.
|
|
90
|
+
* - `'error'` — a registry read/write failed. `heartbeatConditional` NEVER
|
|
91
|
+
* throws — a heartbeat hiccup must never crash the server or
|
|
92
|
+
* block anything; the caller logs + the next interval retries.
|
|
93
|
+
*/
|
|
94
|
+
export interface HeartbeatResult {
|
|
95
|
+
readonly beat: boolean;
|
|
96
|
+
readonly reason: 'beat' | 'not-ours' | 'absent' | 'error';
|
|
97
|
+
}
|
|
39
98
|
export interface Registry {
|
|
40
99
|
readonly register: (name: string, info: AgentInfo) => Promise<void>;
|
|
41
100
|
/**
|
|
@@ -50,6 +109,46 @@ export interface Registry {
|
|
|
50
109
|
* CAS primitive exists on that API — see registry.ts).
|
|
51
110
|
*/
|
|
52
111
|
readonly registerConditional: (name: string, info: AgentInfo, expected: AgentInfo | null) => Promise<RegisterResult>;
|
|
112
|
+
/**
|
|
113
|
+
* Instance-id-guarded deregister (DR-031, groundnuty/macf#553 root-cause). Read
|
|
114
|
+
* the slot named `name`; delete it ONLY if its `instance_id` still equals
|
|
115
|
+
* `expectedInstanceId` (i.e. it is still OUR registration). If a newer instance
|
|
116
|
+
* took over the slot (groundnuty/macf#424) — different `instance_id` — or the
|
|
117
|
+
* slot is already gone / unreadable, this is a no-op (we never clobber a live
|
|
118
|
+
* newer instance's registration on our own shutdown). NEVER throws: a registry
|
|
119
|
+
* failure surfaces as `{ deregistered: false, reason: 'error' }` so a graceful
|
|
120
|
+
* shutdown can log + proceed rather than crash.
|
|
121
|
+
*
|
|
122
|
+
* Atomicity is backend-dependent (same posture as `registerConditional`): the
|
|
123
|
+
* local backend is fully atomic (read-compare-delete inside one file-lock
|
|
124
|
+
* critical section); the GitHub-Variables backend is best-effort (the Actions
|
|
125
|
+
* Variables API exposes no If-Match / conditional-delete primitive, so the
|
|
126
|
+
* read→delete window can't be closed hard — but the dominant #424-takeover
|
|
127
|
+
* case, where the newer instance wrote its instance_id well before our SIGTERM,
|
|
128
|
+
* is fully caught by the instance_id compare).
|
|
129
|
+
*/
|
|
130
|
+
readonly deregisterConditional: (name: string, expectedInstanceId: string) => Promise<DeregisterResult>;
|
|
131
|
+
/**
|
|
132
|
+
* Instance-id-guarded registry heartbeat (DR-031, groundnuty/macf#568). Read
|
|
133
|
+
* the slot named `name`; re-stamp its `last_heartbeat` to `now` (ISO-8601),
|
|
134
|
+
* PRESERVING all other fields, ONLY if its `instance_id` still equals
|
|
135
|
+
* `expectedInstanceId` (it is still OUR registration). If a newer instance took
|
|
136
|
+
* over the slot (groundnuty/macf#424) — different `instance_id` — or the slot
|
|
137
|
+
* is already gone / unreadable, this is a no-op. NEVER throws: a registry
|
|
138
|
+
* failure surfaces as `{ beat: false, reason: 'error' }` so the periodic caller
|
|
139
|
+
* logs + retries on the next interval rather than crashing the server.
|
|
140
|
+
*
|
|
141
|
+
* Atomicity is backend-dependent (same posture as `registerConditional` /
|
|
142
|
+
* `deregisterConditional`): the local backend is fully atomic (read-compare-
|
|
143
|
+
* write inside one file-lock critical section); the GitHub-Variables backend is
|
|
144
|
+
* best-effort read-then-write (the Actions Variables API exposes no If-Match /
|
|
145
|
+
* conditional-write primitive — groundnuty/macf#439 — so the read→write window
|
|
146
|
+
* can't be closed hard, but the dominant #424-takeover case is caught by the
|
|
147
|
+
* instance_id compare since the newer instance wrote its id at ITS startup).
|
|
148
|
+
* The cadence is deliberately COARSE (default 5 min) to bound the App-token
|
|
149
|
+
* write budget and the #439 TOCTOU surface.
|
|
150
|
+
*/
|
|
151
|
+
readonly heartbeatConditional: (name: string, expectedInstanceId: string, now: string) => Promise<HeartbeatResult>;
|
|
53
152
|
readonly get: (name: string) => Promise<AgentInfo | null>;
|
|
54
153
|
readonly list: (prefix: string) => Promise<ReadonlyArray<{
|
|
55
154
|
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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registry/types.ts"],"names":[],"mappings":"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"}
|
package/dist/registry/types.js
CHANGED
|
@@ -6,12 +6,29 @@ export const AgentInfoSchema = z.object({
|
|
|
6
6
|
type: z.enum(['permanent', 'worker']),
|
|
7
7
|
instance_id: z.string(),
|
|
8
8
|
started: z.string(),
|
|
9
|
+
/**
|
|
10
|
+
* Liveness re-stamp written periodically by the live instance's registry
|
|
11
|
+
* heartbeat (DR-031, groundnuty/macf#568). ISO-8601. ADDITIVE-OPTIONAL: older
|
|
12
|
+
* entries (and pre-DR-031 channel-server versions that never heartbeat) parse
|
|
13
|
+
* fine without it, and an ABSENT `last_heartbeat` must NEVER be judged stale
|
|
14
|
+
* (`isStaleEntry` returns false for absence — unknown, not dead). Staleness is
|
|
15
|
+
* asserted only when a heartbeat IS present and has aged past the TTL — the
|
|
16
|
+
* backstop for the UNGRACEFUL-death case (kill -9 / OOM / power loss) that the
|
|
17
|
+
* graceful-deregister (#586) shutdown handler never runs for.
|
|
18
|
+
*/
|
|
19
|
+
last_heartbeat: z.string().optional(),
|
|
9
20
|
});
|
|
10
21
|
/**
|
|
11
22
|
* Value equality for two `AgentInfo`s (or absence). `null` represents an
|
|
12
23
|
* empty registry slot; two nulls are equal, a null and a value are not.
|
|
13
24
|
* Used by the conditional-register CAS to compare the slot's observed
|
|
14
25
|
* state against its current state.
|
|
26
|
+
*
|
|
27
|
+
* `last_heartbeat` is INTENTIONALLY EXCLUDED from the comparison (DR-031): it is
|
|
28
|
+
* liveness-churn, not identity. Including it would spuriously fail the startup
|
|
29
|
+
* CAS if a heartbeat from the prior instance landed in the collision-check →
|
|
30
|
+
* register-write window (a re-stamp must not block a legitimate #424 version-
|
|
31
|
+
* takeover). The five identity fields below fully determine slot ownership.
|
|
15
32
|
*/
|
|
16
33
|
export function agentInfoEquals(a, b) {
|
|
17
34
|
if (a === null || b === null)
|
|
@@ -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;
|
|
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;IACnB;;;;;;;;;OASG;IACH,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAIH;;;;;;;;;;;GAWG;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;AAoJD,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"}
|
|
@@ -12,4 +12,26 @@
|
|
|
12
12
|
* toVariableSegment('with_underscore') → 'WITH_UNDERSCORE'
|
|
13
13
|
*/
|
|
14
14
|
export declare function toVariableSegment(name: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Inverse of {@link toVariableSegment}: convert a GitHub-Variables-canonical
|
|
17
|
+
* registry-key segment (uppercased, underscores) back to the canonical kebab
|
|
18
|
+
* routing-label form used for agent identity + telemetry (`<role>-agent`).
|
|
19
|
+
*
|
|
20
|
+
* Idempotent on already-kebab input, so it is safe to apply to a name from
|
|
21
|
+
* either source (a raw `to` arg that is already kebab, or a registry-key
|
|
22
|
+
* suffix that is SCREAMING_SNAKE).
|
|
23
|
+
*
|
|
24
|
+
* Examples:
|
|
25
|
+
* fromVariableSegment('DEVOPS_AGENT') → 'devops-agent'
|
|
26
|
+
* fromVariableSegment('CV_ARCHITECT') → 'cv-architect'
|
|
27
|
+
* fromVariableSegment('devops-agent') → 'devops-agent' (idempotent)
|
|
28
|
+
*
|
|
29
|
+
* LOSSY caveat: a name that legitimately contained a literal underscore
|
|
30
|
+
* (e.g. 'with_underscore' → 'WITH_UNDERSCORE') round-trips to a hyphen
|
|
31
|
+
* ('with-underscore'). MACF's canonical agent-naming convention is kebab
|
|
32
|
+
* `<role>-agent` (no literal underscores), so this is correct for the
|
|
33
|
+
* routing-label / telemetry-name use it is built for. Do NOT use it to
|
|
34
|
+
* reconstruct a registry LOOKUP key — keep the original name for lookups.
|
|
35
|
+
*/
|
|
36
|
+
export declare function fromVariableSegment(segment: string): string;
|
|
15
37
|
//# sourceMappingURL=variable-name.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variable-name.d.ts","sourceRoot":"","sources":["../../src/registry/variable-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
1
|
+
{"version":3,"file":"variable-name.d.ts","sourceRoot":"","sources":["../../src/registry/variable-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D"}
|
|
@@ -14,4 +14,28 @@
|
|
|
14
14
|
export function toVariableSegment(name) {
|
|
15
15
|
return name.toUpperCase().replace(/-/g, '_');
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Inverse of {@link toVariableSegment}: convert a GitHub-Variables-canonical
|
|
19
|
+
* registry-key segment (uppercased, underscores) back to the canonical kebab
|
|
20
|
+
* routing-label form used for agent identity + telemetry (`<role>-agent`).
|
|
21
|
+
*
|
|
22
|
+
* Idempotent on already-kebab input, so it is safe to apply to a name from
|
|
23
|
+
* either source (a raw `to` arg that is already kebab, or a registry-key
|
|
24
|
+
* suffix that is SCREAMING_SNAKE).
|
|
25
|
+
*
|
|
26
|
+
* Examples:
|
|
27
|
+
* fromVariableSegment('DEVOPS_AGENT') → 'devops-agent'
|
|
28
|
+
* fromVariableSegment('CV_ARCHITECT') → 'cv-architect'
|
|
29
|
+
* fromVariableSegment('devops-agent') → 'devops-agent' (idempotent)
|
|
30
|
+
*
|
|
31
|
+
* LOSSY caveat: a name that legitimately contained a literal underscore
|
|
32
|
+
* (e.g. 'with_underscore' → 'WITH_UNDERSCORE') round-trips to a hyphen
|
|
33
|
+
* ('with-underscore'). MACF's canonical agent-naming convention is kebab
|
|
34
|
+
* `<role>-agent` (no literal underscores), so this is correct for the
|
|
35
|
+
* routing-label / telemetry-name use it is built for. Do NOT use it to
|
|
36
|
+
* reconstruct a registry LOOKUP key — keep the original name for lookups.
|
|
37
|
+
*/
|
|
38
|
+
export function fromVariableSegment(segment) {
|
|
39
|
+
return segment.toLowerCase().replace(/_/g, '-');
|
|
40
|
+
}
|
|
17
41
|
//# sourceMappingURL=variable-name.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variable-name.js","sourceRoot":"","sources":["../../src/registry/variable-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC"}
|
|
1
|
+
{"version":3,"file":"variable-name.js","sourceRoot":"","sources":["../../src/registry/variable-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -52,6 +52,8 @@ export declare const NotifyPayloadSchema: z.ZodObject<{
|
|
|
52
52
|
}>>;
|
|
53
53
|
reviewer_login: z.ZodOptional<z.ZodString>;
|
|
54
54
|
review_url: z.ZodOptional<z.ZodString>;
|
|
55
|
+
diagnostic: z.ZodOptional<z.ZodBoolean>;
|
|
56
|
+
correlation_token: z.ZodOptional<z.ZodString>;
|
|
55
57
|
}, z.core.$strip>;
|
|
56
58
|
export type NotifyPayload = z.infer<typeof NotifyPayloadSchema>;
|
|
57
59
|
/**
|
|
@@ -148,11 +150,51 @@ export declare const HealthResponseSchema: z.ZodObject<{
|
|
|
148
150
|
uptime_seconds: z.ZodNumber;
|
|
149
151
|
current_issue: z.ZodNullable<z.ZodNumber>;
|
|
150
152
|
version: z.ZodString;
|
|
153
|
+
health_schema_version: z.ZodOptional<z.ZodNumber>;
|
|
151
154
|
last_notification: z.ZodNullable<z.ZodString>;
|
|
155
|
+
instance_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
156
|
+
cert_expiry: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
157
|
+
state: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
158
|
+
status: z.ZodEnum<{
|
|
159
|
+
busy: "busy";
|
|
160
|
+
idle: "idle";
|
|
161
|
+
}>;
|
|
162
|
+
turn_number: z.ZodNumber;
|
|
163
|
+
elapsed_ms: z.ZodNumber;
|
|
164
|
+
phase: z.ZodNullable<z.ZodEnum<{
|
|
165
|
+
thinking: "thinking";
|
|
166
|
+
tool: "tool";
|
|
167
|
+
}>>;
|
|
168
|
+
current_tool: z.ZodNullable<z.ZodString>;
|
|
169
|
+
current_command: z.ZodNullable<z.ZodString>;
|
|
170
|
+
last_turn_duration_ms: z.ZodNullable<z.ZodNumber>;
|
|
171
|
+
tool_use_count: z.ZodNullable<z.ZodNumber>;
|
|
172
|
+
output_tokens: z.ZodNullable<z.ZodNumber>;
|
|
173
|
+
}, z.core.$strip>>>;
|
|
174
|
+
otel: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
175
|
+
endpoint: z.ZodNullable<z.ZodString>;
|
|
176
|
+
endpoint_is_canonical: z.ZodBoolean;
|
|
177
|
+
endpoint_reachable: z.ZodBoolean;
|
|
178
|
+
}, z.core.$strip>>>;
|
|
179
|
+
last_processed: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
180
|
+
at: z.ZodNullable<z.ZodString>;
|
|
181
|
+
anchor: z.ZodNullable<z.ZodString>;
|
|
182
|
+
age_ms: z.ZodNullable<z.ZodNumber>;
|
|
183
|
+
correlation_token: z.ZodNullable<z.ZodString>;
|
|
184
|
+
}, z.core.$strip>>>;
|
|
152
185
|
}, z.core.$strip>;
|
|
153
186
|
export type HealthResponse = z.infer<typeof HealthResponseSchema>;
|
|
154
187
|
export interface AgentConfig {
|
|
155
188
|
readonly agentName: string;
|
|
189
|
+
/**
|
|
190
|
+
* The routing identity — registry key + cert CN (macf#538). Distinct from
|
|
191
|
+
* `agentName` (the OTEL bot-name): on the substrate `agentName` is
|
|
192
|
+
* `macf-devops-agent` while `routingLabel` is `devops-agent`; on greenfield
|
|
193
|
+
* agents they coincide. Sourced from `MACF_ROUTING_LABEL`, defaulting to
|
|
194
|
+
* `agentName` (back-compat). Use this — not `agentName` — for registry
|
|
195
|
+
* register/remove/collision lookups.
|
|
196
|
+
*/
|
|
197
|
+
readonly routingLabel: string;
|
|
156
198
|
readonly agentType: string;
|
|
157
199
|
readonly agentRole: string;
|
|
158
200
|
readonly host: string;
|
|
@@ -223,5 +265,11 @@ export interface HealthState {
|
|
|
223
265
|
readonly getHealth: () => HealthResponse;
|
|
224
266
|
readonly setCurrentIssue: (issueNumber: number | null) => void;
|
|
225
267
|
readonly recordNotification: () => void;
|
|
268
|
+
/**
|
|
269
|
+
* Release any background resources (e.g. the DR-030 OTLP-reachability probe
|
|
270
|
+
* interval). Optional + idempotent so existing constructors/mocks that don't
|
|
271
|
+
* hold resources stay valid; the shutdown handler calls it best-effort.
|
|
272
|
+
*/
|
|
273
|
+
readonly dispose?: () => void;
|
|
226
274
|
}
|
|
227
275
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,gBAAgB;;;;;;;EA4B3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAK1D,eAAO,MAAM,0BAA0B;;;;;EAErC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -86,6 +86,19 @@ export const NotifyPayloadSchema = z.object({
|
|
|
86
86
|
review_state: z.enum(['approved', 'changes_requested']).optional(),
|
|
87
87
|
reviewer_login: z.string().optional(),
|
|
88
88
|
review_url: z.string().url().optional(),
|
|
89
|
+
// DR-030 §6 (groundnuty/macf#568): the `diagnostic` discriminator — the
|
|
90
|
+
// fleet-doctor mesh "Accepted" check. A diagnostic probe exercises the same
|
|
91
|
+
// `/notify` auth+parse path real routing uses (so a green "Accepted" is
|
|
92
|
+
// meaningful), but the receiver short-circuits BEFORE the MCP push: it
|
|
93
|
+
// responds synchronously with an ACK and returns — no wake, no comms-ledger
|
|
94
|
+
// write, no queue pollution. Distinct from Pattern E (`decideWake`, which
|
|
95
|
+
// only gates the wake; an unrecognized event still pushes to MCP) — this is
|
|
96
|
+
// strictly earlier, with no push at all. `correlation_token` (optional) is
|
|
97
|
+
// echoed back in the ACK for request/response correlation (reusing the #45
|
|
98
|
+
// correlation-marker idea). Both fields optional → back-compat: a producer
|
|
99
|
+
// that never sets them validates unchanged.
|
|
100
|
+
diagnostic: z.boolean().optional(),
|
|
101
|
+
correlation_token: z.string().optional(),
|
|
89
102
|
});
|
|
90
103
|
/**
|
|
91
104
|
* Narrower schema for `ci_completion` payloads (#122). Producers
|
|
@@ -170,7 +183,69 @@ export const HealthResponseSchema = z.object({
|
|
|
170
183
|
uptime_seconds: z.number().int().nonnegative(),
|
|
171
184
|
current_issue: z.number().int().positive().nullable(),
|
|
172
185
|
version: z.string(),
|
|
186
|
+
// The channel-server PACKAGE version (bumps on EVERY cs release). Distinct
|
|
187
|
+
// from `health_schema_version` below — a consumer that wants to detect a
|
|
188
|
+
// breaking change to the /health SHAPE must assert the latter, since
|
|
189
|
+
// `version` is too noisy (it false-rejects on a non-schema release bump).
|
|
190
|
+
// DR-006 watchdog request, macf-devops-toolkit#115.
|
|
191
|
+
health_schema_version: z.number().int().optional(),
|
|
173
192
|
last_notification: z.string().nullable(),
|
|
193
|
+
// DR-030 phase-1 (mesh self-report). Additive + `.optional()` so a newer
|
|
194
|
+
// parser still validates an older agent's /health body that lacks these
|
|
195
|
+
// (mixed-version fleets during rollout); `.nullable()` for the absent-value
|
|
196
|
+
// case (e.g. cert unreadable). The #553 collision parser reads only
|
|
197
|
+
// `version` + liveness, so these don't affect it.
|
|
198
|
+
instance_id: z.string().nullable().optional(),
|
|
199
|
+
cert_expiry: z.string().nullable().optional(),
|
|
200
|
+
// DR-030 phase-1 increment B (mesh self-report — live agent turn-state).
|
|
201
|
+
// Read from the `${MACF_WORKSPACE_DIR}/.macf/turn-state.json` marker that
|
|
202
|
+
// plugin hooks write. `.nullable()` for the absent/garbage-marker case
|
|
203
|
+
// (server idle, marker missing, or unparseable → null) and `.optional()`
|
|
204
|
+
// so a newer parser still validates an older agent's /health body that
|
|
205
|
+
// predates this field. `elapsed_ms` is computed live (now − started_at)
|
|
206
|
+
// on each /health call so it grows through a long tool wait.
|
|
207
|
+
state: z.object({
|
|
208
|
+
status: z.enum(['busy', 'idle']),
|
|
209
|
+
turn_number: z.number().int().nonnegative(),
|
|
210
|
+
elapsed_ms: z.number().int().nonnegative(),
|
|
211
|
+
phase: z.enum(['thinking', 'tool']).nullable(),
|
|
212
|
+
current_tool: z.string().nullable(),
|
|
213
|
+
current_command: z.string().nullable(),
|
|
214
|
+
last_turn_duration_ms: z.number().int().nonnegative().nullable(),
|
|
215
|
+
tool_use_count: z.number().int().nonnegative().nullable(),
|
|
216
|
+
output_tokens: z.number().int().nonnegative().nullable(),
|
|
217
|
+
}).nullable().optional(),
|
|
218
|
+
// DR-030 phase-1 increment B (the server's own OTLP exporter self-report).
|
|
219
|
+
// `endpoint` is the live `OTEL_EXPORTER_OTLP_ENDPOINT`; `endpoint_is_canonical`
|
|
220
|
+
// is an env-driven comparison (see health.ts `computeOtelEndpointInfo`);
|
|
221
|
+
// `endpoint_reachable` is a cached best-effort background TCP probe result.
|
|
222
|
+
// Same `.nullable().optional()` back-compat posture as `state`.
|
|
223
|
+
otel: z.object({
|
|
224
|
+
endpoint: z.string().nullable(),
|
|
225
|
+
endpoint_is_canonical: z.boolean(),
|
|
226
|
+
endpoint_reachable: z.boolean(),
|
|
227
|
+
}).nullable().optional(),
|
|
228
|
+
// DR-030 phase-1 increment E1 (groundnuty/macf#568): the passive-Processed
|
|
229
|
+
// self-report. Surfaces the agent's MOST-RECENT *processed* received
|
|
230
|
+
// coordination edge straight from its LOCAL comms-ledger (DR-025). A recv edge
|
|
231
|
+
// with `processed: true` is the macf#444 distinction — a routed message that
|
|
232
|
+
// wasn't merely delivered but actually consumed in a turn — so a fleet-doctor
|
|
233
|
+
// (or watchdog) can prove "this agent processed real routed traffic at time T"
|
|
234
|
+
// at ZERO cost (no synthetic injection). `at` is the edge's ISO-8601 ts (null
|
|
235
|
+
// if none found); `anchor` its github_anchor (owner/repo#N) or null; `age_ms`
|
|
236
|
+
// is computed live (now − at) on each /health call; `correlation_token` is the
|
|
237
|
+
// edge's trace_id (the per-edge correlation id the future `--inject` tier echoes
|
|
238
|
+
// + matches against — see channel-server `mapLastProcessed`). Same back-compat
|
|
239
|
+
// `.nullable().optional()` posture as `state`/`otel`: a newer parser still
|
|
240
|
+
// validates an older agent's body that predates this field, and the whole
|
|
241
|
+
// object is null when no processed recv-edge exists. The #553 collision parser
|
|
242
|
+
// reads only `version`, so this never affects it.
|
|
243
|
+
last_processed: z.object({
|
|
244
|
+
at: z.string().nullable(),
|
|
245
|
+
anchor: z.string().nullable(),
|
|
246
|
+
age_ms: z.number().int().nonnegative().nullable(),
|
|
247
|
+
correlation_token: z.string().nullable(),
|
|
248
|
+
}).nullable().optional(),
|
|
174
249
|
});
|
|
175
250
|
// --- Sign request (POST /sign body) ---
|
|
176
251
|
//
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@groundnuty/macf-core",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.39",
|
|
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",
|